makeit work(5): pase cloning & raw button
This commit is contained in:
parent
a652ab5896
commit
7be5206920
5 changed files with 569 additions and 246 deletions
|
@ -98,6 +98,10 @@ body.navbar-spacing {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.glyphicon {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.comment {
|
.comment {
|
||||||
border-left: 1px solid #ccc;
|
border-left: 1px solid #ccc;
|
||||||
padding: 5px 0 5px 10px;
|
padding: 5px 0 5px 10px;
|
||||||
|
|
21
i18n/de.json
21
i18n/de.json
|
@ -83,7 +83,7 @@
|
||||||
"Could not decrypt data (Wrong key?)":
|
"Could not decrypt data (Wrong key?)":
|
||||||
"Konnte Daten nicht entschlüsseln (Falscher Schlüssel?)",
|
"Konnte Daten nicht entschlüsseln (Falscher Schlüssel?)",
|
||||||
"Could not delete the paste, it was not stored in burn after reading mode.":
|
"Could not delete the paste, it was not stored in burn after reading mode.":
|
||||||
"Konnte den Text nicht löschen, er wurde nicht im Einmal-Modus gespeichert.",
|
"Konnte das Paste nicht löschen, es wurde nicht im Einmal-Modus gespeichert.",
|
||||||
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.":
|
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.":
|
||||||
"DIESER TEXT IST NUR FÜR DICH GEDACHT. Schließe das Fenster nicht, diese Nachricht kann nur einmal geöffnet werden.",
|
"DIESER TEXT IST NUR FÜR DICH GEDACHT. Schließe das Fenster nicht, diese Nachricht kann nur einmal geöffnet werden.",
|
||||||
"Could not decrypt comment; Wrong key?":
|
"Could not decrypt comment; Wrong key?":
|
||||||
|
@ -112,24 +112,25 @@
|
||||||
"Fehler auf dem Server oder keine Antwort vom Server",
|
"Fehler auf dem Server oder keine Antwort vom Server",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Konnte Kommentar nicht senden: %s",
|
"Konnte Kommentar nicht senden: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Please move your mouse for more entropy…":
|
||||||
"Sende Text (Bitte bewege Deine Maus um die Entropie zu erhöhen)...",
|
"Bitte bewege Deine Maus um die Entropie zu erhöhen…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Sende Text...",
|
"Sende Paste…",
|
||||||
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>":
|
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>":
|
||||||
"Dein Text ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke [Strg]+[c] um den Link zu kopieren)</span>",
|
"Dein Paste ist unter <a id=\"pasteurl\" href=\"%s\">%s</a> zu finden <span id=\"copyhint\">(Drücke [Strg]+[c] um den Link zu kopieren)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
"Lösche Daten",
|
"Lösche Daten",
|
||||||
"Could not create paste: %s":
|
"Could not create paste: %s":
|
||||||
"Konnte Text nicht erstellen: %s",
|
"Konnte Paste nicht erstellen: %s",
|
||||||
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)":
|
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)":
|
||||||
"Konnte Text nicht entschlüsseln: Der Schlüssel fehlt in der Adresse (Hast du eine Umleitung oder einen URL-Verkürzer benutzt, der Teile der Adresse entfernt?)",
|
"Konnte Paste nicht entschlüsseln: Der Schlüssel fehlt in der Adresse (Hast du eine Umleitung oder einen URL-Verkürzer benutzt, der Teile der Adresse entfernt?)",
|
||||||
"Format": "Format",
|
"Format": "Format",
|
||||||
"Plain Text": "Nur Text",
|
"Plain Text": "Nur Text",
|
||||||
"Source Code": "Quellcode",
|
"Source Code": "Quellcode",
|
||||||
"Markdown": "Markdown",
|
"Markdown": "Markdown",
|
||||||
"Download attachment": "Anhang herunterladen",
|
"Download attachment": "Anhang herunterladen",
|
||||||
"Cloned file attached.": "Kopierte Datei angehängt.",
|
"Cloned: '%s'": "Geklont: '%s'",
|
||||||
|
"The cloned file '%s' was attached to this paste.": "Die geklonte Datei '%s' wurde angehängt.",
|
||||||
"Attach a file": "Datei anhängen",
|
"Attach a file": "Datei anhängen",
|
||||||
"Remove attachment": "Anhang entfernen",
|
"Remove attachment": "Anhang entfernen",
|
||||||
"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.":
|
||||||
|
@ -146,6 +147,8 @@
|
||||||
"Enter password":
|
"Enter password":
|
||||||
"Passwort eingeben",
|
"Passwort eingeben",
|
||||||
"Loading…": "Lädt…",
|
"Loading…": "Lädt…",
|
||||||
|
"Decrypting paste…": "Entschlüssle Paste…",
|
||||||
|
"Preparing new paste…": "Bereite neues Paste vor…",
|
||||||
"In case this message never disappears please have a look at <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">this FAQ for information to troubleshoot</a>.":
|
"In case this message never disappears please have a look at <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">this FAQ for information to troubleshoot</a>.":
|
||||||
"Wenn diese Nachricht nicht mehr verschwindet, schau bitte in <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">die FAQ</a> (englisch), um zu sehen, wie der Fehler behoben werden kann.",
|
"Wenn diese Nachricht nicht mehr verschwindet, schau bitte in <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">die FAQ</a> (englisch), um zu sehen, wie der Fehler behoben werden kann.",
|
||||||
"Nothing to see… Try to enter some text.":
|
"Nothing to see… Try to enter some text.":
|
||||||
|
|
734
js/privatebin.js
734
js/privatebin.js
File diff suppressed because it is too large
Load diff
32
js/test.js
32
js/test.js
|
@ -27,42 +27,42 @@ describe('helper', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
jsc.property('returns an array with a number and a word', 'integer', function (number) {
|
jsc.property('returns an array with a number and a word', 'integer', function (number) {
|
||||||
var result = $.PrivateBin.helper.secondsToHuman(number);
|
var result = $.PrivateBin.Helper.secondsToHuman(number);
|
||||||
return Array.isArray(result) &&
|
return Array.isArray(result) &&
|
||||||
result.length === 2 &&
|
result.length === 2 &&
|
||||||
result[0] === parseInt(result[0], 10) &&
|
result[0] === parseInt(result[0], 10) &&
|
||||||
typeof result[1] === 'string';
|
typeof result[1] === 'string';
|
||||||
});
|
});
|
||||||
jsc.property('returns seconds on the first array position', 'integer 59', function (number) {
|
jsc.property('returns seconds on the first array position', 'integer 59', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[0] === number;
|
return $.PrivateBin.Helper.secondsToHuman(number)[0] === number;
|
||||||
});
|
});
|
||||||
jsc.property('returns seconds on the second array position', 'integer 59', function (number) {
|
jsc.property('returns seconds on the second array position', 'integer 59', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[1] === 'second';
|
return $.PrivateBin.Helper.secondsToHuman(number)[1] === 'second';
|
||||||
});
|
});
|
||||||
jsc.property('returns minutes on the first array position', 'integer 60 3599', function (number) {
|
jsc.property('returns minutes on the first array position', 'integer 60 3599', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[0] === Math.floor(number / 60);
|
return $.PrivateBin.Helper.secondsToHuman(number)[0] === Math.floor(number / 60);
|
||||||
});
|
});
|
||||||
jsc.property('returns minutes on the second array position', 'integer 60 3599', function (number) {
|
jsc.property('returns minutes on the second array position', 'integer 60 3599', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[1] === 'minute';
|
return $.PrivateBin.Helper.secondsToHuman(number)[1] === 'minute';
|
||||||
});
|
});
|
||||||
jsc.property('returns hours on the first array position', 'integer 3600 86399', function (number) {
|
jsc.property('returns hours on the first array position', 'integer 3600 86399', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[0] === Math.floor(number / (60 * 60));
|
return $.PrivateBin.Helper.secondsToHuman(number)[0] === Math.floor(number / (60 * 60));
|
||||||
});
|
});
|
||||||
jsc.property('returns hours on the second array position', 'integer 3600 86399', function (number) {
|
jsc.property('returns hours on the second array position', 'integer 3600 86399', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[1] === 'hour';
|
return $.PrivateBin.Helper.secondsToHuman(number)[1] === 'hour';
|
||||||
});
|
});
|
||||||
jsc.property('returns days on the first array position', 'integer 86400 5184000', function (number) {
|
jsc.property('returns days on the first array position', 'integer 86400 5184000', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[0] === Math.floor(number / (60 * 60 * 24));
|
return $.PrivateBin.Helper.secondsToHuman(number)[0] === Math.floor(number / (60 * 60 * 24));
|
||||||
});
|
});
|
||||||
jsc.property('returns days on the second array position', 'integer 86400 5184000', function (number) {
|
jsc.property('returns days on the second array position', 'integer 86400 5184000', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[1] === 'day';
|
return $.PrivateBin.Helper.secondsToHuman(number)[1] === 'day';
|
||||||
});
|
});
|
||||||
// max safe integer as per http://ecma262-5.com/ELS5_HTML.htm#Section_8.5
|
// max safe integer as per http://ecma262-5.com/ELS5_HTML.htm#Section_8.5
|
||||||
jsc.property('returns months on the first array position', 'integer 5184000 9007199254740991', function (number) {
|
jsc.property('returns months on the first array position', 'integer 5184000 9007199254740991', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[0] === Math.floor(number / (60 * 60 * 24 * 30));
|
return $.PrivateBin.Helper.secondsToHuman(number)[0] === Math.floor(number / (60 * 60 * 24 * 30));
|
||||||
});
|
});
|
||||||
jsc.property('returns months on the second array position', 'integer 5184000 9007199254740991', function (number) {
|
jsc.property('returns months on the second array position', 'integer 5184000 9007199254740991', function (number) {
|
||||||
return $.PrivateBin.helper.secondsToHuman(number)[1] === 'month';
|
return $.PrivateBin.Helper.secondsToHuman(number)[1] === 'month';
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ describe('helper', function () {
|
||||||
function (schema, address, query, fragment) {
|
function (schema, address, query, fragment) {
|
||||||
var expected = schema.join('') + '://' + address.join('') + '/',
|
var expected = schema.join('') + '://' + address.join('') + '/',
|
||||||
clean = jsdom('', {url: expected + '?' + query.join('') + '#' + fragment}),
|
clean = jsdom('', {url: expected + '?' + query.join('') + '#' + fragment}),
|
||||||
result = $.PrivateBin.helper.scriptLocation();
|
result = $.PrivateBin.Helper.scriptLocation();
|
||||||
clean();
|
clean();
|
||||||
return expected === result;
|
return expected === result;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ describe('helper', function () {
|
||||||
url: schema.join('') + '://' + address.join('') +
|
url: schema.join('') + '://' + address.join('') +
|
||||||
'/?' + queryString + '#' + fragment
|
'/?' + queryString + '#' + fragment
|
||||||
}),
|
}),
|
||||||
result = $.PrivateBin.helper.pasteId();
|
result = $.PrivateBin.Helper.pasteId();
|
||||||
clean();
|
clean();
|
||||||
return queryString === result;
|
return queryString === result;
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ describe('helper', function () {
|
||||||
url: schema.join('') + '://' + address.join('') +
|
url: schema.join('') + '://' + address.join('') +
|
||||||
'/?' + query.join('') + '#' + fragmentString
|
'/?' + query.join('') + '#' + fragmentString
|
||||||
}),
|
}),
|
||||||
result = $.PrivateBin.helper.pageKey();
|
result = $.PrivateBin.Modal.getPasteKey();
|
||||||
clean();
|
clean();
|
||||||
return fragmentString === result;
|
return fragmentString === result;
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ describe('helper', function () {
|
||||||
url: schema.join('') + '://' + address.join('') + '/?' +
|
url: schema.join('') + '://' + address.join('') + '/?' +
|
||||||
query.join('') + '#' + fragmentString + '&' + trail.join('')
|
query.join('') + '#' + fragmentString + '&' + trail.join('')
|
||||||
}),
|
}),
|
||||||
result = $.PrivateBin.helper.pageKey();
|
result = $.PrivateBin.Modal.getPasteKey();
|
||||||
clean();
|
clean();
|
||||||
return fragmentString === result;
|
return fragmentString === result;
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ describe('helper', function () {
|
||||||
'removes all HTML entities from any given string',
|
'removes all HTML entities from any given string',
|
||||||
'string',
|
'string',
|
||||||
function (string) {
|
function (string) {
|
||||||
var result = $.PrivateBin.helper.htmlEntities(string);
|
var result = $.PrivateBin.Helper.htmlEntities(string);
|
||||||
return !(/[<>"'`=\/]/.test(result)) && !(string.indexOf('&') > -1 && !(/&/.test(result)));
|
return !(/[<>"'`=\/]/.test(result)) && !(string.indexOf('&') > -1 && !(/&/.test(result)));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -121,7 +121,7 @@ endif;
|
||||||
<div id="navbar" class="navbar-collapse collapse">
|
<div id="navbar" class="navbar-collapse collapse">
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li id="loadingindicator" class="navbar-text hidden">
|
<li id="loadingindicator" class="navbar-text hidden">
|
||||||
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span>
|
<span class="glyphicon glyphicon-time" aria-hidden="true"></span>
|
||||||
<span><?php echo I18n::_('Loading…'), PHP_EOL; ?></span>
|
<span><?php echo I18n::_('Loading…'), PHP_EOL; ?></span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -284,6 +284,7 @@ if ($FILEUPLOAD):
|
||||||
<input type="file" id="file" name="file" />
|
<input type="file" id="file" name="file" />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="customattachment" class="hidden"></li>
|
||||||
<li>
|
<li>
|
||||||
<a id="fileremovebutton" href="#">
|
<a id="fileremovebutton" href="#">
|
||||||
<?php echo I18n::_('Remove attachment'), PHP_EOL; ?>
|
<?php echo I18n::_('Remove attachment'), PHP_EOL; ?>
|
||||||
|
@ -377,32 +378,31 @@ endif;
|
||||||
if (strlen($NOTICE)):
|
if (strlen($NOTICE)):
|
||||||
?>
|
?>
|
||||||
<div role="alert" class="alert alert-info">
|
<div role="alert" class="alert alert-info">
|
||||||
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> <?php echo htmlspecialchars($NOTICE), PHP_EOL; ?>
|
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span><?php echo htmlspecialchars($NOTICE), PHP_EOL; ?>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<div id="remainingtime" role="alert" class="hidden alert alert-info">
|
<div id="remainingtime" role="alert" class="hidden alert alert-info">
|
||||||
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
|
<span class="glyphicon glyphicon-fire" aria-hidden="true"></span><span></span>
|
||||||
<span></span>
|
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
if ($FILEUPLOAD):
|
if ($FILEUPLOAD):
|
||||||
?>
|
?>
|
||||||
<div id="attachment" role="alert" class="hidden alert alert-info">
|
<div id="attachment" role="alert" class="hidden alert alert-info">
|
||||||
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> <a><?php echo I18n::_('Download attachment'); ?></a> <span id="clonedfile" class="hidden"><?php echo I18n::_('Cloned file attached.'); ?></span>
|
<span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span><a><?php echo I18n::_('Download attachment'); ?></a></span>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<div id="status" role="alert" class="alert alert-success <?php echo empty($STATUS) ? 'hidden' : '' ?>">
|
<div id="status" role="alert" class="alert alert-info <?php echo empty($STATUS) ? 'hidden' : '' ?>">
|
||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
|
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
|
||||||
<?php echo htmlspecialchars($STATUS), PHP_EOL; ?>
|
<span><?php echo htmlspecialchars($STATUS), PHP_EOL; ?></span>
|
||||||
</div>
|
</div>
|
||||||
<div id="errormessage" role="alert" class="<?php echo empty($ERROR) ? 'hidden' : '' ?> alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span><span> <?php echo htmlspecialchars($ERROR); ?></span></div>
|
<div id="errormessage" role="alert" class="<?php echo empty($ERROR) ? 'hidden' : '' ?> alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span><span><?php echo htmlspecialchars($ERROR); ?></span></div>
|
||||||
<noscript><div id="noscript" role="alert" class="nonworking alert alert-<?php echo $isDark ? 'error' : 'warning'; ?>"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <?php echo I18n::_('JavaScript is required for %s to work.<br />Sorry for the inconvenience.', I18n::_($NAME)); ?></div></noscript>
|
<noscript><div id="noscript" role="alert" class="nonworking alert alert-<?php echo $isDark ? 'error' : 'warning'; ?>"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span><?php echo I18n::_('JavaScript is required for %s to work.<br />Sorry for the inconvenience.', I18n::_($NAME)); ?></div></noscript>
|
||||||
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> <?php echo I18n::_('%s requires a modern browser to work.', I18n::_($NAME)); ?></div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span><?php echo I18n::_('%s requires a modern browser to work.', I18n::_($NAME)); ?></div>
|
||||||
<div id="ienotice" role="alert" class="hidden alert alert-<?php echo $isDark ? 'error' : 'warning'; ?>"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span> <?php echo I18n::_('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:'), PHP_EOL; ?>
|
<div id="ienotice" role="alert" class="hidden alert alert-<?php echo $isDark ? 'error' : 'warning'; ?>"><span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span><?php echo I18n::_('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:'), PHP_EOL; ?>
|
||||||
<a href="https://www.mozilla.org/firefox/">Firefox</a>,
|
<a href="https://www.mozilla.org/firefox/">Firefox</a>,
|
||||||
<a href="https://www.opera.com/">Opera</a>,
|
<a href="https://www.opera.com/">Opera</a>,
|
||||||
<a href="https://www.google.com/chrome">Chrome</a>,
|
<a href="https://www.google.com/chrome">Chrome</a>,
|
||||||
|
|
Loading…
Reference in a new issue