Merge branch 'kyodev-patch-1'
This commit is contained in:
commit
eebac929c5
18
.eslintrc
18
.eslintrc
@ -15,7 +15,9 @@ globals:
|
|||||||
# http://eslint.org/docs/rules/
|
# http://eslint.org/docs/rules/
|
||||||
rules:
|
rules:
|
||||||
# Possible Errors
|
# Possible Errors
|
||||||
comma-dangle: [2, never]
|
comma-dangle:
|
||||||
|
- error
|
||||||
|
- never
|
||||||
no-cond-assign: 2
|
no-cond-assign: 2
|
||||||
no-console: 0
|
no-console: 0
|
||||||
no-constant-condition: 2
|
no-constant-condition: 2
|
||||||
@ -31,7 +33,9 @@ rules:
|
|||||||
no-extra-parens: 0
|
no-extra-parens: 0
|
||||||
no-extra-semi: 2
|
no-extra-semi: 2
|
||||||
no-func-assign: 2
|
no-func-assign: 2
|
||||||
no-inner-declarations: [2, functions]
|
no-inner-declarations:
|
||||||
|
- error
|
||||||
|
- functions
|
||||||
no-invalid-regexp: 2
|
no-invalid-regexp: 2
|
||||||
no-irregular-whitespace: 2
|
no-irregular-whitespace: 2
|
||||||
no-negated-in-lhs: 2
|
no-negated-in-lhs: 2
|
||||||
@ -47,7 +51,9 @@ rules:
|
|||||||
# Best Practices
|
# Best Practices
|
||||||
accessor-pairs: 2
|
accessor-pairs: 2
|
||||||
block-scoped-var: 0
|
block-scoped-var: 0
|
||||||
complexity: [2, 6]
|
complexity:
|
||||||
|
- error
|
||||||
|
- 20
|
||||||
consistent-return: 0
|
consistent-return: 0
|
||||||
curly: 0
|
curly: 0
|
||||||
default-case: 0
|
default-case: 0
|
||||||
@ -99,7 +105,7 @@ rules:
|
|||||||
no-with: 2
|
no-with: 2
|
||||||
radix: 2
|
radix: 2
|
||||||
vars-on-top: 0
|
vars-on-top: 0
|
||||||
wrap-iife: 2
|
wrap-iife: 0
|
||||||
yoda: 0
|
yoda: 0
|
||||||
|
|
||||||
# Strict
|
# Strict
|
||||||
@ -152,7 +158,9 @@ rules:
|
|||||||
max-len: 0
|
max-len: 0
|
||||||
max-nested-callbacks: 0
|
max-nested-callbacks: 0
|
||||||
max-params: 0
|
max-params: 0
|
||||||
max-statements: [2, 30]
|
max-statements:
|
||||||
|
- error
|
||||||
|
- 60
|
||||||
new-cap: 0
|
new-cap: 0
|
||||||
new-parens: 0
|
new-parens: 0
|
||||||
newline-after-var: 0
|
newline-after-var: 0
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,6 +1,7 @@
|
|||||||
# Ignore server files for safety
|
# Ignore server files for safety
|
||||||
.htaccess
|
.htaccess
|
||||||
.htpasswd
|
.htpasswd
|
||||||
|
cfg/conf.ini
|
||||||
|
|
||||||
# Ignore data/
|
# Ignore data/
|
||||||
data/
|
data/
|
||||||
|
@ -9,7 +9,7 @@ before_script:
|
|||||||
- composer install -n
|
- composer install -n
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cd tst && phpunit
|
- cd tst && ../vendor/bin/phpunit
|
||||||
|
|
||||||
after_script:
|
after_script:
|
||||||
- cd ..
|
- cd ..
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
# PrivateBin version history
|
# PrivateBin version history
|
||||||
|
|
||||||
* **next (not yet released)**
|
* **next (not yet released)**
|
||||||
* ADDED: Translations for Spanish, Occitan and Norwegian
|
* ADDED: Translations for Spanish, Occitan, Norwegian and Portuguese
|
||||||
* ADDED: Option in configuration to change the default "PrivateBin" title of the site
|
* ADDED: Option in configuration to change the default "PrivateBin" title of the site
|
||||||
|
* CHANGED: Minimum required PHP version is 5.4 (#186)
|
||||||
|
* CHANGED: Shipped .htaccess files were updated for Apache 2.4 (#192)
|
||||||
* CHANGED: Cleanup of bootstrap template variants and moved icons to `img` directory
|
* CHANGED: Cleanup of bootstrap template variants and moved icons to `img` directory
|
||||||
* **1.1 (2016-12-26)**
|
* **1.1 (2016-12-26)**
|
||||||
* ADDED: Translations for Italian and Russian
|
* ADDED: Translations for Italian and Russian
|
||||||
|
@ -35,3 +35,4 @@ Sébastien Sauvage - original idea and main developer
|
|||||||
* Alfredo Fabián Altamirano Tena - Spanish
|
* Alfredo Fabián Altamirano Tena - Spanish
|
||||||
* Quent-in - Occitan
|
* Quent-in - Occitan
|
||||||
* idarlund - Norwegian
|
* idarlund - Norwegian
|
||||||
|
* Tulio Leao - Portuguese
|
||||||
|
1
cfg/.gitignore
vendored
1
cfg/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
/conf.ini
|
|
@ -1,2 +1 @@
|
|||||||
Allow from none
|
Require all denied
|
||||||
Deny from all
|
|
||||||
|
@ -24,7 +24,8 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"codacy/coverage": "dev-master",
|
"codacy/coverage": "dev-master",
|
||||||
"codeclimate/php-test-reporter": "dev-master"
|
"codeclimate/php-test-reporter": "dev-master",
|
||||||
|
"phpunit/phpunit": "^4.6 || ^5.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@ -17,6 +17,10 @@ body.navbar-spacing {
|
|||||||
padding-top: 70px;
|
padding-top: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.loading {
|
||||||
|
cursor: wait;
|
||||||
|
}
|
||||||
|
|
||||||
.buttondisabled {
|
.buttondisabled {
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
}
|
}
|
||||||
@ -102,6 +106,12 @@ body.navbar-spacing {
|
|||||||
border-left: 1px solid #ccc;
|
border-left: 1px solid #ccc;
|
||||||
padding: 5px 0 5px 10px;
|
padding: 5px 0 5px 10px;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
|
transition: background-color 0.75s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment.highlight {
|
||||||
|
background-color: #ffdd86;
|
||||||
|
transition: background-color 0.2s ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
footer h4 {
|
footer h4 {
|
||||||
|
39
i18n/de.json
39
i18n/de.json
@ -83,25 +83,25 @@
|
|||||||
"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. Schliesse 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?":
|
||||||
"Konnte Kommentar nicht entschlüsseln; Falscher Schlüssel?",
|
"Konnte Kommentar nicht entschlüsseln; Falscher Schlüssel?",
|
||||||
"Reply":
|
"Reply":
|
||||||
"Antworten",
|
"Antworten",
|
||||||
"Anonymous":
|
"Anonymous":
|
||||||
"Anonym",
|
"Anonym",
|
||||||
"Anonymous avatar (Vizhash of the IP address)":
|
"Avatar generated from IP address":
|
||||||
"Anonymer Avatar (Vizhash der IP-Addresse)",
|
"Avatar (generiert aus der IP-Adresse)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Kommentar hinzufügen",
|
"Kommentar hinzufügen",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Optionales Pseudonym...",
|
"Optionales Pseudonym…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Kommentar absenden",
|
"Kommentar absenden",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Sende Kommentar...",
|
"Sende Kommentar…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Kommentar gesendet.",
|
"Kommentar gesendet.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -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,10 @@
|
|||||||
"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.",
|
||||||
|
"+++ no paste text +++":
|
||||||
|
"+++ kein Paste-Text +++"
|
||||||
}
|
}
|
||||||
|
16
i18n/es.json
16
i18n/es.json
@ -96,12 +96,12 @@
|
|||||||
"Avatar anónimo (Vizhash de la dirección IP)",
|
"Avatar anónimo (Vizhash de la dirección IP)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Añadir comentario",
|
"Añadir comentario",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Seudónimo opcional...",
|
"Seudónimo opcional…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Publicar comentario",
|
"Publicar comentario",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Enviando comentario...",
|
"Enviando comentario…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Comentario publicado.",
|
"Comentario publicado.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"Error del servidor o el servidor no responde",
|
"Error del servidor o el servidor no responde",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"No fue posible publicar comentario: %s",
|
"No fue posible publicar comentario: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Enviando texto (Por favor, mueva el ratón para mayor entropía)...",
|
"Enviando texto (Por favor, mueva el ratón para mayor entropía)…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Enviando texto...",
|
"Enviando texto…",
|
||||||
"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>":
|
||||||
"Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione [Ctrl]+[c] para copiar)</span>",
|
"Su texto está en <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Presione [Ctrl]+[c] para copiar)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
24
i18n/fr.json
24
i18n/fr.json
@ -96,12 +96,12 @@
|
|||||||
"Avatar anonyme (Vizhash de l'adresse IP)",
|
"Avatar anonyme (Vizhash de l'adresse IP)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Ajouter un commentaire",
|
"Ajouter un commentaire",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Pseudonyme optionnel...",
|
"Pseudonyme optionnel…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Poster le commentaire",
|
"Poster le commentaire",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Envoi du commentaire...",
|
"Envoi du commentaire…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Commentaire posté.",
|
"Commentaire posté.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"Le serveur ne répond pas ou a rencontré une erreur",
|
"Le serveur ne répond pas ou a rencontré une erreur",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Impossible de poster le commentaire : %s",
|
"Impossible de poster le commentaire : %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Envoi du paste (Merci de bouger votre souris pour plus d'entropie)...",
|
"Envoi du paste (Merci de bouger votre souris pour plus d'entropie)…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Envoi du paste...",
|
"Envoi du 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>":
|
||||||
"Votre paste est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur [Ctrl]+[c] pour copier)</span>",
|
"Votre paste est disponible à l'adresse <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Appuyez sur [Ctrl]+[c] pour copier)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
@ -149,12 +149,12 @@
|
|||||||
"Editor": "Éditer",
|
"Editor": "Éditer",
|
||||||
"Preview": "Prévisualiser",
|
"Preview": "Prévisualiser",
|
||||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
|
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
|
||||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
|
"%s requiert que le PATH se termine dans un \"%s\". Veuillez mettre à jour le PATH dans votre index.php.",
|
||||||
"Decrypt":
|
"Decrypt":
|
||||||
"Decrypt",
|
"Déchiffrer",
|
||||||
"Enter password":
|
"Enter password":
|
||||||
"Entrez le mot de passe",
|
"Entrez le mot de passe",
|
||||||
"Loading…": "Loading…",
|
"Loading…": "Chargement…",
|
||||||
"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>.":
|
||||||
"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 English)."
|
"Si ce message ne disparaîssait pas, jetez un oeil à <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">cette FAQ pour des idées de résolution</a> (en Anglais)."
|
||||||
}
|
}
|
||||||
|
16
i18n/it.json
16
i18n/it.json
@ -96,12 +96,12 @@
|
|||||||
"Avatar Anonino (Vizhash dell'indirizzo IP)",
|
"Avatar Anonino (Vizhash dell'indirizzo IP)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Aggiungi un commento",
|
"Aggiungi un commento",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Nickname opzionale...",
|
"Nickname opzionale…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Invia commento",
|
"Invia commento",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Commento in fase di invio...",
|
"Commento in fase di invio…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Commento inviato.",
|
"Commento inviato.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"errore o mancata risposta dal server",
|
"errore o mancata risposta dal server",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Impossibile inviare il commento: %s",
|
"Impossibile inviare il commento: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Invio messaggio (Muovi il mouse in modo casuale, per generare maggior entropia)...",
|
"Invio messaggio (Muovi il mouse in modo casuale, per generare maggior entropia)…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Messaggio in fase di invio...",
|
"Messaggio in fase di invio…",
|
||||||
"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>":
|
||||||
"Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">([CTRL | CMD]+[C] per copiare il link)</span>",
|
"Il tuo messaggio è qui: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">([CTRL | CMD]+[C] per copiare il link)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
16
i18n/no.json
16
i18n/no.json
@ -96,12 +96,12 @@
|
|||||||
"Anonym avatar (Vizhash av IP adressen)",
|
"Anonym avatar (Vizhash av IP adressen)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Legg til kommentar",
|
"Legg til kommentar",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Valgfritt kallenavn...",
|
"Valgfritt kallenavn…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Send kommentar",
|
"Send kommentar",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Sender Kommentar...",
|
"Sender Kommentar…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Kommentar sendt.",
|
"Kommentar sendt.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"server feilet eller svarer ikke",
|
"server feilet eller svarer ikke",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Kunne ikke sende kommentar: %s",
|
"Kunne ikke sende kommentar: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Sender innlegg (Flytt musen for mere entropi)...",
|
"Sender innlegg (Flytt musen for mere entropi)…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Sender innlegg...",
|
"Sender innlegg…",
|
||||||
"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>":
|
||||||
"Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk [Ctrl]+[c] for å kopiere)</span>",
|
"Ditt innlegg er <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Trykk [Ctrl]+[c] for å kopiere)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
16
i18n/oc.json
16
i18n/oc.json
@ -96,12 +96,12 @@
|
|||||||
"Avatar anonime (Vizhash de l'adreça IP)",
|
"Avatar anonime (Vizhash de l'adreça IP)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Apondre un comentari",
|
"Apondre un comentari",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Escais opcional...",
|
"Escais opcional…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Mandar lo comentari",
|
"Mandar lo comentari",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Mandadís del comentari...",
|
"Mandadís del comentari…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Comentari mandat.",
|
"Comentari mandat.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"Lo servidor respond pas o a rencontrat una error",
|
"Lo servidor respond pas o a rencontrat una error",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Impossible de mandar lo comentari : %s",
|
"Impossible de mandar lo comentari : %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Mandadís del tèxte (Mercés de bolegar vòstra mirga per mai entropia)...",
|
"Mandadís del tèxte (Mercés de bolegar vòstra mirga per mai entropia)…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Mandadís del tèxte...",
|
"Mandadís del tèxte…",
|
||||||
"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>":
|
||||||
"Vòstre tèxte es disponible a l'adreça <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Picatz sus [Ctrl]+[c] per copiar)</span>",
|
"Vòstre tèxte es disponible a l'adreça <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Picatz sus [Ctrl]+[c] per copiar)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
16
i18n/pl.json
16
i18n/pl.json
@ -96,12 +96,12 @@
|
|||||||
"Anonimowy avatar (Vizhash z adresu IP)",
|
"Anonimowy avatar (Vizhash z adresu IP)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Dodaj komentarz",
|
"Dodaj komentarz",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Opcjonalny nick...",
|
"Opcjonalny nick…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Wyślij komentarz",
|
"Wyślij komentarz",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Wysyłanie komentarza...",
|
"Wysyłanie komentarza…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Wysłano komentarz.",
|
"Wysłano komentarz.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"bląd serwera lub brak odpowiedzi",
|
"bląd serwera lub brak odpowiedzi",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Nie udało się wysłać komentarza: %s",
|
"Nie udało się wysłać komentarza: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Wysyłanie wklejki (proszę poruszać myszą aby uzyskać większą entropię)...",
|
"Wysyłanie wklejki (proszę poruszać myszą aby uzyskać większą entropię)…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Wysyłanie wklejki...",
|
"Wysyłanie wklejki…",
|
||||||
"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>":
|
||||||
"Twoja wklejka to <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(wciśnij [Ctrl]+[c] aby skopiować)</span>",
|
"Twoja wklejka to <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(wciśnij [Ctrl]+[c] aby skopiować)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
151
i18n/pt.json
Normal file
151
i18n/pt.json
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
{
|
||||||
|
"PrivateBin": "PrivateBin",
|
||||||
|
"%s is a minimalist, open source 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://privatebin.info/\">project page</a>.":
|
||||||
|
"%s é um serviço minimalista e de código aberto do tipo \"pastebin\", em que o servidor tem zero conhecimento dos dados copiados. Os dados são cifrados e decifrados <i>no navegador</i> usando 256 bits AES. Mais informações na <a href=\"https://privatebin.info/\">página do projeto</a>.",
|
||||||
|
"Because ignorance is bliss":
|
||||||
|
"Porque a ignorância é uma benção",
|
||||||
|
"en": "pt",
|
||||||
|
"Paste does not exist, has expired or has been deleted.":
|
||||||
|
"A cópia não existe, expirou ou já foi excluída.",
|
||||||
|
"%s requires php 5.3.0 or above to work. Sorry.":
|
||||||
|
"%s requer php 5.3.0 ou superior para funcionar. Desculpa.",
|
||||||
|
"%s requires configuration section [%s] to be present in configuration file.":
|
||||||
|
"%s requer que a seção de configuração [% s] esteja no arquivo de configuração.",
|
||||||
|
"Please wait %d seconds between each post.":
|
||||||
|
"Por favor espere %d segundos entre cada publicação.",
|
||||||
|
"Paste is limited to %s of encrypted data.":
|
||||||
|
"A cópia está limitada a %s de dados cifrados.",
|
||||||
|
"Invalid data.":
|
||||||
|
"Dados inválidos.",
|
||||||
|
"You are unlucky. Try again.":
|
||||||
|
"Você é azarado. Tente novamente",
|
||||||
|
"Error saving comment. Sorry.":
|
||||||
|
"Erro ao salvar comentário. Desculpa.",
|
||||||
|
"Error saving paste. Sorry.":
|
||||||
|
"Erro ao salvar cópia. Desculpa.",
|
||||||
|
"Invalid paste ID.":
|
||||||
|
"ID de cópia inválido.",
|
||||||
|
"Paste is not of burn-after-reading type.":
|
||||||
|
"Cópia não é do tipo \"queime após ler\".",
|
||||||
|
"Wrong deletion token. Paste was not deleted.":
|
||||||
|
"Token de remoção inválido. A cópia não foi excluída.",
|
||||||
|
"Paste was properly deleted.":
|
||||||
|
"A cópia foi devidamente excluída.",
|
||||||
|
"JavaScript is required for %s to work.<br />Sorry for the inconvenience.":
|
||||||
|
"JavaScript é necessário para que %s funcione.<br />Pedimos desculpas pela inconveniência.",
|
||||||
|
"%s requires a modern browser to work.":
|
||||||
|
"%s requer um navegador moderno para funcionar.",
|
||||||
|
"Still using Internet Explorer? Do yourself a favor, switch to a modern browser:":
|
||||||
|
"Ainda usando Internet Explorer? Faça-se um favor, mude para um navegador moderno:",
|
||||||
|
"New":
|
||||||
|
"Novo",
|
||||||
|
"Send":
|
||||||
|
"Enviar",
|
||||||
|
"Clone":
|
||||||
|
"Clonar",
|
||||||
|
"Raw text":
|
||||||
|
"Texto sem formato",
|
||||||
|
"Expires":
|
||||||
|
"Expirar em",
|
||||||
|
"Burn after reading":
|
||||||
|
"Queime após ler",
|
||||||
|
"Open discussion":
|
||||||
|
"Discussão aberta",
|
||||||
|
"Password (recommended)":
|
||||||
|
"Senha (recomendada)",
|
||||||
|
"Discussion":
|
||||||
|
"Discussão",
|
||||||
|
"Toggle navigation":
|
||||||
|
"Mudar navegação",
|
||||||
|
"%d seconds": ["%d segundo", "%d segundos"],
|
||||||
|
"%d minutes": ["%d minuto", "%d minutos"],
|
||||||
|
"%d hours": ["%d hora", "%d horas"],
|
||||||
|
"%d days": ["%d dia", "%d dias"],
|
||||||
|
"%d weeks": ["%d semana", "%d semanas"],
|
||||||
|
"%d months": ["%d mês", "%d meses"],
|
||||||
|
"%d years": ["%d ano", "%d anos"],
|
||||||
|
"Never":
|
||||||
|
"Nunca",
|
||||||
|
"Note: This is a test service: Data may be deleted anytime. Kittens will die if you abuse this service.":
|
||||||
|
"Nota: Este é um serviço de teste. Dados podem ser perdidos a qualquer momento. Gatinhos morrerão se você abusar desse serviço.",
|
||||||
|
"This document will expire in %d seconds.":
|
||||||
|
["Este documento irá expirar em um segundo.", "Este documento irá expirar em %d segundos."],
|
||||||
|
"This document will expire in %d minutes.":
|
||||||
|
["Este documento irá expirar em um minuto.", "Este documento irá expirar em %d minutos."],
|
||||||
|
"This document will expire in %d hours.":
|
||||||
|
["Este documento irá expirar em uma hora.", "Este documento irá expirar em %d horas."],
|
||||||
|
"This document will expire in %d days.":
|
||||||
|
["Este documento irá expirar em um dia.", "Este documento irá expirar em %d dias."],
|
||||||
|
"This document will expire in %d months.":
|
||||||
|
["Este documento irá expirar em um mês.", "Este documento irá expirar em %d meses."],
|
||||||
|
"Please enter the password for this paste:":
|
||||||
|
"Por favor, digite a senha para essa cópia:",
|
||||||
|
"Could not decrypt data (Wrong key?)":
|
||||||
|
"Não foi possível decifrar os dados (Chave errada?)",
|
||||||
|
"Could not delete the paste, it was not stored in burn after reading mode.":
|
||||||
|
"Não foi possível excluir a cópia, ela não foi salva no modo de \"queime após ler\".",
|
||||||
|
"FOR YOUR EYES ONLY. Don't close this window, this message can't be displayed again.":
|
||||||
|
"APENAS PARA SEUS OLHOS. Não feche essa janela, essa mensagem não pode ser exibida novamente.",
|
||||||
|
"Could not decrypt comment; Wrong key?":
|
||||||
|
"Não foi possível decifrar o comentário; Chave errada?",
|
||||||
|
"Reply":
|
||||||
|
"Responder",
|
||||||
|
"Anonymous":
|
||||||
|
"Anônimo",
|
||||||
|
"Avatar generated from IP address":
|
||||||
|
"Avatar (do endereço IP)",
|
||||||
|
"Add comment":
|
||||||
|
"Adicionar comentário",
|
||||||
|
"Optional nickname…":
|
||||||
|
"Apelido opcional…",
|
||||||
|
"Post comment":
|
||||||
|
"Publicar comentário",
|
||||||
|
"Sending comment…":
|
||||||
|
"Enviando comentário…",
|
||||||
|
"Comment posted.":
|
||||||
|
"Comentário publicado.",
|
||||||
|
"Could not refresh display: %s":
|
||||||
|
"Não foi possível atualizar a tela: %s",
|
||||||
|
"unknown status":
|
||||||
|
"Estado desconhecido",
|
||||||
|
"server error or not responding":
|
||||||
|
"Servidor em erro ou não responsivo",
|
||||||
|
"Could not post comment: %s":
|
||||||
|
"Não foi possível publicar o comentário: %s",
|
||||||
|
"Please move your mouse for more entropy…":
|
||||||
|
"Por favor, mova o mouse para maior entropia…",
|
||||||
|
"Sending paste…":
|
||||||
|
"Enviando cópia…",
|
||||||
|
"Your paste is <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Hit [Ctrl]+[c] to copy)</span>":
|
||||||
|
"Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione [Ctrl]+[c] para copiar)</span>",
|
||||||
|
"Delete data":
|
||||||
|
"Excluir dados",
|
||||||
|
"Could not create paste: %s":
|
||||||
|
"Não foi possível criar cópia: %s",
|
||||||
|
"Cannot decrypt paste: Decryption key missing in URL (Did you use a redirector or an URL shortener which strips part of the URL?)":
|
||||||
|
"Não foi possível decifrar a cópia: chave de decriptografia ausente na URL (Você utilizou um redirecionador ou encurtador de URL que removeu parte dela?)",
|
||||||
|
"Format": "Formato",
|
||||||
|
"Plain Text": "Texto sem formato",
|
||||||
|
"Source Code": "Código fonte",
|
||||||
|
"Markdown": "Markdown",
|
||||||
|
"Download attachment": "Baixar anexo",
|
||||||
|
"Cloned: '%s'": "Clonado: '%s'",
|
||||||
|
"Attach a file": "Anexar um arquivo",
|
||||||
|
"Remove attachment": "Remover anexo",
|
||||||
|
"Your browser does not support uploading encrypted files. Please use a newer browser.":
|
||||||
|
"Seu navegador não permite subir arquivos cifrados. Por favor, utilize um navegador mais recente.",
|
||||||
|
"Invalid attachment.": "Anexo inválido.",
|
||||||
|
"Options": "Opções",
|
||||||
|
"Shorten URL": "Encurtar URL",
|
||||||
|
"Editor": "Editor",
|
||||||
|
"Preview": "Visualizar",
|
||||||
|
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
|
||||||
|
"%s requer que o PATH termine em \"%s\". Por favor, atualize o PATH em seu index.php.",
|
||||||
|
"Decrypt":
|
||||||
|
"Decifrar",
|
||||||
|
"Enter password":
|
||||||
|
"Digite a senha",
|
||||||
|
"Loading…": "Carregando…",
|
||||||
|
"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>.":
|
||||||
|
"Caso essa mensagem nunca desapareça, por favor veja <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">este FAQ para saber como resolver os problemas</a>."
|
||||||
|
}
|
18
i18n/ru.json
18
i18n/ru.json
@ -96,12 +96,12 @@
|
|||||||
"Анонимный аватар (Vizhash IP адреса)",
|
"Анонимный аватар (Vizhash IP адреса)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Добавить комментарий",
|
"Добавить комментарий",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Опциональный никнейм...",
|
"Опциональный никнейм…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Отправить комментарий",
|
"Отправить комментарий",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Отправка комментария...",
|
"Отправка комментария…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Комментарий опубликован.",
|
"Комментарий опубликован.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"ошибка сервера или нет ответа",
|
"ошибка сервера или нет ответа",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Не удалось опубликовать комментарий: %s",
|
"Не удалось опубликовать комментарий: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Отправка записи (Пожалуйста двигайте мышкой для большей энтропии)...",
|
"Отправка записи (Пожалуйста двигайте мышкой для большей энтропии)…",
|
||||||
"Sending paste...":
|
"Sending 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>":
|
||||||
"Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите [Ctrl]+[c] чтобы скопировать ссылку)</span>",
|
"Ссылка на запись <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Нажмите [Ctrl]+[c] чтобы скопировать ссылку)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
@ -155,5 +155,5 @@
|
|||||||
"Enter password":
|
"Enter password":
|
||||||
"Введите пароль",
|
"Введите пароль",
|
||||||
"Uploading paste… Please wait.":
|
"Uploading paste… Please wait.":
|
||||||
"Отправка записи... Пожалуйста подождите."
|
"Отправка записи… Пожалуйста подождите."
|
||||||
}
|
}
|
||||||
|
14
i18n/sl.json
14
i18n/sl.json
@ -96,12 +96,12 @@
|
|||||||
"Anonimen avatar (Vizhash IP naslova)",
|
"Anonimen avatar (Vizhash IP naslova)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Dodaj komentar",
|
"Dodaj komentar",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Uporabniško ime (lahko izpustiš)",
|
"Uporabniško ime (lahko izpustiš)",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Objavi komentar",
|
"Objavi komentar",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Pošiljam komentar ...",
|
"Pošiljam komentar …",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Komentar poslan.",
|
"Komentar poslan.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"napaka na strežniku, ali pa se strežnik ne odziva",
|
"napaka na strežniku, ali pa se strežnik ne odziva",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Komentarja ni bilo mogoče objaviti : %s",
|
"Komentarja ni bilo mogoče objaviti : %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"Pošiljam prilepek (prosim premakni svojo miško za več entropije) ...",
|
"Pošiljam prilepek (prosim premakni svojo miško za več entropije) …",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Pošiljam prilepek...",
|
"Pošiljam prilepek…",
|
||||||
"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>":
|
||||||
"Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni [Ctrl]+[c] ali [Cmd] + [c] in skopiraj)</span>",
|
"Tvoj prilepek je dostopen na naslovu: <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pritisni [Ctrl]+[c] ali [Cmd] + [c] in skopiraj)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
30
i18n/zh.json
30
i18n/zh.json
@ -96,12 +96,12 @@
|
|||||||
"匿名头像 (由IP地址生成Vizhash)",
|
"匿名头像 (由IP地址生成Vizhash)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"添加评论",
|
"添加评论",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"可选昵称...",
|
"可选昵称…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"评论",
|
"评论",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"评论发送中...",
|
"评论发送中…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"评论已发送。",
|
"评论已发送。",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
@ -112,10 +112,10 @@
|
|||||||
"服务器错误或无回应",
|
"服务器错误或无回应",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"无法发送评论: %s",
|
"无法发送评论: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Sending paste (Please move your mouse for more entropy)…":
|
||||||
"粘贴提交中 (请移动鼠标以产生更多熵)...",
|
"粘贴提交中 (请移动鼠标以产生更多熵)…",
|
||||||
"Sending paste...":
|
"Sending 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>":
|
||||||
"您的粘贴的链接是<a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 [Ctrl]+[c] 以复制)</span>",
|
"您的粘贴的链接是<a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(按下 [Ctrl]+[c] 以复制)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
@ -137,15 +137,15 @@
|
|||||||
"Invalid attachment.": "无效的附件",
|
"Invalid attachment.": "无效的附件",
|
||||||
"Options": "选项",
|
"Options": "选项",
|
||||||
"Shorten URL": "缩短链接",
|
"Shorten URL": "缩短链接",
|
||||||
"Editor": "編輯",
|
"Editor": "编辑",
|
||||||
"Preview": "預習",
|
"Preview": "预览",
|
||||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
|
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
|
||||||
"%s requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
|
"%s 的 PATH 变量必须结束于 \"%s\"。 请修改你的 index.php 中的 PATH 变量。",
|
||||||
"Decrypt":
|
"Decrypt":
|
||||||
"Decrypt",
|
"解密",
|
||||||
"Enter password":
|
"Enter password":
|
||||||
"Enter password",
|
"输入密码",
|
||||||
"Loading…": "Loading…",
|
"Loading…": "载入中…",
|
||||||
"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>.":
|
||||||
"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 English)."
|
"如果这个消息一直不消失,请参考 <a href=\"https://github.com/PrivateBin/PrivateBin/wiki/FAQ#why-does-not-the-loading-message-go-away\">这里的 FAQ 进行故障排除</a> (英文版)。"
|
||||||
}
|
}
|
||||||
|
4896
js/privatebin.js
4896
js/privatebin.js
File diff suppressed because it is too large
Load Diff
168
js/test.js
168
js/test.js
@ -11,7 +11,9 @@ var jsc = require('jsverify'),
|
|||||||
a2zString.map(function(c) {
|
a2zString.map(function(c) {
|
||||||
return c.toUpperCase();
|
return c.toUpperCase();
|
||||||
})
|
})
|
||||||
);
|
),
|
||||||
|
// schemas supported by the whatwg-url library
|
||||||
|
schemas = ['ftp','gopher','http','https','ws','wss'];
|
||||||
|
|
||||||
global.$ = global.jQuery = require('./jquery-3.1.1');
|
global.$ = global.jQuery = require('./jquery-3.1.1');
|
||||||
global.sjcl = require('./sjcl-1.0.6');
|
global.sjcl = require('./sjcl-1.0.6');
|
||||||
@ -20,127 +22,74 @@ global.RawDeflate = require('./rawdeflate-0.5');
|
|||||||
require('./rawinflate-0.3');
|
require('./rawinflate-0.3');
|
||||||
require('./privatebin');
|
require('./privatebin');
|
||||||
|
|
||||||
describe('helper', function () {
|
describe('Helper', function () {
|
||||||
describe('secondsToHuman', function () {
|
describe('secondsToHuman', function () {
|
||||||
after(function () {
|
after(function () {
|
||||||
cleanup();
|
cleanup();
|
||||||
});
|
});
|
||||||
|
|
||||||
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';
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('scriptLocation', function () {
|
describe('baseUri', function () {
|
||||||
|
before(function () {
|
||||||
|
$.PrivateBin.Helper.reset();
|
||||||
|
});
|
||||||
|
|
||||||
jsc.property(
|
jsc.property(
|
||||||
'returns the URL without query & fragment',
|
'returns the URL without query & fragment',
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
jsc.elements(schemas),
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
jsc.array(jsc.elements(queryString)),
|
jsc.array(jsc.elements(queryString)),
|
||||||
'string',
|
'string',
|
||||||
function (schema, address, query, fragment) {
|
function (schema, address, query, fragment) {
|
||||||
var expected = schema.join('') + '://' + address.join('') + '/',
|
var expected = schema + '://' + address.join('') + '/',
|
||||||
clean = jsdom('', {url: expected + '?' + query.join('') + '#' + fragment}),
|
clean = jsdom('', {url: expected + '?' + query.join('') + '#' + fragment}),
|
||||||
result = $.PrivateBin.helper.scriptLocation();
|
result = $.PrivateBin.Helper.baseUri();
|
||||||
|
$.PrivateBin.Helper.reset();
|
||||||
clean();
|
clean();
|
||||||
return expected === result;
|
return expected === result;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('pasteId', function () {
|
|
||||||
jsc.property(
|
|
||||||
'returns the query string without separator, if any',
|
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
|
||||||
jsc.array(jsc.elements(queryString)),
|
|
||||||
'string',
|
|
||||||
function (schema, address, query, fragment) {
|
|
||||||
var queryString = query.join(''),
|
|
||||||
clean = jsdom('', {
|
|
||||||
url: schema.join('') + '://' + address.join('') +
|
|
||||||
'/?' + queryString + '#' + fragment
|
|
||||||
}),
|
|
||||||
result = $.PrivateBin.helper.pasteId();
|
|
||||||
clean();
|
|
||||||
return queryString === result;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('pageKey', function () {
|
|
||||||
jsc.property(
|
|
||||||
'returns the fragment of the URL',
|
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
|
||||||
jsc.array(jsc.elements(queryString)),
|
|
||||||
jsc.array(jsc.elements(base64String)),
|
|
||||||
function (schema, address, query, fragment) {
|
|
||||||
var fragmentString = fragment.join(''),
|
|
||||||
clean = jsdom('', {
|
|
||||||
url: schema.join('') + '://' + address.join('') +
|
|
||||||
'/?' + query.join('') + '#' + fragmentString
|
|
||||||
}),
|
|
||||||
result = $.PrivateBin.helper.pageKey();
|
|
||||||
clean();
|
|
||||||
return fragmentString === result;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
jsc.property(
|
|
||||||
'returns the fragment stripped of trailing query parts',
|
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
|
||||||
jsc.nearray(jsc.elements(a2zString)),
|
|
||||||
jsc.array(jsc.elements(queryString)),
|
|
||||||
jsc.array(jsc.elements(base64String)),
|
|
||||||
jsc.array(jsc.elements(queryString)),
|
|
||||||
function (schema, address, query, fragment, trail) {
|
|
||||||
var fragmentString = fragment.join(''),
|
|
||||||
clean = jsdom('', {
|
|
||||||
url: schema.join('') + '://' + address.join('') + '/?' +
|
|
||||||
query.join('') + '#' + fragmentString + '&' + trail.join('')
|
|
||||||
}),
|
|
||||||
result = $.PrivateBin.helper.pageKey();
|
|
||||||
clean();
|
|
||||||
return fragmentString === result;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('htmlEntities', function () {
|
describe('htmlEntities', function () {
|
||||||
after(function () {
|
after(function () {
|
||||||
cleanup();
|
cleanup();
|
||||||
@ -150,9 +99,76 @@ 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)));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Model', function () {
|
||||||
|
describe('getPasteId', function () {
|
||||||
|
before(function () {
|
||||||
|
$.PrivateBin.Model.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
jsc.property(
|
||||||
|
'returns the query string without separator, if any',
|
||||||
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
|
jsc.nearray(jsc.elements(queryString)),
|
||||||
|
'string',
|
||||||
|
function (schema, address, query, fragment) {
|
||||||
|
var queryString = query.join(''),
|
||||||
|
clean = jsdom('', {
|
||||||
|
url: schema.join('') + '://' + address.join('') +
|
||||||
|
'/?' + queryString + '#' + fragment
|
||||||
|
}),
|
||||||
|
result = $.PrivateBin.Model.getPasteId();
|
||||||
|
$.PrivateBin.Model.reset();
|
||||||
|
clean();
|
||||||
|
return queryString === result;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getPasteKey', function () {
|
||||||
|
jsc.property(
|
||||||
|
'returns the fragment of the URL',
|
||||||
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
|
jsc.array(jsc.elements(queryString)),
|
||||||
|
jsc.nearray(jsc.elements(base64String)),
|
||||||
|
function (schema, address, query, fragment) {
|
||||||
|
var fragmentString = fragment.join(''),
|
||||||
|
clean = jsdom('', {
|
||||||
|
url: schema.join('') + '://' + address.join('') +
|
||||||
|
'/?' + query.join('') + '#' + fragmentString
|
||||||
|
}),
|
||||||
|
result = $.PrivateBin.Model.getPasteKey();
|
||||||
|
$.PrivateBin.Model.reset();
|
||||||
|
clean();
|
||||||
|
return fragmentString === result;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
jsc.property(
|
||||||
|
'returns the fragment stripped of trailing query parts',
|
||||||
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
|
jsc.nearray(jsc.elements(a2zString)),
|
||||||
|
jsc.array(jsc.elements(queryString)),
|
||||||
|
jsc.nearray(jsc.elements(base64String)),
|
||||||
|
jsc.array(jsc.elements(queryString)),
|
||||||
|
function (schema, address, query, fragment, trail) {
|
||||||
|
var fragmentString = fragment.join(''),
|
||||||
|
clean = jsdom('', {
|
||||||
|
url: schema.join('') + '://' + address.join('') + '/?' +
|
||||||
|
query.join('') + '#' + fragmentString + '&' + trail.join('')
|
||||||
|
}),
|
||||||
|
result = $.PrivateBin.Model.getPasteKey();
|
||||||
|
$.PrivateBin.Model.reset();
|
||||||
|
clean();
|
||||||
|
return fragmentString === result;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -1,2 +1 @@
|
|||||||
Allow from none
|
Require all denied
|
||||||
Deny from all
|
|
||||||
|
@ -21,21 +21,6 @@ use Exception;
|
|||||||
*/
|
*/
|
||||||
class Filter
|
class Filter
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* strips slashes deeply
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @static
|
|
||||||
* @param mixed $value
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function stripslashesDeep($value)
|
|
||||||
{
|
|
||||||
return is_array($value) ?
|
|
||||||
array_map('self::stripslashesDeep', $value) :
|
|
||||||
stripslashes($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* format a given time string into a human readable label (localized)
|
* format a given time string into a human readable label (localized)
|
||||||
*
|
*
|
||||||
|
@ -304,7 +304,7 @@ class I18n
|
|||||||
return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
|
return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
|
||||||
case 'sl':
|
case 'sl':
|
||||||
return $n % 100 == 1 ? 1 : ($n % 100 == 2 ? 2 : ($n % 100 == 3 || $n % 100 == 4 ? 3 : 0));
|
return $n % 100 == 1 ? 1 : ($n % 100 == 2 ? 2 : ($n % 100 == 3 || $n % 100 == 4 ? 3 : 0));
|
||||||
// de, en, es, it, no
|
// de, en, es, it, no, pt
|
||||||
default:
|
default:
|
||||||
return $n != 1 ? 1 : 0;
|
return $n != 1 ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
@ -120,8 +120,8 @@ class PrivateBin
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
if (version_compare(PHP_VERSION, '5.3.0') < 0) {
|
if (version_compare(PHP_VERSION, '5.4.0') < 0) {
|
||||||
throw new Exception(I18n::_('%s requires php 5.3.0 or above to work. Sorry.', I18n::_('PrivateBin')), 1);
|
throw new Exception(I18n::_('%s requires php 5.4.0 or above to work. Sorry.', I18n::_('PrivateBin')), 1);
|
||||||
}
|
}
|
||||||
if (strlen(PATH) < 0 && substr(PATH, -1) !== DIRECTORY_SEPARATOR) {
|
if (strlen(PATH) < 0 && substr(PATH, -1) !== DIRECTORY_SEPARATOR) {
|
||||||
throw new Exception(I18n::_('%s requires the PATH to end in a "%s". Please update the PATH in your index.php.', I18n::_('PrivateBin'), DIRECTORY_SEPARATOR), 5);
|
throw new Exception(I18n::_('%s requires the PATH to end in a "%s". Please update the PATH in your index.php.', I18n::_('PrivateBin'), DIRECTORY_SEPARATOR), 5);
|
||||||
|
@ -80,13 +80,6 @@ class Request
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
// in case stupid admin has left magic_quotes enabled in php.ini (for PHP < 5.4)
|
|
||||||
if (version_compare(PHP_VERSION, '5.4.0') < 0 && get_magic_quotes_gpc()) {
|
|
||||||
$_POST = array_map('PrivateBin\\Filter::stripslashesDeep', $_POST);
|
|
||||||
$_GET = array_map('PrivateBin\\Filter::stripslashesDeep', $_GET);
|
|
||||||
$_COOKIE = array_map('PrivateBin\\Filter::stripslashesDeep', $_COOKIE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// decide if we are in JSON API or HTML context
|
// decide if we are in JSON API or HTML context
|
||||||
$this->_isJsonApi = $this->_detectJsonRequest();
|
$this->_isJsonApi = $this->_detectJsonRequest();
|
||||||
|
|
||||||
|
1
tpl/.htaccess
Normal file
1
tpl/.htaccess
Normal file
@ -0,0 +1 @@
|
|||||||
|
Require all denied
|
@ -4,7 +4,7 @@ $isCpct = substr($template, 9, 8) === '-compact';
|
|||||||
$isDark = substr($template, 9, 5) === '-dark';
|
$isDark = substr($template, 9, 5) === '-dark';
|
||||||
$isPage = substr($template, -5) === '-page';
|
$isPage = substr($template, -5) === '-page';
|
||||||
?><!DOCTYPE html>
|
?><!DOCTYPE html>
|
||||||
<html lang="en">
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
@ -69,7 +69,7 @@ if ($MARKDOWN):
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-vYYJYraxQNOf41XtehLBU2JbIQ2Uffe+n8TjHyWkpqoZdZX4aL5zyABrUNvRUP02+AxoRsmNJkpvIbmeQqcIXg==" crossorigin="anonymous"></script>
|
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-7/bLmiTErcH3lMJi1JxXk/lb20NUO7TCqasWeFybnNhnfOUnJ9GQGqPVJxPf+7fnw9dgLa1s18FXQuRanLD8Hw==" crossorigin="anonymous"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
@ -94,7 +94,7 @@ endif;
|
|||||||
<form id="passwordform" role="form">
|
<form id="passwordform" role="form">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="passworddecrypt"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
|
<label for="passworddecrypt"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
|
||||||
<input id="passworddecrypt" type="password" class="form-control" placeholder="<?php echo I18n::_('Enter password') ?>" autofocus>
|
<input id="passworddecrypt" type="password" class="form-control" placeholder="<?php echo I18n::_('Enter password') ?>">
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
|
<button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
|
||||||
</form>
|
</form>
|
||||||
@ -121,8 +121,8 @@ 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>
|
||||||
<?php echo I18n::_('Uploading paste… Please wait.'), PHP_EOL; ?>
|
<?php echo I18n::_('Loading…'), PHP_EOL; ?>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<?php
|
<?php
|
||||||
@ -132,7 +132,7 @@ if ($isPage):
|
|||||||
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> <?php echo I18n::_('Send'), PHP_EOL;
|
<span class="glyphicon glyphicon-upload" aria-hidden="true"></span> <?php echo I18n::_('Send'), PHP_EOL;
|
||||||
else:
|
else:
|
||||||
?>
|
?>
|
||||||
<button id="newbutton" type="button" class="reloadlink hidden btn btn-<?php echo $isDark ? 'warning' : 'default'; ?> navbar-btn">
|
<button id="newbutton" type="button" class="hidden btn btn-<?php echo $isDark ? 'warning' : 'default'; ?> navbar-btn">
|
||||||
<span class="glyphicon glyphicon-file" aria-hidden="true"></span> <?php echo I18n::_('New'), PHP_EOL;
|
<span class="glyphicon glyphicon-file" aria-hidden="true"></span> <?php echo I18n::_('New'), PHP_EOL;
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
@ -198,7 +198,7 @@ if ($isCpct):
|
|||||||
<?php
|
<?php
|
||||||
if ($DISCUSSION):
|
if ($DISCUSSION):
|
||||||
?>
|
?>
|
||||||
<li id="opendisc" class="checkbox hidden">
|
<li id="opendiscussionoption" class="checkbox hidden">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
|
<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
|
||||||
if ($OPENDISCUSSION):
|
if ($OPENDISCUSSION):
|
||||||
@ -230,17 +230,6 @@ if ($isCpct):
|
|||||||
?>
|
?>
|
||||||
</ul>
|
</ul>
|
||||||
<select id="pasteFormatter" name="pasteFormatter" class="hidden">
|
<select id="pasteFormatter" name="pasteFormatter" class="hidden">
|
||||||
<?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>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
<?php
|
<?php
|
||||||
@ -262,7 +251,7 @@ else:
|
|||||||
if ($DISCUSSION):
|
if ($DISCUSSION):
|
||||||
?>
|
?>
|
||||||
<li>
|
<li>
|
||||||
<div id="opendisc" class="navbar-text checkbox hidden">
|
<div id="opendiscussionoption" class="navbar-text checkbox hidden">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
|
<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
|
||||||
if ($OPENDISCUSSION):
|
if ($OPENDISCUSSION):
|
||||||
@ -295,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; ?>
|
||||||
@ -383,99 +373,124 @@ if ($isCpct):
|
|||||||
?></div><?php
|
?></div><?php
|
||||||
endif;
|
endif;
|
||||||
?></nav>
|
?></nav>
|
||||||
<header class="container">
|
<main>
|
||||||
|
<section class="container">
|
||||||
<?php
|
<?php
|
||||||
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>
|
||||||
</div>
|
<?php echo htmlspecialchars($NOTICE), PHP_EOL; ?>
|
||||||
|
</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>
|
||||||
</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>
|
||||||
</div>
|
<a class="alert-link"><?php echo I18n::_('Download attachment'), PHP_EOL; ?></a>
|
||||||
<?php
|
</div>
|
||||||
endif;
|
|
||||||
if (strlen($STATUS)):
|
|
||||||
?>
|
|
||||||
<div id="status" role="alert" class="alert alert-success">
|
|
||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span> <?php echo htmlspecialchars($STATUS), PHP_EOL; ?>
|
|
||||||
</div>
|
|
||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<div id="errormessage" role="alert" class="<?php
|
<div id="status" role="alert" class="statusmessage alert alert-info<?php echo empty($STATUS) ? ' hidden' : '' ?>">
|
||||||
if (!strlen($ERROR)):
|
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
|
||||||
?>hidden <?php
|
<?php echo htmlspecialchars($STATUS), PHP_EOL; ?>
|
||||||
endif;
|
</div>
|
||||||
?>alert alert-danger"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> <?php echo htmlspecialchars($ERROR); ?></div>
|
<div id="errormessage" role="alert" class="statusmessage<?php echo empty($ERROR) ? ' hidden' : '' ?> alert alert-danger">
|
||||||
<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>
|
<span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
|
||||||
<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>
|
<?php echo htmlspecialchars($ERROR), 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; ?>
|
</div>
|
||||||
<a href="https://www.mozilla.org/firefox/">Firefox</a>,
|
<noscript>
|
||||||
<a href="https://www.opera.com/">Opera</a>,
|
<div id="noscript" role="alert" class="nonworking alert alert-<?php echo $isDark ? 'error' : 'warning'; ?>">
|
||||||
<a href="https://www.google.com/chrome">Chrome</a>,
|
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
||||||
<a href="https://www.apple.com/safari">Safari</a>...
|
<?php echo I18n::_('JavaScript is required for %s to work.<br />Sorry for the inconvenience.', I18n::_($NAME)), PHP_EOL; ?>
|
||||||
</div>
|
</div>
|
||||||
<div id="pasteresult" role="alert" class="hidden alert alert-success">
|
</noscript>
|
||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger">
|
||||||
<div id="deletelink"></div>
|
<span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
|
||||||
<div id="pastelink">
|
<?php echo I18n::_('%s requires a modern browser to work.', I18n::_($NAME)), PHP_EOL; ?>
|
||||||
|
</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; ?>
|
||||||
|
<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>…
|
||||||
|
</div>
|
||||||
|
<div id="pasteSuccess" role="alert" class="hidden alert alert-success">
|
||||||
|
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
|
||||||
|
<div id="deletelink"></div>
|
||||||
|
<div id="pastelink">
|
||||||
<?php
|
<?php
|
||||||
if (strlen($URLSHORTENER)):
|
if (strlen($URLSHORTENER)):
|
||||||
?>
|
?>
|
||||||
<button id="shortenbutton" data-shortener="<?php echo htmlspecialchars($URLSHORTENER); ?>" type="button" class="btn btn-<?php echo $isDark ? 'warning' : 'primary'; ?>">
|
<button id="shortenbutton" data-shortener="<?php echo htmlspecialchars($URLSHORTENER); ?>" type="button" class="btn btn-<?php echo $isDark ? 'warning' : 'primary'; ?>">
|
||||||
<span class="glyphicon glyphicon-send" aria-hidden="true"></span> <?php echo I18n::_('Shorten URL'), PHP_EOL; ?>
|
<span class="glyphicon glyphicon-send" aria-hidden="true"></span> <?php echo I18n::_('Shorten URL'), PHP_EOL; ?>
|
||||||
</button>
|
</button>
|
||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<ul id="editorTabs" class="nav nav-tabs hidden">
|
||||||
<ul id="preview" class="nav nav-tabs hidden">
|
<li role="presentation" class="active"><a id="messageedit" href="#"><?php echo I18n::_('Editor'); ?></a></li>
|
||||||
<li role="presentation" class="active"><a id="messageedit" href="#"><?php echo I18n::_('Editor'); ?></a></li>
|
<li role="presentation"><a id="messagepreview" href="#"><?php echo I18n::_('Preview'); ?></a></li>
|
||||||
<li role="presentation"><a id="messagepreview" href="#"><?php echo I18n::_('Preview'); ?></a></li>
|
</ul>
|
||||||
</ul>
|
</section>
|
||||||
</header>
|
<section class="container">
|
||||||
<section class="container">
|
<article class="row">
|
||||||
<article class="row">
|
<div id="placeholder" class="col-md-12 hidden"><?php echo I18n::_('+++ no paste text +++'); ?></div>
|
||||||
<div id="image" class="col-md-12 text-center hidden"></div>
|
<div id="attachmentPreview" class="col-md-12 text-center hidden"></div>
|
||||||
<div id="prettymessage" class="col-md-12 hidden">
|
<div id="prettymessage" class="col-md-12 hidden">
|
||||||
<pre id="prettyprint" class="col-md-12 prettyprint linenums:1"></pre>
|
<pre id="prettyprint" class="col-md-12 prettyprint linenums:1"></pre>
|
||||||
|
</div>
|
||||||
|
<div id="plaintext" 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><?php echo I18n::_('Discussion'); ?></h4>
|
||||||
|
<div id="commentcontainer"></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="cleartext" class="col-md-12 hidden"></div>
|
</section>
|
||||||
<p class="col-md-12"><textarea id="message" name="message" cols="80" rows="25" class="form-control hidden"></textarea></p>
|
<section class="container">
|
||||||
</article>
|
<div id="noscript" role="alert" class="nonworking alert alert-info noscript-hide">
|
||||||
</section>
|
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
||||||
<section class="container">
|
<?php echo I18n::_('Loading…'); ?><br />
|
||||||
<div id="discussion" class="hidden">
|
<span class="small"><?php echo I18n::_('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>.'); ?></span>
|
||||||
<h4><?php echo I18n::_('Discussion'); ?></h4>
|
</div>
|
||||||
<div id="comments"></div>
|
</section>
|
||||||
|
<footer class="container">
|
||||||
|
<div class="row">
|
||||||
|
<h4 class="col-md-5 col-xs-8"><?php echo I18n::_($NAME); ?> <small>- <?php echo I18n::_('Because ignorance is bliss'); ?></small></h4>
|
||||||
|
<p class="col-md-1 col-xs-4 text-center"><?php echo $VERSION; ?></p>
|
||||||
|
<p id="aboutbox" class="col-md-6 col-xs-12">
|
||||||
|
<?php echo I18n::_('%s is a minimalist, open source 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://privatebin.info/">project page</a>.', I18n::_($NAME)), PHP_EOL; ?>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</main>
|
||||||
|
<div id="serverdata" class="hidden" aria-hidden="true">
|
||||||
|
<div id="cipherdata"><?php echo htmlspecialchars($CIPHERDATA, ENT_NOQUOTES); ?></div>
|
||||||
|
<?php
|
||||||
|
if ($DISCUSSION):
|
||||||
|
?>
|
||||||
|
<div id="templates">
|
||||||
|
<!-- @TODO: when I intend/structure this corrrectly Firefox adds whitespaces everywhere which completly destroy the layout. (same possible when you remove the template data below and show this area in the browser) -->
|
||||||
|
<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>
|
||||||
|
<p id="commenttailtemplate" class="comment"><button class="btn btn-default btn-sm"><?php echo I18n::_('Add comment'); ?></button></p>
|
||||||
|
<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>
|
</div>
|
||||||
</section>
|
<?php
|
||||||
<section class="container">
|
endif;
|
||||||
<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>
|
</div>
|
||||||
<span class="small"><?php echo I18n::_('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>.'); ?></span>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<footer class="container">
|
|
||||||
<div class="row">
|
|
||||||
<h4 class="col-md-5 col-xs-8"><?php echo I18n::_($NAME); ?> <small>- <?php echo I18n::_('Because ignorance is bliss'); ?></small></h4>
|
|
||||||
<p class="col-md-1 col-xs-4 text-center"><?php echo $VERSION; ?></p>
|
|
||||||
<p id="aboutbox" class="col-md-6 col-xs-12">
|
|
||||||
<?php echo I18n::_('%s is a minimalist, open source 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://privatebin.info/">project page</a>.', I18n::_($NAME)), PHP_EOL; ?>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
<div id="cipherdata" class="hidden"><?php echo htmlspecialchars($CIPHERDATA, ENT_NOQUOTES); ?></div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
28
tpl/page.php
28
tpl/page.php
@ -47,7 +47,7 @@ if ($MARKDOWN):
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-vYYJYraxQNOf41XtehLBU2JbIQ2Uffe+n8TjHyWkpqoZdZX4aL5zyABrUNvRUP02+AxoRsmNJkpvIbmeQqcIXg==" crossorigin="anonymous"></script>
|
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-7/bLmiTErcH3lMJi1JxXk/lb20NUO7TCqasWeFybnNhnfOUnJ9GQGqPVJxPf+7fnw9dgLa1s18FXQuRanLD8Hw==" crossorigin="anonymous"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
@ -79,12 +79,12 @@ endif;
|
|||||||
<div id="ienotice"><?php echo I18n::_('Still using Internet Explorer? Do yourself a favor, switch to a modern browser:'), PHP_EOL; ?>
|
<div id="ienotice"><?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>…
|
||||||
<a href="https://www.apple.com/safari">Safari</a>...
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<section>
|
<section>
|
||||||
<article>
|
<article>
|
||||||
|
<div id="loadingindicator" class="hidden"><?php echo I18n::_('Loading…'); ?></div>
|
||||||
<div id="status"><?php echo htmlspecialchars($STATUS); ?></div>
|
<div id="status"><?php echo htmlspecialchars($STATUS); ?></div>
|
||||||
<div id="errormessage" class="hidden"><?php echo htmlspecialchars($ERROR); ?></div>
|
<div id="errormessage" class="hidden"><?php echo htmlspecialchars($ERROR); ?></div>
|
||||||
<div id="toolbar">
|
<div id="toolbar">
|
||||||
@ -125,7 +125,7 @@ endif;
|
|||||||
<?php
|
<?php
|
||||||
if ($DISCUSSION):
|
if ($DISCUSSION):
|
||||||
?>
|
?>
|
||||||
<div id="opendisc" class="button hidden">
|
<div id="opendiscussionoption" class="button hidden">
|
||||||
<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
|
<input type="checkbox" id="opendiscussion" name="opendiscussion"<?php
|
||||||
if ($OPENDISCUSSION):
|
if ($OPENDISCUSSION):
|
||||||
?> checked="checked"<?php
|
?> checked="checked"<?php
|
||||||
@ -216,17 +216,31 @@ endif;
|
|||||||
<div id="prettymessage" class="hidden">
|
<div id="prettymessage" class="hidden">
|
||||||
<pre id="prettyprint" class="prettyprint linenums:1"></pre>
|
<pre id="prettyprint" class="prettyprint linenums:1"></pre>
|
||||||
</div>
|
</div>
|
||||||
<div id="cleartext" class="hidden"></div>
|
<div id="plaintext" class="hidden"></div>
|
||||||
<textarea id="message" name="message" cols="80" rows="25" class="hidden"></textarea>
|
<textarea id="message" name="message" cols="80" rows="25" class="hidden"></textarea>
|
||||||
</article>
|
</article>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<div id="discussion" class="hidden">
|
<div id="discussion" class="hidden">
|
||||||
<h4 class="title"><?php echo I18n::_('Discussion'); ?></h4>
|
<h4 class="title"><?php echo I18n::_('Discussion'); ?></h4>
|
||||||
<div id="comments"></div>
|
<div id="commentcontainer"></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<div id="cipherdata" class="hidden"><?php echo htmlspecialchars($CIPHERDATA, ENT_NOQUOTES); ?></div>
|
<div id="serverdata" class="hidden" aria-hidden="true">
|
||||||
|
<div id="cipherdata" class="hidden"><?php echo htmlspecialchars($CIPHERDATA, ENT_NOQUOTES); ?></div>
|
||||||
|
<?php
|
||||||
|
if ($DISCUSSION):
|
||||||
|
?>
|
||||||
|
<div id="templates">
|
||||||
|
<!-- @TODO: when I intend/structure this corrrectly Firefox adds whitespaces everywhere which completly destroy the layout. (same possible when you remove the template data below and show this area in the browser) -->
|
||||||
|
<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>
|
||||||
|
<?php
|
||||||
|
endif;
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
<section class="container">
|
<section class="container">
|
||||||
<div id="noscript" role="alert" class="nonworking alert alert-info noscript-hide"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true">
|
<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> <?php echo I18n::_('Loading…'); ?></span><br>
|
||||||
|
@ -4,14 +4,6 @@ use PrivateBin\Filter;
|
|||||||
|
|
||||||
class FilterTest extends PHPUnit_Framework_TestCase
|
class FilterTest extends PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
public function testFilterStripsSlashesDeeply()
|
|
||||||
{
|
|
||||||
$this->assertEquals(
|
|
||||||
array("f'oo", "b'ar", array("fo'o", "b'ar")),
|
|
||||||
Filter::stripslashesDeep(array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar")))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testFilterMakesTimesHumanlyReadable()
|
public function testFilterMakesTimesHumanlyReadable()
|
||||||
{
|
{
|
||||||
$this->assertEquals('5 minutes', Filter::formatHumanReadableTime('5min'));
|
$this->assertEquals('5 minutes', Filter::formatHumanReadableTime('5min'));
|
||||||
|
@ -739,10 +739,10 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
new PrivateBin;
|
new PrivateBin;
|
||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertContains(
|
$this->assertRegExp(
|
||||||
'<div id="cipherdata" class="hidden">' .
|
'#<div id="cipherdata"[^>]*>' .
|
||||||
htmlspecialchars(Helper::getPasteAsJson(), ENT_NOQUOTES) .
|
preg_quote(htmlspecialchars(Helper::getPasteAsJson(), ENT_NOQUOTES)) .
|
||||||
'</div>',
|
'</div>#',
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -760,7 +760,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Invalid paste ID\.</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Invalid paste ID\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -778,7 +778,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist, has expired or has been deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -798,7 +798,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist, has expired or has been deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -818,10 +818,10 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
unset($burnPaste['meta']['salt']);
|
unset($burnPaste['meta']['salt']);
|
||||||
$this->assertContains(
|
$this->assertRegExp(
|
||||||
'<div id="cipherdata" class="hidden">' .
|
'#<div id="cipherdata"[^>]*>' .
|
||||||
htmlspecialchars(Helper::getPasteAsJson($burnPaste['meta']), ENT_NOQUOTES) .
|
preg_quote(htmlspecialchars(Helper::getPasteAsJson($burnPaste['meta']), ENT_NOQUOTES)) .
|
||||||
'</div>',
|
'</div>#',
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -889,10 +889,10 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$meta['formatter'] = 'syntaxhighlighting';
|
$meta['formatter'] = 'syntaxhighlighting';
|
||||||
$this->assertContains(
|
$this->assertRegExp(
|
||||||
'<div id="cipherdata" class="hidden">' .
|
'#<div id="cipherdata"[^>]*>' .
|
||||||
htmlspecialchars(Helper::getPasteAsJson($meta), ENT_NOQUOTES) .
|
preg_quote(htmlspecialchars(Helper::getPasteAsJson($meta), ENT_NOQUOTES)) .
|
||||||
'</div>',
|
'</div>#',
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -914,10 +914,10 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$oldPaste['meta']['formatter'] = 'plaintext';
|
$oldPaste['meta']['formatter'] = 'plaintext';
|
||||||
unset($oldPaste['meta']['salt']);
|
unset($oldPaste['meta']['salt']);
|
||||||
$this->assertContains(
|
$this->assertRegExp(
|
||||||
'<div id="cipherdata" class="hidden">' .
|
'#<div id="cipherdata"[^>]*>' .
|
||||||
htmlspecialchars(Helper::getPasteAsJson($oldPaste['meta']), ENT_NOQUOTES) .
|
preg_quote(htmlspecialchars(Helper::getPasteAsJson($oldPaste['meta']), ENT_NOQUOTES)) .
|
||||||
'</div>',
|
'</div>#',
|
||||||
$content,
|
$content,
|
||||||
'outputs data correctly'
|
'outputs data correctly'
|
||||||
);
|
);
|
||||||
@ -939,7 +939,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted[^<]*</div>#s',
|
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs deleted status correctly'
|
'outputs deleted status correctly'
|
||||||
);
|
);
|
||||||
@ -960,7 +960,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Invalid paste ID\.</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Invalid paste ID\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs delete error correctly'
|
'outputs delete error correctly'
|
||||||
);
|
);
|
||||||
@ -980,7 +980,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist, has expired or has been deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs delete error correctly'
|
'outputs delete error correctly'
|
||||||
);
|
);
|
||||||
@ -1000,7 +1000,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Wrong deletion token[^<]*</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Wrong deletion token\. Paste was not deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs delete error correctly'
|
'outputs delete error correctly'
|
||||||
);
|
);
|
||||||
@ -1067,7 +1067,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist[^<]*</div>#',
|
'#<div[^>]*id="errormessage"[^>]*>.*Paste does not exist, has expired or has been deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs error correctly'
|
'outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -1091,7 +1091,7 @@ class PrivateBinTest extends PHPUnit_Framework_TestCase
|
|||||||
$content = ob_get_contents();
|
$content = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted[^<]*</div>#s',
|
'#<div[^>]*id="status"[^>]*>.*Paste was properly deleted\.#s',
|
||||||
$content,
|
$content,
|
||||||
'outputs deleted status correctly'
|
'outputs deleted status correctly'
|
||||||
);
|
);
|
||||||
|
@ -96,15 +96,15 @@ class ViewTest extends PHPUnit_Framework_TestCase
|
|||||||
public function testTemplateRendersCorrectly()
|
public function testTemplateRendersCorrectly()
|
||||||
{
|
{
|
||||||
foreach ($this->_content as $template => $content) {
|
foreach ($this->_content as $template => $content) {
|
||||||
$this->assertContains(
|
$this->assertRegExp(
|
||||||
'<div id="cipherdata" class="hidden">' .
|
'#<div[^>]+id="cipherdata"[^>]*>' .
|
||||||
htmlspecialchars(Helper::getPaste()['data'], ENT_NOQUOTES) .
|
preg_quote(htmlspecialchars(Helper::getPaste()['data'], ENT_NOQUOTES)) .
|
||||||
'</div>',
|
'</div>#',
|
||||||
$content,
|
$content,
|
||||||
$template . ': outputs data correctly'
|
$template . ': outputs data correctly'
|
||||||
);
|
);
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<div[^>]+id="errormessage"[^>]*>.*' . self::$error . '</div>#',
|
'#<div[^>]+id="errormessage"[^>]*>.*' . self::$error . '#s',
|
||||||
$content,
|
$content,
|
||||||
$template . ': outputs error correctly'
|
$template . ': outputs error correctly'
|
||||||
);
|
);
|
||||||
@ -119,7 +119,7 @@ class ViewTest extends PHPUnit_Framework_TestCase
|
|||||||
$template . ': checked discussion if configured'
|
$template . ': checked discussion if configured'
|
||||||
);
|
);
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<[^>]+id="opendisc"[^>]*>#',
|
'#<[^>]+id="opendiscussionoption"[^>]*>#',
|
||||||
$content,
|
$content,
|
||||||
$template . ': discussions available if configured'
|
$template . ': discussions available if configured'
|
||||||
);
|
);
|
||||||
|
1
vendor/.htaccess
vendored
Normal file
1
vendor/.htaccess
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
Require all denied
|
Loading…
Reference in New Issue
Block a user