1
0
mirror of https://github.com/Tygs/0bin.git synced 2023-08-10 21:13:00 +03:00

new theme

This commit is contained in:
jhon doe 2020-08-12 09:26:17 +02:00
parent 29dc683287
commit a8e6763cc0
9 changed files with 491 additions and 450 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,34 @@
/* desert scheme ported from vim to google prettify */
pre.prettyprint { display: block; background-color: #333 }
pre .nocode { background-color: none; color: #000 }
pre .str { color: #ffa0a0 } /* string - pink */
pre .kwd { color: #f0e68c; font-weight: bold }
pre .com { color: #87ceeb } /* comment - skyblue */
pre .typ { color: #98fb98 } /* type - lightgreen */
pre .lit { color: #cd5c5c } /* literal - darkred */
pre .pun { color: #fff } /* punctuation */
pre .pln { color: #fff } /* plaintext */
pre .tag { color: #f0e68c; font-weight: bold } /* html/xml tag - lightyellow */
pre .atn { color: #bdb76b; font-weight: bold } /* attribute name - khaki */
pre .atv { color: #ffa0a0 } /* attribute value - pink */
pre .dec { color: #98fb98 } /* decimal - lightgreen */
/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE } /* IE indents via margin-left */
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,li.L3,li.L5,li.L7,li.L9 { }
@media print {
pre.prettyprint { background-color: none }
pre .str, code .str { color: #060 }
pre .kwd, code .kwd { color: #006; font-weight: bold }
pre .com, code .com { color: #600; font-style: italic }
pre .typ, code .typ { color: #404; font-weight: bold }
pre .lit, code .lit { color: #044 }
pre .pun, code .pun { color: #440 }
pre .pln, code .pln { color: #000 }
pre .tag, code .tag { color: #006; font-weight: bold }
pre .atn, code .atn { color: #404 }
pre .atv, code .atv { color: #060 }
}

View File

@ -3,14 +3,9 @@
.brand { .brand {
font-size: 38px !important; font-size: 38px !important;
padding: 0 55px 3px !important; padding: 0 !important;
margin-left: 10%;
text-shadow: 0 1px 0 rgba(255, 255, 255, .1), 0 0 30px rgba(255, 255, 255, .125);
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear;
-o-transition: all .2s linear;
-ms-transition: all .2s linear;
transition: all .2s linear;
} }
.brand span { .brand span {
@ -43,9 +38,10 @@
/* body & other stuff */ /* body & other stuff */
body { body {
padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
.sidebar-nav { .sidebar-nav {
padding: 9px 0; padding: 9px 0;
} }
@ -54,13 +50,6 @@ select {
width: 135px; width: 135px;
} }
label {
display: inline;
margin-left: 18px;
font-style: italic;
font-size: 11px;
color: #888;
}
ul, ol { ul, ol {
padding: 0; padding: 0;
@ -71,6 +60,13 @@ li {
margin-left: -9px; margin-left: -9px;
} }
a {
color: #2ea1d7;
}
a:hover {
color: #1888bc;
}
p { p {
margin: 0 0 20px; margin: 0 0 20px;
@ -90,48 +86,24 @@ blockquote {
float: left; float: left;
} }
h4 p {
float: left;
font-size: 80px;
text-shadow: 1px 3px 1px #DDD, 0 0 4px #333;
-webkit-transition: all 0.2s linear;
-o-transition: all .2s linear;
-ms-transition: all .2s linear;
-moz-transition: all .2s linear;
transition: all .2s linear;
margin-right: 7px;
margin-top: 3px;
}
h4#pixels-total {
position: relative;
width: 166px;
float: right;
margin: 8px 0 0 0;
padding: 0 0 0 54px;
font-size: 1.1em;
line-height: 1.4;
font-weight: normal;
color: #777;
-webkit-border-top-right-radius: 6px;
-webkit-border-top-left-radius: 20px;
-moz-border-top-right-radius: 6px;
-moz-border-top-left-radius: 20px;
border-top-right-radius: 6px;
border-top-left-radius: 20px;
}
.greetings {
clear: both;
margin: 0 auto;
text-align: center;
margin-top: 40px;
}
.alert .title { .alert .title {
display:block; display:block;
} }
.footer {
text-align: center;
bottom: 0px;
position: fixed;
height: 60px;
width: 100%;
display: block;
margin: 0px 0px 0px 0px;
padding: 8px 0 0 0;
left: 0;
background-color: #424141;
}
/* Home */ /* Home */
.btn-group { .btn-group {
@ -178,11 +150,6 @@ input.hide-upload {
/* Paste Page */ /* Paste Page */
#paste-content {
background-color: white;
padding:1em;
}
#paste-content.linenums { #paste-content.linenums {
padding-left:0; padding-left:0;
@ -192,9 +159,6 @@ input.hide-upload {
display:none; display:none;
} }
.paste-option {
float:right;
}
a#clip-button.hover{ a#clip-button.hover{
cursor:pointer; cursor:pointer;
@ -208,10 +172,15 @@ li.L5, li.L6, li.L7, li.L8, li.L9
background: inherit; background: inherit;
} }
pre.prettyprint {
width: 100%;
min-height: 100px;
}
.prettyprint.linenums { .prettyprint.linenums {
-webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; /* -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; */
} }
/* Specify class=linenums on a pre to get line numbering */ /* Specify class=linenums on a pre to get line numbering */
@ -219,22 +188,23 @@ ol.linenums {
margin: 0 0 0 55px; /* IE indents via margin-left */ margin: 0 0 0 55px; /* IE indents via margin-left */
} }
ol.linenums li { ol.linenums li {
color: #bebec5; /* color: #bebec5;
line-height: 18px; line-height: 18px;
text-shadow: 0 1px 0 #fff; text-shadow: 0 1px 0 #fff; */
} }
.prettyprint { .prettyprint {
padding: 8px; /* padding: 8px;
background-color: #f7f7f9; background-color: #f7f7f9;
border: 1px solid #e1e1e8; border: 1px solid #e1e1e8; */
} }
pre { pre {
font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, monospace, serif; /* font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, monospace, serif;
line-height: 21px; line-height: 21px;
font-size: 12px; font-size: 12px; */
white-space: pre-wrap;
overflow: visible;
} }
.kwd { .kwd {
@ -256,9 +226,30 @@ color: #C0C;
/* Common css */ /* Common css */
form { .form-control,
padding-bottom:3em !important; .form-control:focus,
padding-right: 17px; .form-control:disabled,
.form-control[readonly],
#paste-content {
background-color: #375a7f;
color: #f9fafc;
border-radius: 3px;
}
.form-group {
/* margin-bottom: 1rem; */
margin-bottom: 0;
}
.select-date {
width: 320px;
float: right;
}
.select-date-clone {
width: 60%;
max-width: 320px;
}
.container-md {
margin-top: 20px;
padding-bottom: 80px;
} }
form textarea { form textarea {
@ -266,15 +257,6 @@ form textarea {
min-height:250px; min-height:250px;
} }
button.btn, input[type="submit"].btn {
margin-left: 5px;
}
.well {
padding-bottom: 40px;
padding-right: 17px;
}
.legal { .legal {
margin: 0 auto; margin: 0 auto;
width: 300px; width: 300px;
@ -282,49 +264,36 @@ button.btn, input[type="submit"].btn {
margin-top: 30px; margin-top: 30px;
} }
.btn {
margin-left: 5px;
}
.btn-primary, .btn-danger {
position:relative;
top:-4px;
}
#alert-template { #alert-template {
display: none; display: none;
} }
/** Progress bar */ /** Progress bar */
.progress { .progress {
display:none; margin: 8px 0 8px 0;
height: 1.5rem;
display: none;
} }
.progress .bar { .progress .bar {
width: 25%; width: 25%;
text-indent: 10px; padding: 12px;
text-align:left; text-align:left;
} }
.lnk-option canvas {
vertical-align:middle;
margin-right:10px;
}
/* Previous paste list */ /* Previous paste list */
.previous-pastes .item { .progress-container {
margin-top:5px; margin: 8px 0 8px 0;
vertical-align:middle; clear: both;
line-height:24px;
padding-left:1em;
} }
li.item { // to remove
margin-left: -13px; #ZeroClipboardMovie_1 {
margin-right: -5px; display: none;
} }
.previous-pastes canvas { .previous-pastes canvas {
@ -369,7 +338,7 @@ canvas {
#expiration-tag { #expiration-tag {
float:right; float:right;
margin:1em; margin: 1em;
background:grey; background:grey;
color:white; color:white;
font-size:0.8em; font-size:0.8em;
@ -388,3 +357,128 @@ canvas {
#content.hover { #content.hover {
background-color: #eee; background-color: #eee;
} }
/* top Menu */
#topmenu {
display: none;
}
.topnav {
height: 60px;
background-color: #333;
}
.topnav .brand {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
width: 175px;
}
.topnav .tagline {
font-size: 0.9em;
padding: 8px;
float: left;
margin-left: 20px;
}
.topnav .tagline span{
font-style: italic;
}
.topnav a.active {
background-color: #4CAF50;
color: white;
}
.topnav .icon {
display: none;
}
.topnav .bi-list {
width: 2em;
height: 2em;
}
/* Styling the sub menu */
nav {
float: right;
margin: 18px;
}
nav ul li {
float: left;
list-style: none;
}
nav ul li a {
color: white;
background: #333333;
padding: 10px;
text-decoration: none;
}
nav ul li a:hover {
background: #375A7F;
border-radius: 3px;
color: #FFF;
text-decoration: none;
}
.submenu {
position: relative;
}
.submenu ul {
position: absolute;
margin: 8px 0 0px 9px;
display: none;
width: -webkit-fill-available;
z-index: 9999;
}
.submenu li{
display: block;
background: #375A7F;
color: white;
float: none;
}
/* Styling drop down links */
.submenu li a {
background: transparent;
padding:10px;
display: block;
}
.submenu li a:hover {
background: gray;
}
/* Showing Submenu on hover*/
.submenu:hover ul {
display: block;
}
/* Responsive */
@media screen and (max-width: 800px) {
.topnav a:not(:first-child) {display: none;}
.topnav .tagline {display: none;}
.brand { margin-left: 1%;}
/* Fonts */
.btn {font-size: 0.77em;}
pre {font-size: 70%;}
}

View File

@ -1,118 +1,46 @@
/* /* Pretty printing styles. Used with prettify.js. */
* Derived from einaros's Sons of Obsidian theme at /* Vim sunburst theme by David Leibovic */
* http://studiostyl.es/schemes/son-of-obsidian by
* Alex Ford of CodeTunnel:
* http://CodeTunnel.com/blog/post/71/google-code-prettify-obsidian-theme
*/
.str pre .str, code .str { color: #65B042; } /* string - green */
{ pre .kwd, code .kwd { color: #E28964; } /* keyword - dark pink */
color: #EC7600; pre .com, code .com { color: #AEAEAE; font-style: italic; } /* comment - gray */
pre .typ, code .typ { color: #89bdff; } /* type - light blue */
pre .lit, code .lit { color: #3387CC; } /* literal - blue */
pre .pun, code .pun { color: #fff; } /* punctuation - white */
pre .pln, code .pln { color: #fff; } /* plaintext - white */
pre .tag, code .tag { color: #89bdff; } /* html/xml tag - light blue */
pre .atn, code .atn { color: #bdb76b; } /* html/xml attribute name - khaki */
pre .atv, code .atv { color: #65B042; } /* html/xml attribute value - green */
pre .dec, code .dec { color: #3387CC; } /* decimal - blue */
pre.prettyprint, code.prettyprint {
background-color: #000;
border-radius: 8px;
} }
.kwd
{ pre.prettyprint {
color: #93C763; width: 95%;
margin: 1em auto;
padding: 1em;
white-space: pre-wrap;
} }
.com
{
color: #66747B; /* Specify class=linenums on a pre to get line numbering */
} ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE; } /* IE indents via margin-left */
.typ li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
{ /* Alternate shading for lines */
color: #678CB1; li.L1,li.L3,li.L5,li.L7,li.L9 { }
}
.lit @media print {
{ pre .str, code .str { color: #060; }
color: #FACD22; pre .kwd, code .kwd { color: #006; font-weight: bold; }
} pre .com, code .com { color: #600; font-style: italic; }
.pun pre .typ, code .typ { color: #404; font-weight: bold; }
{ pre .lit, code .lit { color: #044; }
color: #F1F2F3; pre .pun, code .pun { color: #440; }
} pre .pln, code .pln { color: #000; }
.pln pre .tag, code .tag { color: #006; font-weight: bold; }
{ pre .atn, code .atn { color: #404; }
color: #F1F2F3; pre .atv, code .atv { color: #060; }
}
.tag
{
color: #8AC763;
}
.atn
{
color: #E0E2E4;
}
.atv
{
color: #EC7600;
}
.dec
{
color: purple;
}
pre.prettyprint
{
border: 0px solid #888;
}
ol.linenums
{
margin-top: 0;
margin-bottom: 0;
}
.prettyprint {
background: #000;
}
li.L0, li.L1, li.L2, li.L3, li.L4, li.L5, li.L6, li.L7, li.L8, li.L9
{
color: #555;
list-style-type: decimal;
}
li.L1, li.L3, li.L5, li.L7, li.L9 {
background: #111;
}
@media print
{
.str
{
color: #060;
}
.kwd
{
color: #006;
font-weight: bold;
}
.com
{
color: #600;
font-style: italic;
}
.typ
{
color: #404;
font-weight: bold;
}
.lit
{
color: #044;
}
.pun
{
color: #440;
}
.pln
{
color: #000;
}
.tag
{
color: #006;
font-weight: bold;
}
.atn
{
color: #404;
}
.atv
{
color: #060;
}
} }

View File

@ -654,28 +654,6 @@
/* Add a continuation to let the UI redraw */ /* Add a continuation to let the UI redraw */
setTimeout(function () { setTimeout(function () {
/* Setup flash clipboard button */
ZeroClipboard.setMoviePath('/static/js/ZeroClipboard.swf');
var clip = new ZeroClipboard.Client();
// Callback to reposition the clibpboad flash animation overlay
var reposition = function () {
clip.reposition();
};
clip.addEventListener('mouseup', function () {
$('#clip-button').text('Copying paste...');
clip.setText(zerobin.getPasteContent());
});
clip.addEventListener('complete', function () {
$('#clip-button').text('Copy to clipboard');
zerobin.message('info', 'The paste is now in your clipboard', '',
true, reposition);
});
clip.glue('clip-button');
window.onresize = reposition;
/* Setup link to get the paste short url*/ /* Setup link to get the paste short url*/
@ -706,7 +684,7 @@
prettyPrint(); prettyPrint();
} else { } else {
if (content.indexOf('data:image') != 0) { if (content.indexOf('data:image') != 0) {
zerobin.message('info', zerobin.message('dismissible',
"The paste did not seem to be code, so it " + "The paste did not seem to be code, so it " +
"was not colorized. " + "was not colorized. " +
"<a id='force-coloration' href='#'>Force coloration</a>", "<a id='force-coloration' href='#'>Force coloration</a>",
@ -737,7 +715,7 @@
/* Resize Textarea according to content */ /* Resize Textarea according to content */
$('#content').elastic(); //$('#content').elastic();
/* Display bottom paste option buttons when needed */ /* Display bottom paste option buttons when needed */
@ -767,15 +745,15 @@
$container.find('.item').remove(); $container.find('.item').remove();
$.each(zerobin.getPreviousPastes(), function (i, paste) { $.each(zerobin.getPreviousPastes(), function (i, paste) {
var $li = $('<li class="item"></li>').appendTo($container); var $li = $('<li></li >').appendTo($container);
var $link = $('<a></a>').attr('href', paste.link) var $link = $('<a></a>').attr('href', paste.link)
.text(paste.prefix + paste.displayDate) .text('Paste - ' + paste.displayDate)
.appendTo($li); .appendTo($li);
if (vizhash.supportCanvas) { if (vizhash.supportCanvas) {
var pasteId = zerobin.getPasteId(paste.link); var pasteId = zerobin.getPasteId(paste.link);
var vhash = vizhash.canvasHash(pasteId, 24, 24).canvas; var vhash = vizhash.canvasHash(pasteId, 24, 24).canvas;
$link.prepend($(vhash).addClass('vhash')); //$link.prepend($(vhash).addClass('vhash'));
} }
// hightlite the current link and make sure clicking the link // hightlite the current link and make sure clicking the link

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>0bin - encrypted pastebin</title> <title>0bin - encrypted pastebin</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" <meta name="description"
content="0bin is a client-side-encrypted content="0bin is a client-side-encrypted
pastebin featuring burn after reading, history, and pastebin featuring burn after reading, history, and
@ -16,7 +16,11 @@
rel="stylesheet" /> rel="stylesheet" />
%else: %else:
<link href="/static/css/prettify.css" rel="stylesheet" /> <link href="/static/css/prettify.css" rel="stylesheet" />
<link href="/static/css/bootstrap.css" rel="stylesheet"> <link href="/static/css/desert.css" rel="stylesheet" />
<!-- <link href="/static/css/bootstrap.css" rel="stylesheet"> -->
<link href="/static/css/bootswatch.4.5.css" rel="stylesheet">
<link href="/static/css/style.css?{{ settings.VERSION }}" <link href="/static/css/style.css?{{ settings.VERSION }}"
rel="stylesheet"> rel="stylesheet">
%end %end
@ -29,8 +33,8 @@
%if settings.COMPRESSED_STATIC_FILES: %if settings.COMPRESSED_STATIC_FILES:
<script src="/static/js/main.min.js?{{ settings.VERSION }}"></script> <script src="/static/js/main.min.js?{{ settings.VERSION }}"></script>
%else: %else:
<script src="/static/js/jquery-1.7.2.min.js"></script>
<script src="/static/js/sjcl.js"></script> <script src="/static/js/sjcl.js"></script>
<script src="/static/js/jquery-1.7.2.min.js"></script>
<script src="/static/js/behavior.js?{{ settings.VERSION }}"></script> <script src="/static/js/behavior.js?{{ settings.VERSION }}"></script>
%end %end
@ -42,45 +46,21 @@
<body> <body>
<div class="navbar navbar-fixed-top"> <div class="topnav" >
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse"
data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/"><span>ø</span>bin<em>.net</em></a> <a class="brand" href="/"><span>ø</span>bin<em>.net</em></a>
<div class="nav-collapse"> <span class="tagline">"A client side encrypted PasteBin"<br><span>All pastes are AES256 encrypted, we cannot know what you paste...</span>
<ul class="nav">
%for i, entry in enumerate(settings.MENU):
<li
%if not i:
class="active"
%end
>
%if "mailto:" in entry[1]:
<span title="{{ entry[1].replace('mailto:', '').replace('@', '__AT__') }}"
class="email-link" >
{{ entry[0] }}
</span> </span>
%else:
<a href="{{ entry[1] }}">{{ entry[0] }}</a>
%end
</li>
%end
<nav >
<ul>
<li class="submenu" ><a href="#" onclick="ToggleMenu()">Previous pastes +</a>
<ul class="previous-pastes" id="topmenu">
<li class="item active"><a href="#">No paste yet...</a></li>
</ul> </ul>
<p class="about pull-right"> </li>
"A client side encrypted PasteBin"<br> </ul>
<span>All pastes are AES256 encrypted, we cannot know what you paste...</span> </nav>
</p>
</div><!--/.nav-collapse -->
</div>
</div>
</div> </div>
<noscript class="container noscript"> <noscript class="container noscript">
@ -89,76 +69,42 @@
<p>Please enable JavaScript for this website or use a JavaScript-capable web browser.</p> <p>Please enable JavaScript for this website or use a JavaScript-capable web browser.</p>
</noscript> </noscript>
<div class="container" id="wrap-content"> <div class="container-md" id="wrap-content">
<div class="row"> <div id='main' >{{!base}}</div>
<div class="span2"> </div>
<div class="well sidebar-nav">
<ul class="nav nav-list previous-pastes">
<li class="nav-header">Previous pastes</li>
<li class="item local-storage">
<em class="grey">
Your previous pastes will be saved in your browser using
<a href="http://www.w3.org/TR/webstorage/">localStorage</a>.
</em>
</li>
<li class="item no-local-storage">
<em class="grey">
Sorry your browser does not support
<a href="http://www.w3.org/TR/webstorage/">LocalStorage</a>,
We cannot display your previous pastes.
</em>
</li>
</ul>
</div><!--/.well -->
</div><!--/span-->
<div id='main' class="span10">
{{!base}}
</div><!--/span-->
</div><!--/row-->
<hr>
<footer>
<blockquote>
<p>“Few persons can be made to believe that it is not quite an easy thing to invent a method of secret writing which shall baffle investigation. Yet it may be roundly asserted that human ingenuity cannot concoct a cipher which human ingenuity cannot resolve...”</p>
<small>Edgar Allan Poe</small>
</blockquote>
<footer class="footer">
<a href="https://www.0bin.net/">Create a paste</a> - <a href="/faq/">Faq</a> - <a href="https://github.com/sametmax/0bin">Github</a>
<br>
%if settings.DISPLAY_COUNTER: %if settings.DISPLAY_COUNTER:
<h4 id="pixels-total" > <strong>{{ pastes_count }}</strong> pastes øbinned
<p>ø</p>
<strong>{{ pastes_count }}</strong> <br/>pastes øbinned
</h4>
%end %end
</br>
<p class="greetings span12">
Based on an original idea from
<a href="http://sebsauvage.net/paste/">sebsauvage.net</a><br>
<a href="http://sametmax.com">Sam &amp; Max</a>
</p>
</footer> </footer>
%if settings.COMPRESSED_STATIC_FILES: %if settings.COMPRESSED_STATIC_FILES:
<script src="/static/js/additional.min.js?{{ settings.VERSION }}"></script> <script src="/static/js/additional.min.js?{{ settings.VERSION }}"></script>
%else: %else:
<script src="/static/js/jquery.elastic.source.js"></script>
<script src="/static/js/lzw.js"></script> <script src="/static/js/lzw.js"></script>
<script src="/static/js/prettify.min.js"></script> <script src="/static/js/prettify.min.js"></script>
<script src="/static/js/ZeroClipboard.js"></script> <script src="/static/js/ZeroClipboard.js"></script>
%end %end
<p id="alert-template"> <p id="alert-template" class="alert-primary">
<a class="close" data-dismiss="alert" href="#">×</a> <a class="close" data-dismiss="alert" href="#">×</a>
<strong class="title"></strong> <strong class="title"></strong>
<span class="message"></span> <span class="message"></span>
</p> </p>
</div><!--/wrap-content-->
<script>
function ToggleMenu() {
var x = document.getElementById("topmenu");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
</script>
</body> </body>

View File

@ -2,11 +2,9 @@
<h1>FAQ</h1> <h1>FAQ</h1>
<hr width="90%"> <table>
<tr>How does 0bin work?</tr>
<dl> <td>
<dt>How does 0bin work?</dt>
<dd>
<p>A random key is generated and used to encrypt the paste, thanks to <p>A random key is generated and used to encrypt the paste, thanks to
the <a href="http://crypto.stanford.edu/sjcl/">sjcl</a> the <a href="http://crypto.stanford.edu/sjcl/">sjcl</a>
JavaScript library.</p> JavaScript library.</p>
@ -19,10 +17,10 @@
JavaScript will use it to decrypt the content sent by the server.</p> JavaScript will use it to decrypt the content sent by the server.</p>
<p>The browser never sends the hash to the server, so the latter does not <p>The browser never sends the hash to the server, so the latter does not
receives the key at any time.</p> receives the key at any time.</p>
</dd> </td>
<dt>But JavaScript encryption is not secure!</dt> <tr>But JavaScript encryption is not secure!</tr>
<dd> <td>
<p>No, it isn't.</p> <p>No, it isn't.</p>
<p>The goal of 0bin is <strong>not</strong> to protect the user and their data <p>The goal of 0bin is <strong>not</strong> to protect the user and their data
(including, obviously, their secrets).</p> (including, obviously, their secrets).</p>
@ -36,9 +34,9 @@
you decide to host a 0bin server, the encryption feature hopefully be used as a defense. you decide to host a 0bin server, the encryption feature hopefully be used as a defense.
This is not proven, though! :-) This is not proven, though! :-)
</dd> </td>
<dt>What if the server changes the JavaScript code? And what happens in the case of a <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attack</a>?</dt> <tr>What if the server changes the JavaScript code? And what happens in the case of a <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attack</a>?</tr>
<dd> <td>
<p>Read above.</p> <p>Read above.</p>
<p>0bin is not built, and does not aim, to protect user data - but rather the host. <p>0bin is not built, and does not aim, to protect user data - but rather the host.
If any user data is compromised, 0bin still provides the host with If any user data is compromised, 0bin still provides the host with
@ -52,19 +50,19 @@
for emails.</p> for emails.</p>
<p>It would be unlikely for those softwares to fail you. Errors will nearly always come from your side - you ought to have a perfect <a href="https://en.wikipedia.org/wiki/Operations_security">operations security</a> <p>It would be unlikely for those softwares to fail you. Errors will nearly always come from your side - you ought to have a perfect <a href="https://en.wikipedia.org/wiki/Operations_security">operations security</a>
if you do not want your data to be leaked. Remember to use your common sense.</p> if you do not want your data to be leaked. Remember to use your common sense.</p>
</dd> </td>
<dt>How did the idea of 0bin emerge?</dt> <tr>How did the idea of 0bin emerge?</tr>
<dd> <td>
<p>0bin is based on <a href="http://sebsauvage.net/wiki/doku.php?id=php:zerobin">sebsauvage's work</a>. <p>0bin is based on <a href="http://sebsauvage.net/wiki/doku.php?id=php:zerobin">sebsauvage's work</a>.
The project sprang as a reaction to <a href="https://www.zdnet.com/blog/security/pastebin-to-hunt-for-hacker-pastes-anonymous-cries-censorship/11336">the implementation of a moderation system on Pastebin</a>, The project sprang as a reaction to <a href="https://www.zdnet.com/blog/security/pastebin-to-hunt-for-hacker-pastes-anonymous-cries-censorship/11336">the implementation of a moderation system on Pastebin</a>,
due to the significant amount of illegal content pasted on it, or that it linked to.</p> due to the significant amount of illegal content pasted on it, or that it linked to.</p>
</dd> </td>
<dt>How can I get 0bin?</dt> <tr>How can I get 0bin?</tr>
<dd> <td>
<p>0bin is an open-source project, and the code is hosted on <a href="https://github.com/sametmax/0bin">GitHub</a>. <p>0bin is an open-source project, and the code is hosted on <a href="https://github.com/sametmax/0bin">GitHub</a>.
You can either download a tarball or clone the repository.</p> You can either download a tarball or clone the repository.</p>
</dd> </td>
</dl> </table>
</div> </div>

View File

@ -1,28 +1,48 @@
<p class="file-upload">
<input type="button" class="btn btn-upload" value="Upload File">
<input type="file" class="hide-upload" id="file-upload" >
</p>
<form class="well" method="post" action="/paste/create"> <form class="well" method="post" action="/paste/create">
<p class="paste-option"> <div class="d-flex justify-content-between">
<label for="expiration" >Expiration:</label>
<select id="expiration" name="expiration"> <div>
<label class="col-form-label">Upload text/img:</label>
<div class="file-upload">
<input type="button" class="btn btn-primary" value="Upload File">
<input type="file" class="hide-upload" id="file-upload" >
</div>
</div>
<div class="form-group select-date paste-option">
<label class="col-form-label">Expiration:</label>
<div class="input-group">
<select id="expiration" name="expiration" class="custom-select">
<option value="burn_after_reading">Burn after reading</option> <option value="burn_after_reading">Burn after reading</option>
<option selected value="1_day">1 day</option> <option selected value="1_day">1 day</option>
<option value="1_month">1 month</option> <option value="1_month">1 month</option>
<option value="never">Never</option> <option value="never">Never</option>
</select> </select>
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button> <button type="submit" class="btn btn-primary">Submit</button>
</p> </div>
<p> </div>
<div class="progress progress-striped active"> </div>
</div>
<div>
<div class="progress-bar progress-bar-striped progress">
<div class="bar"></div> <div class="bar"></div>
</div> </div>
<textarea rows="10" style="width:100%;" <textarea rows="10" style="width:100%;"
class="input-xlarge" class="form-control"
id="content" name="content"></textarea> id="content" name="content"></textarea>
</p> </div>
</form> </form>
% rebase("base", settings=settings, pastes_count=pastes_count) % rebase("base", settings=settings, pastes_count=pastes_count)

View File

@ -20,64 +20,95 @@
%end %end
<div class="well paste-form"> <div class="well paste-form">
<form action="/" method="get" accept-charset="utf-8"> <form action="/" method="get" accept-charset="utf-8">
<p class="lnk-option">
<a id="clip-button" href="#">Copy To Clipboard</a> |
<a id="short-url" href="#">Get short url</a> |
<a id="email-link" href="#">Email this</a>
<span class="paste-option btn-group top"> <div class="d-flex justify-content-between">
<button class="btn btn-clone"><i class="icon-camera"></i>&nbsp;Clone</button>
<button class="btn">New Paste</button> <div class="btn-group" role="group" >
<button type="button" id="clip-button" class="btn btn-secondary">Copy To Clipboard</button>
<button type="button" id="email-link" class="btn btn-secondary">Email this</button>
</div>
<div>
<span class="paste-option btn-group">
<button class="btn btn-clone btn-secondary">Clone</button>
<button class="btn btn-secondary">New Paste</button>
</span> </span>
</p> </div>
<div class="progress progress-striped active"> </div>
<div class="progress-container">
<div class="progress progress-bar progress-bar-striped active">
<div class="bar"></div> <div class="bar"></div>
</div> </div>
</div>
%expiration = paste.humanized_expiration %expiration = paste.humanized_expiration
%if expiration: %if expiration:
<p id="expiration-tag">Expire {{ expiration }}</p> <span id="expiration-tag">Expire {{ expiration }}</span>
%end %end
<p>
<pre id="paste-content" class="prettyprint"> <pre id="paste-content" class="prettyprint">
<code> <code>
{{ paste.content }} {{ paste.content }}
</code> </code>
</pre> </pre>
</p>
<p class="paste-option btn-group bottom"> <div class="d-flex justify-content-between">
<button class="btn btn-clone"><i class="icon-camera"></i>&nbsp;Clone</button> <div>
<button class="btn">New Paste</button> <button class="btn btn-clone btn-secondary">Delete Paste</button>
</p> </div>
<div>
<span class="paste-option btn-group">
<button class="btn btn-clone btn-secondary">Clone</button>
<button class="btn btn-secondary">New Paste</button>
</span>
</div>
</div>
</form> </form>
</div> </div>
<!-- For cloning --> <!-- For cloning -->
<div class="submit-form clone"> <div class="submit-form clone">
<form class="well" method="post" action="/paste/create"> <form class="well" method="post" action="/paste/create">
<p class="paste-option">
<label for="expiration" >Expiration:</label> <div class="d-flex justify-content-between">
<select id="expiration" name="expiration">
<div>
<label class="col-form-label">&nbsp;</label>
<div class="file-upload">
<button type="button" class="btn btn-danger">Cancel clone</button>
</div>
</div>
<div class="form-group select-date-clone paste-option">
<label class="col-form-label">Expiration:</label>
<div class="input-group">
<select id="expiration" name="expiration" class="custom-select">
<option value="burn_after_reading">Burn after reading</option> <option value="burn_after_reading">Burn after reading</option>
<option selected value="1_day">1 day</option> <option selected value="1_day">1 day</option>
<option value="1_month">1 month</option> <option value="1_month">1 month</option>
<option value="never">Never</option> <option value="never">Never</option>
</select> </select>
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button> <button type="submit" class="btn btn-primary">Submit</button>
<button class="btn btn-danger">Cancel clone</button> </div>
</p> </div>
</div>
<div> </div>
<div class="progress progress-striped active">
<div class="progress-container progress-clone">
<div class="progress progress-bar progress-bar-striped active">
<div class="bar"></div> <div class="bar"></div>
</div> </div>
</div>
<div>
<textarea rows="10" style="width:100%;" <textarea rows="10" style="width:100%;"
class="input-xlarge" class=" form-control"
id="content" name="content"></textarea> id="content" name="content"></textarea>
</div> </div>
</form> </form>