Просмотр исходного кода

Working on #28, changing template to avoid multi-line navbar:
- moved "burn after reading" & "discussion" into "options" menu in
"bootstrap" template
- added seperate "bootstrap-compact" template that also moves the
formats into the same "options" menu
- fixing horizontal scroll bar glitch in mobile navbar

El RIDO 11 лет назад
Родитель
Сommit
f25661beda
6 измененных файлов с 213 добавлено и 19 удалено
  1. 23 0
      css/bootstrap/zerobin.css
  2. 2 1
      i18n/de.json
  3. 2 1
      i18n/fr.json
  4. 2 1
      i18n/pl.json
  5. 163 0
      tpl/bootstrap-compact.html
  6. 21 16
      tpl/bootstrap.html

+ 23 - 0
css/bootstrap/zerobin.css

@@ -5,6 +5,29 @@ body {
 	padding: 70px 0 30px 0;
 }
 
+.navbar-nav {
+	margin: 0;
+}
+
+.dropdown-menu > li > label, .dropdown-menu > li > div {
+	clear: both;
+	display: block;
+	font-weight: normal;
+	line-height: 1.42857;
+	white-space: nowrap;
+}
+
+.dropdown-menu > li > label {
+	color: #333;
+	padding: 3px 20px 3px 40px;
+}
+
+.dropdown-menu > li > div {
+	color: #777;
+	padding: 3px 20px;
+	cursor: default;
+}
+
 #deletelink {
 	float: right;
 }

+ 2 - 1
i18n/de.json

@@ -134,5 +134,6 @@
     "Remove attachment": "Anhang entfernen",
     "Your browser does not support uploading encrypted files. Please use a newer browser.":
         "Dein Browser unterstützt das hochladen von verschlüsselten Dateien nicht. Bitte verwende einen neueren Browser.",
-    "Invalid attachment.": "Ungültiger Datei-Anhang."
+    "Invalid attachment.": "Ungültiger Datei-Anhang.",
+    "Options": "Optionen"
 }

+ 2 - 1
i18n/fr.json

@@ -143,5 +143,6 @@
     "Remove attachment": "Remove attachment",
     "Your browser does not support uploading encrypted files. Please use a newer browser.":
         "Your browser does not support uploading encrypted files. Please use a newer browser.",
-    "Invalid attachment.": "Invalid attachment."
+    "Invalid attachment.": "Invalid attachment.",
+    "Options": "Options"
 }

+ 2 - 1
i18n/pl.json

@@ -134,5 +134,6 @@
     "Remove attachment": "Remove attachment",
     "Your browser does not support uploading encrypted files. Please use a newer browser.":
         "Your browser does not support uploading encrypted files. Please use a newer browser.",
-    "Invalid attachment.": "Invalid attachment."
+    "Invalid attachment.": "Invalid attachment.",
+    "Options": "Options"
 }

+ 163 - 0
tpl/bootstrap-compact.html

@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<meta http-equiv="X-UA-Compatible" content="IE=edge">
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<meta name="robots" content="noindex" />
+		<title>{function="t('ZeroBin')"}</title>
+		<link type="text/css" rel="stylesheet" href="css/bootstrap/bootstrap-3.3.5.css" />
+		<link type="text/css" rel="stylesheet" href="css/bootstrap/bootstrap-theme-3.3.5.css" />
+		<link type="text/css" rel="stylesheet" href="css/bootstrap/zerobin.css?{$VERSION|rawurlencode}" />{if="$SYNTAXHIGHLIGHTING"}
+		<link type="text/css" rel="stylesheet" href="css/prettify/prettify.css?{$VERSION|rawurlencode}" />{if="strlen($SYNTAXHIGHLIGHTINGTHEME)"}
+		<link type="text/css" rel="stylesheet" href="css/prettify/{$SYNTAXHIGHLIGHTINGTHEME}.css?{$VERSION|rawurlencode}" />{/if}{/if}
+		<script type="text/javascript" src="js/jquery-1.11.3.js"></script>
+		<script type="text/javascript" src="js/sjcl-1.0.2.js"></script>
+		<script type="text/javascript" src="js/base64-{$BASE64JSVERSION}.js"></script>
+		<script type="text/javascript" src="js/rawdeflate-0.5.js"></script>
+		<script type="text/javascript" src="js/rawinflate-0.3.js"></script>
+		<script type="text/javascript" src="js/bootstrap-3.3.5.js"></script>{if="$SYNTAXHIGHLIGHTING"}
+		<script type="text/javascript" src="js/prettify.js?{$VERSION|rawurlencode}"></script>{/if}{if="$MARKDOWN"}
+		<script type="text/javascript" src="js/showdown.js?{$VERSION|rawurlencode}"></script>{/if}
+		<script type="text/javascript" src="js/zerobin.js?{$VERSION|rawurlencode}"></script>
+		<!--[if lt IE 10]>
+		<style type="text/css">#ienotice {display:block !important;} #oldienotice {display:block !important;}</style>
+		<![endif]-->
+	</head>
+	<body role="document">
+		<nav class="navbar navbar-default navbar-fixed-top">
+			<div class="container">
+				<div class="navbar-header">
+					<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
+						<span class="sr-only">{function="t('Toggle navigation')"}</span>
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+					</button>
+				<a class="reloadlink navbar-brand" href="/">{function="t('ZeroBin')"}</a>
+				</div>
+				<div id="navbar" class="navbar-collapse collapse">
+					<ul class="nav navbar-nav">
+						<li class="pr">
+							<button id="sendbutton" type="button" class="hidden btn btn-default navbar-btn">
+								<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> {function="t('Send')"}
+							</button>
+							<button id="clonebutton" type="button" class="hidden btn btn-default navbar-btn">
+								<span class="glyphicon glyphicon-duplicate" aria-hidden="true"></span> {function="t('Clone')"}
+							</button>
+							<button id="rawtextbutton" type="button" class="hidden btn btn-default navbar-btn">
+								<span class="glyphicon glyphicon-text-background" aria-hidden="true"></span> {function="t('Raw text')"}
+							</button>
+						</li>
+						<li class="dropdown">
+							<select id="pasteExpiration" name="pasteExpiration" class="hidden">
+{loop="EXPIRE"}
+								<option value="{$key}"{if="$key == $EXPIREDEFAULT"} selected="selected"{/if}>{$value}</option>{/loop}
+							</select>
+							<a id="expiration" href="#" class="hidden dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{function="t('Expires')"}: <span id="pasteExpirationDisplay">{$EXPIRE[$EXPIREDEFAULT]}</span> <span class="caret"></span></a>
+							<ul class="dropdown-menu">
+{loop="EXPIRE"}
+								<li><a href="#" onclick="$('#pasteExpiration').val('{$key}');$('#pasteExpirationDisplay').text('{$value}');return false;">{$value}</a></li>{/loop}
+							</ul>
+						</li>
+						<li id="formatter" class="dropdown">
+							<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{function="t('Options')"} <span class="caret"></span></a>
+							<ul class="dropdown-menu">
+								<li id="burnafterreadingoption" class="checkbox hidden">
+									<label>
+										<input type="checkbox" id="burnafterreading" name="burnafterreading" {if="$BURNAFTERREADINGSELECTED"} checked="checked"{/if} />
+										{function="t('Burn after reading')"}
+									</label>
+								</li>{if="$DISCUSSION"}
+								<li id="opendisc" class="checkbox hidden">
+									<label>
+										<input type="checkbox" id="opendiscussion" name="opendiscussion" {if="$OPENDISCUSSION"} checked="checked"{/if} />
+										{function="t('Open discussion')"}
+									</label>
+								</li>{/if}
+								<li role="separator" class="divider"></li>
+								<li>
+									<div>
+										{function="t('Format')"}: <span id="pasteFormatterDisplay">{$FORMATTER[$FORMATTERDEFAULT]}</span> <span class="caret"></span>
+									</div>
+								</li>
+{loop="FORMATTER"}
+								<li>
+									<a href="#" onclick="$('#pasteFormatter').val('{$key}');$('#pasteFormatterDisplay').text('{$value}');return false;">
+										{$value}
+									</a>
+								</li>{/loop}
+							</ul>
+							<select id="pasteFormatter" name="pasteFormatter" class="hidden">
+{loop="FORMATTER"}
+								<option value="{$key}"{if="$key == $FORMATTERDEFAULT"} selected="selected"{/if}>{$value}</option>{/loop}
+							</select>
+						</li>{if="$PASSWORD"}
+						<li>
+							<div id="password" class="navbar-form hidden">
+								<input type="password" id="passwordinput" placeholder="{function="t('Password (recommended)')"}" class="form-control" size="19"/>
+							</div>
+						</li>{/if}
+					</ul>
+					<ul class="nav navbar-nav pull-right">
+						<li>
+							<button id="newbutton" type="button" class="reloadlink hidden btn btn-default navbar-btn">
+								<span class="glyphicon glyphicon-file" aria-hidden="true"></span> {function="t('New')"}
+							</button>
+						</li>
+					</ul>
+				</div>
+			</div>
+		</nav>
+		<header class="container">{if="strlen($NOTICE)"}
+			<div role="alert" class="alert alert-info">
+				<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> {$NOTICE|htmlspecialchars}
+			</div>{/if}
+			<div id="remainingtime" role="alert" class="hidden alert alert-info">
+				<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
+			</div>{if="strlen($STATUS)"}
+			<div id="status" role="alert" class="alert alert-success">
+				<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> {$STATUS|htmlspecialchars}
+			</div>{/if}
+			<div id="errormessage" role="alert" class="{if="!strlen($ERROR)"}hidden {/if}alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {$ERROR|htmlspecialchars}</div>
+			<div id="noscript" role="alert" class="nonworking alert alert-warning"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {function="t('Javascript is required for ZeroBin to work.<br />Sorry for the inconvenience.')"}</div>
+			<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> {function="t('ZeroBin requires a modern browser to work.')"}</div>
+			<div id="ienotice" role="alert" class="hidden alert alert-warning"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> {function="t('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:')"}
+				<a href="http://www.mozilla.org/firefox/">Firefox</a>, 
+				<a href="http://www.opera.com/">Opera</a>, 
+				<a href="http://www.google.com/chrome">Chrome</a>, 
+				<a href="http://www.apple.com/safari">Safari</a>...
+			</div>
+			<div id="pasteresult" role="alert" class="hidden alert alert-success">
+				<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
+				<div id="deletelink"></div>
+				<div id="pastelink"></div>
+			</div>
+		</header>
+		<section class="container">
+			<article class="row">
+				<div id="prettymessage" class="col-md-12 hidden">
+					<pre id="prettyprint" class="col-md-12 prettyprint linenums:1"></pre>
+				</div>
+				<div id="cleartext" class="col-md-12 hidden"></div>
+				<p class="col-md-12"><textarea id="message" name="message" cols="80" rows="25" class="form-control hidden"></textarea></p>
+			</article>
+		</section>
+		<section class="container">
+			<div id="discussion" class="hidden">
+				<h4>{function="t('Discussion')"}</h4>
+				<div id="comments"></div>
+			</div>
+		</section>
+		<footer class="container">
+			<div class="row">
+				<h4 class="col-md-5 col-xs-8">{function="t('ZeroBin')"} <small>- {function="t('Because ignorance is bliss')"}</small></h4>
+				<p class="col-md-1 col-xs-4 text-center">{$VERSION}</p>
+				<p id="aboutbox" class="col-md-6 col-xs-12">
+					{function="t('ZeroBin is a minimalist, opensource online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted <i>in the browser</i> using 256 bits AES. More information on the <a href="https://github.com/elrido/ZeroBin/wiki">project page</a>.')"}
+				</p>
+			</div>
+		</footer>
+		<div id="cipherdata" class="hidden">{$CIPHERDATA}</div>
+	</body>
+</html>

+ 21 - 16
tpl/bootstrap.html

@@ -60,22 +60,27 @@
 								<li><a href="#" onclick="$('#pasteExpiration').val('{$key}');$('#pasteExpirationDisplay').text('{$value}');return false;">{$value}</a></li>{/loop}
 							</ul>
 						</li>
-						<li>
-							<div id="burnafterreadingoption" class="navbar-text checkbox hidden">
-								<label>
-									<input type="checkbox" id="burnafterreading" name="burnafterreading" {if="$BURNAFTERREADINGSELECTED"} checked="checked"{/if} />
-									{function="t('Burn after reading')"}
-								</label>
-							</div>
-						</li>{if="$DISCUSSION"}
-						<li>
-							<div id="opendisc" class="navbar-text checkbox hidden">
-								<label>
-									<input type="checkbox" id="opendiscussion" name="opendiscussion" {if="$OPENDISCUSSION"} checked="checked"{/if} />
-									{function="t('Open discussion')"}
-							 	</label>
-							</div>
-						</li>{/if}{if="$PASSWORD"}
+						<li class="dropdown">
+							<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{function="t('Options')"} <span class="caret"></span></a>
+							<ul class="dropdown-menu">
+								<li>
+									<div id="burnafterreadingoption" class="navbar-text checkbox hidden">
+										<label>
+											<input type="checkbox" id="burnafterreading" name="burnafterreading" {if="$BURNAFTERREADINGSELECTED"} checked="checked"{/if} />
+											{function="t('Burn after reading')"}
+										</label>
+									</div>
+								</li>{if="$DISCUSSION"}
+								<li>
+									<div id="opendisc" class="navbar-text checkbox hidden">
+										<label>
+											<input type="checkbox" id="opendiscussion" name="opendiscussion" {if="$OPENDISCUSSION"} checked="checked"{/if} />
+											{function="t('Open discussion')"}
+										</label>
+									</div>
+								</li>{/if}
+							</ul>
+						</li>{if="$PASSWORD"}
 						<li>
 							<div id="password" class="navbar-form hidden">
 								<input type="password" id="passwordinput" placeholder="{function="t('Password (recommended)')"}" class="form-control" size="19"/>