ponepaste/theme/bulma/view.php

358 lines
21 KiB
PHP
Raw Normal View History

<link rel="stylesheet" href="theme/bulma/css/bulma-tagsinput.min.css"/>
2021-07-10 19:18:17 +01:00
<script>
function openreport() {
2022-03-26 23:57:28 -04:00
const x = document.getElementById("panel");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
function closereport() {
2022-03-26 23:57:28 -04:00
const x = document.getElementById("panel");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
2021-07-10 19:18:17 +01:00
</script>
<?php if ($using_highlighter): ?>
2021-08-22 22:05:26 -04:00
<link rel="stylesheet" href="/vendor/scrivo/highlight.php/styles/default.css"/>
<?php endif; ?>
2021-07-10 19:18:17 +01:00
<style>
#stop-scrolling {
height: 100% !important;
overflow: hidden !important;
}
2021-07-10 19:18:17 +01:00
</style>
2023-06-02 15:37:06 -04:00
<main class="bd-main" id="stop-scrolling">
<div class="container">
<div class="bd-duo">
<div class="bd-lead">
<div class="content panel">
<?php outputFlashes($flashes) ?>
<div class="columns is-multiline">
2021-07-10 19:18:17 +01:00
<div class="column is-4">
<span class="tag is-normal"><i class="fa fa-code fa-lg"
aria-hidden="true"></i>&nbsp;&nbsp;<?= strtoupper(pp_html_escape($paste['code'])); ?></span>
<span class="tag is-normal"><i class="fa fa-eye fa-lg"
aria-hidden="true"></i>&nbsp;&nbsp;<?= pp_html_escape($paste['views']); ?></span>
<span class="tag is-normal"><i class="fa fa-star fa-lg"
aria-hidden="true"></i>&nbsp;&nbsp;<?= pp_html_escape($fav_count); ?></span>
2021-07-10 19:18:17 +01:00
<br>
<span class="tag is-normal">
<i class="fa fa-file-word fa-lg" aria-hidden="true"></i>
&nbsp;&nbsp;
<?= str_word_count($op_content); ?>
</span>
<span class="tag is-normal">
<i class="fa fa-hdd fa-lg" aria-hidden="true"></i>
<?= formatBytes(strlen($op_content)) ?>
</span>
<span class="tag is-normal">
<i class="fa fa-list-ol fa-lg" aria-hidden="true"></i>&nbsp;&nbsp;
<?= substr_count($op_content, "\n") + 1; ?>
</span>
</div>
<div class="column is-4 has-text-centered">
2022-04-20 17:19:02 -04:00
<h1 class="title is-6" style="margin-bottom:0;"><?= pp_html_escape($paste->title); ?></h1>
<small class="title is-6 has-text-weight-normal has-text-grey">
By <a
href="<?= urlForMember($paste->user) ?>"><?= pp_html_escape($paste->user->username) ?></a>
<br/>
2023-06-01 15:23:40 -04:00
Created: <?= $paste->created_at ?>
2021-07-10 19:18:17 +01:00
<br/>
2023-06-01 15:23:40 -04:00
<?php if ($paste->updated_at !== null && $paste->updated_at !== $paste->created_at): ?>
Updated: <?= $paste->updated_at ?>
<br/>
<?php endif; ?>
Expiry: <?= $paste->expiryDisplay() ?>
</small>
</div>
<div class="column is-4 has-text-right">
<div class="">
<div class="panel-tools">
2021-11-01 16:56:17 -04:00
<?php if ($current_user !== null): ?>
2022-04-18 13:54:01 -04:00
<form method="POST" class="form--inline">
2022-03-14 15:43:01 -04:00
<?php if (isset($csrf_token)): ?>
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>"/>
2022-03-14 15:43:01 -04:00
<?php endif; ?>
<input type="hidden" name="fave" value="1"/>
<button type="submit" class="icon tool-icon button--no-style"><i
class="fas fa-star fa-lg <?= $paste_is_favourited ? '' : 'has-text-grey' ?>"
title="Favourite"></i></button>
2021-11-01 16:56:17 -04:00
</form>
<?php endif; ?>
<a class="icon tool-icon flip" href="<?= urlForReport($paste); ?>"><i
class="far fa-flag fa-lg has-text-grey" title="Report Paste"></i></a>
<?php if ($paste['code'] != "pastedown") { ?>
<a class="icon tool-icon" href="javascript:togglev();"><i
class="fas fa-list-ol fa-lg has-text-grey"
title="Toggle Line Numbers"></i></a>
<?php } ?>
<a class="icon tool-icon" href="#" onclick="selectText('paste');"><i
class="far fa-clipboard fa-lg has-text-grey"
title="Select Text"></i></a>
<a class="icon tool-icon" href="<?php echo $p_raw; ?>"><i
class="far fa-file-alt fa-lg has-text-grey" title="View Raw"></i></a>
<a class="icon tool-icon" href="<?php echo $p_download; ?>"><i
class="fas fa-file-download fa-lg has-text-grey"
title="Download Paste"></i></a>
<a class="icon tool-icon embed-tool "><i
class="far fa-file-code fa-lg has-text-grey"
title="Embed This Paste"></i></a>
<a class="icon tool-icon expand-tool"><i class="fas fa-expand-alt has-text-grey"
title="Full Screen"></i></a>
2021-11-04 11:35:36 -04:00
<div class="panel-embed my-5 is-hidden">
<input type="text" class="input has-background-white-ter has-text-grey"
2023-05-13 21:19:35 -04:00
value='<?php echo '<script src="' . pp_site_url() . '/';
if (PP_MOD_REWRITE) {
echo 'embed/';
} else {
echo 'paste.php?embed&id=';
}
echo $paste->id . '"></script>'; ?>' readonly/>
</div>
</div>
</div>
2021-07-10 19:18:17 +01:00
</div>
</div>
<!-- Tag display -->
<div class="columns is-desktop is-centered">
<?= tagsToHtml($paste->tags); ?>
</div>
<br>
<?php if (isset($error)): ?>
<div class="notification is-danger">
<i class="fa fa-exclamation-circle" aria-hidden="true"></i>
<p><?= pp_html_escape($error) ?></p>
</div>
<?php elseif ($using_highlighter): ?>
2023-02-27 06:07:58 -05:00
<div id="paste" style="line-height: 18px;">
<div class="<?= pp_html_escape($paste['code']) ?>">
<ol>
2021-08-20 16:38:04 -04:00
<?php foreach ($lines as $num => $line):
$line = trim($line); ?>
<li class="<?= $num == 0 ? 'li1 ln-xtra' : 'li1' ?>" id="<?= $num + 1 ?>">
2021-08-20 16:53:59 -04:00
<div class="de1"><?= $line === '' ? '&nbsp;' : linkify($line) ?></div>
</li>
<?php endforeach; ?>
</ol>
</div>
</div>
<?php else: ?>
<div id="paste" style="line-height: 18px;"><?= $p_content ?></div>
<?php endif; ?>
</div>
<?php if (can('hide', $paste)): ?>
<div class="mod-tools">
<p>Moderation Tools</p>
<form action="/admin/paste_action.php" method="post">
<input type="hidden" name="paste_id" value="<?= $paste->id ?>" />
<?php if (isset($csrf_token)): ?>
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>"/>
<?php endif; ?>
2023-07-05 02:55:52 -04:00
<div class="field is-grouped">
<div class="control">
<input class="button is-small <?= $paste->is_hidden ? 'is-success' : 'is-danger' ?>"
type="submit" name="hide" id="hide"
value="<?= $paste->is_hidden ? 'Unhide' : 'Hide' ?> Paste" />
</div>
<?php if (can('blank', $paste)): ?>
<div class="control">
<input class="button is-small is-danger" type="submit" name="blank" id="blank" value="Blank Paste Contents (No Undo)" />
</div>
<?php endif; ?>
</div>
2023-07-05 02:55:52 -04:00
</form>
</div>
<?php endif; ?>
<!-- Guests -->
<?php if ($totalpastes !== 0 && !can('edit', $paste)) { ?>
<hr>
<label class="label">More from this Author </label>
<?php foreach ($recommended_pastes as $paste) { ?>
<p class="no-margin">
2021-11-02 08:46:40 -04:00
<header class="bd-category-header my-1">
<a href="<?= urlForPaste($paste) ?>" title="<?= pp_html_escape($paste->title) ?>">
<?= pp_html_escape(truncate($paste->title, 24, 60)) ?>
</a>
<p class="subtitle is-7">by <i><?= pp_html_escape($paste->user->username) ?></i></p>
</header>
<?php } ?>
<?php } elseif (can('edit', $paste)) { ?>
2021-08-20 16:38:04 -04:00
<!-- Paste Panel -->
<hr>
2021-08-26 05:35:21 -04:00
<h1 class="title is-6 mx-1">Edit Paste</h1>
2022-04-18 13:54:01 -04:00
<form class="form-horizontal" action="/" method="POST">
2021-08-20 16:38:04 -04:00
<nav class="level">
<div class="level-left">
<!-- Title -->
<div class="level-item is-pulled-left mx-1">
<p class="control has-icons-left">
<input type="text" class="input" name="title"
2021-08-26 05:35:21 -04:00
placeholder="<?= pp_html_escape($paste['title']) ?>"
value="<?= pp_html_escape($paste['title']) ?>"/>
2021-08-20 16:38:04 -04:00
<span class="icon is-small is-left">
2021-08-26 05:35:21 -04:00
<i class="fa fa-font"></i>
</span>
2021-08-20 16:38:04 -04:00
</p>
</div>
<!-- Format -->
<div class="level-item is-pulled-left mx-1">
<div class="select">
<div class="select">
2021-08-20 16:38:04 -04:00
<select data-live-search="true" name="format">
<?= optionsForSelect(array_values(PP_HIGHLIGHT_FORMATS), array_keys(PP_HIGHLIGHT_FORMATS), $paste->code); ?>
2021-08-20 16:38:04 -04:00
</select>
</div>
</div>
</div>
2021-08-20 16:38:04 -04:00
<div class="level-item is-pulled-left mx-1">
<input type="hidden" name="paste_id"
value="<?= $paste->id; ?>"/>
2021-08-20 16:38:04 -04:00
</div>
<div class="level-item is-pulled-left mx-1">
<a class="button"
onclick="highlight(document.getElementById('code')); return false;"><i
class="fa fa-indent"></i>&nbsp;Highlight</a>
2021-08-20 16:38:04 -04:00
</div>
<div class="level-item mx-1">
<?php if (isset($csrf_token)): ?>
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>"/>
<?php endif; ?>
2023-05-15 11:22:13 -04:00
<input class="button is-info" type="submit" name="edit" id="edit"
value="Save Changes"/>
</div>
2021-08-20 16:38:04 -04:00
</div>
</nav>
<!-- Text area -->
<textarea style="line-height: 1.2;" class="textarea mx-1" rows="13" id="code"
name="paste_data" onkeyup="countChars(this);"
onkeydown="return catchTab(this,event)"><?= pp_html_escape($op_content); ?></textarea>
2021-08-20 16:38:04 -04:00
<p id="charNum"><b>File Size: </b><span style="color: green;">1000/1000Kb</span></p>
<br>
2021-08-20 16:38:04 -04:00
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="field_tags">Tags</label>
<small>Type a comma to separate each tag.</small>
2021-08-20 16:38:04 -04:00
<div class="control">
<div class="control">
<input name="tag_input" class="input js-tag-input" id="field_tags"
value="<?= pp_html_escape($paste->tags->map(function ($t) {
return $t->name;
})->join(',')) ?>"/>
</div>
</div>
2021-08-20 16:38:04 -04:00
</div>
</div>
</div>
2021-08-20 16:38:04 -04:00
<nav class="level">
<div class="level-left">
<div class="level-item is-pulled-left mr-1">
<div class="field">
<div class="subtitle has-text-weight-semibold "
style="margin-left: 2px; margin-bottom: 0.6rem; font-size: 1rem;">Expiry
</div>
2021-08-20 16:38:04 -04:00
<div class="control">
<!-- Expiry -->
<div class="select">
<select name="paste_expire_date">
<option value="N" selected="selected">Never</option>
<option value="self">View Once</option>
<option value="0Y0M0DT0H10M">10 Minutes</option>
<option value="T1H">1 Hour</option>
2021-08-20 16:38:04 -04:00
<option value="1D">1 Day</option>
<option value="1W">1 Week</option>
<option value="2W">2 Weeks</option>
<option value="1M">1 Month</option>
</select>
</div>
</div>
</div>
2021-08-20 16:38:04 -04:00
</div>
<div class="level-item is-pulled-left mx-1">
<div class="field">
<div class="subtitle has-text-weight-semibold "
style="margin-left: 2px; margin-bottom: 0.6rem; font-size: 1rem;">
Visibility
2021-08-20 16:38:04 -04:00
&nbsp;&nbsp;
</div>
<div class="control">
<!-- Visibility -->
<div class="select">
<select name="visibility">
<?php
$visibility_names = ['Public', 'Unlisted'];
$visibility_codes = ['0', '1'];
if ($current_user) {
$visibility_names[] = 'Private';
$visibility_codes[] = '2';
}
echo optionsForSelect($visibility_names, $visibility_codes, $paste->visible);
?>
2021-08-20 16:38:04 -04:00
</select>
</div>
</div>
</div>
2021-07-10 19:18:17 +01:00
</div>
2021-08-20 16:38:04 -04:00
</div>
</nav>
<br>
<div class="level-left">
<!-- Encrypted -->
<div class="b-checkbox is-info is-inline">
<input class="is-checkradio is-info" id="encrypt" name="encrypted"
type="checkbox" disabled="disabled" checked="checked"/>
<label for="encrypt">
Encrypt on server (always enabled)
</label>
</div>
</div>
2021-08-20 16:38:04 -04:00
</form>
<?php } ?>
</div>
</div>
</div>
2021-07-10 19:18:17 +01:00
</main>
<script>
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
2021-07-10 19:18:17 +01:00
function countChars(obj) {
2021-07-10 19:18:17 +01:00
// True limit
var maxLength = 1000000;
var strLength = obj.value.length;
var charRemain = (maxLength - strLength);
var char2kb = charRemain / 1000;
var charDisplay = roundToTwo(char2kb);
// Grace limit
var gracelimit = 11480;
var newstrLength = obj.value.length - 1000000;
var graceRemain = (gracelimit - newstrLength);
var grace2kb = graceRemain / 1000;
var graceDisplay = roundToTwo(grace2kb);
var element = document.getElementById('charNum');
if (graceRemain < 0) {
element.innerHTML = '<b>File Size: </b><span style="color: red;">File Size limit reached</span>';
} else if (charRemain < 0) {
element.innerHTML = '<b>File Size: </b><span style="color: orange;">' + graceDisplay + '/24Kb Grace Limit</span>';
} else {
element.innerHTML = '<b>File Size: </b><span style="color: green;">' + charDisplay + '/1000Kb</span>';
}
2021-07-10 19:18:17 +01:00
}
</script>