diff --git a/.gitignore b/.gitignore
index 9f09f53..a752f8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,7 @@ vendor/**/build_phar.php
# Ignore local node modules, unit testing logs, api docs and eclipse project files
js/node_modules/
tst/log/
+tst/ConfigurationCombinationsTest.php
.settings
.buildpath
.project
diff --git a/.travis.yml b/.travis.yml
index 3ad463c..7998718 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,15 +1,26 @@
language: php
sudo: false
php:
- - 5.5
- - 5.6
- - 7.0
+ - '5.4'
+ - '5.5'
+ - '5.6'
+ - '7.0'
+ - '7.1'
+
+# as this is a php project, node.js v4 (for JS unit testing) isn't installed
+install:
+ - rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install 4
before_script:
- composer install -n
+ - npm install -g mocha
+ - cd js
+ - npm install jsverify jsdom jsdom-global
+ - cd ..
script:
- cd tst && ../vendor/bin/phpunit
+ - cd ../js && mocha
after_script:
- cd ..
diff --git a/INSTALL.md b/INSTALL.md
index 5dbc509..b627bc9 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -10,7 +10,7 @@ check the options and adjust them as you see fit.
### Requirements
-- PHP version 5.3 or above
+- PHP version 5.4 or above
- _one_ of the following sources of cryptographically safe randomness is required:
- PHP 7 or higher
- [Libsodium](https://download.libsodium.org/libsodium/content/installation/) and it's [PHP extension](https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium)
diff --git a/composer.json b/composer.json
index 632bf2b..4248b5f 100644
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,7 @@
}
],
"require": {
- "php": "^5.3.0 || ^7.0",
+ "php": "^5.4.0 || ^7.0",
"paragonie/random_compat": "2.0.4",
"yzalis/identicon": "1.1.0"
},
diff --git a/i18n/de.json b/i18n/de.json
index 9959e71..332c61c 100644
--- a/i18n/de.json
+++ b/i18n/de.json
@@ -7,8 +7,8 @@
"en": "de",
"Paste does not exist, has expired or has been deleted.":
"Diesen Text gibt es nicht, er ist abgelaufen oder wurde gelöscht.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "%s benötigt PHP 5.3.0 oder höher, um zu funktionieren. Sorry.",
+ "%s requires php %s or above to work. Sorry.":
+ "%s benötigt PHP %s oder höher, um zu funktionieren. Sorry.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s benötigt den Konfigurationsabschnitt [%s] in der Konfigurationsdatei um zu funktionieren.",
"Please wait %d seconds between each post.":
@@ -151,6 +151,5 @@
"Preparing new paste…": "Bereite neues Paste vor…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
"Wenn diese Nachricht nicht mehr verschwindet, schau bitte in die FAQ (englisch), um zu sehen, wie der Fehler behoben werden kann.",
- "+++ no paste text +++":
- "+++ kein Paste-Text +++"
+ "+++ no paste text +++": "+++ kein Paste-Text +++"
}
diff --git a/i18n/es.json b/i18n/es.json
index 1e2fd48..427f90d 100644
--- a/i18n/es.json
+++ b/i18n/es.json
@@ -7,8 +7,8 @@
"en": "es",
"Paste does not exist, has expired or has been deleted.":
"El texto no existe, ha caducado o ha sido eliminado.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "%s requiere php 5.3.0 o superior para funcionar. Lo siento.",
+ "%s requires php %s or above to work. Sorry.":
+ "%s requiere php %s o superior para funcionar. Lo siento.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s requiere que la sección de configuración [%s] esté presente en el archivo de configuración.",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Responder",
"Anonymous":
"Anónimo",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Avatar anónimo (Vizhash de la dirección IP)",
"Add comment":
"Añadir comentario",
@@ -112,8 +112,8 @@
"Error del servidor o el servidor no responde",
"Could not post comment: %s":
"No fue posible publicar comentario: %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Enviando texto (Por favor, mueva el ratón para mayor entropía)…",
+ "Please move your mouse for more entropy…":
+ "Por favor, mueva el ratón para mayor entropía…",
"Sending paste…":
"Enviando texto…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -129,7 +129,8 @@
"Source Code": "Código fuente",
"Markdown": "Markdown",
"Download attachment": "Descargar adjunto",
- "Cloned file attached.": "Archivo clonado adjunto.",
+ "Cloned: '%s'": "Clonado: '%s'.",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Adjuntar archivo",
"Remove attachment": "Remover adjunto",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -146,6 +147,9 @@
"Enter password":
"Ingrese contraseña",
"Loading…": "Cargando…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "En caso de que este mensaje nunca desaparezca por favor revise este FAQ para obtener información para solucionar problemas."
+ "En caso de que este mensaje nunca desaparezca por favor revise este FAQ para obtener información para solucionar problemas.",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/fr.json b/i18n/fr.json
index 61e0a3c..10c36a4 100644
--- a/i18n/fr.json
+++ b/i18n/fr.json
@@ -7,8 +7,8 @@
"en": "fr",
"Paste does not exist, has expired or has been deleted.":
"Le paste n'existe pas, a expiré, ou a été supprimé.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "Désolé, %s nécessite php 5.3.0 ou supérieur pour fonctionner.",
+ "%s requires php %s or above to work. Sorry.":
+ "Désolé, %s nécessite php %s ou supérieur pour fonctionner.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s a besoin de la section de configuration [%s] dans le fichier de configuration pour fonctionner.",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Répondre",
"Anonymous":
"Anonyme",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Avatar anonyme (Vizhash de l'adresse IP)",
"Add comment":
"Ajouter un commentaire",
@@ -112,8 +112,8 @@
"Le serveur ne répond pas ou a rencontré une erreur",
"Could not post comment: %s":
"Impossible de poster le commentaire : %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Envoi du paste (Merci de bouger votre souris pour plus d'entropie)…",
+ "Please move your mouse for more entropy…":
+ "Merci de bouger votre souris pour plus d'entropie…",
"Sending paste…":
"Envoi du paste…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -138,7 +138,8 @@
"Source Code": "Code source",
"Markdown": "Markdown",
"Download attachment": "Télécharger la pièce jointe",
- "Cloned file attached.": "Cloner le fichier attaché.",
+ "Cloned: '%s'": "Cloner '%s'",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Attacher un fichier ",
"Remove attachment": "Enlever l'attachement",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -155,6 +156,9 @@
"Enter password":
"Entrez le mot de passe",
"Loading…": "Chargement…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "Si ce message ne disparaîssait pas, jetez un oeil à cette FAQ pour des idées de résolution (en Anglais)."
+ "Si ce message ne disparaîssait pas, jetez un oeil à cette FAQ pour des idées de résolution (en Anglais).",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/it.json b/i18n/it.json
index 30a80e9..583e0e4 100644
--- a/i18n/it.json
+++ b/i18n/it.json
@@ -7,8 +7,8 @@
"en": "it",
"Paste does not exist, has expired or has been deleted.":
"Questo messaggio non esiste, è scaduto o è stato cancellato.",
- "%s requires php 5.4.0 or above to work. Sorry.":
- "%s richiede php 5.4.0 o superiore per funzionare. Ci spiace.",
+ "%s requires php %s or above to work. Sorry.":
+ "%s richiede php %s o superiore per funzionare. Ci spiace.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s richiede la presenza della sezione [%s] nei file di configurazione.",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Rispondi",
"Anonymous":
"Anonimo",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Avatar Anonimo (Vizhash dell'indirizzo IP)",
"Add comment":
"Aggiungi un commento",
@@ -112,8 +112,8 @@
"errore o mancata risposta dal server",
"Could not post comment: %s":
"Impossibile inviare il commento: %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Invio messaggio (Muovi il mouse in modo casuale, per generare maggior entropia)…",
+ "Please move your mouse for more entropy…":
+ "Muovi il mouse in modo casuale, per generare maggior entropia…",
"Sending paste…":
"Messaggio in fase di invio…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -129,7 +129,8 @@
"Source Code": "Codice Sorgente",
"Markdown": "Markdown",
"Download attachment": "Scarica Allegato",
- "Cloned file attached.": "Copia del file allegata.",
+ "Cloned: '%s'": "Copia: '%s'",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Allega un file",
"Remove attachment": "Rimuovi allegato",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -146,6 +147,9 @@
"Enter password":
"Inserisci la password",
"Loading…": "Loading…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "Nel caso questo messaggio non scompaia, controlla questa FAQ per trovare informazioni su come risolvere il problema (in Inglese)."
+ "Nel caso questo messaggio non scompaia, controlla questa FAQ per trovare informazioni su come risolvere il problema (in Inglese).",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/no.json b/i18n/no.json
index 4d92cc8..c0d376c 100644
--- a/i18n/no.json
+++ b/i18n/no.json
@@ -7,8 +7,8 @@
"en": "no",
"Paste does not exist, has expired or has been deleted.":
"Innlegget eksisterer ikke, er utløpt eller har blitt slettet.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "Beklager, %s krever php 5.3.0 eller nyere for å kjøre.",
+ "%s requires php %s or above to work. Sorry.":
+ "Beklager, %s krever php %s eller nyere for å kjøre.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s krever konfigurasjonsdel [%s] å være til stede i konfigurasjonsfilen .",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Svar",
"Anonymous":
"Anonym",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Anonym avatar (Vizhash av IP adressen)",
"Add comment":
"Legg til kommentar",
@@ -112,8 +112,8 @@
"server feilet eller svarer ikke",
"Could not post comment: %s":
"Kunne ikke sende kommentar: %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Sender innlegg (Flytt musen for mere entropi)…",
+ "Please move your mouse for more entropy…":
+ "Flytt musen for mere entropi…",
"Sending paste…":
"Sender innlegg…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -129,7 +129,8 @@
"Source Code": "Kildekode",
"Markdown": "Oppmerket",
"Download attachment": "Last ned vedlegg",
- "Cloned file attached.": "Kopier vedlegg.",
+ "Cloned: '%s'": "Kopier: '%s'",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Legg til fil",
"Remove attachment": "Slett vedlegg",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -146,6 +147,9 @@
"Enter password":
"Skriv inn passord",
"Loading…": "Laster…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "Hvis denne meldingen ikke forsvinner kan du ta en titt på siden med ofte stilte spørsmål for informasjon om feilsøking."
+ "Hvis denne meldingen ikke forsvinner kan du ta en titt på siden med ofte stilte spørsmål for informasjon om feilsøking.",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/oc.json b/i18n/oc.json
index a29bce0..9047876 100644
--- a/i18n/oc.json
+++ b/i18n/oc.json
@@ -7,8 +7,8 @@
"en": "oc",
"Paste does not exist, has expired or has been deleted.":
"Lo tèxte existís pas, a expirat, o es estat suprimit.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "O planhèm, %s necessita php 5.3.0 o superior per foncionar.",
+ "%s requires php %s or above to work. Sorry.":
+ "O planhèm, %s necessita php %s o superior per foncionar.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s fa besonh de la seccion de configuracion [%s] dins lo fichièr de configuracion per foncionar.",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Respondre",
"Anonymous":
"Anonime",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Avatar anonime (Vizhash de l'adreça IP)",
"Add comment":
"Apondre un comentari",
@@ -112,8 +112,8 @@
"Lo servidor respond pas o a rencontrat una error",
"Could not post comment: %s":
"Impossible de mandar lo comentari : %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Mandadís del tèxte (Mercés de bolegar vòstra mirga per mai entropia)…",
+ "Please move your mouse for more entropy…":
+ "Mercés de bolegar vòstra mirga per mai entropia…",
"Sending paste…":
"Mandadís del tèxte…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -138,7 +138,8 @@
"Source Code": "Còdi font",
"Markdown": "Markdown",
"Download attachment": "Telecargar la pèça junta",
- "Cloned file attached.": "Clonar lo fichièr junt.",
+ "Cloned: '%s'": "Clonar: '%s'",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Juntar un fichièr ",
"Remove attachment": "Levar la pèca junta",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -155,6 +156,9 @@
"Enter password":
"Picatz lo senhal",
"Loading…": "Cargament…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "Se per cas aqueste messatge quita pas de s'afichar mercés de gaitar aquesta FAQ per las solucions (en Anglés)."
+ "Se per cas aqueste messatge quita pas de s'afichar mercés de gaitar aquesta FAQ per las solucions (en Anglés).",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/pl.json b/i18n/pl.json
index b9cc8f2..82d9b57 100644
--- a/i18n/pl.json
+++ b/i18n/pl.json
@@ -7,8 +7,8 @@
"en": "pl",
"Paste does not exist, has expired or has been deleted.":
"Wklejka nie istnieje, wygasła albo została usunięta.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "%s wymaga PHP w wersji 5.3.0 lub nowszej, sorry.",
+ "%s requires php %s or above to work. Sorry.":
+ "%s wymaga PHP w wersji %s lub nowszej, sorry.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s wymaga obecności sekcji [%s] w pliku konfiguracyjnym.",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Odpowiedz",
"Anonymous":
"Anonim",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Anonimowy avatar (Vizhash z adresu IP)",
"Add comment":
"Dodaj komentarz",
@@ -112,8 +112,8 @@
"bląd serwera lub brak odpowiedzi",
"Could not post comment: %s":
"Nie udało się wysłać komentarza: %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Wysyłanie wklejki (proszę poruszać myszą aby uzyskać większą entropię)…",
+ "Please move your mouse for more entropy…":
+ "Proszę poruszać myszą aby uzyskać większą entropię…",
"Sending paste…":
"Wysyłanie wklejki…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -129,7 +129,8 @@
"Source Code": "Kod źródłowy",
"Markdown": "Markdown",
"Download attachment": "Pobierz załącznik",
- "Cloned file attached.": "Sklonowano załączony plik.",
+ "Cloned: '%s'": "Sklonowano: '%s'",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Załącz plik",
"Remove attachment": "Usuń załącznik",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -146,6 +147,9 @@
"Enter password":
"Wpisz hasło",
"Loading…": "Loading…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "In case this message never disappears please have a look at this FAQ for information to troubleshoot (in English)."
+ "In case this message never disappears please have a look at this FAQ for information to troubleshoot (in English).",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/pt.json b/i18n/pt.json
index e00a4a1..6af67cf 100644
--- a/i18n/pt.json
+++ b/i18n/pt.json
@@ -7,8 +7,8 @@
"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 php %s or above to work. Sorry.":
+ "%s requer php %s 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.":
@@ -93,7 +93,7 @@
"Anonymous":
"Anônimo",
"Avatar generated from IP address":
- "Avatar (do endereço IP)",
+ "Avatar gerado à partir do endereço IP",
"Add comment":
"Adicionar comentário",
"Optional nickname…":
@@ -130,6 +130,7 @@
"Markdown": "Markdown",
"Download attachment": "Baixar anexo",
"Cloned: '%s'": "Clonado: '%s'",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Anexar um arquivo",
"Remove attachment": "Remover anexo",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -146,6 +147,9 @@
"Enter password":
"Digite a senha",
"Loading…": "Carregando…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "Caso essa mensagem nunca desapareça, por favor veja este FAQ para saber como resolver os problemas."
+ "Caso essa mensagem nunca desapareça, por favor veja este FAQ para saber como resolver os problemas.",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/ru.json b/i18n/ru.json
index 7e92da7..989d3e4 100644
--- a/i18n/ru.json
+++ b/i18n/ru.json
@@ -7,8 +7,8 @@
"en": "ru",
"Paste does not exist, has expired or has been deleted.":
"Запись не существует, просрочена или была удалена.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "Для работы %s требуется PHP 5.3.0 или выше. Извините.",
+ "%s requires php %s or above to work. Sorry.":
+ "Для работы %s требуется php %s или выше. Извините.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s необходимо наличие секции [%s] в конфигурационном файле.",
"Please wait %d seconds between each post.":
@@ -32,7 +32,7 @@
"Paste was properly deleted.":
"Запись была успешно удалена.",
"JavaScript is required for %s to work.
Sorry for the inconvenience.":
- "Для работы %s требуется включенный JavaScript.
Приносим извинения за неудобства..",
+ "Для работы %s требуется включенный JavaScript.
Приносим извинения за неудобства.",
"%s requires a modern browser to work.":
"Для работы %s требуется более современный браузер.",
"Still using Internet Explorer? Do yourself a favor, switch to a modern browser:":
@@ -92,7 +92,7 @@
"Ответить",
"Anonymous":
"Аноним",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Анонимный аватар (Vizhash IP адреса)",
"Add comment":
"Добавить комментарий",
@@ -105,15 +105,15 @@
"Comment posted.":
"Комментарий опубликован.",
"Could not refresh display: %s":
- "Невозможно обновить данные: %s",
+ "Could not refresh display: %s",
"unknown status":
"неизвестная причина",
"server error or not responding":
"ошибка сервера или нет ответа",
"Could not post comment: %s":
"Не удалось опубликовать комментарий: %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Отправка записи (Пожалуйста двигайте мышкой для большей энтропии)…",
+ "Please move your mouse for more entropy…":
+ "Пожалуйста двигайте мышкой для большей энтропии…",
"Sending paste…":
"Отправка записи…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -138,7 +138,9 @@
"Source Code": "Исходный код",
"Markdown": "Язык разметки",
"Download attachment": "Скачать прикрепленный файл",
- "Cloned file attached.": "Дубль файла прикреплен.",
+ "Cloned: '%s'": "Дублировано: '%s'",
+ "The cloned file '%s' was attached to this paste.":
+ "Дубликат файла '%s' был прикреплен к этой записи.",
"Attach a file": "Прикрепить файл",
"Remove attachment": "Удалить вложение",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -154,6 +156,10 @@
"Расшифровать",
"Enter password":
"Введите пароль",
- "Uploading paste… Please wait.":
- "Отправка записи… Пожалуйста подождите."
+ "Loading…": "Загрузка…",
+ "Decrypting paste…": "Расшифровка записи…",
+ "Preparing new paste…": "Подготовка новой записи…",
+ "In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
+ "Если данное сообщение не исчезает длительное время, посмотрите этот FAQ с информацией о возможном решении проблемы (на английском).",
+ "+++ no paste text +++": "+++ в записи нет текста +++"
}
diff --git a/i18n/sl.json b/i18n/sl.json
index 2df2608..21db8c1 100644
--- a/i18n/sl.json
+++ b/i18n/sl.json
@@ -7,8 +7,8 @@
"en": "sl",
"Paste does not exist, has expired or has been deleted.":
"Prilepek ne obstaja, mu je potekla življenjska doba, ali pa je izbrisan.",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "Oprosti, %s za delovanje potrebuje vsaj php 5.3.0.",
+ "%s requires php %s or above to work. Sorry.":
+ "Oprosti, %s za delovanje potrebuje vsaj php %s.",
"%s requires configuration section [%s] to be present in configuration file.":
"%s potrebuje sekcijo konfiguracij [%s] v konfiguracijski datoteki.",
"Please wait %d seconds between each post.":
@@ -92,7 +92,7 @@
"Odgovori",
"Anonymous":
"Aninomno",
- "Anonymous avatar (Vizhash of the IP address)":
+ "Avatar generated from IP address":
"Anonimen avatar (Vizhash IP naslova)",
"Add comment":
"Dodaj komentar",
@@ -112,8 +112,8 @@
"napaka na strežniku, ali pa se strežnik ne odziva",
"Could not post comment: %s":
"Komentarja ni bilo mogoče objaviti : %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "Pošiljam prilepek (prosim premakni svojo miško za več entropije) …",
+ "Please move your mouse for more entropy…":
+ "Prosim premakni svojo miško za več entropije…",
"Sending paste…":
"Pošiljam prilepek…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -138,7 +138,8 @@
"Source Code": "Odprta koda",
"Markdown": "Markdown",
"Download attachment": "Pretoči priponko",
- "Cloned file attached.": "Pripeta datoteka klonirana",
+ "Cloned: '%s'": "'%s' klonirana",
+ "The cloned file '%s' was attached to this paste.": "The cloned file '%s' was attached to this paste.",
"Attach a file": "Pripni datoteko",
"Remove attachment": "Odstrani priponko",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -155,6 +156,9 @@
"Enter password":
"Prosim vnesi geslo",
"Loading…": "Loading…",
+ "Decrypting paste…": "Decrypting paste…",
+ "Preparing new paste…": "Preparing new paste…",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "In case this message never disappears please have a look at this FAQ for information to troubleshoot (in English)."
+ "In case this message never disappears please have a look at this FAQ for information to troubleshoot (in English).",
+ "+++ no paste text +++": "+++ no paste text +++"
}
diff --git a/i18n/zh.json b/i18n/zh.json
index 41efcc4..5fcaf3d 100644
--- a/i18n/zh.json
+++ b/i18n/zh.json
@@ -7,8 +7,8 @@
"en": "zh",
"Paste does not exist, has expired or has been deleted.":
"粘贴不存在,已过期或者已被删除。",
- "%s requires php 5.3.0 or above to work. Sorry.":
- "%s需要工作于PHP 5.3.0及以上版本,抱歉。",
+ "%s requires php %s or above to work. Sorry.":
+ "%s需要工作于PHP %s及以上版本,抱歉。",
"%s requires configuration section [%s] to be present in configuration file.":
"%s需要设置配置文件中 [%s] 的部分。",
"Please wait %d seconds between each post.":
@@ -92,8 +92,8 @@
"回复",
"Anonymous":
"匿名",
- "Anonymous avatar (Vizhash of the IP address)":
- "匿名头像 (由IP地址生成Vizhash)",
+ "Avatar generated from IP address":
+ "由IP生成的头像",
"Add comment":
"添加评论",
"Optional nickname…":
@@ -112,8 +112,8 @@
"服务器错误或无回应",
"Could not post comment: %s":
"无法发送评论: %s",
- "Sending paste (Please move your mouse for more entropy)…":
- "粘贴提交中 (请移动鼠标以产生更多熵)…",
+ "Please move your mouse for more entropy…":
+ "请移动鼠标增加随机性…",
"Sending paste…":
"粘贴提交中…",
"Your paste is %s (Hit [Ctrl]+[c] to copy)":
@@ -129,7 +129,8 @@
"Source Code": "源代码",
"Markdown": "Markdown",
"Download attachment": "下载附件",
- "Cloned file attached.": "已附加克隆的文件",
+ "Cloned: '%s'": "克隆: '%s'",
+ "The cloned file '%s' was attached to this paste.": "克隆文件 '%s' 已附加到此粘贴。",
"Attach a file": "添加一个附件",
"Remove attachment": "移除附件",
"Your browser does not support uploading encrypted files. Please use a newer browser.":
@@ -146,6 +147,9 @@
"Enter password":
"输入密码",
"Loading…": "载入中…",
+ "Decrypting paste…": "正在解密",
+ "Preparing new paste…": "正在准备新的粘贴",
"In case this message never disappears please have a look at this FAQ for information to troubleshoot.":
- "如果这个消息一直不消失,请参考 这里的 FAQ 进行故障排除 (英文版)。"
+ "如果这个消息一直不消失,请参考 这里的 FAQ 进行故障排除 (英文版)。",
+ "+++ no paste text +++": "+++ 没有粘贴内容 +++"
}
diff --git a/js/privatebin.js b/js/privatebin.js
index 10b6a3a..c55a027 100644
--- a/js/privatebin.js
+++ b/js/privatebin.js
@@ -179,20 +179,20 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
*
* @name Helper.urls2links
* @function
- * @param {Object} element - a jQuery DOM element
+ * @param {Object} $element - a jQuery DOM element
*/
me.urls2links = function($element)
{
var markup = '$1';
$element.html(
$element.html().replace(
- /((http|https|ftp):\/\/[\w?=&.\/-;#@~%+-]+(?![\w\s?&.\/;#~%"=-]*>))/ig,
+ /((http|https|ftp):\/\/[\w?=&.\/-;#@~%+*-]+(?![\w\s?&.\/;#~%"=-]*>))/ig,
markup
)
);
$element.html(
$element.html().replace(
- /((magnet):[\w?=&.\/-;#@~%+-]+)/ig,
+ /((magnet):[\w?=&.\/-;#@~%+*-]+)/ig,
markup
)
);
@@ -201,6 +201,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
/**
* minimal sprintf emulation for %s and %d formats
*
+ * Note that this function needs the parameters in the same order as the
+ * format strings appear in the string, contrary to the original.
+ *
* @see {@link https://stackoverflow.com/questions/610406/javascript-equivalent-to-printf-string-format#4795914}
* @name Helper.sprintf
* @function
@@ -213,27 +216,22 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
var args = Array.prototype.slice.call(arguments);
var format = args[0],
i = 1;
- return format.replace(/%((%)|s|d)/g, function (m) {
+ return format.replace(/%(s|d)/g, function (m) {
// m is the matched format, e.g. %s, %d
- var val;
- if (m[2]) {
- val = m[2];
- } else {
- val = args[i];
- // A switch statement so that the formatter can be extended.
- switch (m)
- {
- case '%d':
- val = parseFloat(val);
- if (isNaN(val)) {
- val = 0;
- }
- break;
- default:
- // Default is %s
- }
- ++i;
+ var val = args[i];
+ // A switch statement so that the formatter can be extended.
+ switch (m)
+ {
+ case '%d':
+ val = parseFloat(val);
+ if (isNaN(val)) {
+ val = 0;
+ }
+ break;
+ default:
+ // Default is %s
}
+ ++i;
return val;
});
}
@@ -244,7 +242,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* @see {@link http://www.w3schools.com/js/js_cookies.asp}
* @name Helper.getCookie
* @function
- * @param {string} cname
+ * @param {string} cname - may not be empty
* @return {string}
*/
me.getCookie = function(cname) {
@@ -675,7 +673,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* @function
* @return {string} func
*/
- me.getSymmetricKey = function(func)
+ me.getSymmetricKey = function()
{
return sjcl.codec.base64.fromBits(sjcl.random.randomWords(8, 0), 0);
}
@@ -903,8 +901,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
me.isVisible = function($element)
{
var elementTop = $element.offset().top;
- var elementBottom = elementTop + $element.outerHeight();
-
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
@@ -985,11 +981,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* Alert/error manager
*
* @name Alert
- * @param {object} window
- * @param {object} document
* @class
*/
- var Alert = (function (window, document) {
+ var Alert = (function () {
var me = {};
var $errorMessage,
@@ -1249,17 +1243,16 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
}
return me;
- })(window, document);
+ })();
/**
* handles paste status/result
*
* @name PasteStatus
* @param {object} window
- * @param {object} document
* @class
*/
- var PasteStatus = (function (window, document) {
+ var PasteStatus = (function (window) {
var me = {};
var $pasteSuccess,
@@ -1402,17 +1395,15 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
}
return me;
- })(window, document);
+ })(window);
/**
* password prompt
*
* @name Prompt
- * @param {object} window
- * @param {object} document
* @class
*/
- var Prompt = (function (window, document) {
+ var Prompt = (function () {
var me = {};
var $passwordDecrypt,
@@ -1512,7 +1503,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
}
return me;
- })(window, document);
+ })();
/**
* Manage paste/message input, and preview tab
@@ -1520,11 +1511,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* Note that the actual preview is handled by PasteViewer.
*
* @name Editor
- * @param {object} window
- * @param {object} document
* @class
*/
- var Editor = (function (window, document) {
+ var Editor = (function () {
var me = {};
var $editorTabs,
@@ -1728,17 +1717,15 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
}
return me;
- })(window, document);
+ })();
/**
* (view) Parse and show paste.
*
* @name PasteViewer
- * @param {object} window
- * @param {object} document
* @class
*/
- var PasteViewer = (function (window, document) {
+ var PasteViewer = (function () {
var me = {};
var $placeholder,
@@ -1904,7 +1891,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* @function
* @return {string}
*/
- me.getText = function(newText)
+ me.getText = function()
{
return text;
}
@@ -1981,7 +1968,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
}
return me;
- })(window, document);
+ })();
/**
* (view) Show attachment and preview if possible
@@ -1998,8 +1985,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
$attachmentPreview,
$attachment;
- var attachmentChanged = false,
- attachmentHasPreview = false;
+ var attachmentHasPreview = false;
/**
* sets the attachment but does not yet show it
@@ -2027,8 +2013,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
);
attachmentHasPreview = true;
}
-
- attachmentChanged = true;
}
/**
@@ -3043,7 +3027,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* @private
* @function
* @param {int} status
- * @param {int} data - optional
+ * @param {int} result - optional
*/
function success(status, result)
{
@@ -3063,7 +3047,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* @private
* @function
* @param {int} status - internal code
- * @param {int} data - original error code
+ * @param {int} result - original error code
*/
function fail(status, result)
{
@@ -3107,7 +3091,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
*
* @name Uploader.setUrl
* @function
- * @param {function} func
+ * @param {function} newUrl
*/
me.setUrl = function(newUrl)
{
@@ -3236,17 +3220,18 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
* @return {array}
*/
me.parseUploadError = function(status, data, doThisThing) {
- var errorArray = ['Error while parsing error message.'];
+ var errorArray;
switch (status) {
- case Uploader.error['custom']:
+ case me.error['custom']:
errorArray = ['Could not ' + doThisThing + ': %s', data.message];
break;
- case Uploader.error['unknown']:
+ case me.error['unknown']:
errorArray = ['Could not ' + doThisThing + ': %s', I18n._('unknown status')];
break;
- case Uploader.error['serverError']:
- errorArray = ['Could not ' + doThisThing + ': %s', I18n._('server error or not responding')]; break;
+ case me.error['serverError']:
+ errorArray = ['Could not ' + doThisThing + ': %s', I18n._('server error or not responding')];
+ break;
default:
errorArray = ['Could not ' + doThisThing + ': %s', I18n._('unknown error')];
break;
@@ -3884,7 +3869,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
// show proper elements on screen
PasteDecrypter.run();
- return;
}
/**
diff --git a/js/test.js b/js/test.js
index e83d43b..2d5a544 100644
--- a/js/test.js
+++ b/js/test.js
@@ -68,6 +68,225 @@ describe('Helper', function () {
});
});
+ // this test is not yet meaningful using jsdom, as it does not contain getSelection support.
+ // TODO: This needs to be tested using a browser.
+ describe('selectText', function () {
+ jsc.property(
+ 'selection contains content of given ID',
+ jsc.nearray(jsc.nearray(jsc.elements(alnumString))),
+ 'nearray string',
+ function (ids, contents) {
+ var html = '',
+ result = true;
+ ids.forEach(function(item, i) {
+ html += '