diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ea6cde7c..392611e40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/bin/convert.js b/bin/convert.js index 7de2f9cb4..69bb2cbc7 100644 --- a/bin/convert.js +++ b/bin/convert.js @@ -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; diff --git a/bin/importSqlFile.js b/bin/importSqlFile.js index 25592438f..8bc78323a 100644 --- a/bin/importSqlFile.js +++ b/bin/importSqlFile.js @@ -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'); diff --git a/bin/migrateDirtyDBtoRealDB.js b/bin/migrateDirtyDBtoRealDB.js index 086d92b7b..ba329aa34 100644 --- a/bin/migrateDirtyDBtoRealDB.js +++ b/bin/migrateDirtyDBtoRealDB.js @@ -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?") }); }); diff --git a/bin/rebuildPad.js b/bin/rebuildPad.js index 60c5f4ed3..0013718a9 100644 --- a/bin/rebuildPad.js +++ b/bin/rebuildPad.js @@ -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]; diff --git a/doc/api/hooks_server-side.md b/doc/api/hooks_server-side.md index edf2051a5..a89ee560b 100644 --- a/doc/api/hooks_server-side.md +++ b/doc/api/hooks_server-side.md @@ -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 diff --git a/doc/assets/style.css b/doc/assets/style.css index 09bc9a364..95034c90a 100644 --- a/doc/assets/style.css +++ b/doc/assets/style.css @@ -44,4 +44,19 @@ a:hover { display: block; overflow: auto; padding: 5px; -} \ No newline at end of file +} + +table, th, td { + text-align: left; + border: 1px solid gray; + border-collapse: collapse; +} + +th { + padding: 0.5em; + background: #EEE; +} + +td { + padding: 0.5em; +} diff --git a/doc/docker.md b/doc/docker.md index 9a991a602..5eb0a16ad 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -38,7 +38,7 @@ docker build --tag /etherpad . Include two plugins in the container: ```bash -docker build --build-arg ETHERPAD_PLUGINS="ep_codepad ep_author_neat" --tag /etherpad . +docker build --build-arg ETHERPAD_PLUGINS="ep_comments_page ep_author_neat" --tag /etherpad . ``` ## Running your instance: diff --git a/src/locales/ar.json b/src/locales/ar.json index 9c6d5a435..c89b9919a 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -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": "الاستيراد معطل لأنك لم تساهم مسبقا لهذه الباد. من فضلك ساهم على الأقل مرة واحدة قبل الاستيراد" } diff --git a/src/locales/ast.json b/src/locales/ast.json index a8beb80f5..76164881b 100644 --- a/src/locales/ast.json +++ b/src/locales/ast.json @@ -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 instala Abiword.", + "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 instala Abiword o LibreOffice.", "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" } diff --git a/src/locales/br.json b/src/locales/br.json index f38ce2478..a9790e3e7 100644 --- a/src/locales/br.json +++ b/src/locales/br.json @@ -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 staliañ Abiword mar plij.", + "pad.importExport.abiword.innerHTML": "Ne c'hallit enporzhiañ nemet furmadoù testennoù plaen pe HTML. Evit arc'hwelioù enporzhiañ emdroetoc'h, staliit Abiword pe LibreOffice.", "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ñ." } diff --git a/src/locales/da.json b/src/locales/da.json index 9fe4c1020..41898f58e 100644 --- a/src/locales/da.json +++ b/src/locales/da.json @@ -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?", diff --git a/src/locales/de.json b/src/locales/de.json index 5015eff9a..a0e50cd97 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -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 installieren Sie bitte AbiWord.", + "pad.importExport.abiword.innerHTML": "Sie können nur aus reinen Text- oder HTML-Formaten importieren. Für umfangreichere Importfunktionen installieren Sie bitte AbiWord oder LibreOffice.", "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." } diff --git a/src/locales/diq.json b/src/locales/diq.json index cbf2f12fc..f25528510 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -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 AbiWord-i bar kerên.", + "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 AbiWordi ya zi LibreOfficeyi bar kerên.", "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ê" } diff --git a/src/locales/el.json b/src/locales/el.json index 7b7735b63..3e37c9dc4 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -54,7 +54,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Μορφή Open Document)", - "pad.importExport.abiword.innerHTML": "Μπορείτε να εισάγετε απλό κείμενο ή HTML. Για προηγμένες δυνατότητες εισαγωγής παρακαλούμε εγκαταστήστε το AbiWord.", + "pad.importExport.abiword.innerHTML": "Μπορείτε να εισάγετε απλό κείμενο ή HTML. Για προηγμένες δυνατότητες εισαγωγής παρακαλούμε εγκαταστήστε το AbiWord ή το LibreOffice.", "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. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;", diff --git a/src/locales/eu.json b/src/locales/eu.json index 1b8ae12b7..630589572 100644 --- a/src/locales/eu.json +++ b/src/locales/eu.json @@ -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.", diff --git a/src/locales/fr.json b/src/locales/fr.json index e7f3bbf51..a35e4fdf5 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -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 d’importation plus évoluées, veuillez installer AbiWord.", + "pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou HTML. Pour des fonctionnalités d’importation plus évoluées, veuillez installer AbiWord ou LibreOffice.", "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 l’importation", "pad.impexp.copypaste": "Veuillez copier-coller", - "pad.impexp.exportdisabled": "L’exportation au format {{type}} est désactivée. Veuillez contacter votre administrateur système pour plus de détails." + "pad.impexp.exportdisabled": "L’exportation 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": "L’importation est désactivée parce que vous n’avez jamais contribué à ce bloc. Veuillez contribuer au moins une fois avant d’importer" } diff --git a/src/locales/he.json b/src/locales/he.json index c93f762a7..0f70ebf52 100644 --- a/src/locales/he.json +++ b/src/locales/he.json @@ -53,7 +53,7 @@ "pad.importExport.exportword": "מיקרוסופט וורד", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "באפשרותך לייבא מטקסט פשוט או מ־HTML. לאפשרויות ייבוא מתקדמות יותר יש להתקין AbiWord.", + "pad.importExport.abiword.innerHTML": "באפשרותך לייבא מטקסט פשוט או מ־HTML. לאפשרויות ייבוא מתקדמות יותר יש להתקין AbiWord או LibreOffice.", "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": "הייבוא מושבת כיוון שמעולם לא תרמת לפנקס הזה. נא לתרום לפחות פעם אחת בטרם ביצוע ניסיון ייבוא" } diff --git a/src/locales/ia.json b/src/locales/ia.json index de8d1a163..4356f0680 100644 --- a/src/locales/ia.json +++ b/src/locales/ia.json @@ -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, installa AbiWord.", + "pad.importExport.abiword.innerHTML": "Tu pote solmente importar files in formato de texto simple o HTML. Pro functionalitate de importation plus extense, installa AbiWord o LibreOffice.", "pad.modals.connected": "Connectite.", "pad.modals.reconnecting": "Reconnecte a tu pad…", "pad.modals.forcereconnect": "Fortiar reconnexion", diff --git a/src/locales/it.json b/src/locales/it.json index 1552cab7a..7b1e9ad22 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -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 installare AbiWord.", + "pad.importExport.abiword.innerHTML": "È possibile importare solo i formati di testo semplice o HTML. Per metodi più avanzati di importazione installare AbiWord o LibreOffice.", "pad.modals.connected": "Connesso.", "pad.modals.reconnecting": "Riconnessione al pad in corso...", "pad.modals.forcereconnect": "Forza la riconnessione", diff --git a/src/locales/ja.json b/src/locales/ja.json index be13d4837..b4abd53c8 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -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 ファイルからのみインポートできます。より高度なインポート機能を使用するには、AbiWord をインストールしてください。", + "pad.importExport.abiword.innerHTML": "プレーンテキストまたは HTML ファイルからのみインポートできます。より高度なインポート機能を使用するには、AbiWord またはLibreOfficeをインストールしてください。", "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": "このパッドに寄稿した実績がないため、インポートを無効にしました。まず寄稿をしてから再度、インポートしてください" } diff --git a/src/locales/mk.json b/src/locales/mk.json index 0ea41bb2a..6952fd8d9 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -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-формат. Понапредни можности за увоз ќе добиете ако воспоставите AbiWord.", + "pad.importExport.abiword.innerHTML": "Можете да увезувате само од прост текст и HTML-формат. Понапредни можности за увоз ќе добиете ако воспоставите AbiWord или LibreOffice.", "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": "Увозот е оневозможен бидејќи досега немате придонеси во тетраткава. Направете барем еден придонес пред да увезувате" } diff --git a/src/locales/nb.json b/src/locales/nb.json index 95ce01417..a9764fc95 100644 --- a/src/locales/nb.json +++ b/src/locales/nb.json @@ -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, installer AbiWord.", + "pad.importExport.abiword.innerHTML": "Du kan bare importere fra ren tekst eller HTML-formater. For mer avanserte importfunksjoner, installer AbiWord eller LibreOffice.", "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" } diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index 1394404aa..ffd7498d5 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -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 instale o AbiWord.", + "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 instale o AbiWordor ou LibreOffice.", "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" } diff --git a/src/locales/pt.json b/src/locales/pt.json index dea6c1d9a..ea6e04ac5 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -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 instale o AbiWord.", + "pad.importExport.abiword.innerHTML": "Só pode importar texto sem formatação ou formatos HTML. Para funcionalidades de importação mais avançadas, por favor, instale o AbiWord ou LibreOffice.", "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" } diff --git a/src/locales/ru.json b/src/locales/ru.json index 49d0bcee9..5ad071d19 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -59,7 +59,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (документ OpenOffice)", - "pad.importExport.abiword.innerHTML": "Вы можете импортировать только из обычного текста или HTML. Для более продвинутых функций импорта, пожалуйста,\n установите AbiWord.", + "pad.importExport.abiword.innerHTML": "Вы можете импортировать только из обычного текста или HTML. Для более продвинутых функций импорта установите AbiWord или LibreOffice.", "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": "Импорт отключен, поскольку вы никогда не вносили вклад в этот документ. Пожалуйста, внесите свой вклад хотя бы один раз перед импортом" } diff --git a/src/locales/sr-ec.json b/src/locales/sr-ec.json index 109668def..011139b08 100644 --- a/src/locales/sr-ec.json +++ b/src/locales/sr-ec.json @@ -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 формата. За компликованије функције о увозу, молимо да инсталирате AbiWord.", + "pad.importExport.abiword.innerHTML": "Једино можете увести са једноставног текстуалног формата или HTML формата. За компликованије функције о увозу, молимо да инсталирате AbiWord или LibreOffice.", "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": "Датотека је превелика. Контактирајте администратора сајта да повећа допуштену величину датотеке за увоз." } diff --git a/src/locales/sv.json b/src/locales/sv.json index 69b086a16..f6c0c1989 100644 --- a/src/locales/sv.json +++ b/src/locales/sv.json @@ -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 installera AbiWord.", + "pad.importExport.abiword.innerHTML": "Du kan endast importera från oformaterad text eller HTML-format. För mer avancerade importfunktioner, var god installera AbiWord eller LibreOffice.", "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" } diff --git a/src/locales/tr.json b/src/locales/tr.json index b27aa3d28..95a5e8a2c 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -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 AbiWord'ü yükleyin.", + "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 AbiWord veya LibreOffice yükleyin.", "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" } diff --git a/src/locales/uk.json b/src/locales/uk.json index 968920d24..19042c963 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -59,7 +59,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (документ OpenOffice)", - "pad.importExport.abiword.innerHTML": "Ви можете імпортувати лище формати простого тексту або HTML. Для більш просунутих способів імпорту встановіть AbiWord.", + "pad.importExport.abiword.innerHTML": "Ви можете імпортувати лише у форматі простого тексту або HTML. Для більш просунутих способів імпорту встановіть AbiWord або LibreOffice.", "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": "Імпорт є вимкненим, оскільки ви ніколи не працювали із цим документом. Будь ласка, відредагуйте хоча б раз перед тим, як зробити імпорт" } diff --git a/src/locales/vec.json b/src/locales/vec.json index 375390d7d..36ac93786 100644 --- a/src/locales/vec.json +++ b/src/locales/vec.json @@ -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)", diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index 438e6475a..cdb77b84d 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -58,7 +58,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF(開放文件格式)", - "pad.importExport.abiword.innerHTML": "您只可以從純文字或 HTML 格式檔匯入。安裝\n AbiWord 以取得更多進階的匯入功能。", + "pad.importExport.abiword.innerHTML": "您只可以從純文字或 HTML 格式檔匯入。安裝\n AbiWord 或是 LibreOffice 以取得更多進階的匯入功能。", "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": "因為您已沒在此記事本上貢獻,匯入功能已停用。在進行匯入之前,至少要做出一次貢獻" } diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 9e23fea21..bf69a3d25 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -1076,6 +1076,7 @@ async function handleClientReady(client, message) var clientVars = { "skinName": settings.skinName, "skinVariants": settings.skinVariants, + "randomVersionString": settings.randomVersionString, "accountPrivs": { "maxRevisions": 100 }, diff --git a/src/node/utils/Minify.js b/src/node/utils/Minify.js index 7cc05645b..2a9f2a5e7 100644 --- a/src/node/utils/Minify.js +++ b/src/node/utils/Minify.js @@ -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}`); diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js index 369a4485f..c8f2ec159 100644 --- a/src/node/utils/Settings.js +++ b/src/node/utils/Settings.js @@ -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 */ diff --git a/src/package-lock.json b/src/package-lock.json index 2d3edf937..a14e8b5f1 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -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", diff --git a/src/package.json b/src/package.json index 5632ab618..baf8bf498 100644 --- a/src/package.json +++ b/src/package.json @@ -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" } diff --git a/src/static/css/admin.css b/src/static/css/admin.css index c44ce3983..fc11c38b0 100644 --- a/src/static/css/admin.css +++ b/src/static/css/admin.css @@ -222,7 +222,7 @@ pre { word-wrap: break-word; } -@media (max-width: 720px) { +@media (max-width: 800px) { div.innerwrapper { padding: 0 15px 15px 15px; } diff --git a/src/static/css/iframe_editor.css b/src/static/css/iframe_editor.css index 12f5d1c5c..8d6a60ec2 100644 --- a/src/static/css/iframe_editor.css +++ b/src/static/css/iframe_editor.css @@ -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 diff --git a/src/static/css/pad/chat.css b/src/static/css/pad/chat.css index 39df3ce30..98f96109b 100644 --- a/src/static/css/pad/chat.css +++ b/src/static/css/pad/chat.css @@ -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; diff --git a/src/static/css/pad/form.css b/src/static/css/pad/form.css index d0dcb7596..0604b1a77 100644 --- a/src/static/css/pad/form.css +++ b/src/static/css/pad/form.css @@ -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; diff --git a/src/static/css/pad/gritter.css b/src/static/css/pad/gritter.css index 20d70be46..e17367efa 100644 --- a/src/static/css/pad/gritter.css +++ b/src/static/css/pad/gritter.css @@ -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; diff --git a/src/static/css/pad/layout.css b/src/static/css/pad/layout.css index 0d583f329..7b64936d7 100644 --- a/src/static/css/pad/layout.css +++ b/src/static/css/pad/layout.css @@ -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 */ } diff --git a/src/static/css/pad/popup.css b/src/static/css/pad/popup.css index fd4312cd2..00fc8ca51 100644 --- a/src/static/css/pad/popup.css +++ b/src/static/css/pad/popup.css @@ -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; diff --git a/src/static/css/pad/popup_users.css b/src/static/css/pad/popup_users.css index 0832383f2..8c6c794d2 100644 --- a/src/static/css/pad/popup_users.css +++ b/src/static/css/pad/popup_users.css @@ -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; diff --git a/src/static/css/pad/toolbar.css b/src/static/css/pad/toolbar.css index 414a9e909..bc258510a 100644 --- a/src/static/css/pad/toolbar.css +++ b/src/static/css/pad/toolbar.css @@ -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; } diff --git a/src/static/css/timeslider.css b/src/static/css/timeslider.css index cf3cbff04..35f756596 100644 --- a/src/static/css/timeslider.css +++ b/src/static/css/timeslider.css @@ -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"] { diff --git a/src/static/js/ace.js b/src/static/js/ace.js index d06d902a6..efb27fc5f 100644 --- a/src/static/js/ace.js +++ b/src/static/js/ace.js @@ -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); diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index b819ba498..851934856 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -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 = '
1
'; + sideDiv.innerHTML = '
1
'; 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($("" + String(n) + "")); fragment.appendChild(div); if(b){ b = b.nextSibling; diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 622b57f3e..aeeca15c6 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -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}); } }, diff --git a/src/static/js/pad_editbar.js b/src/static/js/pad_editbar.js index ba2171b0d..fc9ba198a 100644 --- a/src/static/js/pad_editbar.js +++ b/src/static/js/pad_editbar.js @@ -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(''); + $('#embedinput').val(''); $('#linkinput').val(readonlyLink); } else { var padurl = window.location.href.split("?")[0]; - $('#embedinput').val(''); + $('#embedinput').val(''); $('#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'); } } diff --git a/src/static/js/pad_editor.js b/src/static/js/pad_editor.js index b035bf6fc..6c53e4014 100644 --- a/src/static/js/pad_editor.js +++ b/src/static/js/pad_editor.js @@ -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 diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index d42cbb022..fbbefdae4 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -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("
An error occurred
The error was reported with the following id: '" + errorId + "'

Please press and hold Ctrl and press F5 to reload this page, if the problem persists please send this error message to your webmaster:
'" - + "ErrorId: " + errorId + "
URL: " + padutils.escapeHtml(window.location.href) + "
UserAgent: " + userAgent + "
" + msg + " in " + url + " at line " + linenumber + "'
"); + + var msgAlreadyVisible = false; + $('.gritter-item .error-msg').each(function() { + if ($(this).text() === msg) { + msgAlreadyVisible = true; + } + }); + + if (!msgAlreadyVisible) { + errorMsg = "Please press and hold Ctrl and press F5 to reload this page
\ + If the problem persists please send this error message to your webmaster:

\ +
\ + ErrorId: " + errorId + "
\ + URL: " + padutils.escapeHtml(window.location.href) + "
\ + UserAgent: " + userAgent + "
\ + "+ msg + " in " + url + " at line " + linenumber + '
'; + + $.gritter.add({ + title: "An error occurred", + text: errorMsg, + class_name: "error", + position: 'bottom', + sticky: true, + }); } //send javascript errors to the server diff --git a/src/static/skins/colibris/index.css b/src/static/skins/colibris/index.css index 0452d45f8..5129c43a8 100644 --- a/src/static/skins/colibris/index.css +++ b/src/static/skins/colibris/index.css @@ -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 { diff --git a/src/static/skins/colibris/pad.css b/src/static/skins/colibris/pad.css index c1cec179c..68e8db1a8 100644 --- a/src/static/skins/colibris/pad.css +++ b/src/static/skins/colibris/pad.css @@ -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"); diff --git a/src/static/skins/colibris/src/components/chat.css b/src/static/skins/colibris/src/components/chat.css index 61d992c5f..b9853508b 100644 --- a/src/static/skins/colibris/src/components/chat.css +++ b/src/static/skins/colibris/src/components/chat.css @@ -75,7 +75,7 @@ background-color: var(--bg-color); } -@media (max-width: 720px) { +@media (max-width: 800px) { #chaticon { right: 0; } diff --git a/src/static/skins/colibris/src/components/gritter.css b/src/static/skins/colibris/src/components/gritter.css index fa255fe4a..e612c4d44 100644 --- a/src/static/skins/colibris/src/components/gritter.css +++ b/src/static/skins/colibris/src/components/gritter.css @@ -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; -} \ No newline at end of file +} + +/* for ep_deleted_after_delay */ +.gritter-item #close_expiration_notif { + display: none; +} diff --git a/src/static/skins/colibris/src/components/popup.css b/src/static/skins/colibris/src/components/popup.css index 0a50c9bbe..b74a25cb8 100644 --- a/src/static/skins/colibris/src/components/popup.css +++ b/src/static/skins/colibris/src/components/popup.css @@ -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); diff --git a/src/static/skins/colibris/src/components/scrollbars.css b/src/static/skins/colibris/src/components/scrollbars.css index cd4ea08b5..85f942b21 100644 --- a/src/static/skins/colibris/src/components/scrollbars.css +++ b/src/static/skins/colibris/src/components/scrollbars.css @@ -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; diff --git a/src/static/skins/colibris/src/components/sidediv.css b/src/static/skins/colibris/src/components/sidediv.css index 63eee2dd5..6f5556df9 100644 --- a/src/static/skins/colibris/src/components/sidediv.css +++ b/src/static/skins/colibris/src/components/sidediv.css @@ -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; } \ No newline at end of file diff --git a/src/static/skins/colibris/src/components/toolbar.css b/src/static/skins/colibris/src/components/toolbar.css index 354e13249..91e9991ed 100644 --- a/src/static/skins/colibris/src/components/toolbar.css +++ b/src/static/skins/colibris/src/components/toolbar.css @@ -131,7 +131,7 @@ } } -@media (max-width: 720px) { +@media (max-width: 800px) { .toolbar ul li { margin: 5px 2px; diff --git a/src/static/skins/colibris/src/layout.css b/src/static/skins/colibris/src/layout.css index a6dd784d7..dc27f94a3 100644 --- a/src/static/skins/colibris/src/layout.css +++ b/src/static/skins/colibris/src/layout.css @@ -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 */ } diff --git a/src/static/skins/colibris/src/pad-editor.css b/src/static/skins/colibris/src/pad-editor.css index 1d50ed0f9..f8436e88c 100644 --- a/src/static/skins/colibris/src/pad-editor.css +++ b/src/static/skins/colibris/src/pad-editor.css @@ -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); -} \ No newline at end of file diff --git a/src/static/skins/colibris/src/pad-variants.css b/src/static/skins/colibris/src/pad-variants.css index 212acdfcf..bd63604c9 100644 --- a/src/static/skins/colibris/src/pad-variants.css +++ b/src/static/skins/colibris/src/pad-variants.css @@ -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); diff --git a/src/static/skins/colibris/src/plugins/set_title_on_pad.css b/src/static/skins/colibris/src/plugins/set_title_on_pad.css new file mode 100644 index 000000000..9ab1e2a12 --- /dev/null +++ b/src/static/skins/colibris/src/plugins/set_title_on_pad.css @@ -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); +} \ No newline at end of file diff --git a/src/static/skins/colibris/timeslider.css b/src/static/skins/colibris/timeslider.css index b7b9f3e10..263e0e592 100644 --- a/src/static/skins/colibris/timeslider.css +++ b/src/static/skins/colibris/timeslider.css @@ -82,7 +82,7 @@ font-size: .9em; } -@media (max-width: 720px) { +@media (max-width: 800px) { #slider-btn-container { margin-top: 0; diff --git a/src/templates/index.html b/src/templates/index.html index 4962560b6..4fb810478 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -35,8 +35,8 @@ - - + + - +
<% e.begin_block("indexWrapper"); %> @@ -171,7 +171,7 @@ <% e.end_block(); %>
- + - + + @@ -435,10 +435,10 @@ <% e.begin_block("scripts"); %> - + - + - + - - + + <% e.begin_block("customScripts"); %> - + <% e.end_block(); %> diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index 2368f0ea1..5d826ceeb 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -35,18 +35,18 @@ <% e.begin_block("timesliderStyles"); %> - - - - - + + + + + <% e.end_block(); %> <% e.begin_block("timesliderScripts"); %> - - + + <% e.end_block(); %> @@ -245,14 +245,14 @@ - - + + - - + + - +