Răsfoiți Sursa

Remove page template

Ribas160 1 an în urmă
părinte
comite
3d3d80c60b
7 a modificat fișierele cu 6 adăugiri și 810 ștergeri
  1. 1 0
      CHANGELOG.md
  2. 2 6
      cfg/conf.sample.php
  3. 0 460
      css/privatebin.css
  4. 1 2
      lib/Configuration.php
  5. 1 1
      lib/Controller.php
  6. 0 340
      tpl/page.php
  7. 1 1
      tst/ViewTest.php

+ 1 - 0
CHANGELOG.md

@@ -1,6 +1,7 @@
 # PrivateBin version history
 
 ## 2.0.0 (not yet released)
+* CHANGED: Remove page template (#265)
 
 ## 1.7.8 (2025-06-30)
 * FIXED: Duplicate attachment for every comment (#1577)

+ 2 - 6
cfg/conf.sample.php

@@ -48,17 +48,15 @@ sizelimit = 10485760
 templateselection = false
 
 ; List of available for selection templates when "templateselection" option is enabled
+availabletemplates[] = "bootstrap5"
 availabletemplates[] = "bootstrap"
 availabletemplates[] = "bootstrap-page"
 availabletemplates[] = "bootstrap-dark"
 availabletemplates[] = "bootstrap-dark-page"
 availabletemplates[] = "bootstrap-compact"
 availabletemplates[] = "bootstrap-compact-page"
-availabletemplates[] = "bootstrap5"
-availabletemplates[] = "page"
 
 ; set the template your installs defaults to, defaults to "bootstrap" (tpl/bootstrap.php), also
-; available are "page" (tpl/page.php), the classic ZeroBin style and several
 ; bootstrap variants: "bootstrap-dark", "bootstrap-compact", "bootstrap-page",
 ; which can be combined with "-dark" and "-compact" for "bootstrap-dark-page",
 ; "bootstrap-compact-page" and finally "bootstrap5" (tpl/bootstrap5.php) - previews at:
@@ -108,8 +106,6 @@ languageselection = false
 ; scripts or run your site behind certain DDoS-protection services.
 ; Check the documentation at https://content-security-policy.com/
 ; Notes:
-; - If you use any bootstrap theme, you can remove the allow-popups from the
-;   sandbox restrictions.
 ; - If you use the bootstrap5 theme, you must change default-src to 'self' to
 ;   enable display of the svg icons
 ; - By default this disallows to load images from third-party servers, e.g. when
@@ -126,7 +122,7 @@ languageselection = false
 ; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self'; frame-ancestors 'none'; frame-src blob:; img-src 'self' data: blob:; media-src blob:; object-src blob:"
 ;
 ; The recommended and default used CSP is:
-; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self'; font-src 'self'; frame-ancestors 'none'; frame-src blob:; img-src 'self' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads"
+; cspheader = "default-src 'none'; base-uri 'self'; form-action 'none'; manifest-src 'self'; connect-src * blob:; script-src 'self' 'wasm-unsafe-eval'; style-src 'self'; font-src 'self'; frame-ancestors 'none'; frame-src blob:; img-src 'self' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-modals allow-downloads"
 
 ; stay compatible with PrivateBin Alpha 0.19, less secure
 ; if enabled will use base64.js version 1.7 instead of 2.1.9 and sha1 instead of

+ 0 - 460
css/privatebin.css

@@ -1,460 +0,0 @@
-/**
- * PrivateBin
- *
- * Cascading style sheets for page template.
- *
- * @link      https://github.com/PrivateBin/PrivateBin
- * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
- * @license   https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
- */
-
-@import url("common.css");
-
-/*  CSS Reset from YUI 3.4.1 (build 4118) - Copyright 2011 Yahoo! Inc. All rights reserved.
-Licensed under the BSD License. - http://yuilibrary.com/license/    */
-html{color:#000;background:#fff}body,div,dl,dt,dd,ul,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}input,textarea,select{font-size:100%;}legend{color:#000}
-
-html {
-	background-color: #455463;
-	color: #fff;
-	min-height: 100%;
-	background-image: linear-gradient(bottom, #0f1823 0, #455463 100%);
-	background-image: -o-linear-gradient(bottom, #0f1823 0, #455463 100%);
-	background-image: -moz-linear-gradient(bottom, #0f1823 0, #455463 100%);
-	background-image: -webkit-linear-gradient(bottom, #0f1823 0, #455463 100%);
-	background-image: -ms-linear-gradient(bottom, #0f1823 0, #455463 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0f1823), color-stop(1, #455463));
-}
-
-body {
-	font-family: Helvetica, Arial, sans-serif;
-	font-size: 0.9em;
-	margin-bottom: 15px;
-	padding-left: 60px;
-	padding-right: 60px;
-}
-
-a { color: #0f388f; cursor:pointer; }
-
-h1.title {
-	font-size: 3.5em;
-	font-weight: bold;
-	color: #000;
-	position: relative;
-	display: inline;
-	cursor: pointer;
-}
-
-h1.title:before {
-	content: attr(title);
-	position: absolute;
-	color: rgba(255,255,255,0.15);
-	top: 1px;
-	left: 1px;
-	cursor: pointer;
-}
-
-h2.title {
-	color: #000;
-	font-size: 1em;
-	display: inline;
-	font-style: italic;
-	font-weight: bold;
-	position: relative;
-	bottom: 8px;
-}
-
-h3.title {
-	color: #94a3b4;
-	font-size: 0.7em;
-	display: inline;
-	margin-top: 10px;
-	position: relative;
-	bottom: 8px;
-}
-
-#aboutbox {
-	color: #94a3b4;
-	padding: 4px 8px 4px 16px;
-	position: relative;
-	top: 10px;
-	border-left: 2px solid #94a3b4;
-	float: right;
-	width: 60%;
-}
-
-#aboutbox a { color: #94a3b4; }
-
-#message, #cleartext, #prettymessage, #attachment, .replymessage {
-	position: relative;
-	clear: both;
-	color: #000;
-	background-color: #fff;
-	font-size: 9pt;
-	border: 1px solid #28343F;
-	box-sizing: border-box;
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	-ms-box-sizing: border-box;
-	-o-box-sizing: border-box;
-	width: 100%;
-}
-
-#message, .replymessage {
-	padding: 5px;
-	white-space: pre-wrap;
-	font-family: Consolas, "Lucida Console", "DejaVu Sans Mono", Monaco, monospace;
-	resize: vertical;
-}
-
-#status {
-	clear: both;
-	padding: 5px 10px;
-}
-
-#pasteresult {
-	background-color: #1F2833;
-	color: #fff;
-	padding: 4px 12px;
-	clear: both;
-	-moz-box-shadow: inset 0 2px 2px #000;
-	-webkit-box-shadow: inset 0 2px 2px #000;
-	box-shadow: inset 0 2px 2px #000;
-}
-
-#pasteresult a { color: #fff; }
-
-#pasteresult button { margin-left: 11px; }
-
-#message, #plaintext, #prettymessage, #toolbar, #status { margin-bottom: 5px; }
-
-#copyhint { color: #666; font-size: 0.85em }
-
-button, .button {
-	color: #fff;
-	background-color: #323b47;
-	background-repeat: no-repeat;
-	background-position: center left;
-	padding: 4px 8px;
-	font-size: 1em;
-	margin-right: 5px;
-	display: inline-block;
-	background-image: linear-gradient(bottom, #323b47 0, #51606e 100%);
-	background-image: -o-linear-gradient(bottom, #323b47 0, #51606e 100%);
-	background-image: -moz-linear-gradient(bottom, #323b47 0, #51606e 100%);
-	background-image: -webkit-linear-gradient(bottom, #323b47 0, #51606e 100%);
-	background-image: -ms-linear-gradient(bottom, #323b47 0, #51606e 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #323b47), color-stop(1, #51606e));
-	border: 1px solid #28343F;
-	-moz-box-shadow: inset 0 1px 2px #647384;
-	-webkit-box-shadow: inset 0 1px 2px #647384;
-	box-shadow: inset 0 1px 2px #647384;
-	-webkit-border-radius: 3px;
-	-moz-border-radius: 3px;
-	border-radius: 3px;
-	-moz-background-clip: padding;
-	-webkit-background-clip: padding-box;
-	background-clip: padding-box;
-}
-
-button:hover  {
-	background-image: linear-gradient(bottom, #424b57 0%, #61707e 100%);
-	background-image: -o-linear-gradient(bottom, #424b57 0%, #61707e 100%);
-	background-image: -moz-linear-gradient(bottom, #424b57 0%, #61707e 100%);
-	background-image: -webkit-linear-gradient(bottom, #424b57 0%, #61707e 100%);
-	background-image: -ms-linear-gradient(bottom, #424b57 0%, #61707e 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #424b57), color-stop(1, #61707e));
-}
-
-button:active {
-	background-image: linear-gradient(bottom, #51606e 0, #323b47 100%);
-	background-image: -o-linear-gradient(bottom, #51606e 0, #323b47 100%);
-	background-image: -moz-linear-gradient(bottom, #51606e 0, #323b47 100%);
-	background-image: -webkit-linear-gradient(bottom, #51606e 0, #323b47 100%);
-	background-image: -ms-linear-gradient(bottom, #51606e 0, #323b47 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #51606e), color-stop(1, #323b47));
-	position:relative;
-	top:1px;
-}
-
-button:disabled, .buttondisabled {
-	background: #ccc;
-	color: #888;
-	top: 0;
-}
-
-button img {
-	margin-right: 8px;
-	position: relative;
-	top: 2px;
-}
-
-.button {
-	background-color: #414d5a;
-	padding: 6px 8px;
-	margin: 0 5px 0 0;
-	position: relative;
-	bottom: 1px; /* WTF ? Why is this shifted by 1 pixel ? */
-}
-
-.button select {
-	color: #eee;
-	background: transparent;
-	border: none;
-}
-
-
-.button select option {
-	color:#eee;
-	background: #414d5a;
-}
-
-#rawtextbutton img {
-	padding: 1px 0 1px 0;
-}
-
-#downloadtextbutton img {
-	padding: 1px 0 1px 0;
-}
-
-#remainingtime, #password {
-	color: #94a3b4;
-	display: inline;
-	font-size: 0.85em;
-}
-
-#newbutton {
-	float: right;
-	margin-left: 0;
-	margin-right: 0;
-	margin-bottom: 5px;
-	display: inline;
-}
-
-input {
-	color: #777;
-	font-size: 1em;
-	padding: 6px;
-	border: 1px solid #28343f;
-}
-
-.blink {
-	text-decoration: blink;
-	font-size: 0.8em;
-	color: #a4b3c4;
-}
-
-.foryoureyesonly {
-	color: #ff0 !important;
-	font-size: 1em !important;
-	font-weight: bold !important;
-}
-
-#attachmentPreview, .nonworking {
-	background-color: #fff;
-	color: #000;
-	width: 100%;
-	text-align: center;
-	font-weight: bold;
-	font-size: 10pt;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-	padding: 5px 0;
-}
-
-.hidden { display: none !important; }
-
-#ienotice {
-	background-color: #7e98af;
-	color: #000;
-	font-size: 0.85em;
-	padding: 3px 5px;
-	text-align: center;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-	display: none;
-}
-
-#ienotice a { color: #000; }
-
-#oldnotice, #httpnotice { display: none; }
-
-#errormessage, .errorMessage {
-	background-color: #f77 !important;
-	color:#ff0;
-}
-
-.small {
-	font-size: 80%;
-}
-
-/* --- discussion related CSS ------- */
-
-#discussion {  /* Discussion container */
-	margin-top: 20px;
-	width: 100%;
-	margin-left: -30px;
-	min-width: 200px;
-}
-
-h4.title {
-	font-size: 1.2em;
-	color: #94a3b4;
-	font-style: italic;
-	font-weight: bold;
-	position: relative;
-	margin-left: 30px;
-}
-
-.comment /* One single reply */
-{
-	background-color: #ceced6;
-	color: #000;
-	white-space: pre-wrap;
-	font-family: Consolas,"Lucida Console","DejaVu Sans Mono",Monaco,monospace;
-	font-size: 9pt;
-	border-left: 1px solid #859AAE;
-	border-top: 1px solid #859AAE;
-	padding: 5px 0px 5px 5px;
-	margin-left: 30px;
-	-moz-box-shadow: -3px -3px 5px rgba(0,0,0,0.15);
-	-webkit-box-shadow: -3px -3px 5px rgba(0,0,0,0.15);
-	box-shadow: -3px -3px 5px rgba(0,0,0,0.15);
-	min-width: 200px;
-	overflow: auto;
-}
-
-.reply { margin: 5px 0 0 30px; }
-
-#replystatus {
-	display: inline;
-	padding: 1px 7px;
-	font-family: Arial, Helvetica, sans-serif;
-}
-
-.comment button {
-	color: #446;
-	background-color: #aab;
-	background-repeat: no-repeat;
-	background-position: center left;
-	padding: 0 2px;
-	font-size: 0.73em;
-	margin: 3px 5px 3px 0;
-	display: inline;
-	background-image: linear-gradient(bottom, #aab 0, #ccc 100%);
-	background-image: -o-linear-gradient(bottom, #aab 0, #ccc 100%);
-	background-image: -moz-linear-gradient(bottom, #aab 0, #ccc 100%);
-	background-image: -webkit-linear-gradient(bottom, #aab 0, #ccc 100%);
-	background-image: -ms-linear-gradient(bottom, #aab 0, #ccc 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #aab), color-stop(1, #ccc));
-	border: 1px solid #ccd;
-	-moz-box-shadow: inset 0 1px 2px #ddd;
-	-webkit-box-shadow: inset 0 1px 2px #fff;
-	box-shadow: inset 0 1px 2px #eee;
-	-webkit-border-radius: 3px;
-	-moz-border-radius: 3px;
-	border-radius: 3px;
-	-moz-background-clip: padding;
-	-webkit-background-clip: padding-box;
-	background-clip: padding-box;
-}
-
-.comment button:hover  {
-	background-image: linear-gradient(bottom, #ccd 0, #fff 100%);
-	background-image: -o-linear-gradient(bottom, #ccd 0, #fff 100%);
-	background-image: -moz-linear-gradient(bottom, #ccd 0, #fff 100%);
-	background-image: -webkit-linear-gradient(bottom, #ccd 0, #fff 100%);
-	background-image: -ms-linear-gradient(bottom, #ccd 0, #fff 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccd), color-stop(1, #fff));
-}
-
-.comment button:active {
-	background-image: linear-gradient(bottom, #fff 0, #889 100%);
-	background-image: -o-linear-gradient(bottom, #fff 0, #889 100%);
-	background-image: -moz-linear-gradient(bottom, #fff 0, #889 100%);
-	background-image: -webkit-linear-gradient(bottom, #fff 0, #889 100%);
-	background-image: -ms-linear-gradient(bottom, #fff 0, #889 100%);
-	background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(1, #889));
-	position:relative;
-	top:1px;
-}
-
-.comment input { padding: 2px; }
-
-#replymessage { margin-top: 5px; }
-
-.commentmeta {
-	color: #fff;
-	background-color: #8ea0b2;
-	margin-bottom: 3px;
-	padding: 0 0 0 3px;
-}
-
-.commentdate { color: #bfcede; }
-
-img.vizhash {
-	width: 16px;
-	height: 16px;
-	position: relative;
-	top: 2px;
-	left: -3px;
-}
-
-#prettyprint {
-	color: #000000;
-	font-size: 1.2em;
-}
-
-#prettyprint.prettyprinted {
-	overflow: auto;
-}
-
-#cleartext {
-	padding: 10px;
-}
-
-#cleartext * {
-	margin-bottom: 10px;
-}
-
-#cleartext ol {
-	list-style: auto;
-	margin-left: 15px;
-}
-
-#cleartext ul {
-	list-style: disc;
-	margin-left: 15px;
-}
-
-#cleartext h1, #cleartext h2, #cleartext h3, #cleartext h4, #cleartext h5, #cleartext h6 {
-	font-weight: bold;
-}
-
-#cleartext h1 {
-	font-size: 2em;
-}
-
-#cleartext h2 {
-	font-size: 1.5em;
-}
-
-#cleartext h3 {
-	font-size: 1.2em;
-}
-
-/* right-to-left overrides */
-html[dir="rtl"] #aboutbox, html[dir="rtl"] #deletelink, html[dir="rtl"] #newbutton {
-	float: left;
-}
-
-html[dir="rtl"] button, html[dir="rtl"] .button, html[dir="rtl"] button img {
-	margin-left: 5px;
-	margin-right: inherit;
-}
-
-html[dir="rtl"] button img {
-	margin-left: 8px;
-}

+ 1 - 2
lib/Configuration.php

@@ -55,7 +55,6 @@ class Configuration
                 'bootstrap-dark-page',
                 'bootstrap-compact',
                 'bootstrap-compact-page',
-                'page',
             ),
             'info'                     => 'More information on the <a href=\'https://privatebin.info/\'>project page</a>.',
             'notice'                   => '',
@@ -65,7 +64,7 @@ class Configuration
             'qrcode'                   => true,
             'email'                    => true,
             'icon'                     => 'identicon',
-            'cspheader'                => 'default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'wasm-unsafe-eval\'; style-src \'self\'; font-src \'self\'; frame-ancestors \'none\'; frame-src blob:; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads',
+            'cspheader'                => 'default-src \'none\'; base-uri \'self\'; form-action \'none\'; manifest-src \'self\'; connect-src * blob:; script-src \'self\' \'wasm-unsafe-eval\'; style-src \'self\'; font-src \'self\'; frame-ancestors \'none\'; frame-src blob:; img-src \'self\' data: blob:; media-src blob:; object-src blob:; sandbox allow-same-origin allow-scripts allow-forms allow-modals allow-downloads',
             'zerobincompatibility'     => false,
             'httpwarning'              => true,
             'compression'              => 'zlib',

+ 1 - 1
lib/Controller.php

@@ -442,7 +442,7 @@ class Controller
         $metacspheader = str_replace(
             array(
                 'frame-ancestors \'none\'; ',
-                '; sandbox allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-downloads',
+                '; sandbox allow-same-origin allow-scripts allow-forms allow-modals allow-downloads',
             ),
             '',
             $this->_conf->getKey('cspheader')

+ 0 - 340
tpl/page.php

@@ -1,340 +0,0 @@
-<?php declare(strict_types=1);
-use PrivateBin\I18n;
-?><!DOCTYPE html>
-<html lang="<?php echo I18n::getLanguage(); ?>"<?php echo I18n::isRtl() ? ' dir="rtl"' : ''; ?>>
-	<head>
-		<meta charset="utf-8" />
-		<meta http-equiv="Content-Security-Policy" content="<?php echo I18n::encode($CSPHEADER); ?>">
-		<meta name="robots" content="noindex" />
-		<meta name="google" content="notranslate">
-		<title><?php echo I18n::_($NAME); ?></title>
-		<link type="text/css" rel="stylesheet" href="css/privatebin.css?<?php echo rawurlencode($VERSION); ?>" />
-<?php
-if ($SYNTAXHIGHLIGHTING):
-?>
-		<link type="text/css" rel="stylesheet" href="css/prettify/prettify.css?<?php echo rawurlencode($VERSION); ?>" />
-<?php
-    if (!empty($SYNTAXHIGHLIGHTINGTHEME)):
-?>
-		<link type="text/css" rel="stylesheet" href="css/prettify/<?php echo rawurlencode($SYNTAXHIGHLIGHTINGTHEME); ?>.css?<?php echo rawurlencode($VERSION); ?>" />
-<?php
-    endif;
-endif;
-?>
-		<?php $this->_scriptTag('js/jquery-3.7.1.js', 'defer'); ?>
-<?php
-if ($QRCODE):
-?>
-		<?php $this->_scriptTag('js/kjua-0.9.0.js', 'async'); ?>
-<?php
-endif;
-if ($ZEROBINCOMPATIBILITY):
-?>
-		<?php $this->_scriptTag('js/base64-1.7.js', 'async'); ?>
-<?php
-endif;
-?>
-		<?php $this->_scriptTag('js/zlib-1.3.1-1.js', 'async'); ?>
-		<?php $this->_scriptTag('js/base-x-4.0.0.js', 'defer'); ?>
-		<?php $this->_scriptTag('js/rawinflate-0.3.js', 'defer'); ?>
-<?php
-if ($SYNTAXHIGHLIGHTING):
-?>
-		<?php $this->_scriptTag('js/prettify.js', 'async'); ?>
-<?php
-endif;
-if ($MARKDOWN):
-?>
-		<?php $this->_scriptTag('js/showdown-2.1.0.js', 'async'); ?>
-<?php
-endif;
-?>
-		<?php $this->_scriptTag('js/purify-3.2.6.js', 'async'); ?>
-		<?php $this->_scriptTag('js/legacy.js', 'async'); ?>
-		<?php $this->_scriptTag('js/privatebin.js', 'defer'); ?>
-		<!-- icon -->
-		<link rel="apple-touch-icon" href="img/apple-touch-icon.png?<?php echo rawurlencode($VERSION); ?>" sizes="180x180" />
-		<link rel="icon" type="image/png" href="img/favicon-32x32.png?<?php echo rawurlencode($VERSION); ?>" sizes="32x32" />
-		<link rel="icon" type="image/png" href="img/favicon-16x16.png?<?php echo rawurlencode($VERSION); ?>" sizes="16x16" />
-		<link rel="manifest" href="manifest.json?<?php echo rawurlencode($VERSION); ?>" />
-		<link rel="mask-icon" href="img/safari-pinned-tab.svg?<?php echo rawurlencode($VERSION); ?>" color="#ffcc00" />
-		<link rel="shortcut icon" href="img/favicon.ico">
-		<meta name="msapplication-config" content="browserconfig.xml">
-		<meta name="theme-color" content="#ffe57e" />
-		<!-- Twitter/social media cards -->
-		<meta name="twitter:card" content="summary" />
-		<meta name="twitter:title" content="<?php echo I18n::_('Encrypted note on %s', I18n::_($NAME)) ?>" />
-		<meta name="twitter:description" content="<?php echo I18n::_('Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.') ?>" />
-		<meta name="twitter:image" content="img/apple-touch-icon.png?<?php echo rawurlencode($VERSION); ?>" />
-		<meta property="og:title" content="<?php echo I18n::_($NAME); ?>" />
-		<meta property="og:site_name" content="<?php echo I18n::_($NAME); ?>" />
-		<meta property="og:description" content="<?php echo I18n::_('Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.') ?>" />
-		<meta property="og:image" content="img/apple-touch-icon.png?<?php echo rawurlencode($VERSION); ?>" />
-		<meta property="og:image:type" content="image/png" />
-		<meta property="og:image:width" content="180" />
-		<meta property="og:image:height" content="180" />
-	</head>
-	<body data-compression="<?php echo rawurlencode($COMPRESSION); ?>">
-		<header>
-			<div id="aboutbox">
-				<?php echo sprintf(
-                    I18n::_('%s is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted %sin the browser%s using 256 bits AES.',
-                        I18n::_($NAME),
-                        '%s', '%s'
-                    ),
-                    '<i>', '</i>'), ' ', $INFO;
-                ?>
-				<br />
-<?php
-if (!empty($NOTICE)):
-?>
-				<span class="blink">▶</span> <?php echo I18n::encode($NOTICE);
-endif;
-?>
-			</div>
-			<h1 class="title reloadlink"><?php echo I18n::_($NAME); ?></h1><br />
-			<h2 class="title"><?php echo I18n::_('Because ignorance is bliss'); ?></h2><br />
-			<h3 class="title"><?php echo $VERSION; ?></h3>
-			<noscript><div id="noscript" class="nonworking"><?php echo I18n::_('JavaScript is required for %s to work. Sorry for the inconvenience.', I18n::_($NAME)); ?></div></noscript>
-			<div id="oldnotice" class="nonworking hidden">
-				<?php echo I18n::_('%s requires a modern browser to work.', I18n::_($NAME)), PHP_EOL; ?>
-				<a href="https://www.mozilla.org/firefox/">Firefox</a>,
-				<a href="https://www.opera.com/">Opera</a>,
-				<a href="https://www.google.com/chrome">Chrome</a>…<br />
-				<span class="small"><?php echo I18n::_('For more information <a href="%s">see this FAQ entry</a>.', 'https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-it-show-me-the-error-privatebin-requires-a-modern-browser-to-work'); ?></span>
-			</div>
-<?php
-if ($HTTPWARNING):
-?>
-			<div id="httpnotice" class="errorMessage hidden">
-				<?php echo I18n::_('This website is using an insecure connection! Please only use it for testing.'); ?><br />
-				<span class="small"><?php echo I18n::_('For more information <a href="%s">see this FAQ entry</a>.', 'https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-it-show-me-an-error-about-an-insecure-connection'); ?></span>
-			</div>
-			<div id="insecurecontextnotice" class="errorMessage hidden">
-				<?php echo I18n::_('Your browser may require an HTTPS connection to support the WebCrypto API. Try <a href="%s">switching to HTTPS</a>.', $HTTPSLINK); ?>
-			</div>
-<?php
-endif;
-?>
-		</header>
-		<section>
-			<article>
-				<div id="loadingindicator" class="hidden"><?php echo I18n::_('Loading…'); ?></div>
-				<div id="status"><?php echo I18n::encode($STATUS); ?></div>
-				<div id="errormessage" class="hidden"><?php echo I18n::encode($ERROR); ?></div>
-				<div id="toolbar">
-					<button id="newbutton" class="reloadlink hidden"><img src="img/icon_new.png" width="11" height="15" alt="" /><?php echo I18n::_('New'); ?></button>
-					<button id="retrybutton" class="reloadlink hidden"><?php echo I18n::_('Retry'), PHP_EOL; ?></button>
-					<button id="sendbutton" tabindex="2" class="hidden"><img src="img/icon_send.png" width="18" height="15" alt="" /><?php echo I18n::_('Create'); ?></button>
-					<button id="clonebutton" class="hidden"><img src="img/icon_clone.png" width="15" height="17" alt="" /><?php echo I18n::_('Clone'); ?></button>
-					<button id="rawtextbutton" class="hidden"><img src="img/icon_raw.png" width="15" height="15" alt="" /><?php echo I18n::_('Raw text'); ?></button>
-					<button id="downloadtextbutton" class="hidden"><?php echo I18n::_('Save paste'), PHP_EOL; ?></button>
-<?php
-if ($EMAIL):
-?>
-
-					<button id="emaillink" class="hidden"><img src="img/icon_email.png" width="15" height="15" alt="" /><?php echo I18n::_('Email'); ?></button>
-<?php
-endif;
-if ($QRCODE):
-?>
-					<button id="qrcodelink" class="hidden"><img src="img/icon_qr.png" width="15" height="15" alt="" /><?php echo I18n::_('QR code'); ?></button>
-<?php
-endif;
-?>
-					<div id="expiration" class="hidden button"><?php echo I18n::_('Expires'); ?>:
-						<select id="pasteExpiration" name="pasteExpiration">
-<?php
-foreach ($EXPIRE as $key => $value):
-?>
-							<option value="<?php echo $key; ?>"<?php
-    if ($key == $EXPIREDEFAULT):
-?> selected="selected"<?php
-    endif;
-?>><?php echo $value; ?></option>
-<?php
-endforeach;
-?>
-						</select>
-					</div>
-					<div id="remainingtime" class="hidden"></div>
-					<div id="burnafterreadingoption" class="button hidden">
-						<input type="checkbox" id="burnafterreading" name="burnafterreading"<?php
-if ($BURNAFTERREADINGSELECTED):
-?> checked="checked"<?php
-endif;
-?> />
-						<label for="burnafterreading"><?php echo I18n::_('Burn after reading'); ?></label>
-					</div>
-<?php
-if ($DISCUSSION):
-?>
-					<div id="opendiscussionoption" class="button hidden">
-						<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
-    if ($OPENDISCUSSION):
-?> checked="checked"<?php
-    endif;
-?> />
-						<label for="opendiscussion"><?php echo I18n::_('Open discussion'); ?></label>
-					</div>
-<?php
-endif;
-if ($PASSWORD):
-?>
-					<div id="password" class="hidden">
-						<input type="password" id="passwordinput" placeholder="<?php echo I18n::_('Password (recommended)'); ?>" size="32" />
-					</div>
-<?php
-endif;
-?>
-					<div id="formatter" class="button hidden"><?php echo I18n::_('Format'); ?>:
-						<select id="pasteFormatter" name="pasteFormatter">
-<?php
-foreach ($FORMATTER as $key => $value):
-?>
-							<option value="<?php echo $key; ?>"<?php
-    if ($key == $FORMATTERDEFAULT):
-?> selected="selected"<?php
-    endif;
-?>><?php echo $value; ?></option>
-<?php
-endforeach;
-?>
-						</select>
-					</div>
-<?php
-if (!empty($LANGUAGESELECTION)):
-?>
-					<div id="language" class="button">
-						<select name="lang">
-<?php
-    foreach ($LANGUAGES as $key => $value):
-?>
-							<option data-lang="<?php echo $key; ?>" value="<?php echo $key; ?>"<?php
-        if ($key == $LANGUAGESELECTION):
-?> selected="selected"<?php
-        endif;
-?>><?php echo $value[0]; ?> (<?php echo $value[1]; ?>)</option>
-<?php
-    endforeach;
-?>
-						</select>
-					</div>
-<?php
-endif;
-?>
-<?php
-if (!empty($TEMPLATESELECTION)):
-?>
-					<div id="template" class="button"><?php echo I18n::_('Theme'); ?>:
-						<select name="template">
-<?php
-    foreach ($TEMPLATES as $value):
-?>
-							<option data-template="<?php echo $value; ?>" value="<?php echo $value; ?>"<?php
-        if ($value == $TEMPLATESELECTION):
-?> selected="selected"<?php
-        endif;
-?>><?php echo $value; ?></option>
-<?php
-    endforeach;
-?>
-						</select>
-					</div>
-<?php
-endif;
-?>
-				</div>
-<?php
-if ($QRCODE):
-?>
-				<div id="qrcode-display"></div>
-<?php
-endif;
-?>				<div id="pastesuccess" class="hidden">
-					<div id="deletelink"></div>
-					<div id="pastelink"></div>
-<?php
-if (!empty($URLSHORTENER)):
-?>
-					<button id="shortenbutton" data-shortener="<?php echo I18n::encode($URLSHORTENER); ?>"><img src="img/icon_shorten.png" width="13" height="15" /><?php echo I18n::_('Shorten URL'); ?></button>
-<?php
-endif;
-?>
-				</div>
-<?php
-if ($FILEUPLOAD):
-?>
-				<div id="attachment" class="hidden"></div>
-				<div id="attach" class="hidden">
-					<span id="clonedfile" class="hidden"><?php echo I18n::_('Cloned file attached.'); ?></span>
-					<span id="filewrap"><?php echo I18n::_('Attach a file'); ?>: <input type="file" id="file" name="file" multiple /></span>
-					<span id="dragAndDropFileName" class="dragAndDropFile"><?php echo I18n::_('alternatively drag & drop a file or paste an image from the clipboard'); ?></span>
-					<button id="fileremovebutton"><?php echo I18n::_('Remove attachment'); ?></button>
-				</div>
-<?php
-endif;
-?>
-				<div id="preview" class="hidden">
-					<button id="messageedit"><?php echo I18n::_('Editor'); ?></button>
-					<button id="messagepreview"><?php echo I18n::_('Preview'); ?></button>
-				</div>
-				<div id="attachmentPreview" class="hidden"></div>
-				<div id="prettymessage" class="hidden">
-					<pre id="prettyprint" class="prettyprint linenums:1"></pre>
-				</div>
-				<div id="plaintext" class="hidden"></div>
-				<textarea id="message" name="message" cols="80" rows="25" tabindex="1" class="hidden"></textarea>
-				<div class="button">
-					<input id="messagetab" type="checkbox" tabindex="3" checked="checked" />
-					<label for="messagetab"><?php echo I18n::_('Tabulator key serves as character (Hit <kbd>Ctrl</kbd>+<kbd>m</kbd> or <kbd>Esc</kbd> to toggle)'); ?></label>
-				</div>
-			</article>
-		</section>
-		<section>
-			<div id="discussion" class="hidden">
-				<h4 class="title"><?php echo I18n::_('Discussion'); ?></h4>
-				<div id="commentcontainer"></div>
-			</div>
-		</section>
-		<div id="serverdata" class="hidden" aria-hidden="true">
-			<div id="templates">
-				<article id="commenttemplate" class="comment">
-					<div class="commentmeta">
-						<span class="nickname">name</span>
-						<span class="commentdate">0000-00-00</span>
-					</div>
-					<div class="commentdata">c</div>
-					<button class="btn btn-default btn-sm"><?php echo I18n::_('Reply'); ?></button>
-				</article>
-				<div id="commenttailtemplate" class="comment">
-					<button class="btn btn-default btn-sm"><?php echo I18n::_('Add comment'); ?></button>
-				</div>
-				<div id="replytemplate" class="reply hidden">
-					<input type="text" id="nickname" class="form-control" title="<?php echo I18n::_('Optional nickname…'); ?>" placeholder="<?php echo I18n::_('Optional nickname…'); ?>" />
-					<textarea id="replymessage" class="replymessage form-control" cols="80" rows="7"></textarea><br />
-					<div id="replystatus" role="alert" class="statusmessage hidden alert">
-						<span class="glyphicon" aria-hidden="true"></span>
-					</div>
-					<button id="replybutton" class="btn btn-default btn-sm"><?php echo I18n::_('Post comment'); ?></button>
-				</div>
-				<div id="attachmenttemplate" class="attachment">
-					<a><?php echo I18n::_('Download attachment'); ?></a>
-				</div>
-			</div>
-		</div>
-<?php
-if ($FILEUPLOAD):
-?>
-		<div id="dropzone" class="hidden" tabindex="-1" aria-hidden="true"></div>
-<?php
-endif;
-?>
-		<section class="container">
-			<div id="noscript" role="alert" class="nonworking alert alert-info noscript-hide"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true">
-				<span> <?php echo I18n::_('Loading…'); ?></span><br>
-				<span class="small"><?php echo I18n::_('In case this message never disappears please have a look at <a href="%s">this FAQ for information to troubleshoot</a>.', 'https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-the-loading-message-not-go-away'); ?></span>
-			</div>
-		</section>
-	</body>
-</html>

+ 1 - 1
tst/ViewTest.php

@@ -154,7 +154,7 @@ class ViewTest extends TestCase
     public function testIsBootstrapTemplate()
     {
         $bootstrapTemplate    = 'bootstrap-dark';
-        $nonBootstrapTemplate = 'page';
+        $nonBootstrapTemplate = 'bootstrap5';
         $this->assertTrue(View::isBootstrapTemplate($bootstrapTemplate), 'Is bootstrap template');
         $this->assertFalse(View::isBootstrapTemplate($nonBootstrapTemplate), 'Is not bootstrap template');
     }