ponepaste/theme/bulma/main.php

399 lines
16 KiB
PHP
Raw Normal View History

2021-07-10 19:18:17 +01:00
<?php
/*
* Paste <https://github.com/jordansamuel/PASTE> - Bulma theme
* Theme by wsehl <github.com/wsehl> (January, 2021)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License in GPL.txt for more details.
*/
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<link rel="stylesheet" href="theme/bulma/css/bulma-tagsinput.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="theme/bulma/js/bulma-tagsinput.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
BulmaTagsInput.attach();
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const tagsInput = document.getElementById('tags-with-source');
new BulmaTagsInput(tagsInput, {
autocomplete: {
<!-- Json to be completed -->
source: "",
}
});
}, false);
</script>
<main class="bd-main">
<div class="bd-side-background"></div>
<div class="bd-main-container container">
<div class="bd-duo">
<div class="bd-lead">
<!-- Guests -->
<?php if (isset($noguests) && $noguests == "on") { // Site permissions
?>
<section class="hero is-medium">
<div class="">
<article class="message is-info">
<div class="message-header">
<p>Site News:</p>
</div>
<div class="message-body">
<div class="content is-normal">
<ul>
<li>Ponepaste has now a favorite system. You can now favorite pastes and bookmark them on your userpage under "Favorites"</li>
<li>Report function and UI has been overhauled.</li>
<li>The archive page has now been updated, tags are now clickable for a faster search.</li>
<li>Tags UI has been overhauled. Tags containing "SAFE" and "NSFW" will appear green and red.</li>
<li>When Creating paste the tag input box has been updated with a new visual style.</li>
<li>Tags are now being canonized, if you see your tags change, it's just the admin working in the background </li>
</ul>
</div>
</div>
</article>
<div class="container">
<div class="columns is-multiline is-mobile">
<div class="column">
<div class="panel-body">
<div class="list-widget pagination-content">
<?php
$res = getrandom($conn,10);
foreach ($res as $index=>$row) {
$title = Trim($row['title']);
$titlehov = ($row['title']);
$p_member = Trim($row['member']);
$p_id = Trim($row['id']);
$p_date = Trim($row['date']);
$p_time = Trim($row['now_time']);
$nowtime = time();
$oldtime = $p_time;
$title = truncate($title, 24, 60);
?>
<p class="no-margin">
<?php
if ($mod_rewrite == '1') {
echo '<header class="bd-category-header my-1">
<a data-tooltip="' . $titlehov . '" href="' . $p_id . '" title="' . $title . '">' . $title . ' </a>
<a class="icon is-pulled-right has-tooltip-arrow has-tooltip-left-mobile has-tooltip-bottom-desktop has-tooltip-left-until-widescreen" data-tooltip="' . $p_time . '">
<i class="far fa-clock has-text-grey" aria-hidden="true"></i>
</a>
<p class="subtitle is-7">' . 'by ' . '
<i><a href="https://Ponepaste.org/user/' . $p_member . '">' . $p_member . '</a></i>
</p>' .
'</header>';
} else {
echo '<a href="' . $p_id . '" title="' . $titlehov . '">' . ucfirst($title) . '</a>';
}}
?>
</p>
</div>
</div>
</div>
<div class="column">
<div class="panel-body">
<div class="list-widget pagination-content">
<?php
$res = getrandom($conn,10);
foreach ($res as $index=>$row) {
$title = Trim($row['title']);
$titlehov = ($row['title']);
$p_member = Trim($row['member']);
$p_id = Trim($row['id']);
$p_date = Trim($row['date']);
$p_time = Trim($row['now_time']);
$nowtime = time();
$oldtime = $p_time;
$title = truncate($title, 24, 60);
?>
<p class="no-margin">
<?php
if ($mod_rewrite == '1') {
echo '<header class="bd-category-header my-1">
<a data-tooltip="' . $titlehov . '" href="' . $p_id . '" title="' . $title . '">' . $title . ' </a>
<a class="icon is-pulled-right has-tooltip-arrow has-tooltip-left-mobile has-tooltip-bottom-desktop has-tooltip-left-until-widescreen" data-tooltip="' . $p_time . '">
<i class="far fa-clock has-text-grey" aria-hidden="true"></i>
</a>
<p class="subtitle is-7">' . 'by ' . '
<i><a href="https://Ponepaste.org/user/' . $p_member . '">' . $p_member . '</a></i>
</p>' .
'</header>';
} else {
echo '<a href="' . $p_id . '" title="' . $titlehov . '">' . ucfirst($title) . '</a>';
}}
?>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<?php } else { ?>
<!-- Paste Panel -->
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($error)) { ?>
<!-- Error Panel -->
<i class="fa fa-exclamation-circle" aria-hidden=" true"></i> <?php echo $error; ?>
<?php }
}
?>
<h1 class="subtitle is-4">
<?php echo $lang['newpaste']; ?>
</h1>
<form name="mainForm" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<nav class="level">
<div class="level-left">
<!-- Title -->
<div class="level-item is-pulled-left" style="margin-right: 5px;">
<p class="control has-icons-left">
<input type="text" class="input" name="title" onchange="getFileName()" placeholder="<?php echo $lang['pastetitle']; ?>" value="<?php echo (isset($_POST['title'])) ? $_POST['title'] : ''; ?>">
<span class="icon is-small is-left">
<i class="fa fa-font"></i></a>
</span>
</p>
</div>
<!-- Format -->
<div class="level-item is-pulled-left mx-1">
<div class="select">
<select data-live-search="true" name="format">
<?php // Show popular GeSHi formats
foreach ($geshiformats as $code => $name) {
if (in_array($code, $popular_formats)) {
if (isset($_POST['format'])) {
$sel = ($_POST['format'] == $code) ? 'selected="selected"' : ''; // Pre-populate if we come here on an error
} else {
$sel = ($code == "markdown") ? 'selected="selected"' : '';
}
echo '<option ' . $sel . ' value="' . $code . '">' . $name . '</option>';
}
}
echo '<option value="text">__________________</option>';
// Show all GeSHi formats.
foreach ($geshiformats as $code => $name) {
if (!in_array($code, $popular_formats)) {
if (isset($_POST['format'])) {
$sel = ($_POST['format'] == $code) ? 'selected="selected"' : ''; // Pre-populate if we come here on an error
} else {
$sel = ($code == "text") ? 'selected="selected"' : '';
}
echo '<option ' . $sel . ' value="' . $code . '">' . $name . '</option>';
}
}
?>
</select>
</div>
</div>
<div class="level-item is-pulled-left mx-1">
<a class="button" onclick="highlight(document.getElementById('code')); return false;"><i class="fas fa-indent"></i>&nbspHighlight</a>
</div>
<div class="level-item is-pulled-left mx-1">
<input class="button is-info" type="submit" name="submit" id="submit" value="Paste" />
</div>
</div>
</nav>
<!-- Text area -->
<textarea class="textarea" rows="15" id="code" name="paste_data" onkeyup="countChars(this);" onkeydown="return catchTab(this,event)" placeholder="Paste Or Drop Text File Here."><?php echo (isset($_POST['paste_data'])) ? $_POST['paste_data'] : ''; ?></textarea>
<p id="charNum"><b>File Size: </b><span style="color: green;">1000/1000Kb</span></p>
<br>
<!-- Tag system -->
<div class='rows'>
<div class='row is-full'>
<div class="columns">
<div class="column">
<div class="field">
<label class="label">Tags</label>
<div class="control">
<input id="tags-with-source" name="tags" class="input" data-max-tags="10" data-max-chars="40" type="text" data-item-text="name" data-case-sensitive="false" placeholder="10 Tags Maximum" value="<?php echo ( isset($_POST['tags'] ) )?$_POST['tags']:''; // Pre-populate if we come here on an error" ?>">
</div>
</div>
</div>
</div>
</div>
</div>
<div class='row is-full'>
<div class="columns">
<div class="column is-5">
<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;"><?php echo $lang['expiration']; ?></div>
<div class="control">
<div class="select">
<?php
$post_expire = "";
if ($_POST) {
if (isset($_POST['paste_expire_date'])) {
$post_expire = $_POST['paste_expire_date'];
}
}
?>
<select name="paste_expire_date">
<option value="N" <?php echo ($post_expire == "N") ? 'selected="selected"' : ''; ?>>Never</option>
<option value="self" <?php echo ($post_expire == "self") ? 'selected="selected"' : ''; ?>>View Once</option>
<option value="10M" <?php echo ($post_expire == "10M") ? 'selected="selected"' : ''; ?>>10 Minutes</option>
<option value="1H" <?php echo ($post_expire == "1H") ? 'selected="selected"' : ''; ?>>1 Hour</option>
<option value="1D" <?php echo ($post_expire == "1D") ? 'selected="selected"' : ''; ?>>1 Day</option>
<option value="1W" <?php echo ($post_expire == "1W") ? 'selected="selected"' : ''; ?>>1 Week</option>
<option value="2W" <?php echo ($post_expire == "2W") ? 'selected="selected"' : ''; ?>>2 Weeks</option>
<option value="1M" <?php echo ($post_expire == "1M") ? 'selected="selected"' : ''; ?>>1 Month</option>
</select>
</div>
</div>
</div>
</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;"><?php echo $lang['visibility']; ?>&nbsp;&nbsp;</div>
<div class="control">
<div class="select">
<?php
$post_visibility = "";
if ($_POST) {
if (isset($_POST['visibility'])) {
$post_visibility = $_POST['visibility'];
}
}
?>
<select name="visibility">
<option value="0" <?php echo ($post_visibility == "0") ? 'selected="selected"' : ''; ?>>Public</option>
<option value="1" <?php echo ($post_visibility == "1") ? 'selected="selected"' : ''; ?>>Unlisted</option>
<?php if (isset($_SESSION['token'])) { ?>
<option value="2" <?php echo ($post_visibility == "2") ? 'selected="selected"' : ''; ?>>Private</option>
<?php } else { ?>
<option disabled>Private</option>
<?php } ?>
</select>
</div>
</div>
</div>
</div>
</div>
</nav>
<nav>
<div class="level-left">
<!-- Password -->
<div class="columns">
<div class="column">
<input type="text" class="input" name="pass" id="pass" placeholder="<?php echo $lang['pwopt']; ?>" value="<?php echo (isset($_POST['pass'])) ? $_POST['pass'] : ''; ?>">
</div>
</div>
</div>
</nav>
<br>
<nav>
<div class="level-left">
<!-- Encrypted -->
<div class="field">
<?php
$encrypted_checked = "";
if ($_POST) {
// We came here from an error, carry the checkbox setting forward
if (isset($_POST['encrypted'])) {
$encrypted_checked = "checked";
}
} else {
// Fresh paste. Default to encrypted on
$encrypted_checked = "checked";
}
?>
<input class="is-checkradio is-info has-background-color" id="encrypt" name="encrypted" type="checkbox" <?php echo $encrypted_checked; ?>>
<label for="encrypt">
<?php echo $lang['encrypt']; ?>
</label>
</div>
</div>
</nav>
</div>
<div class="column is-3">
<!-- $text_ads -->
<?php if (isset($_SESSION['username'])) { ?>
<?php } else { ?>
<?php echo $text_ads; ?>
<?php } ?>
</div>
<div class="column is-4">
<!-- ReCaptcha & Captcha -->
<?php if ($cap_e == "on" && !isset($_SESSION['username'])) {
if ($_SESSION['captcha_mode'] == "recaptcha") {
?>
<div class="g-recaptcha" style="float: right; right: 0;" data-sitekey="<?php echo $_SESSION['captcha']; ?>"></div>
<br />
<?php
} else {
?>
<!-- Captcha -->
<div class="is-one-quarter">
<div class="notification">
<span class="tags are-large"><?php echo '<img src="' . $_SESSION['captcha']['image_src'] . '" alt="CAPTCHA" class="imagever">'; ?></span>
<input type="text" class="input" name="scode" value="" placeholder="<?php echo $lang['entercode']; ?>">
<p class="is-size-6 has-text-grey-light has-text-left mt-2">and press "Enter"</p>
</div>
</div>
<?php }
} ?>
</div>
</div>
</form>
</div>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
</main>
</div>
<script>
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
function countChars(obj){
// 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);
if(graceRemain < 0){
document.getElementById("charNum").innerHTML = '<b>File Size: </b><span style="color: red;">File Size limit reached</span>';
} else if ((charRemain < 0)) {
document.getElementById("charNum").innerHTML = '<b>File Size: </b><span style="color: orange;">'+graceDisplay+'/24Kb Grace Limit</span>';
}else{
document.getElementById("charNum").innerHTML = '<b>File Size: </b><span style="color: green;">'+charDisplay+'/1000Kb</span>';
}
}
</script>