diff --git a/.gitignore b/.gitignore index abc6eb530..a75bb20e2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ messages.log .DS_Store www/scratch data +npm-debug.log diff --git a/customize.dist/main.css b/customize.dist/main.css index 831d70b8a..f33c44dff 100644 --- a/customize.dist/main.css +++ b/customize.dist/main.css @@ -1,6 +1,11 @@ /* Logs are shown to inform the user that something has happened They are only displayed briefly */ +@media print { + .alertify-logs { + visibility: hidden; + } +} .alertify-logs > * { padding: 12px 48px; color: #fafafa; @@ -1000,11 +1005,6 @@ html.cp, .cp #main_other .buttons { margin-top: 15px; } -.cp #fileManagerIframe { - width: 100%; - height: 500px; - margin-top: 15px; -} .cp .create, .cp .action { display: inline-block; @@ -1294,196 +1294,6 @@ html.cp, .cp div.realtime #addoption { border-bottom-left-radius: 5px; } -.cp.slide #modal .button { - position: absolute; - cursor: pointer; - font-size: 30px; - opacity: 0.6; - display: none; -} -.cp.slide #modal .button:hover { - opacity: 1; - display: block !important; -} -.cp.slide #modal #button_exit { - left: 20px; - top: 20px; - z-index: 9001; -} -.cp.slide #modal #button_left { - left: 6vw; - bottom: 10vh; -} -.cp.slide #modal #button_right { - right: 6vw; - bottom: 10vh; -} -.cp.slide #modal #content p, -.cp.slide #modal #content ul, -.cp.slide #modal #content ol { - font-size: 26px; -} -.cp.slide #modal #content img { - position: relative; - min-width: 1%; - max-width: 90%; - max-height: 90%; - margin: auto; -} -.cp div.modal, -.cp div#modal { - box-sizing: border-box; - z-index: 9001; - position: fixed; - top: 0px; - left: 0px; - width: 100%; - height: 100vh; - display: none; - background-color: #000; -} -.cp div.modal #content, -.cp div#modal #content { - box-sizing: border-box; - border: 1px solid white; - vertical-align: middle; - padding: 2.5vw; - /* center things as much as possible - - margin-top: 50vh; - margin-bottom: 50vh; - transform: translateY(-50%); - - */ - width: 100vw; - height: 56.25vw; - max-height: 100vh; - max-width: 177.78vh; - margin: auto; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; -} -.cp div.modal #content p, -.cp div#modal #content p, -.cp div.modal #content li, -.cp div#modal #content li, -.cp div.modal #content pre, -.cp div#modal #content pre, -.cp div.modal #content code, -.cp div#modal #content code { - font-size: 2.75vw; - line-height: 3.025vw; -} -.cp div.modal #content h1, -.cp div#modal #content h1 { - font-size: 5vw; - line-height: 5.5vw; -} -.cp div.modal #content h2, -.cp div#modal #content h2 { - font-size: 4.2vw; - line-height: 4.62vw; -} -.cp div.modal #content h3, -.cp div#modal #content h3 { - font-size: 3.6vw; - line-height: 3.96vw; -} -.cp div.modal #content h4, -.cp div#modal #content h4 { - font-size: 3vw; - line-height: 3.3vw; -} -.cp div.modal #content h5, -.cp div#modal #content h5 { - font-size: 2.2vw; - line-height: 2.42vw; -} -.cp div.modal #content h6, -.cp div#modal #content h6 { - font-size: 1.6vw; - line-height: 1.76vw; -} -.cp div.modal #content h1, -.cp div#modal #content h1, -.cp div.modal #content h2, -.cp div#modal #content h2, -.cp div.modal #content h3, -.cp div#modal #content h3, -.cp div.modal #content h4, -.cp div#modal #content h4, -.cp div.modal #content h5, -.cp div#modal #content h5, -.cp div.modal #content h6, -.cp div#modal #content h6 { - color: inherit; -} -.cp div.modal #content pre > code, -.cp div#modal #content pre > code { - display: block; - position: relative; - border: 1px solid #333; - width: 90%; - margin: auto; - padding-left: .25vw; -} -.cp div.modal #content ul, -.cp div#modal #content ul, -.cp div.modal #content ol, -.cp div#modal #content ol { - min-width: 50%; - max-width: 100%; - display: table; - margin: 0 auto; -} -.cp div.modal .center, -.cp div#modal .center { - position: relative; - width: 80%; - height: 80%; - margin: auto; - border: 1px solid #ffffff; - text-align: center; -} -.cp div.modal.shown, -.cp div#modal.shown { - display: block; -} -.cp div.modal table, -.cp div#modal table { - margin: 30px; - border-collapse: collapse; -} -.cp div.modal table input, -.cp div#modal table input { - height: 100%; - width: 90%; - border: 3px solid #fff; -} -.cp div.modal table tfoot tr td, -.cp div#modal table tfoot tr td { - z-index: 4000; - cursor: pointer; -} -.cp div.modal #addtime, -.cp div#modal #addtime, -.cp div.modal #adddate, -.cp div#modal #adddate { - color: #46E981; - border: 1px solid #46E981; - padding: 15px; -} -.cp div.modal #adddate, -.cp div#modal #adddate { - border-top-left-radius: 5px; -} -.cp div.modal #addtime, -.cp div#modal #addtime { - border-bottom-left-radius: 5px; -} #cors-store { display: none; } diff --git a/customize.dist/main.js b/customize.dist/main.js index 83295af5b..8452a2480 100644 --- a/customize.dist/main.js +++ b/customize.dist/main.js @@ -132,8 +132,10 @@ define([ if (result.proxy && !result.proxy.login_name) { result.proxy.login_name = result.userName; } - Cryptpad.login(result.userHash, result.userName, function () { - document.location.href = '/drive/'; + Cryptpad.whenRealtimeSyncs(result.realtime, function () { + Cryptpad.login(result.userHash, result.userName, function () { + document.location.href = '/drive/'; + }); }); return; } diff --git a/customize.dist/messages.js b/customize.dist/messages.js index a2249adcc..ba35f1d96 100644 --- a/customize.dist/messages.js +++ b/customize.dist/messages.js @@ -1,11 +1,6 @@ (function () { var LS_LANG = "CRYPTPAD_LANG"; -var getStoredLanguage = function () { return localStorage.getItem(LS_LANG); }; -var getBrowserLanguage = function () { return navigator.language || navigator.userLanguage; }; -var getLanguage = function () { return getStoredLanguage() || getBrowserLanguage(); }; -var language = getLanguage(); - // add your module to this map so it gets used var map = { 'fr': 'Français', @@ -15,6 +10,19 @@ var map = { 'pt-br': 'Português do Brasil' }; +var getStoredLanguage = function () { return localStorage.getItem(LS_LANG); }; +var getBrowserLanguage = function () { return navigator.language || navigator.userLanguage; }; +var getLanguage = function () { + if (getStoredLanguage()) { return getStoredLanguage(); } + var l = getBrowserLanguage() || ''; + if (Object.keys(map).indexOf(l) !== -1) { + return l; + } + // Edge returns 'fr-FR' --> transform it to 'fr' and check again + return Object.keys(map).indexOf(l.split('-')[0]) !== -1 ? l.split('-')[0] : 'en'; +}; +var language = getLanguage(); + var req = ['/customize/translations/messages.js']; if (language && map[language]) { req.push('/customize/translations/messages.' + language + '.js'); } req.push('/bower_components/jquery/dist/jquery.min.js'); diff --git a/customize.dist/src/less/alertify.less b/customize.dist/src/less/alertify.less index c4bb60898..19021a564 100644 --- a/customize.dist/src/less/alertify.less +++ b/customize.dist/src/less/alertify.less @@ -4,6 +4,9 @@ They are only displayed briefly */ .alertify-logs { + @media print { + visibility: hidden; + } > * { padding: @padding-base @padding-base * 4; color: @alertify-fore; diff --git a/customize.dist/src/less/cryptpad.less b/customize.dist/src/less/cryptpad.less index 6e0f951fb..d7fcc98c4 100644 --- a/customize.dist/src/less/cryptpad.less +++ b/customize.dist/src/less/cryptpad.less @@ -494,12 +494,6 @@ noscript { } } -#fileManagerIframe { - width: 100%; - height: 500px; - margin-top: 15px; -} - /* buttons */ .create, .action { @@ -816,192 +810,6 @@ form.realtime, div.realtime { #adduser { .top-left; } #addoption { .bottom-left; } } - -// used for slides -.viewportRatio (@x, @y, @p: 100) { - width: @p * 100vw; - height: @y * (@p * 100vw) / @x; - max-width: @x / @y * (@p * 100vh); - max-height: (@p * 100vh); -} - -&.slide { - #modal { - .button { - position: absolute; - cursor: pointer; - font-size: 30px; - opacity: 0.6; - display: none; - } - .button:hover { - opacity: 1; - display: block !important; - } - #button_exit { - left: 20px; - top: 20px; - z-index: 9001; - } - #button_left { - left: 6vw; - bottom: 10vh; - } - #button_right { - right: 6vw; - bottom: 10vh; - } - } - #modal #content { - p, ul, ol { font-size: 26px; } - - img { - position: relative; - min-width: 1%; - max-width: 90%; - max-height: 90%; - margin: auto; - } - } -} - -div.modal, div#modal { - display: none; - - #content { - box-sizing: border-box; - border: 1px solid white; - - vertical-align: middle; - padding: 2.5vw; - - /* center things as much as possible - - margin-top: 50vh; - margin-bottom: 50vh; - transform: translateY(-50%); - - */ - - width: 100vw; - height: 56.25vw; // height:width ratio = 9/16 = .5625 - max-height: 100vh; - max-width: 177.78vh; // 16/9 = 1.778 - margin: auto; - position: absolute; - top:0;bottom:0; // vertical center - left:0;right:0; // horizontal center - - p, li, pre, code { - .size(2.75); - } - - h1 { .size(5); } - h2 { .size(4.2); } - h3 { .size(3.6); } - h4 { .size (3); } - h5 { .size(2.2); } - h6 { .size(1.6); } - - h1, h2, h3, h4, h5, h6 { - color: inherit; - } - - pre > code { - display: block; - position: relative; - border: 1px solid #333; - width: 90%; - margin: auto; - padding-left: .25vw; - } - - ul, ol { - min-width: 50%; - max-width: 100%; - display: table; - margin: 0 auto; - } - } - - box-sizing: border-box; - z-index: 9001; - position: fixed; - - top: 0px; - left: 0px; - - width: 100%; - height: 100vh; - display: none; - - background-color: @slide-default-bg; - - .center { - position: relative; - - width: 80%; - height: 80%; - margin: auto; - border: 1px solid @light-base; - - text-align: center; - } - - &.shown { - display: block; - } - - table { - margin: 30px; - - border-collapse: collapse; - tr { - td { - } - } - - input { - height: 100%; - width: 90%; - border: 3px solid @base; - } - - thead { - tr { - th { - span.remove { - } - } - } - } - tbody { - tr { - td { - - } - } - } - tfoot { - tr { - td { - z-index: 4000; - cursor: pointer; - } - } - } - } - - #addtime, - #adddate { - color: @cp-green; - border: 1px solid @cp-green; - padding: 15px; - } - - #adddate { .top-left; } - #addtime { .bottom-left; } -} } // hack for our cross-origin iframe diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js index e82df349f..7f2117c7d 100644 --- a/customize.dist/translations/messages.fr.js +++ b/customize.dist/translations/messages.fr.js @@ -25,6 +25,7 @@ define(function () { out.loading = "Chargement..."; out.error = "Erreur"; + out.saved = "Enregistré"; out.disconnected = 'Déconnecté'; out.synchronizing = 'Synchronisation'; @@ -76,6 +77,14 @@ define(function () { out.backgroundButtonTitle = 'Changer la couleur de fond de la présentation'; out.colorButtonTitle = 'Changer la couleur du texte en mode présentation'; + out.printButton = "Imprimer"; + out.printButtonTitle = "Imprimer votre présentation ou l'enregistrer au format PDF"; + out.printOptions = "Options d'impression"; + out.printSlideNumber = "Afficher le numéro des slides"; + out.printDate = "Afficher la date"; + out.printTitle = "Afficher le titre du pad"; + out.printCSS = "Personnaliser l'apparence (CSS):"; + out.editShare = "Lien d'édition"; out.editShareTitle = "Copier le lien d'édition dans le presse-papiers"; out.editOpen = "Éditer dans un nouvel onglet"; @@ -248,6 +257,11 @@ define(function () { out.settings_resetTipsButton = "Réinitialiser les astuces visibles dans CryptDrive"; out.settings_resetTipsDone = "Toutes les astuces sont de nouveau visibles."; + out.settings_importTitle = "Importer les pads récents de ce navigateur dans mon CryptDrive"; + out.settings_import = "Importer"; + out.settings_importConfirm = "Êtes-vous sûr de vouloir importer les pads récents de ce navigateur dans le CryptDrive de votre compte utilisateur ?"; + out.settings_importDone = "Importation terminée"; + out.settings_userFeedbackHint1 = "CryptPad peut envoyer des retours d'expérience très limités vers le serveur, de manière à nous permettre d'améliorer l'expérience des utilisateurs."; out.settings_userFeedbackHint2 = "Le contenu de vos pads et les clés de déchiffrement ne seront jamais partagés avec le serveur."; out.settings_userFeedback = "Activer l'envoi de retours d'expérience"; diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js index 95fb8d0b6..73c38d979 100644 --- a/customize.dist/translations/messages.js +++ b/customize.dist/translations/messages.js @@ -27,6 +27,7 @@ define(function () { out.loading = "Loading..."; out.error = "Error"; + out.saved = "Saved"; out.disconnected = 'Disconnected'; out.synchronizing = 'Synchronizing'; @@ -78,6 +79,14 @@ define(function () { out.backgroundButtonTitle = 'Change the background color in the presentation'; out.colorButtonTitle = 'Change the text color in presentation mode'; + out.printButton = "Print"; + out.printButtonTitle = "Print your slides or export them as a PDF file"; + out.printOptions = "Print options"; + out.printSlideNumber = "Display the slide number"; + out.printDate = "Display the date"; + out.printTitle = "Display the pad title"; + out.printCSS = "Custom style rules (CSS):"; + out.editShare = "Editing link"; out.editShareTitle = "Copy the editing link to clipboard"; out.editOpen = "Open editing link in a new tab"; @@ -93,7 +102,7 @@ define(function () { out.okButton = 'OK (enter)'; - out.cancel = "Cancel"; // Not used? + out.cancel = "Cancel"; out.cancelButton = 'Cancel (esc)'; // Polls @@ -250,6 +259,11 @@ define(function () { out.settings_resetTipsButton = "Reset the available tips in CryptDrive"; out.settings_resetTipsDone = "All the tips are now visible again."; + out.settings_importTitle = "Import this browser's recent pads in my CryptDrive"; + out.settings_import = "Import"; + out.settings_confirm = "Are you sure you want to import recent pads from this browser to your user account's CryptDrive?"; + out.settings_done = "Import completed"; + out.settings_userFeedbackHint1 = "CryptPad provides some very basic feedback to the server, to let us know how to improve your experience."; out.settings_userFeedbackHint2 = "Your pad's content will never be shared with the server."; out.settings_userFeedback = "Enable user feedback"; diff --git a/package.json b/package.json index ba331a899..8eb638531 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "scripts": { "lint": "jshint --config .jshintrc --exclude-path .jshintignore .", "test": "node TestSelenium.js", - "style": "lessc ./customize.dist/src/less/cryptpad.less > ./customize.dist/main.css && lessc ./customize.dist/src/less/toolbar.less > ./customize.dist/toolbar.css && lessc ./www/drive/file.less > ./www/drive/file.css && lessc ./www/settings/main.less > ./www/settings/main.css", + "style": "lessc ./customize.dist/src/less/cryptpad.less > ./customize.dist/main.css && lessc ./customize.dist/src/less/toolbar.less > ./customize.dist/toolbar.css && lessc ./www/drive/file.less > ./www/drive/file.css && lessc ./www/settings/main.less > ./www/settings/main.css && lessc ./www/slide/slide.less > ./www/slide/slide.css", "template": "cd customize.dist/src && node build.js" } } diff --git a/www/code/index.html b/www/code/index.html index af6247a40..a3f943078 100644 --- a/www/code/index.html +++ b/www/code/index.html @@ -11,6 +11,7 @@ data-main-favicon="/customize/main-favicon.png" data-alt-favicon="/customize/alt-favicon.png" id="favicon" /> +