Release version 1.8.4

This commit is contained in:
muxator 2020-05-15 02:10:40 +02:00
commit 89a155fdce
71 changed files with 425 additions and 295 deletions

View file

@ -1,3 +1,11 @@
# 1.8.4
* FIX: fix a performance regression on MySQL introduced in 1.8.3
* FIX: when running behind a reverse proxy and exposed in an inner directory, fonts and toolbar icons should now be visible. This is a regression introduced in 1.8.3
* FIX: cleanups in the UI after the CSS rehaul of 1.8.3
* MINOR: protect against bugged/stale UI elements after updates. An explicit cache busting via random query string is performed at each start. This needs to be replaced with hashed names in static assets.
* MINOR: improved some tests
* MINOR: fixed long-standing bugs in the maintenance tools in /bin (migrateDirtyDBtoRealDB, rebuildPad, convert, importSqlFile)
# 1.8.3
* FEATURE: colibris is now the default skin for new installs
* FEATURE: improved colibris visuals, and migrated to Flexbox layout

View file

@ -1,7 +1,7 @@
var startTime = Date.now();
var fs = require("fs");
var ueberDB = require("../src/node_modules/ueberDB");
var mysql = require("../src/node_modules/ueberDB/node_modules/mysql");
var ueberDB = require("../src/node_modules/ueberdb2");
var mysql = require("../src/node_modules/ueberdb2/node_modules/mysql");
var async = require("../src/node_modules/async");
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString;

View file

@ -4,7 +4,7 @@ require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {
var fs = require("fs");
var ueberDB = require("ep_etherpad-lite/node_modules/ueberDB");
var ueberDB = require("ep_etherpad-lite/node_modules/ueberdb2");
var settings = require("ep_etherpad-lite/node/utils/Settings");
var log4js = require('ep_etherpad-lite/node_modules/log4js');

View file

@ -11,33 +11,39 @@ require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) {
var settings = require("ep_etherpad-lite/node/utils/Settings");
var dirty = require("../src/node_modules/dirty")('var/dirty.db');
var dirty = require("../src/node_modules/dirty");
var ueberDB = require("../src/node_modules/ueberdb2");
var log4js = require("../src/node_modules/log4js");
var dbWrapperSettings = {
"cache": "0", // The cache slows things down when you're mostly writing.
"writeInterval": 0 // Write directly to the database, don't buffer
"cache": "0", // The cache slows things down when you're mostly writing.
"writeInterval": 0 // Write directly to the database, don't buffer
};
var db = new ueberDB.database(settings.dbType, settings.dbSettings, dbWrapperSettings, log4js.getLogger("ueberDB"));
var i = 0;
var length = 0;
db.init(function() {
console.log("Waiting for dirtyDB to parse its file.");
dirty.on("load", function(length) {
console.log("Loaded " + length + " records, processing now.");
var remaining = length;
dirty.forEach(function(key, value) {
db.set(key, value, function(error) {
if (typeof error != 'undefined') {
console.log("Unexpected result handling: ", key, value, " was: ", error);
}
remaining -= 1;
var oldremaining = remaining;
if ((oldremaining % 100) == 0) {
console.log("Records not yet flushed to database: ", remaining);
}
});
});
console.log("Waiting for dirtyDB to parse its file.");
dirty = dirty('var/dirty.db').on("load", function() {
dirty.forEach(function(){
length++;
});
console.log(`Found ${length} records, processing now.`);
dirty.forEach(async function(key, value) {
let error = await db.set(key, value);
console.log(`Wrote record ${i}`);
i++;
if (i === length) {
console.log("finished, just clearing up for a bit...");
setTimeout(function() {
process.exit(0);
}, 5000);
}
});
console.log("Please wait for all records to flush to database, then kill this process.");
});
console.log("done?")
});
});

View file

@ -10,7 +10,7 @@ if(process.argv.length != 4 && process.argv.length != 5) {
var npm = require("../src/node_modules/npm");
var async = require("../src/node_modules/async");
var ueberDB = require("../src/node_modules/ueberDB");
var ueberDB = require("../src/node_modules/ueberdb2");
var padId = process.argv[2];
var newRevHead = process.argv[3];

View file

@ -91,7 +91,7 @@ Available blocks in `pad.html` are:
* `timesliderEditbarRight`
* `modals`
`index.html` blocks:
`index.html` blocks:
* `indexWrapper` - contains the form for creating new pads

View file

@ -44,4 +44,19 @@ a:hover {
display: block;
overflow: auto;
padding: 5px;
}
}
table, th, td {
text-align: left;
border: 1px solid gray;
border-collapse: collapse;
}
th {
padding: 0.5em;
background: #EEE;
}
td {
padding: 0.5em;
}

View file

@ -38,7 +38,7 @@ docker build --tag <YOUR_USERNAME>/etherpad .
Include two plugins in the container:
```bash
docker build --build-arg ETHERPAD_PLUGINS="ep_codepad ep_author_neat" --tag <YOUR_USERNAME>/etherpad .
docker build --build-arg ETHERPAD_PLUGINS="ep_comments_page ep_author_neat" --tag <YOUR_USERNAME>/etherpad .
```
## Running your instance:

View file

@ -137,5 +137,7 @@
"pad.impexp.uploadFailed": "فشل التحميل، الرجاء المحاولة مرة أخرى",
"pad.impexp.importfailed": "فشل الاستيراد",
"pad.impexp.copypaste": "الرجاء نسخ/لصق",
"pad.impexp.exportdisabled": "تصدير التنسيق {{type}} معطل. يرجى الاتصال بمسؤول النظام الخاص بك للحصول على التفاصيل."
"pad.impexp.exportdisabled": "تصدير التنسيق {{type}} معطل. يرجى الاتصال بمسؤول النظام الخاص بك للحصول على التفاصيل.",
"pad.impexp.maxFileSize": "الملف كبير جدا. اتصل بإداري الموقع الخاص بك لزيادة حجم الملف المسموح به للاستيراد",
"pad.impexp.permission": "الاستيراد معطل لأنك لم تساهم مسبقا لهذه الباد. من فضلك ساهم على الأقل مرة واحدة قبل الاستيراد"
}

View file

@ -50,7 +50,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Sólo se pue importar dende los formatos de testu planu o HTML. Pa carauterístiques d'importación más avanzaes <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instala Abiword</a>.",
"pad.importExport.abiword.innerHTML": "Sólo se pue importar dende los formatos de testu planu o HTML. Pa carauterístiques d'importación más avanzaes <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instala Abiword o LibreOffice</a>.",
"pad.modals.connected": "Coneutáu.",
"pad.modals.reconnecting": "Reconeutando col to bloc...",
"pad.modals.forcereconnect": "Forzar la reconexón",
@ -127,5 +127,7 @@
"pad.impexp.uploadFailed": "Falló la carga del ficheru, intentalo otra vuelta",
"pad.impexp.importfailed": "Falló la importación",
"pad.impexp.copypaste": "Por favor, copia y apega",
"pad.impexp.exportdisabled": "La esportación en formatu {{type}} ta desactivada. Por favor, comunica col alministrador del sistema pa más detalles."
"pad.impexp.exportdisabled": "La esportación en formatu {{type}} ta desactivada. Por favor, comunica col alministrador del sistema pa más detalles.",
"pad.impexp.maxFileSize": "El ficheru ye demasiao grande. Comunícate col alministrador del sitiu p'aumentar el tamañu de ficheru permitíu na importación",
"pad.impexp.permission": "La importación ta desactivada porque nunca contribuisti nesti bloc. Contribuye polo menos una vez antes d'importar"
}

View file

@ -8,7 +8,7 @@
]
},
"index.newPad": "Pad nevez",
"index.createOpenPad": "pe krouiñ/digeriñ ur pad gant an anv :",
"index.createOpenPad": "pe krouiñ/digeriñ ur Pad gant an anv :",
"pad.toolbar.bold.title": "Tev (Ctrl-B)",
"pad.toolbar.italic.title": "Italek (Ctrl-I)",
"pad.toolbar.underline.title": "Islinennañ (Ctrl-U)",
@ -53,7 +53,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Ne c'hallit ket enporzhiañ furmadoù testennoù kriz pe HTML hepken. Evit arc'hwelioù enporzhiañ emdroetoc'h, staliit <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">staliañ Abiword</a> mar plij.",
"pad.importExport.abiword.innerHTML": "Ne c'hallit enporzhiañ nemet furmadoù testennoù plaen pe HTML. Evit arc'hwelioù enporzhiañ emdroetoc'h, staliit <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">Abiword pe LibreOffice</a>.",
"pad.modals.connected": "Kevreet.",
"pad.modals.reconnecting": "Adkevreañ war-zu ho pad...",
"pad.modals.forcereconnect": "Adkevreañ dre heg",
@ -130,5 +130,7 @@
"pad.impexp.uploadFailed": "C'hwitet eo bet an enporzhiañ. Klaskit en-dro.",
"pad.impexp.importfailed": "C'hwitet eo an enporzhiadenn",
"pad.impexp.copypaste": "Eilit/pegit, mar plij",
"pad.impexp.exportdisabled": "Diweredekaet eo ezporzhiañ d'ar furmad {{type}}. Kit e darempred gant merour ar reizhiad evit gouzout hiroc'h."
"pad.impexp.exportdisabled": "Diweredekaet eo ezporzhiañ d'ar furmad {{type}}. Kit e darempred gant merour ar reizhiad evit gouzout hiroc'h.",
"pad.impexp.maxFileSize": "Re vras eo ar restr. Kit e daremrepd gant merour ho lec'hienn evit kreskiñ ment aoteet ar restroù evit enporzhiañ",
"pad.impexp.permission": "Diweredekaet eo an enporzhiañ peogwir n'hoc'h eus ket kemeret perzh gwech ebet er bloc'had-se. Kemerit perzh ur wech da nebeutañ a-raok enporzhiañ."
}

View file

@ -120,7 +120,7 @@
"pad.userlist.guest": "Gæst",
"pad.userlist.deny": "Nægt",
"pad.userlist.approve": "Godkend",
"pad.editbar.clearcolors": "Fjern farver for ophavsmand i hele dokumentet?",
"pad.editbar.clearcolors": "Fjern farver for ophavsmand i hele dokumentet? Dette kan ikke fortrydes",
"pad.impexp.importbutton": "Importer nu",
"pad.impexp.importing": "Importerer...",
"pad.impexp.confirmimport": "At importere en fil, vil overskrives den aktuelle pad tekst. Er du sikker på du vil fortsætte?",

View file

@ -1,6 +1,7 @@
{
"@metadata": {
"authors": [
"Bjarncraft",
"Metalhead64",
"Mklehr",
"Nipsky",
@ -56,7 +57,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Sie können nur aus reinen Text- oder HTML-Formaten importieren. Für umfangreichere Importfunktionen <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installieren Sie bitte AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Sie können nur aus reinen Text- oder HTML-Formaten importieren. Für umfangreichere Importfunktionen <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installieren Sie bitte AbiWord oder LibreOffice</a>.",
"pad.modals.connected": "Verbunden.",
"pad.modals.reconnecting": "Wiederherstellen der Verbindung …",
"pad.modals.forcereconnect": "Erneutes Verbinden erzwingen",
@ -133,5 +134,7 @@
"pad.impexp.uploadFailed": "Das Hochladen ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
"pad.impexp.importfailed": "Import fehlgeschlagen",
"pad.impexp.copypaste": "Bitte kopieren und einfügen",
"pad.impexp.exportdisabled": "Der Export im {{type}}-Format ist deaktiviert. Für Einzelheiten kontaktieren Sie bitte Ihren Systemadministrator."
"pad.impexp.exportdisabled": "Der Export im {{type}}-Format ist deaktiviert. Für Einzelheiten kontaktieren Sie bitte Ihren Systemadministrator.",
"pad.impexp.maxFileSize": "Datei zu groß.Kontaktiere deinen Administrator um das datei Limit für Imports zu erhöhen.",
"pad.impexp.permission": "Importieren ist deaktiviert weil du nichts zu diesem Pad beigeteagen hast.Bitte trage etwas bei bevor du importierst."
}

View file

@ -56,7 +56,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": ıma şenê tenya metınanê zelalan ya zi formatanê HTML-i biyarê. Seba vêşi xısusiyetanê arezekerdışi ra gırey <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">AbiWord-i bar kerên</a>.",
"pad.importExport.abiword.innerHTML": ıma şenê tenya metınanê zelalan ya zi formatanê HTML-i biyarê. Seba vêşi xısusiyetanê arezekerdışi ra gırey <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">AbiWordi ya zi LibreOfficeyi bar kerên</a>.",
"pad.modals.connected": "Gıre diya.",
"pad.modals.reconnecting": "Bloknot da şıma rê fına irtibat kewê no",
"pad.modals.forcereconnect": "Mecbur anciya gırê de",
@ -133,5 +133,7 @@
"pad.impexp.uploadFailed": "Barkerdış nêbi, kerem ke anciya bıcerebne",
"pad.impexp.importfailed": "Zer kerdış mıwafaq nebı",
"pad.impexp.copypaste": "Reca keme kopya pronayış bıkeri",
"pad.impexp.exportdisabled": "Formatta {{type}} ya ateber kerdış dewra vıciya yo. Qandé teferruati idarekarana irtibat kewê"
"pad.impexp.exportdisabled": "Formatta {{type}} ya ateber kerdış dewra vıciya yo. Qandé teferruati idarekarana irtibat kewê",
"pad.impexp.maxFileSize": "Dosya zêde gırsa, azere kerdışi rê mısade deyaye ebatê dosyay zeydınayışi rê idarekarê siteya irtibat kewê",
"pad.impexp.permission": ıma ena ped rê qet iştirak nêkerdo coki ra azere kerdış dewre ra veto. Vêre azere kerdışi minimum yû iştirak bıkerê"
}

View file

@ -54,7 +54,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Μορφή Open Document)",
"pad.importExport.abiword.innerHTML": "Μπορείτε να εισάγετε απλό κείμενο ή HTML. Για προηγμένες δυνατότητες εισαγωγής παρακαλούμε <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">εγκαταστήστε το AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Μπορείτε να εισάγετε απλό κείμενο ή HTML. Για προηγμένες δυνατότητες εισαγωγής παρακαλούμε <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">εγκαταστήστε το AbiWord ή το LibreOffice</a>.",
"pad.modals.connected": "Συνδεμένοι.",
"pad.modals.reconnecting": "Επανασύνδεση στο pad σας...",
"pad.modals.forcereconnect": "Επιβολή επανασύνδεσης",
@ -122,7 +122,7 @@
"pad.userlist.guest": "Επισκέπτης",
"pad.userlist.deny": "Άρνηση",
"pad.userlist.approve": "Έγκριση",
"pad.editbar.clearcolors": "Να γίνει εκκαθάριση χρωμάτων σύνταξης σε ολόκληρο το έγγραφο;",
"pad.editbar.clearcolors": "Να γίνει εκκαθάριση χρωμάτων σύνταξης σε ολόκληρο το έγγραφο; Αυτό δεν μπορεί να αναιρεθεί",
"pad.impexp.importbutton": "Εισαγωγή Τώρα",
"pad.impexp.importing": "Εισάγεται...",
"pad.impexp.confirmimport": "Η εισαγωγή ενός αρχείου θα αντικαταστήσει το κείμενο του pad. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;",

View file

@ -78,7 +78,7 @@
"pad.modals.corruptPad.explanation": "Sartzen saiatzen ari zaren Pad-a hondatuta dago.",
"pad.modals.corruptPad.cause": "Baliteke zerbitzari okerreko konfigurazioa edo beste ustekabeko portaera batzuk izatea. Jarri harremanetan zerbitzu-administratzailearekin.",
"pad.modals.deleted": "Ezabatua.",
"pad.modals.deleted.explanation": "Pad hau ezabatua izan da.",
"pad.modals.deleted.explanation": "Pad hau ezabatu da.",
"pad.modals.disconnected": "Deskonektatua izan zara.",
"pad.modals.disconnected.explanation": "Zerbitzariaren konexioa galdu da",
"pad.modals.disconnected.cause": "Baliteke zerbitzaria eskuragarri ez egotea. Mesedez, jakinarazi zerbitzuko administrariari honek gertatzen jarraitzen badu.",

View file

@ -74,7 +74,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou HTML. Pour des fonctionnalités dimportation plus évoluées, veuillez <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installer AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou HTML. Pour des fonctionnalités dimportation plus évoluées, veuillez <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installer AbiWord ou LibreOffice</a>.",
"pad.modals.connected": "Connecté.",
"pad.modals.reconnecting": "Reconnexion à votre bloc-notes...",
"pad.modals.forcereconnect": "Forcer la reconnexion",
@ -151,5 +151,7 @@
"pad.impexp.uploadFailed": "Le téléversement a échoué, veuillez réessayer",
"pad.impexp.importfailed": "Échec de limportation",
"pad.impexp.copypaste": "Veuillez copier-coller",
"pad.impexp.exportdisabled": "Lexportation au format {{type}} est désactivée. Veuillez contacter votre administrateur système pour plus de détails."
"pad.impexp.exportdisabled": "Lexportation au format {{type}} est désactivée. Veuillez contacter votre administrateur système pour plus de détails.",
"pad.impexp.maxFileSize": "Fichier trop gros. Contactez votre administrateur de site pour augmenter la taille maximale des fichiers importés",
"pad.impexp.permission": "Limportation est désactivée parce que vous navez jamais contribué à ce bloc. Veuillez contribuer au moins une fois avant dimporter"
}

View file

@ -53,7 +53,7 @@
"pad.importExport.exportword": "מיקרוסופט וורד",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "באפשרותך לייבא מטקסט פשוט או מ־HTML. לאפשרויות ייבוא מתקדמות יותר יש <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">להתקין AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "באפשרותך לייבא מטקסט פשוט או מ־HTML. לאפשרויות ייבוא מתקדמות יותר יש <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">להתקין AbiWord או LibreOffice</a>.",
"pad.modals.connected": "מחובר.",
"pad.modals.reconnecting": "מתבצע חיבור מחדש...",
"pad.modals.forcereconnect": "לכפות חיבור מחדש",
@ -121,7 +121,7 @@
"pad.userlist.guest": "אורח",
"pad.userlist.deny": "לדחות",
"pad.userlist.approve": "לאשר",
"pad.editbar.clearcolors": "לנקות צבעים לסימון כותבים בכל המסמך?",
"pad.editbar.clearcolors": "לנקות צבעים לסימון כותבים בכל המסמך? זו פעולה בלתי הפיכה",
"pad.impexp.importbutton": "לייבא כעת",
"pad.impexp.importing": "ייבוא...",
"pad.impexp.confirmimport": "ייבוא של קובץ יבטל את הטקסט הנוכחי בפנקס. האם ברצונך להמשיך?",
@ -130,5 +130,7 @@
"pad.impexp.uploadFailed": "ההעלאה נכשלה, נא לנסות שוב",
"pad.impexp.importfailed": "הייבוא נכשל",
"pad.impexp.copypaste": "נא להעתיק ולהדביק",
"pad.impexp.exportdisabled": "ייצוא בתסדיר {{type}} אינו פעיל. מנהל המערכת שלך יוכל לספר לך על זה עוד פרטים."
"pad.impexp.exportdisabled": "ייצוא בתסדיר {{type}} אינו פעיל. מנהל המערכת שלך יוכל לספר לך על זה עוד פרטים.",
"pad.impexp.maxFileSize": "הקובץ גדול מדי. נא ליצור קשר עם הנהלת האתר כדי להגדיל את הגודל המרבי שמותר לייבא.",
"pad.impexp.permission": "הייבוא מושבת כיוון שמעולם לא תרמת לפנקס הזה. נא לתרום לפחות פעם אחת בטרם ביצוע ניסיון ייבוא"
}

View file

@ -50,7 +50,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Tu pote solmente importar files in formato de texto simple o HTML. Pro functionalitate de importation plus extense, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">installa AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Tu pote solmente importar files in formato de texto simple o HTML. Pro functionalitate de importation plus extense, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installa AbiWord o LibreOffice</a>.",
"pad.modals.connected": "Connectite.",
"pad.modals.reconnecting": "Reconnecte a tu pad…",
"pad.modals.forcereconnect": "Fortiar reconnexion",

View file

@ -55,7 +55,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "È possibile importare solo i formati di testo semplice o HTML. Per metodi più avanzati di importazione <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installare AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "È possibile importare solo i formati di testo semplice o HTML. Per metodi più avanzati di importazione <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installare AbiWord o LibreOffice</a>.",
"pad.modals.connected": "Connesso.",
"pad.modals.reconnecting": "Riconnessione al pad in corso...",
"pad.modals.forcereconnect": "Forza la riconnessione",

View file

@ -54,7 +54,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "プレーンテキストまたは HTML ファイルからのみインポートできます。より高度なインポート機能を使用するには、<a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">AbiWord をインストール</a>してください。",
"pad.importExport.abiword.innerHTML": "プレーンテキストまたは HTML ファイルからのみインポートできます。より高度なインポート機能を使用するには、<a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">AbiWord またはLibreOfficeをインストール</a>してください。",
"pad.modals.connected": "接続されました。",
"pad.modals.reconnecting": "パッドに再接続中...",
"pad.modals.forcereconnect": "強制的に再接続",
@ -122,7 +122,7 @@
"pad.userlist.guest": "ゲスト",
"pad.userlist.deny": "拒否",
"pad.userlist.approve": "承認",
"pad.editbar.clearcolors": "文書全体の作者の色分けを消去しますか?",
"pad.editbar.clearcolors": "文書全体の作者の色分けを消去しますか? 取り消しはできません。",
"pad.impexp.importbutton": "インポートする",
"pad.impexp.importing": "インポート中...",
"pad.impexp.confirmimport": "ファイルをインポートすると、パッドの現在のテキストが上書きされます。本当に続行しますか?",
@ -131,5 +131,7 @@
"pad.impexp.uploadFailed": "アップロードに失敗しました。もう一度お試しください",
"pad.impexp.importfailed": "インポートに失敗しました",
"pad.impexp.copypaste": "コピー & ペーストしてください",
"pad.impexp.exportdisabled": "{{type}}形式でのエクスポートは無効になっています。詳細はシステム管理者にお問い合わせください。"
"pad.impexp.exportdisabled": "{{type}}形式でのエクスポートは無効になっています。詳細はシステム管理者にお問い合わせください。",
"pad.impexp.maxFileSize": "ファイルが重すぎます。サイト管理者に連絡してインポート可能なファイルサイズの上限を引き上げてもらう必要があります",
"pad.impexp.permission": "このパッドに寄稿した実績がないため、インポートを無効にしました。まず寄稿をしてから再度、インポートしてください"
}

View file

@ -52,7 +52,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Можете да увезувате само од прост текст и HTML-формат. Понапредни можности за увоз ќе добиете ако <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">воспоставите AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Можете да увезувате само од прост текст и HTML-формат. Понапредни можности за увоз ќе добиете ако <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">воспоставите AbiWord или LibreOffice</a>.",
"pad.modals.connected": "Поврзано.",
"pad.modals.reconnecting": "Ве преповрзувам со тетратката...",
"pad.modals.forcereconnect": "Наметни преповрзување",
@ -129,5 +129,7 @@
"pad.impexp.uploadFailed": "Подигањето не успеа. Обидете се повторно.",
"pad.impexp.importfailed": "Увозот не успеа",
"pad.impexp.copypaste": "Прекопирајте",
"pad.impexp.exportdisabled": "Извозот во форматот {{type}} е оневозможен. Ако сакате да дознаете повеќе за ова, обратете се кај системскиот администратор."
"pad.impexp.exportdisabled": "Извозот во форматот {{type}} е оневозможен. Ако сакате да дознаете повеќе за ова, обратете се кај системскиот администратор.",
"pad.impexp.maxFileSize": "Податотеката е преголема. Обратете се кај администраторот за да ви ја зголеми допуштената големина за увоз на податотеки",
"pad.impexp.permission": "Увозот е оневозможен бидејќи досега немате придонеси во тетраткава. Направете барем еден придонес пред да увезувате"
}

View file

@ -54,7 +54,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Du kan bare importere fra ren tekst eller HTML-formater. For mer avanserte importfunksjoner, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installer AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Du kan bare importere fra ren tekst eller HTML-formater. For mer avanserte importfunksjoner, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installer AbiWord eller LibreOffice</a>.",
"pad.modals.connected": "Tilkoblet.",
"pad.modals.reconnecting": "Kobler til din blokk på nytt...",
"pad.modals.forcereconnect": "Tving gjenoppkobling",
@ -122,7 +122,7 @@
"pad.userlist.guest": "Gjest",
"pad.userlist.deny": "Nekt",
"pad.userlist.approve": "Godkjenn",
"pad.editbar.clearcolors": "Fjern forfatterfarger på hele dokumentet?",
"pad.editbar.clearcolors": "Fjern forfatterfarger på hele dokumentet? Dette kan ikke angres",
"pad.impexp.importbutton": "Importer nå",
"pad.impexp.importing": "Importerer...",
"pad.impexp.confirmimport": "Importering av en fil vil overskrive den nåværende teksten på blokken. Er du sikker på at du vil fortsette?",
@ -131,5 +131,7 @@
"pad.impexp.uploadFailed": "Opplastning feilet. Prøv igjen",
"pad.impexp.importfailed": "Import feilet",
"pad.impexp.copypaste": "Vennligst kopier og lim inn",
"pad.impexp.exportdisabled": "Eksporterer som {{type}} er deaktivert. Vennligst kontakt din systemadministrator for detaljer."
"pad.impexp.exportdisabled": "Eksporterer som {{type}} er deaktivert. Vennligst kontakt din systemadministrator for detaljer.",
"pad.impexp.maxFileSize": "Filen er for stor. Kontakt systemansvarlig for å øke filstørrelse for import",
"pad.impexp.permission": "Import er deaktivert fordi du aldri har bidratt til denne padden. Vennligst bidra minst en gang før du importerer"
}

View file

@ -65,7 +65,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Só é possível importar texto sem formatação ou HTML. Para obter funcionalidades de importação mais avançadas, por favor <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instale o AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Só é possível importar texto sem formatação ou HTML. Para obter funcionalidades de importação mais avançadas, por favor <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instale o AbiWordor ou LibreOffice</a>.",
"pad.modals.connected": "Conectado.",
"pad.modals.reconnecting": "Reconectando à sua nota...",
"pad.modals.forcereconnect": "Forçar reconexão",
@ -133,7 +133,7 @@
"pad.userlist.guest": "Convidado",
"pad.userlist.deny": "Negar",
"pad.userlist.approve": "Aprovar",
"pad.editbar.clearcolors": "Deseja limpar cores de autoria em todo o documento?",
"pad.editbar.clearcolors": "Limpar as cores de autoria em todo o documento? isto não pode ser anulado",
"pad.impexp.importbutton": "Importar agora",
"pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "Importar um arquivo sobrescreverá o texto atual da nota. Tem certeza de que deseja prosseguir?",
@ -142,5 +142,7 @@
"pad.impexp.uploadFailed": "O envio falhou. Tente outra vez",
"pad.impexp.importfailed": "A importação falhou",
"pad.impexp.copypaste": "Copie e cole",
"pad.impexp.exportdisabled": "A exportação em formato {{type}} está desativada. Comunique-se com o administrador do sistema para detalhes."
"pad.impexp.exportdisabled": "A exportação em formato {{type}} está desativada. Comunique-se com o administrador do sistema para detalhes.",
"pad.impexp.maxFileSize": "Arquivo muito grande. Entre em contato com o administrador do site para aumentar o tamanho do arquivo permitido para importação",
"pad.impexp.permission": "A importação está desativada porque você nunca contribuiu para este bloco. Contribua pelo menos uma vez antes de importar"
}

View file

@ -7,6 +7,7 @@
"Imperadeiro98",
"Luckas",
"Macofe",
"Mansil alfalb",
"Ti4goc",
"Tuliouel",
"Waldir",
@ -59,7 +60,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Só é possível importar texto sem formatação ou HTML. Para obter funcionalidades de importação mais avançadas, por favor <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instale o AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Só pode importar texto sem formatação ou formatos HTML. Para funcionalidades de importação mais avançadas, por favor, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">instale o AbiWord ou LibreOffice</a>.",
"pad.modals.connected": "Ligado.",
"pad.modals.reconnecting": "A restabelecer ligação ao seu bloco…",
"pad.modals.forcereconnect": "Forçar restabelecimento de ligação",
@ -127,7 +128,7 @@
"pad.userlist.guest": "Convidado",
"pad.userlist.deny": "Negar",
"pad.userlist.approve": "Aprovar",
"pad.editbar.clearcolors": "Deseja limpar as cores de autoria em todo o documento?",
"pad.editbar.clearcolors": "Limpar as cores de autoria em todo o documento? isto não pode ser anulado",
"pad.impexp.importbutton": "Importar agora",
"pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "A importação de um ficheiro irá substituir o texto atual da nota. Tem certeza que deseja continuar?",
@ -136,5 +137,7 @@
"pad.impexp.uploadFailed": "O carregamento falhou; tente novamente, por favor",
"pad.impexp.importfailed": "A importação falhou",
"pad.impexp.copypaste": "Copie e insira, por favor",
"pad.impexp.exportdisabled": "A exportação no formato {{type}} está desativada. Por favor, contacte o administrador do sistema para mais informações."
"pad.impexp.exportdisabled": "A exportação no formato {{type}} está desativada. Por favor, contacte o administrador do sistema para mais informações.",
"pad.impexp.maxFileSize": "Ficheiro muito grande. Contacte o administrador do ''site'' para aumentar o tamanho do ficheiro permitido para importar",
"pad.impexp.permission": "A importação está desativada porque nunca contribuiu para este bloco. Por favor, contribua pelo menos uma vez antes de importar"
}

View file

@ -59,7 +59,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (документ OpenOffice)",
"pad.importExport.abiword.innerHTML": "Вы можете импортировать только из обычного текста или HTML. Для более продвинутых функций импорта, пожалуйста,\n <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">установите AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Вы можете импортировать только из обычного текста или HTML. Для более продвинутых функций импорта <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">установите AbiWord или LibreOffice</a>.",
"pad.modals.connected": "Подключен.",
"pad.modals.reconnecting": "Повторное подключение к вашему документу",
"pad.modals.forcereconnect": "Принудительное переподключение",
@ -127,7 +127,7 @@
"pad.userlist.guest": "Гость",
"pad.userlist.deny": "Отклонить",
"pad.userlist.approve": "Утвердить",
"pad.editbar.clearcolors": "Очистить авторские цвета во всем документе?",
"pad.editbar.clearcolors": "Очистить авторские цвета во всем документе? Это действие не может быть отменено.",
"pad.impexp.importbutton": "Импортировать сейчас",
"pad.impexp.importing": "Импортирование…",
"pad.impexp.confirmimport": "Импорт файла перезапишет текущий текст. Вы уверены, что вы хотите продолжить?",
@ -136,5 +136,7 @@
"pad.impexp.uploadFailed": "Загрузка не удалась, пожалуйста, попробуйте ещё раз",
"pad.impexp.importfailed": "Ошибка при импорте",
"pad.impexp.copypaste": "Пожалуйста, скопируйте",
"pad.impexp.exportdisabled": "Экспорт в формате {{type}} отключён. Для подробной информации обратитесь к системному администратору."
"pad.impexp.exportdisabled": "Экспорт в формате {{type}} отключён. Для подробной информации обратитесь к системному администратору.",
"pad.impexp.maxFileSize": "Файл слишком большой. Обратитесь к администратору сайта, чтобы увеличить разрешённый размер файла для импорта",
"pad.impexp.permission": "Импорт отключен, поскольку вы никогда не вносили вклад в этот документ. Пожалуйста, внесите свой вклад хотя бы один раз перед импортом"
}

View file

@ -56,7 +56,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Једино можете увести са једноставног текстуалног формата или HTML формата. За компликованије функције о увозу, молимо да <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">инсталирате AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Једино можете увести са једноставног текстуалног формата или HTML формата. За компликованије функције о увозу, молимо да <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">инсталирате AbiWord или LibreOffice</a>.",
"pad.modals.connected": "Повезано.",
"pad.modals.reconnecting": "Поново се повезујем на ваш пад..",
"pad.modals.forcereconnect": "Присилно се поново повежи",
@ -124,7 +124,7 @@
"pad.userlist.guest": "Гост",
"pad.userlist.deny": "Одбиј",
"pad.userlist.approve": "Одобри",
"pad.editbar.clearcolors": "Очисти ауторске боје за цели документ?",
"pad.editbar.clearcolors": "Очисти ауторске боје за цели документ? Ово се не може поништити.",
"pad.impexp.importbutton": "Увези одмах",
"pad.impexp.importing": "Увозим...",
"pad.impexp.confirmimport": "Увоз датотеке ће преписати тренутни текст пада. Да ли сте сигурни да желите наставити?",
@ -133,5 +133,6 @@
"pad.impexp.uploadFailed": "Нисам успео да отпремим, молимо покушате поново",
"pad.impexp.importfailed": "Нисам успео да увезем",
"pad.impexp.copypaste": "Копирајте и залепите",
"pad.impexp.exportdisabled": "Извоз у формату {{type}} није дозвољен. Контактирајте системског администратора за детаље."
"pad.impexp.exportdisabled": "Извоз у формату {{type}} није дозвољен. Контактирајте системског администратора за детаље.",
"pad.impexp.maxFileSize": "Датотека је превелика. Контактирајте администратора сајта да повећа допуштену величину датотеке за увоз."
}

View file

@ -52,7 +52,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Du kan endast importera från oformaterad text eller HTML-format. För mer avancerade importfunktioner, var god <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installera AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Du kan endast importera från oformaterad text eller HTML-format. För mer avancerade importfunktioner, var god <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">installera AbiWord eller LibreOffice</a>.",
"pad.modals.connected": "Ansluten.",
"pad.modals.reconnecting": "Återansluter till ditt block...",
"pad.modals.forcereconnect": "Tvinga återanslutning",
@ -120,7 +120,7 @@
"pad.userlist.guest": "Gäst",
"pad.userlist.deny": "Neka",
"pad.userlist.approve": "Godkänn",
"pad.editbar.clearcolors": "Rensa författarfärger på hela dokumentet?",
"pad.editbar.clearcolors": "Rensa författarfärger för hela dokumentet? Detta kan inte ångras",
"pad.impexp.importbutton": "Importera nu",
"pad.impexp.importing": "Importerar...",
"pad.impexp.confirmimport": "Att importera en fil kommer att skriva över den aktuella texten i blocket. Är du säker på att du vill fortsätta?",
@ -129,5 +129,7 @@
"pad.impexp.uploadFailed": "Uppladdningen misslyckades, var god försök igen",
"pad.impexp.importfailed": "Importering misslyckades",
"pad.impexp.copypaste": "Var god kopiera och klistra in",
"pad.impexp.exportdisabled": "Exportering av formatet {{type}} är inaktiverad. Var god kontakta din systemadministratör för mer information."
"pad.impexp.exportdisabled": "Exportering av formatet {{type}} är inaktiverad. Var god kontakta din systemadministratör för mer information.",
"pad.impexp.maxFileSize": "Filen är för stor. Kontakta din systemadministratör för att öka den tillåtna filstorleken för importering",
"pad.impexp.permission": "Import är inaktiverat eftersom du aldrig har bidragit detta block. var god bidra minst en gång innan du importerar"
}

View file

@ -59,7 +59,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Açık Doküman Biçimi)",
"pad.importExport.abiword.innerHTML": "Yalnızca düz metin ya da HTML biçimlerini içe aktarabilirsiniz. Daha fazla gelişmiş içe aktarım özellikleri için lütfen <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">AbiWord yükleyin</a>.",
"pad.importExport.abiword.innerHTML": "Yalnızca düz metin ya da HTML biçimlerini içe aktarabilirsiniz. Daha fazla gelişmiş içe aktarım özellikleri için lütfen <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">AbiWord veya LibreOffice yükleyin</a>.",
"pad.modals.connected": "Bağlandı.",
"pad.modals.reconnecting": "Bloknotunuza tekrar bağlanılıyor...",
"pad.modals.forcereconnect": "Yeniden bağlanmaya zorla",
@ -136,5 +136,7 @@
"pad.impexp.uploadFailed": "Yükleme başarısız, lütfen tekrar deneyin",
"pad.impexp.importfailed": "İçe aktarım başarısız oldu",
"pad.impexp.copypaste": "Lütfen kopyala yapıştır yapın",
"pad.impexp.exportdisabled": "{{type}} biçimiyle dışa aktarma devre dışı bırakıldı. Ayrıntılar için sistem yöneticinizle iletişime geçiniz."
"pad.impexp.exportdisabled": "{{type}} biçimiyle dışa aktarma devre dışı bırakıldı. Ayrıntılar için sistem yöneticinizle iletişime geçiniz.",
"pad.impexp.maxFileSize": "Dosya çok büyük. İçe aktarma için izin verilen dosya boyutunu artırmak için site yöneticinize başvurun",
"pad.impexp.permission": "Bu ped'e hiç katkıda bulunmadığınız için içe aktarma devre dışı. Lütfen içe aktarmadan önce en az bir kez katkıda bulunun"
}

View file

@ -59,7 +59,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (документ OpenOffice)",
"pad.importExport.abiword.innerHTML": "Ви можете імпортувати лище формати простого тексту або HTML. Для більш просунутих способів імпорту <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">встановіть AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "Ви можете імпортувати лише у форматі простого тексту або HTML. Для більш просунутих способів імпорту <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">встановіть AbiWord або LibreOffice</a>.",
"pad.modals.connected": "З'єднано.",
"pad.modals.reconnecting": "Перепідлючення до Вашого документа..",
"pad.modals.forcereconnect": "Примусове перепідключення",
@ -136,5 +136,7 @@
"pad.impexp.uploadFailed": "Завантаження не вдалось, будь ласка, спробуйте знову",
"pad.impexp.importfailed": "Помилка при імпортуванні",
"pad.impexp.copypaste": "Будь ласка, скопіюйте та вставте",
"pad.impexp.exportdisabled": "Експорт у формат {{type}} вимкнено. Будь ласка, зв'яжіться із Вашим системним адміністратором за деталями."
"pad.impexp.exportdisabled": "Експорт у формат {{type}} вимкнено. Будь ласка, зв'яжіться із Вашим системним адміністратором за деталями.",
"pad.impexp.maxFileSize": "Файл завеликий. Зверніться до адміністратора сайту для збільшення максимально дозволеного розміру файлів для імпорту",
"pad.impexp.permission": "Імпорт є вимкненим, оскільки ви ніколи не працювали із цим документом. Будь ласка, відредагуйте хоча б раз перед тим, як зробити імпорт"
}

View file

@ -7,7 +7,7 @@
"index.newPad": "Novo Pad",
"index.createOpenPad": "O creare o verxare on Pad co'l nome:",
"pad.toolbar.bold.title": "Groseto (Ctrl-B)",
"pad.toolbar.italic.title": "Corsivo (Ctrl-I)",
"pad.toolbar.italic.title": "Corivo (Ctrl-I)",
"pad.toolbar.underline.title": "Sotolineà (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Barà (Ctrl+5)",
"pad.toolbar.ol.title": "Ełenco numarà (Ctrl+Shift+N)",

View file

@ -58,7 +58,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF開放文件格式",
"pad.importExport.abiword.innerHTML": "您只可以從純文字或 HTML 格式檔匯入。<a href=\"ttps://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">安裝\n AbiWord </a>以取得更多進階的匯入功能。",
"pad.importExport.abiword.innerHTML": "您只可以從純文字或 HTML 格式檔匯入。<a href=\"ttps://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">安裝\n AbiWord 或是 LibreOffice</a> 以取得更多進階的匯入功能。",
"pad.modals.connected": "已連線。",
"pad.modals.reconnecting": "重新連線到您的記事本…",
"pad.modals.forcereconnect": "強制重新連線",
@ -135,5 +135,7 @@
"pad.impexp.uploadFailed": "上載失敗,請重試",
"pad.impexp.importfailed": "匯入失敗",
"pad.impexp.copypaste": "請複製貼上",
"pad.impexp.exportdisabled": "{{type}}格式的匯出被禁用。有關詳情,請與您的系統管理員聯繫。"
"pad.impexp.exportdisabled": "{{type}}格式的匯出被禁用。有關詳情,請與您的系統管理員聯繫。",
"pad.impexp.maxFileSize": "檔案太大。請聯絡您的網站管理員來增加用於匯入的允許檔案大小。",
"pad.impexp.permission": "因為您已沒在此記事本上貢獻,匯入功能已停用。在進行匯入之前,至少要做出一次貢獻"
}

View file

@ -1076,6 +1076,7 @@ async function handleClientReady(client, message)
var clientVars = {
"skinName": settings.skinName,
"skinVariants": settings.skinVariants,
"randomVersionString": settings.randomVersionString,
"accountPrivs": {
"maxRevisions": 100
},

View file

@ -426,17 +426,17 @@ function compressCSS(filename, content, callback)
/*
* Changes done to migrate CleanCSS 3.x -> 4.x:
*
* 1. Disabling rebase is necessary because otherwise the URLs for the web
* fonts become wrong.
* 1. Rework the rebase logic, because the API was simplified (but we have
* less control now). See:
* https://github.com/jakubpawlowicz/clean-css/blob/08f3a74925524d30bbe7ac450979de0a8a9e54b2/README.md#important-40-breaking-changes
*
* EXAMPLE 1:
* /static/css/src/static/font/fontawesome-etherpad.woff
* instead of
* /static/font/fontawesome-etherpad.woff
* EXAMPLE 2 (this is more surprising):
* /p/src/static/font/opendyslexic.otf
* instead of
* /static/font/opendyslexic.otf
* EXAMPLE:
* The URLs contained in a CSS file (including all the stylesheets
* imported by it) residing on disk at:
* /home/muxator/etherpad/src/static/css/pad.css
*
* Will be rewritten rebasing them to:
* /home/muxator/etherpad/src/static/css
*
* 2. CleanCSS.minify() can either receive a string containing the CSS, or
* an array of strings. In that case each array element is interpreted as
@ -447,7 +447,13 @@ function compressCSS(filename, content, callback)
* "content" argument, but we have to wrap the absolute path to the CSS
* in an array and ask the library to read it by itself.
*/
new CleanCSS({rebase: false}).minify([absPath], function (errors, minified) {
const basePath = path.dirname(absPath);
new CleanCSS({
rebase: true,
rebaseTo: basePath,
}).minify([absPath], function (errors, minified) {
if (errors) {
// on error, just yield the un-minified original, but write a log message
console.error(`CleanCSS.minify() returned an error on ${filename} (${absPath}): ${errors}`);

View file

@ -42,6 +42,20 @@ var _ = require("underscore");
exports.root = absolutePaths.findEtherpadRoot();
console.log(`All relative paths will be interpreted relative to the identified Etherpad base dir: ${exports.root}`);
/*
* At each start, Etherpad generates a random string and appends it as query
* parameter to the URLs of the static assets, in order to force their reload.
* Subsequent requests will be cached, as long as the server is not reloaded.
*
* For the rationale behind this choice, see
* https://github.com/ether/etherpad-lite/pull/3958
*
* ACHTUNG: this may prevent caching HTTP proxies to work
* TODO: remove the "?v=randomstring" parameter, and replace with hashed filenames instead
*/
exports.randomVersionString = randomString(4);
console.log(`Random string used for versioning assets: ${exports.randomVersionString}`);
/**
* The app title, visible e.g. in the browser window
*/

14
src/package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "ep_etherpad-lite",
"version": "1.8.0",
"version": "1.8.4",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -413,9 +413,9 @@
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
},
"@types/node": {
"version": "13.13.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz",
"integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA=="
"version": "13.13.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz",
"integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g=="
},
"@types/request": {
"version": "2.48.4",
@ -7334,9 +7334,9 @@
}
},
"ueberdb2": {
"version": "0.4.5",
"resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-0.4.5.tgz",
"integrity": "sha512-D8TogZ6Dc4Ot909b0D0QQRSanVB3W4EtqA8smKEZS7H5eIbAWFOyBF74XADIB9f+NASSjdu8DU3EJeKe9Xdzjg==",
"version": "0.4.9",
"resolved": "https://registry.npmjs.org/ueberdb2/-/ueberdb2-0.4.9.tgz",
"integrity": "sha512-ZP7jhNtc7N3qogp9EYqBffC55KaxGZH3AgupzMh01DUr/E8QV2BU4THBpUVVJUGgoSBU8XxTkTMY9GOakJUTyA==",
"requires": {
"async": "^3.2.0",
"cassandra-driver": "^4.5.0",

View file

@ -61,7 +61,7 @@
"slide": "1.1.6",
"socket.io": "2.1.1",
"tinycon": "0.0.1",
"ueberdb2": "0.4.5",
"ueberdb2": "0.4.9",
"uglify-js": "3.8.1",
"underscore": "1.8.3",
"unorm": "1.4.1"
@ -87,6 +87,6 @@
"test": "nyc mocha --timeout 5000 ../tests/backend/specs/api",
"test-container": "nyc mocha --timeout 5000 ../tests/container/specs/api"
},
"version": "1.8.3",
"version": "1.8.4",
"license": "Apache-2.0"
}

View file

@ -222,7 +222,7 @@ pre {
word-wrap: break-word;
}
@media (max-width: 720px) {
@media (max-width: 800px) {
div.innerwrapper {
padding: 0 15px 15px 15px;
}

View file

@ -28,12 +28,43 @@ html.inner-editor {
padding: 10px;
overflow: hidden;
background-color: white;
/* Be careful editing following rules. Longs words should not overflow, ep_align justify should work,
Test on chrome, firefox and safari... Copy / Paste a word inside a sentence should not add line-breaks
and preserve the style */
display: block; /* for safari and firefox, otherwise the break-word does not work */
white-space: normal;
word-wrap: break-word;
overflow-wrap: break-word;
}
#innerdocbody, #sidediv {
padding-top: 10px; /* Both must have same top padding, so line number are aligned with the rows */
padding-bottom: 10px; /* some space when we scroll to the bottom */
}
#innerdocbody a {
color: #2e96f3;
}
#innerdocbody.authorColors [class^='author-'] a {
color: inherit;
}
#innerdocbody span {
line-height: 125%;
padding: 6px 0 !important;
}
option {
text-transform: capitalize;
}
#innerdocbody h1,
#innerdocbody h2,
#innerdocbody h3,
#innerdocbody h4 {
margin-bottom: .5em;
}
/* --------------------- */
/* -- BROWSER SUPPORT -- */
/* --------------------- */
@ -44,39 +75,6 @@ body.mozilla, body.safari {
.safari div {
padding-right: 1px; /* prevents the caret from disappearing on the longest line of the doc */
}
span { line-height: 125%; }
/* -------------- */
/* -- WRAPPING -- */
/* -------------- */
body {
white-space: nowrap;
word-wrap: normal;
}
body.doesWrap {
display: block !important;
/* white-space: pre-wrap; */
/*
Must be pre-wrap to keep trailing spaces. Otherwise you get a zombie caret,
walking around your screen (see #1766).
WARNING: Enabling this causes Paste as plain text in Chrome to remove line breaks
this is probably undesirable
WARNING: This causes copy & paste events to lose bold etc. attributes
NOTE: The walking-zombie caret issue seems to have been fixed in FF upstream
so let's try diabling pre-wrap and see how we get on now.
For more details see: https://github.com/ether/etherpad-lite/issues/2574
*/
word-wrap: break-word; /* fix for issue #1648 - firefox not wrapping long lines (without spaces) correctly */
}
.noprewrap{
white-space: normal;
}
body.doesWrap:not(.noprewrap) > div {
/* Related to #1766 */
white-space: pre-wrap;
}
/* ------------------------------------------ */
@ -84,13 +82,14 @@ body.doesWrap:not(.noprewrap) > div {
/* ------------------------------------------ */
#sidediv {
font-size: 11px;
font-family: monospace;
padding-right: 5px;
padding-left: 12px;
background-color: transparent;
border-right: 1px solid #ccc;
}
#sidediv .line-number {
font-size: 9px;
padding: 0 10px;
font-family: monospace;
}
#sidedivinner {
text-align: right;
opacity: .9;
@ -98,12 +97,8 @@ body.doesWrap:not(.noprewrap) > div {
#sidediv:not(.sidedivdelayed) { /* before sidediv get initialized, hide text */
color: transparent;
}
#sidediv.sidedivhidden {
/* Do not use display: none to hide the sidediv, otherwise the parent container does not
get its height properly calculated by flexboxes */
visibility: hidden;
width: 0;
padding: 0;
.line-numbers-hidden #sidediv .line-number {
display: none;
}
#linemetricsdiv {
position: absolute;
@ -114,7 +109,7 @@ body.doesWrap:not(.noprewrap) > div {
font-size: 12px; /* overridden by lineMetricsDiv.style */
font-family: monospace; /* overridden by lineMetricsDiv.style */
}
@media (max-width: 720px) {
@media (max-width: 800px) {
#sidediv {
/* Do not use display: none to hide the sidediv, otherwise the parent container does not
get its height properly calculated by flexboxes */
@ -139,7 +134,6 @@ body.doesWrap:not(.noprewrap) > div {
}
#innerdocbody a {
cursor: pointer !important;
white-space:pre-wrap;
}
body.grayedout {
background-color: #eee !important

View file

@ -152,7 +152,7 @@
display: none;
}
@media only screen and (max-width: 720px) {
@media only screen and (max-width: 800px) {
#chatbox {
right: 0;
bottom: 0;

View file

@ -32,8 +32,10 @@ select, .nice-select {
.nice-select:hover {
border-color: #dbdbdb;
}
.nice-select:active,.nice-select.open,.nice-select:focus {
/*border-color: #999;*/
.nice-select .current {
width: 90px;
display: inline-block;
overflow: hidden;
}
.nice-select:after {
border-bottom: 2px solid #999;

View file

@ -14,13 +14,15 @@
.gritter-item.popup {
position: relative;
max-width: 450px;
visibility: visible;
right: auto !important;
left: auto !important;
top: auto;
bottom: auto;
}
.gritter-item.popup:not(.error) {
max-width: 450px;
}
.gritter-item .popup-content {
display: flex;
@ -40,7 +42,7 @@
background-color: #eed3d4;
}
@media (max-width: 720px) {
@media (max-width: 800px) {
#gritter-container {
left: 1rem;
right: 1rem;

View file

@ -29,6 +29,9 @@ body {
height: auto;
flex: 1 auto;
}
#editorcontainerbox #editorcontainer:not(.initialized) {
visibility: hidden;
}
#editorcontainerbox #editorcontainer iframe {
width: 100%;
height: auto;
@ -44,7 +47,7 @@ body {
width: 0; /* hide when the container is empty */
}
@media only screen and (max-width: 720px) {
@media only screen and (max-width: 800px) {
#editorcontainerbox {
margin-bottom: 39px; /* Leave space for the bottom toolbar on mobile */
}

View file

@ -62,7 +62,7 @@
}
/* Mobile devices */
@media only screen and (max-width: 720px) {
@media only screen and (max-width: 800px) {
.popup {
border-radius: 0;
top: 1rem;

View file

@ -98,7 +98,7 @@ input#myusernameedit:not(.editable) {
right: calc(100% + 15px);
z-index: 101;
}
@media (max-width: 720px) {
@media (max-width: 800px) {
#mycolorpicker.popup {
top: auto;
bottom: 0;

View file

@ -135,7 +135,7 @@
overflow: visible;
}
@media only screen and (max-width: 720px) {
@media only screen and (max-width: 800px) {
.toolbar ul li.separator {
width: 5px;
}

View file

@ -2,9 +2,6 @@
padding: 10px;
display: block;
}
#innerdocbody {
margin: 0 auto;
}
.timeslider-bar {
display: flex;
@ -128,10 +125,11 @@
white-space: normal;
word-break: break-word;
width: 100%;
height: 100%;
margin: 0 auto;
height: auto;
}
@media (max-width: 720px) {
@media (max-width: 800px) {
#timeslider-slider #timer { display: none; }
.editbarright [data-key="timeslider_returnToPad"] {

View file

@ -237,7 +237,7 @@ function Ace2Editor()
// disableCustomScriptsAndStyles can be used to disable loading of custom scripts
if(!clientVars.disableCustomScriptsAndStyles){
$$INCLUDE_CSS("../static/css/pad.css");
$$INCLUDE_CSS("../static/css/pad.css?v=" + clientVars.randomVersionString);
}
var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){
@ -247,7 +247,7 @@ function Ace2Editor()
return '../static/plugins/' + path;
});
includedCSS = includedCSS.concat(additionalCSS);
$$INCLUDE_CSS("../static/skins/" + clientVars.skinName + "/pad.css");
$$INCLUDE_CSS("../static/skins/" + clientVars.skinName + "/pad.css?v=" + clientVars.randomVersionString);
pushStyleTagsFor(iframeHTML, includedCSS);
@ -321,7 +321,7 @@ window.onload = function () {\n\
var includedCSS = [];
var $$INCLUDE_CSS = function(filename) {includedCSS.push(filename)};
$$INCLUDE_CSS("../static/css/iframe_editor.css");
$$INCLUDE_CSS("../static/css/pad.css");
$$INCLUDE_CSS("../static/css/pad.css?v=" + clientVars.randomVersionString);
var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){
@ -331,7 +331,7 @@ window.onload = function () {\n\
return '../static/plugins/' + path }
);
includedCSS = includedCSS.concat(additionalCSS);
$$INCLUDE_CSS("../static/skins/" + clientVars.skinName + "/pad.css");
$$INCLUDE_CSS("../static/skins/" + clientVars.skinName + "/pad.css?v=" + clientVars.randomVersionString);
pushStyleTagsFor(outerHTML, includedCSS);

View file

@ -249,7 +249,6 @@ function Ace2Inner(){
var authorStyle = dynamicCSS.selectorStyle(authorSelector);
var parentAuthorStyle = parentDynamicCSS.selectorStyle(authorSelector);
var anchorStyle = dynamicCSS.selectorStyle(authorSelector + ' > a')
// author color
authorStyle.backgroundColor = bgcolor;
@ -258,14 +257,6 @@ function Ace2Inner(){
var textColor = colorutils.textColorFromBackgroundColor(bgcolor, parent.parent.clientVars.skinName);
authorStyle.color = textColor;
parentAuthorStyle.color = textColor;
// anchor text contrast
if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55)
{
anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor)));
}else{
anchorStyle.color = null;
}
}
}
}
@ -965,8 +956,7 @@ function Ace2Inner(){
showsuserselections: setClassPresenceNamed(root, "userSelections"),
showslinenumbers : function(value){
hasLineNumbers = !! value;
setClassPresence(sideDiv, "sidedivhidden", !hasLineNumbers);
setClassPresence(sideDiv.parentNode, "sidediv-hidden", !hasLineNumbers);
setClassPresence(sideDiv.parentNode, "line-numbers-hidden", !hasLineNumbers);
fixView();
},
grayedout: setClassPresenceNamed(outerWin.document.body, "grayedout"),
@ -5284,7 +5274,7 @@ function Ace2Inner(){
function initLineNumbers()
{
lineNumbersShown = 1;
sideDiv.innerHTML = '<div id="sidedivinner" class="sidedivinner"><div>1</div></div>';
sideDiv.innerHTML = '<div id="sidedivinner" class="sidedivinner"><div><span class="line-number">1</span></div></div>';
sideDivInner = outerWin.document.getElementById("sidedivinner");
$(sideDiv).addClass("sidediv");
}
@ -5361,7 +5351,7 @@ function Ace2Inner(){
div.style.height = h +"px";
}
div.appendChild(odoc.createTextNode(String(n)));
$(div).append($("<span class='line-number'>" + String(n) + "</span>"));
fragment.appendChild(div);
if(b){
b = b.nextSibling;

View file

@ -573,6 +573,8 @@ var pad = {
mobileMatch.addListener(checkChatAndUsersVisibility); // check if window resized
setTimeout(function() { checkChatAndUsersVisibility(mobileMatch); }, 0); // check now after load
$('#editorcontainer').addClass('initialized');
hooks.aCallAll("postAceInit", {ace: padeditor.ace, pad: pad});
}
},

View file

@ -20,6 +20,7 @@
* limitations under the License.
*/
var browser = require('./browser');
var hooks = require('./pluginfw/hooks');
var padutils = require('./pad_utils').padutils;
var padeditor = require('./pad_editor').padeditor;
@ -170,7 +171,15 @@ var padeditbar = (function()
ace: padeditor.ace
});
$('select').niceSelect();
/*
* On safari, the dropdown in the toolbar gets hidden because of toolbar
* overflow:hidden property. This is a bug from Safari: any children with
* position:fixed (like the dropdown) should be displayed no matter
* overflow:hidden on parent
*/
if (!browser.safari) {
$('select').niceSelect();
}
// When editor is scrolled, we add a class to style the editbar differently
$('iframe[name="ace_outer"]').contents().scroll(function() {
@ -288,13 +297,13 @@ var padeditbar = (function()
{
var basePath = document.location.href.substring(0, document.location.href.indexOf("/p/"));
var readonlyLink = basePath + "/p/" + clientVars.readOnlyId;
$('#embedinput').val('<iframe name="embed_readonly" src="' + readonlyLink + '?showControls=true&showChat=true&showLineNumbers=true&useMonospaceFont=false" width=600 height=400></iframe>');
$('#embedinput').val('<iframe name="embed_readonly" src="' + readonlyLink + '?showControls=true&showChat=true&showLineNumbers=true&useMonospaceFont=false" width="100%" height="600" frameborder="0"></iframe>');
$('#linkinput').val(readonlyLink);
}
else
{
var padurl = window.location.href.split("?")[0];
$('#embedinput').val('<iframe name="embed_readwrite" src="' + padurl + '?showControls=true&showChat=true&showLineNumbers=true&useMonospaceFont=false" width=600 height=400></iframe>');
$('#embedinput').val('<iframe name="embed_readwrite" src="' + padurl + '?showControls=true&showChat=true&showLineNumbers=true&useMonospaceFont=false" width="100%" height="600" frameborder="0"></iframe>');
$('#linkinput').val(padurl);
}
},
@ -303,7 +312,11 @@ var padeditbar = (function()
// reset style
$('.toolbar').removeClass('cropped')
var menu_left = $('.toolbar .menu_left')[0];
if (menu_left && menu_left.scrollWidth > $('.toolbar').width()) {
// on mobile the menu_right get displayed at the bottom of the screen
var isMobileLayout = $('.toolbar .menu_right').css('position') === 'fixed';
if (menu_left && menu_left.scrollWidth > $('.toolbar').width() && isMobileLayout) {
$('.toolbar').addClass('cropped');
}
}

View file

@ -135,6 +135,7 @@ var padeditor = (function()
v = getOption('showAuthorColors', true);
self.ace.setProperty("showsauthorcolors", v);
$('#chattext').toggleClass('authorColors', v);
$('iframe[name="ace_outer"]').contents().find('#sidedivinner').toggleClass('authorColors', v);
padutils.setCheckbox($("#options-colorscheck"), v);
// Override from parameters if true

View file

@ -526,12 +526,30 @@ function setupGlobalExceptionHandler() {
{
var errorId = randomString(20);
var userAgent = padutils.escapeHtml(navigator.userAgent);
if ($("#editorloadingbox").attr("display") != "none"){
//show javascript errors to the user
$("#editorloadingbox").css("padding", "10px");
$("#editorloadingbox").css("padding-top", "45px");
$("#editorloadingbox").html("<div style='text-align:left;color:red;font-size:16px;'><b>An error occurred</b><br>The error was reported with the following id: '" + errorId + "'<br><br><span style='color:black;font-weight:bold;font-size:16px'>Please press and hold Ctrl and press F5 to reload this page, if the problem persists please send this error message to your webmaster: </span><div style='color:black;font-size:14px'>'"
+ "ErrorId: " + errorId + "<br>URL: " + padutils.escapeHtml(window.location.href) + "<br>UserAgent: " + userAgent + "<br>" + msg + " in " + url + " at line " + linenumber + "'</div></div>");
var msgAlreadyVisible = false;
$('.gritter-item .error-msg').each(function() {
if ($(this).text() === msg) {
msgAlreadyVisible = true;
}
});
if (!msgAlreadyVisible) {
errorMsg = "<b>Please press and hold Ctrl and press F5 to reload this page</b></br> \
If the problem persists please send this error message to your webmaster: </br></br>\
<div style='text-align:left; font-size: .8em'>\
ErrorId: " + errorId + "<br>\
URL: " + padutils.escapeHtml(window.location.href) + "<br>\
UserAgent: " + userAgent + "<br>\
<span class='error-msg'>"+ msg + "</span> in " + url + " at line " + linenumber + '</div>';
$.gritter.add({
title: "An error occurred",
text: errorMsg,
class_name: "error",
position: 'bottom',
sticky: true,
});
}
//send javascript errors to the server

View file

@ -6,7 +6,7 @@ form {
body {
background: url(images/fond.jpg) center center no-repeat fixed #fff;
font-family: Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif !important;
font-family: Quicksand, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
font-size: 16px;
line-height: 1.42857143;
color: #333;
@ -24,6 +24,10 @@ body {
box-shadow: none
}
input {
color: #4a5d5c;
}
#inner {
background: transparent;
padding-top: 0;
@ -65,14 +69,15 @@ button[type=submit] {
background: #586a69;
border: none;
top: 0;
opacity: 1;
transition: .2s background;
}
#button:hover,
button[type=submit]:hover {
cursor: pointer;
background: #64d29b;
border: 2px solid #586a69;
color: #586a69;
background: #4a5d5c;
color: #64d29b;
}
#padname {

View file

@ -18,6 +18,7 @@
@import url("src/plugins/brightcolorpicker.css");
@import url("src/plugins/font_color.css");
@import url("src/plugins/tables2.css");
@import url("src/plugins/set_title_on_pad.css");
@import url("src/plugins/author_hover.css");
@import url("src/plugins/comments.css");

View file

@ -75,7 +75,7 @@
background-color: var(--bg-color);
}
@media (max-width: 720px) {
@media (max-width: 800px) {
#chaticon {
right: 0;
}

View file

@ -2,7 +2,7 @@
background-color: #64d29b;
background-color: var(--primary-color);
color: #ffffff;
color: var(--bg-color);
color: var(--super-light-color);
}
.gritter-item .popup-content {
padding: 15px;
@ -26,7 +26,7 @@
}
.gritter-item:not(.error) .gritter-close .buttonicon {
color: #ffffff;
color: var(--bg-color);
color: var(--super-light-color);
}
/* CHAT GRIITER ITEM */
@ -62,4 +62,9 @@
.gritter-item.popup.popup-show > .popup-content {
transform: scale(1) translateY(0) !important;
transition: all 0.4s cubic-bezier(0.74, -0.05, 0.27, 1.75) !important;
}
}
/* for ep_deleted_after_delay */
.gritter-item #close_expiration_notif {
display: none;
}

View file

@ -41,7 +41,7 @@
min-width: 180px;
}
@media (max-width: 720px) {
@media (max-width: 800px) {
.popup-content {
padding: 1rem;
box-shadow: 0 0 0 1px rgba(99, 114, 130, 0.16), -1px 1px 16px 3px rgba(27, 39, 51, 0.12);

View file

@ -12,6 +12,7 @@
}
::-webkit-scrollbar-thumb {
min-height: 40px;
border-radius: 10px;
background-color: #576273;
background-color: var(--scrollbar-thumb);
@ -33,6 +34,7 @@
.thin-scrollbar::-webkit-scrollbar-thumb {
border-radius: 0px;
min-height: 40px;
background-color: #d2d2d2;
background-color: var(--middle-color);
border: none;

View file

@ -8,27 +8,12 @@
font-family: var(--main-font-family); /* the parent div have font-family monospace (line number) */
color: #485365;
color: var(--text-color);
padding-right: 18px !important;
text-transform: capitalize;
font-size: 12px !important;
font-weight: bold;
}
#sidedivinner>div,
#sidedivinner.authorColors>div,
#sidedivinner.authorColors>div.primary-none {
padding-right: 5px !important;
border-right: 5px solid transparent;
}
#sidedivinner>div {
#sidedivinner>div .line-number {
line-height: 24px;
font-size: 9px !important;
font-family: RobotoMono;
color: #576273;
color: var(--text-soft-color);
}
#sidedivinner.authorColors>div, #sidedivinner.authorColors>div.primary-none, #sidedivinner>div {
padding-right: 8px !important;
}

View file

@ -131,7 +131,7 @@
}
}
@media (max-width: 720px) {
@media (max-width: 800px) {
.toolbar ul li {
margin: 5px 2px;

View file

@ -7,16 +7,13 @@
#editorcontainerbox {
background-color: #f2f3f4;
background-color: var(--bg-color);
color: var(--text-color);
}
#editorcontainerbox .sticky-container {
width: 250px;
}
#outerdocbody.sidediv-hidden {
padding-left: 0; /* sidediv hidden */
}
#outerdocbody iframe, #outerdocbody > #innerdocbody {
max-width: 900px;
padding: 40px 55px;
@ -40,17 +37,6 @@
padding-bottom: var(--editor-vertical-padding);
}
/* Fixs author_hover does not take in account the document padding */
.authortooltip { margin-top: 65px !important; margin-left: 60px; }
.caretindicator { margin-top: 61px!important; margin-left: 52px; }
#outerdocbody.plugin-ep_author_neat .authortooltip{ margin-left: 145px; }
#outerdocbody.plugin-ep_author_neat .caretindicator{ margin-left: 52px; margin-top: 65px!important;}
@media (max-width:1000px) {
#outerdocbody.plugin-ep_author_neat .authortooltip{ margin-left: 115px; }
.caretindicator{ margin-left: 13px; }
#outerdocbody.plugin-ep_author_neat .caretindicator{ margin-left: 17px; }
}
@media (max-width:1000px) {
#outerdocbody {
padding-top: 0;
@ -59,19 +45,9 @@
max-width: none;
border-radius: 0;
}
.authortooltip { margin-top: 20px !important; }
.caretindicator { margin-top: 0px !important; }
#outerdocbody.plugin-ep_author_neat .caretindicator { margin-top: 10px !important; }
#outerdocbody.plugin-ep_author_neat #sidedivinner>div:before { padding-right: 10px !important; }
#outerdocbody.plugin-ep_author_neat #sidedivinner.authorColors>div,
#outerdocbody.plugin-ep_author_neat #sidedivinner.authorColors>div.primary-none,
#outerdocbody.plugin-ep_author_neat #sidedivinner>div { padding-right: 6px!important; }
#outerdocbody.plugin-ep_author_neat #sidediv { padding-right: 0 !important; }
}
@media only screen and (max-width: 720px) {
@media only screen and (max-width: 800px) {
#editorcontainerbox {
margin-bottom: 39px; /* margin for bottom toolbar */
}

View file

@ -6,29 +6,3 @@
color: #485365;
color: var(--text-color);
}
#innerdocbody span, #innerdocbody span {
padding: 4px 0 !important;
}
#innerdocbody h1 span, #innerdocbody h1 span {
padding: 0;
}
option {
text-transform: capitalize;
}
#innerdocbody h1 {
font-size: 2.5em !important;
}
#innerdocbody h3 {
font-size: 1.15em;
letter-spacing: 1px;
}
#innerdocbody a {
color: #64d29b;
color: var(--primary-color);
}

View file

@ -1,7 +1,7 @@
/* =========================== */
/* === Super Light Toolbar === */
/* =========================== */
.super-light-toolbar .toolbar, .super-light-toolbar .popup-content {
.super-light-toolbar .toolbar, .super-light-toolbar .popup-content, #pad_title {
--text-color: var(--super-dark-color);
--text-soft-color: var(--dark-color);
--border-color: #e4e6e9;
@ -11,7 +11,7 @@
/* ===================== */
/* === Light Toolbar === */
/* ===================== */
.light-toolbar .toolbar, .light-toolbar .popup-content {
.light-toolbar .toolbar, .light-toolbar .popup-content, #pad_title {
--text-color: var(--super-dark-color);
--text-soft-color: var(--dark-color);
--border-color: var(--middle-color);
@ -21,7 +21,7 @@
/* ========================== */
/* === Super Dark Toolbar === */
/* ========================== */
.super-dark-toolbar .toolbar, .super-dark-toolbar .popup-content {
.super-dark-toolbar .toolbar, .super-dark-toolbar .popup-content, #pad_title {
--text-color: var(--super-light-color);
--text-soft-color: var(--light-color);
--border-color: var(--dark-color);
@ -35,7 +35,7 @@
/* ==================== */
/* === Dark Toolbar === */
/* ==================== */
.dark-toolbar .toolbar, .dark-toolbar .popup-content {
.dark-toolbar .toolbar, .dark-toolbar .popup-content, #pad_title {
--text-color: var(--super-light-color);
--text-soft-color: var(--light-color);
--border-color: var(--super-dark-color);

View file

@ -0,0 +1,7 @@
#pad_title {
border-bottom: 1px solid var(--border-color) !important;
background-color: var(--bg-color) !important;
}
#edit_title {
color: var(--text-soft-color);
}

View file

@ -82,7 +82,7 @@
font-size: .9em;
}
@media (max-width: 720px) {
@media (max-width: 800px) {
#slider-btn-container {
margin-top: 0;

View file

@ -35,8 +35,8 @@
<link rel="shortcut icon" href="<%=settings.favicon%>">
<link rel="localizations" type="application/l10n+json" href="locales.json">
<script type="text/javascript" src="static/js/html10n.js"></script>
<script type="text/javascript" src="static/js/l10n.js"></script>
<script type="text/javascript" src="static/js/html10n.js?v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="static/js/l10n.js?v=<%=settings.randomVersionString%>"></script>
<style>
html, body {
@ -138,7 +138,7 @@
width: 45px;
height: 38px;
}
@media only screen and (min-device-width: 320px) and (max-device-width: 720px) {
@media only screen and (min-device-width: 320px) and (max-device-width: 800px) {
body {
background: #bbb;
background: -webkit-linear-gradient(#aaa,#eee 60%) center fixed;
@ -156,7 +156,7 @@
}
}
</style>
<link href="static/skins/<%=encodeURI(settings.skinName)%>/index.css" rel="stylesheet">
<link href="static/skins/<%=encodeURI(settings.skinName)%>/index.css?v=<%=settings.randomVersionString%>" rel="stylesheet">
<div id="wrapper">
<% e.begin_block("indexWrapper"); %>
@ -171,7 +171,7 @@
<% e.end_block(); %>
</div>
<script src="static/skins/<%=encodeURI(settings.skinName)%>/index.js"></script>
<script src="static/skins/<%=encodeURI(settings.skinName)%>/index.js?v=<%=settings.randomVersionString%>"></script>
<script>
// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt
function go2Name()

View file

@ -42,18 +42,18 @@
<link rel="shortcut icon" href="<%=settings.faviconPad%>">
<% e.begin_block("styles"); %>
<link href="../static/css/pad.css" rel="stylesheet">
<link href="../static/css/pad.css?v=<%=settings.randomVersionString%>" rel="stylesheet">
<% e.begin_block("customStyles"); %>
<link href="../static/skins/<%=encodeURI(settings.skinName)%>/pad.css" rel="stylesheet">
<link href="../static/skins/<%=encodeURI(settings.skinName)%>/pad.css?v=<%=settings.randomVersionString%>" rel="stylesheet">
<% e.end_block(); %>
<style title="dynamicsyntax"></style>
<% e.end_block(); %>
<link rel="localizations" type="application/l10n+json" href="../locales.json" />
<script type="text/javascript" src="../static/js/html10n.js"></script>
<script type="text/javascript" src="../static/js/l10n.js"></script>
<script type="text/javascript" src="../static/js/html10n.js?v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="../static/js/l10n.js?v=<%=settings.randomVersionString%>"></script>
<!-- head and body had been removed intentionally -->
@ -435,10 +435,10 @@
<% e.begin_block("scripts"); %>
<script type="text/javascript" src="../static/js/require-kernel.js"></script>
<script type="text/javascript" src="../static/js/require-kernel.js?v=<%=settings.randomVersionString%>"></script>
<!-- Include pad_utils manually -->
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad_utils.js?callback=require.define"></script>
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad_utils.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript">
// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt
@ -458,14 +458,14 @@
// @license-end
</script>
<script type="text/javascript" src="../socket.io/socket.io.js"></script>
<script type="text/javascript" src="../socket.io/socket.io.js?v=<%=settings.randomVersionString%>"></script>
<!-- Include base packages manually (this help with debugging) -->
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define"></script>
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define"></script>
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
<% e.begin_block("customScripts"); %>
<script type="text/javascript" src="../static/skins/<%=encodeURI(settings.skinName)%>/pad.js"></script>
<script type="text/javascript" src="../static/skins/<%=encodeURI(settings.skinName)%>/pad.js?v=<%=settings.randomVersionString%>"></script>
<% e.end_block(); %>
<!-- Bootstrap page -->

View file

@ -35,18 +35,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
<link rel="shortcut icon" href="<%=settings.faviconTimeslider%>">
<% e.begin_block("timesliderStyles"); %>
<link rel="stylesheet" href="../../static/css/pad.css">
<link rel="stylesheet" href="../../static/css/iframe_editor.css">
<link rel="stylesheet" href="../../static/css/timeslider.css">
<link rel="stylesheet" href="../../static/skins/<%=encodeURI(settings.skinName)%>/pad.css">
<link rel="stylesheet" href="../../static/skins/<%=encodeURI(settings.skinName)%>/timeslider.css">
<link rel="stylesheet" href="../../static/css/pad.css?v=<%=settings.randomVersionString%>">
<link rel="stylesheet" href="../../static/css/iframe_editor.css?v=<%=settings.randomVersionString%>">
<link rel="stylesheet" href="../../static/css/timeslider.css?v=<%=settings.randomVersionString%>">
<link rel="stylesheet" href="../../static/skins/<%=encodeURI(settings.skinName)%>/pad.css?v=<%=settings.randomVersionString%>">
<link rel="stylesheet" href="../../static/skins/<%=encodeURI(settings.skinName)%>/timeslider.css?v=<%=settings.randomVersionString%>">
<style type="text/css" title="dynamicsyntax"></style>
<% e.end_block(); %>
<link rel="localizations" type="application/l10n+json" href="../../locales.json" />
<% e.begin_block("timesliderScripts"); %>
<script type="text/javascript" src="../../static/js/html10n.js"></script>
<script type="text/javascript" src="../../static/js/l10n.js"></script>
<script type="text/javascript" src="../../static/js/html10n.js?v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="../../static/js/l10n.js?v=<%=settings.randomVersionString%>"></script>
<% e.end_block(); %>
</head>
@ -245,14 +245,14 @@
<!-------- JAVASCRIPT --------->
<!----------------------------->
<script type="text/javascript" src="../../static/js/require-kernel.js"></script>
<script type="text/javascript" src="../../socket.io/socket.io.js"></script>
<script type="text/javascript" src="../../static/js/require-kernel.js?v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="../../socket.io/socket.io.js?v=<%=settings.randomVersionString%>"></script>
<!-- Include base packages manually (this help with debugging) -->
<script type="text/javascript" src="../../javascripts/lib/ep_etherpad-lite/static/js/timeslider.js?callback=require.define"></script>
<script type="text/javascript" src="../../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define"></script>
<script type="text/javascript" src="../../javascripts/lib/ep_etherpad-lite/static/js/timeslider.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="../../javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=<%=settings.randomVersionString%>"></script>
<script type="text/javascript" src="../../static/skins/<%=encodeURI(settings.skinName)%>/timeslider.js"></script>
<script type="text/javascript" src="../../static/skins/<%=encodeURI(settings.skinName)%>/timeslider.js?v=<%=settings.randomVersionString%>"></script>
<!-- Bootstrap -->
<script type="text/javascript" >

View file

@ -53,7 +53,10 @@ var helper = {};
}
helper.clearCookies = function(){
window.document.cookie = "";
// Expire cookies, so author and language are changed after reloading the pad.
// See https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#Example_4_Reset_the_previous_cookie
window.document.cookie = 'token=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
window.document.cookie = 'language=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
}
// Functionality for knowing what key event type is required for tests

View file

@ -36,6 +36,68 @@ describe("the test helper", function(){
done();
});
});
// Make sure the cookies are cleared, and make sure that the cookie
// clearing has taken effect at this point in the code. It has been
// observed that the former can happen without the latter if there
// isn't a timeout (within `newPad`) after clearing the cookies.
// However this doesn't seem to always be easily replicated, so this
// timeout may or may end up in the code. None the less, we test here
// to catch it if the bug comes up again.
it("clears cookies", function(done) {
this.timeout(60000);
// set cookies far into the future to make sure they're not expired yet
window.document.cookie = 'token=foo;expires=Thu, 01 Jan 3030 00:00:00 GMT; path=/';
window.document.cookie = 'language=bar;expires=Thu, 01 Jan 3030 00:00:00 GMT; path=/';
const testCookie = 'token=foo; language=bar'
expect(window.document.cookie).to.be(testCookie)
helper.newPad(function(){
// helper function seems to have cleared cookies
// NOTE: this doesn't yet mean it's proven to have taken effect by this point in execution
var firstCookie = window.document.cookie
expect(firstCookie).to.not.be(testCookie)
var chrome$ = helper.padChrome$;
// click on the settings button to make settings visible
var $userButton = chrome$(".buttonicon-showusers");
$userButton.click();
var $usernameInput = chrome$("#myusernameedit");
$usernameInput.click();
$usernameInput.val('John McLear');
$usernameInput.blur();
// Before refreshing, make sure the name is there
expect($usernameInput.val()).to.be('John McLear')
setTimeout(function(){ //give it a second to save the username on the server side
helper.newPad(function(){ // get a new pad, let it clear the cookies
var chrome$ = helper.padChrome$;
// helper function seems to have cleared cookies
// NOTE: this doesn't yet mean cookies were cleared effectively.
// We still need to test below that we're in a new session
expect(window.document.cookie).to.not.be(testCookie)
expect(window.document.cookie).to.not.be(firstCookie)
// click on the settings button to make settings visible
var $userButton = chrome$(".buttonicon-showusers");
$userButton.click();
// confirm that the session was actually cleared
var $usernameInput = chrome$("#myusernameedit");
expect($usernameInput.val()).to.be('')
done();
});
}, 1000);
})
});
});
describe("the waitFor method", function(){