Merge branch 'jsrefactor'
This commit is contained in:
commit
996a22380e
21 changed files with 3927 additions and 1658 deletions
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
|
||||||
|
|
|
@ -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 ..
|
||||||
|
|
|
@ -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":
|
||||||
|
|
16
i18n/fr.json
16
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":
|
||||||
|
|
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":
|
||||||
|
|
22
i18n/pt.json
22
i18n/pt.json
|
@ -92,16 +92,16 @@
|
||||||
"Responder",
|
"Responder",
|
||||||
"Anonymous":
|
"Anonymous":
|
||||||
"Anônimo",
|
"Anônimo",
|
||||||
"Anonymous avatar (Vizhash of the IP address)":
|
"Avatar generated from IP address":
|
||||||
"Avatar anônimo (Vizhash do endereço IP)",
|
"Avatar (do endereço IP)",
|
||||||
"Add comment":
|
"Add comment":
|
||||||
"Adicionar comentário",
|
"Adicionar comentário",
|
||||||
"Optional nickname...":
|
"Optional nickname…":
|
||||||
"Apelido opcional...",
|
"Apelido opcional…",
|
||||||
"Post comment":
|
"Post comment":
|
||||||
"Publicar comentário",
|
"Publicar comentário",
|
||||||
"Sending comment...":
|
"Sending comment…":
|
||||||
"Enviando comentário...",
|
"Enviando comentário…",
|
||||||
"Comment posted.":
|
"Comment posted.":
|
||||||
"Comentário publicado.",
|
"Comentário publicado.",
|
||||||
"Could not refresh display: %s":
|
"Could not refresh display: %s":
|
||||||
|
@ -112,10 +112,10 @@
|
||||||
"Servidor em erro ou não responsivo",
|
"Servidor em erro ou não responsivo",
|
||||||
"Could not post comment: %s":
|
"Could not post comment: %s":
|
||||||
"Não foi possível publicar o comentário: %s",
|
"Não foi possível publicar o comentário: %s",
|
||||||
"Sending paste (Please move your mouse for more entropy)...":
|
"Please move your mouse for more entropy…":
|
||||||
"Enviando cópia (Por favor, mova o mouse para maior entropia)...",
|
"Por favor, mova o mouse para maior entropia…",
|
||||||
"Sending paste...":
|
"Sending paste…":
|
||||||
"Enviando cópia...",
|
"Enviando cópia…",
|
||||||
"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>":
|
||||||
"Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione [Ctrl]+[c] para copiar)</span>",
|
"Sua cópia é <a id=\"pasteurl\" href=\"%s\">%s</a> <span id=\"copyhint\">(Pressione [Ctrl]+[c] para copiar)</span>",
|
||||||
"Delete data":
|
"Delete data":
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
"Source Code": "Código fonte",
|
"Source Code": "Código fonte",
|
||||||
"Markdown": "Markdown",
|
"Markdown": "Markdown",
|
||||||
"Download attachment": "Baixar anexo",
|
"Download attachment": "Baixar anexo",
|
||||||
"Cloned file attached.": "Arquivo clonado anexado.",
|
"Cloned: '%s'": "Clonado: '%s'",
|
||||||
"Attach a file": "Anexar um arquivo",
|
"Attach a file": "Anexar um arquivo",
|
||||||
"Remove attachment": "Remover anexo",
|
"Remove attachment": "Remover anexo",
|
||||||
"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.":
|
||||||
|
|
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":
|
||||||
|
|
16
i18n/zh.json
16
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":
|
||||||
|
|
4894
js/privatebin.js
4894
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;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -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-TETJUplZ4Gwfsyq+4b1auYItvlfa9BLoT+IzcQ6Xt2mlmMwKbso7b07/mTF2H2UqMy9I3j6nMAZGsPvIcAPzrQ==" 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,98 +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>
|
||||||
</div>
|
<?php echo I18n::_('JavaScript is required for %s to work.<br />Sorry for the inconvenience.', I18n::_($NAME)), PHP_EOL; ?>
|
||||||
<div id="pasteresult" role="alert" class="hidden alert alert-success">
|
</div>
|
||||||
<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
|
</noscript>
|
||||||
<div id="deletelink"></div>
|
<div id="oldienotice" role="alert" class="hidden nonworking alert alert-danger">
|
||||||
<div id="pastelink">
|
<span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
|
||||||
|
<?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>
|
||||||
|
|
25
tpl/page.php
25
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-TETJUplZ4Gwfsyq+4b1auYItvlfa9BLoT+IzcQ6Xt2mlmMwKbso7b07/mTF2H2UqMy9I3j6nMAZGsPvIcAPzrQ==" 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]-->
|
||||||
|
@ -84,6 +84,7 @@ endif;
|
||||||
</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">
|
||||||
|
@ -124,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
|
||||||
|
@ -215,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>
|
||||||
|
|
|
@ -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'
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue