Merge branch 'temp' into t

pull/1/head
yflory 5 years ago
commit 6e30a7546d

@ -1,3 +1,42 @@
# Smilodon release (3.18.0)
## Goals
This is a big one! A lot of people are going to love it and a few are probably going to hate it.
This release introduces some major changes to our apps' appearances with the intent of making it easier to use, easier for us to support, and easier to maintain.
## Update notes
If you're using a mostly standard CryptPad installation this should be a rather easy update.
If you've customized your styles, particularly for the purpose of overriding the default colors, you may encounter some problems. **We recommend that you test this version in a staging environment** before deploying to ensure that it is compatible with your modifications.
Otherwise, update to 3.18.0 from 3.17.0 in the following manner:
1. stop your server
2. fetch the latest code with git
3. bower update
4. relaunch your server
## Features
* Obviously, there's the major redesign mentioned in our _goals_.
* You'll immediately notice that we've changed a lot of our color scheme. Apps still have colors as accents to help differentiate them, but the colors are more subtle. The move towards a more monochrome design makes it easier for us to ensure that the UI has a sufficient amount of contrast (less eye strain for everybody!) and simplifies design issues by settling on a simpler color palette.
* You'll probably also notice that a lot of the toolbar features have been rearranged. The chat and userlist are now at the right, while we've adopted the "File menu" layout to which users of office productivity are accustomed. A lot of the common features that were buried in our `...` menu are now under "File" ("new", "import/export", "history", "move to trash", etc.). Some apps feature their special menus ("Insert", "Tools", "Theme") depending on whether they support certain features. In general we'll use text in addition to icons in the toolbar except on very small screens where the use of space is constrained.
* Finally, you'll find some of CryptPad's most important functionality right in the center of the toolbar. The "Share" and "Access" buttons already existed, but lots of people had trouble finding them and missed out on our fine-grained access controls by always sharing the URL directly from their browser's address bar. In case you hadn't seen it, the "Share menu" gives you the ability to generate links that let others view, edit, or delete the document in question. The "Access menu" provides an overview of the document's access settings, and lets its owner(s) add passwords, enable or disable other viewers' ability to request edit rights, restrict access to a dynamic list of users or teams, and modify ownership of the document. It will soon be even more important to know about these menus, because **we plan to enable "Safe links" as the default behaviour in our next release**. "Safe links" are URLs that contain only a document's id instead of its cryptographic secrets, making it less likely that you'll accidentally leak the ability to read your documents during screenshots or when copy-pasting URLs.
* The toolbar redesign has also affected the drive interface, but it's special enough that it deserves a separate mention:
* You can now collapse the sidebar which contains the search button, recent pads, filesystem tree, templates, trash, and account storage quota meter. This should make navigation of the drive on mobile devices much simpler.
* The actual "search" interface is no longer inside the sidebar. Instead, clicking search will bring you to an interface which uses the full size available to display the search bar and its results.
* By the time the toolbar was mostly redesigned we realized that our mockups hadn't included a link to the "todo" app. In fact, we'd been meaning to deprecate it in favour of Kanbans for some time, but we hadn't gotten around to it. So, now there's a migration that will be run automatically when you access your account for the first time after this release. Your todo-list will be transformed into a Kanban located in the root of your drive.
* On that note, this release also makes it much easier to drag and drop kanban cards within and between full columns thanks to an improved scrolling behaviour while you are holding a card.
## Bug fixes
* While implementing the todo-list migration we noticed that user accounts were running migrations without updating their version afterward. This resulted in redundant migrations being run at login time, so now that the version has been updated you might notice that login is marginally faster.
* We also fixed a regression in the "Print" functionality of the rich text editor, so you should be able to print correctly-formatted rich text documents once more.
* Lastly, there were some rather annoying issues with spreadsheets throughout this release that resulted in some users not being able to load their sheets or in their sheets being rendered or encoded incorrectly. We spent a lot of time solving these issues, and believe spreadsheets to be stable once more.
# RedGazelle's revenge release (3.17.1) # RedGazelle's revenge release (3.17.1)
In recent months a growing amount of our time has been going towards answering support tickets, emails, and GitHub issues. This has made it a little more difficult to also maintain a bi-weekly release schedule, since there's some overhead involved in deploying our latest code and producing release notes. In recent months a growing amount of our time has been going towards answering support tickets, emails, and GitHub issues. This has made it a little more difficult to also maintain a bi-weekly release schedule, since there's some overhead involved in deploying our latest code and producing release notes.
@ -10,7 +49,7 @@ Updating to 3.17.1 from 3.17.0 is pretty standard:
1. Stop your server 1. Stop your server
2. Get the latest code with git 2. Get the latest code with git
3. Restart your server 3. Restart your server
# RedGazelle release (3.17.0) # RedGazelle release (3.17.0)

@ -716,6 +716,9 @@
} }
} }
} }
.cp-app-drive-element-state {
display: none !important;
}
} }
} }
.cp-app-drive-element { .cp-app-drive-element {
@ -729,6 +732,9 @@
.cp-app-drive-element-type, .cp-app-drive-element-filler { .cp-app-drive-element-type, .cp-app-drive-element-filler {
display: none !important; display: none !important;
} }
.cp-app-drive-element-sort {
display: block !important;
}
} }
@media screen and (max-width: 740px) { @media screen and (max-width: 740px) {
@ -744,9 +750,6 @@
.cp-app-drive-element-header .cp-app-drive-element-state { .cp-app-drive-element-header .cp-app-drive-element-state {
display: none !important; display: none !important;
} }
.cp-app-drive-element-sort {
display: block !important;
}
} }
} }

@ -78,7 +78,6 @@ define([
]); ]);
var mkThemeButton = function (framework) { var mkThemeButton = function (framework) {
Messages.toolbar_theme = "Theme"; // XXX (duplicate from slide/inner.js)
var $theme = $(h('button.cp-toolbar-appmenu', [ var $theme = $(h('button.cp-toolbar-appmenu', [
h('i.cptools.cptools-palette'), h('i.cptools.cptools-palette'),
h('span.cp-button-name', Messages.toolbar_theme) h('span.cp-button-name', Messages.toolbar_theme)
@ -86,31 +85,10 @@ define([
var $content = $(h('div.cp-toolbar-drawer-content', { var $content = $(h('div.cp-toolbar-drawer-content', {
tabindex: 1 tabindex: 1
})).hide(); })).hide();
$theme.click(function () {
$content.toggle();
$theme.removeClass('cp-toolbar-button-active');
if ($content.is(':visible')) {
$theme.addClass('cp-toolbar-button-active');
$content.focus();
var wh = $(window).height();
var topPos = $theme[0].getBoundingClientRect().bottom;
$content.css('max-height', Math.floor(wh - topPos - 1)+'px');
}
});
var onBlur = function (e) {
if (e.relatedTarget) {
var $relatedTarget = $(e.relatedTarget);
if ($relatedTarget.is('.cp-toolbar-drawer-button')) { return; } // set up all the necessary events
if ($relatedTarget.parents('.cp-toolbar-drawer-content').length) { UI.createDrawer($theme, $content);
$relatedTarget.blur(onBlur);
return;
}
}
$theme.removeClass('cp-toolbar-button-active');
$content.hide();
};
$content.blur(onBlur).appendTo($theme);
framework._.toolbar.$theme = $content; framework._.toolbar.$theme = $content;
framework._.toolbar.$bottomL.append($theme); framework._.toolbar.$bottomL.append($theme);
}; };
@ -121,7 +99,7 @@ define([
name: 'authormarks', name: 'authormarks',
icon: 'fa-paint-brush', icon: 'fa-paint-brush',
}).hide(); }).hide();
framework._.toolbar.$theme.append($showAuthorColorsButton); // XXX framework._.toolbar.$theme.append($showAuthorColorsButton);
markers.setButton($showAuthorColorsButton); markers.setButton($showAuthorColorsButton);
}; };
var mkPrintButton = function (framework, $content, $print) { var mkPrintButton = function (framework, $content, $print) {

@ -1364,5 +1364,43 @@ define([
}; };
}; };
/* Given two jquery objects (a 'button' and a 'drawer')
add handlers to make it such that clicking the button
displays the drawer contents, and blurring the button
hides the drawer content. Used for toolbar buttons at the moment.
*/
UI.createDrawer = function ($button, $content) {
$button.click(function () {
$content.toggle();
$button.removeClass('cp-toolbar-button-active');
if ($content.is(':visible')) {
$button.addClass('cp-toolbar-button-active');
$content.focus();
var wh = $(window).height();
var topPos = $button[0].getBoundingClientRect().bottom;
$content.css('max-height', Math.floor(wh - topPos - 1)+'px');
}
});
var onBlur = function (e) {
if (e.relatedTarget) {
var $relatedTarget = $(e.relatedTarget);
if ($relatedTarget.is('.cp-toolbar-drawer-button')) { return; }
if ($relatedTarget.parents('.cp-toolbar-drawer-content').length) {
$relatedTarget.blur(onBlur);
return;
}
}
$button.removeClass('cp-toolbar-button-active');
$content.hide();
};
$content.blur(onBlur).appendTo($button);
$('body').keydown(function (e) {
if (e.which === 27) {
$content.blur();
}
});
};
return UI; return UI;
}); });

@ -1510,7 +1510,7 @@ define([
break; break;
case 'present': case 'present':
button = $(h('button', { button = $(h('button', {
title: Messages.presentButtonTitle, // XXX remove tippy? //title: Messages.presentButtonTitle, // TODO display if the label text is collapsed
}, [ }, [
h('i.fa.fa-play-circle'), h('i.fa.fa-play-circle'),
h('span.cp-toolbar-name', Messages.share_linkPresent) h('span.cp-toolbar-name', Messages.share_linkPresent)
@ -1518,7 +1518,7 @@ define([
break; break;
case 'preview': case 'preview':
button = $(h('button', { button = $(h('button', {
title: Messages.previewButtonTitle, // XXX remove tippy? //title: Messages.previewButtonTitle, // TODO display if the label text is collapsed
}, [ }, [
h('i.fa.fa-eye'), h('i.fa.fa-eye'),
h('span.cp-toolbar-name', Messages.share_linkOpen) h('span.cp-toolbar-name', Messages.share_linkOpen)
@ -1555,16 +1555,14 @@ define([
} }
break; break;
case 'mediatag': case 'mediatag':
Messages.toolbar_insert = "Insert"; // XXX
button = $(h('button.cp-toolbar-mediatag', { button = $(h('button.cp-toolbar-mediatag', {
title: Messages.filePickerButton, // XXX remove tippy? //title: Messages.filePickerButton, // TODO display if the label text is collapsed
}, [ }, [
h('i.fa.fa-picture-o'), h('i.fa.fa-picture-o'),
h('span.cp-toolbar-name', Messages.toolbar_insert) h('span.cp-toolbar-name', Messages.toolbar_insert)
])).click(common.prepareFeedback(type)); ])).click(common.prepareFeedback(type));
break; break;
case 'savetodrive': case 'savetodrive':
Messages.toolbar_savetodrive = "Save as image"; // XXX
button = $(h('button.cp-toolbar-savetodrive', { button = $(h('button.cp-toolbar-savetodrive', {
title: Messages.canvas_saveToDrive, title: Messages.canvas_saveToDrive,
}, [ }, [
@ -1588,9 +1586,8 @@ define([
}); });
break; break;
case 'toggle': case 'toggle':
Messages.toolbar_tools = "Tools"; // XXX
button = $(h('button.cp-toolbar-tools', { button = $(h('button.cp-toolbar-tools', {
title: data.title || '', // XXX remove tippy? //title: data.title || '', // TODO display if the label text is collapsed
}, [ }, [
h('i.fa.fa-wrench'), h('i.fa.fa-wrench'),
h('span.cp-toolbar-name', Messages.toolbar_tools) h('span.cp-toolbar-name', Messages.toolbar_tools)
@ -1661,7 +1658,7 @@ define([
var drawerCls = data.drawer === false ? '' : '.cp-toolbar-drawer-element'; var drawerCls = data.drawer === false ? '' : '.cp-toolbar-drawer-element';
var icon = data.icon || "fa-question"; var icon = data.icon || "fa-question";
button = $(h('button', { button = $(h('button', {
title: data.title || '', // XXX remove tippy? //title: data.title || '',
}, [ }, [
h('i.fa.' + icon), h('i.fa.' + icon),
h('span.cp-toolbar-name'+drawerCls, data.text) h('span.cp-toolbar-name'+drawerCls, data.text)
@ -2160,6 +2157,11 @@ define([
e.stopPropagation(); e.stopPropagation();
var state = $innerblock.is(':visible'); var state = $innerblock.is(':visible');
$('.cp-dropdown-content').hide(); $('.cp-dropdown-content').hide();
var $c = $container.closest('.cp-toolbar-drawer-content');
$c.removeClass('cp-dropdown-visible');
if (!state) { $c.addClass('cp-dropdown-visible'); }
try { try {
$('iframe').each(function (idx, ifrw) { $('iframe').each(function (idx, ifrw) {
$(ifrw).contents().find('.cp-dropdown-content').hide(); $(ifrw).contents().find('.cp-dropdown-content').hide();

@ -3005,7 +3005,6 @@ define([
} }
}; };
var collapseTreeButton = function () { var collapseTreeButton = function () {
Messages.drive_treeButton = "Files"; // XXX
APP.$collapseButton = APP.$collapseButton || common.createButton('', true, { APP.$collapseButton = APP.$collapseButton || common.createButton('', true, {
text: Messages.drive_treeButton, text: Messages.drive_treeButton,
name: 'files', name: 'files',
@ -4208,8 +4207,9 @@ define([
el = manager.find(paths[0].path); el = manager.find(paths[0].path);
var parsed, modal; var parsed, modal;
var friends = common.getFriends(); var friends = common.getFriends();
var anonDrive = manager.isPathIn(currentPath, [FILES_DATA]) && !APP.loggedIn;
if (manager.isFolder(el) && !manager.isSharedFolder(el)) { // Folder if (manager.isFolder(el) && !manager.isSharedFolder(el) && !anonDrive) { // Folder
// if folder is inside SF // if folder is inside SF
if (manager.isInSharedFolder(paths[0].path)) { if (manager.isInSharedFolder(paths[0].path)) {
return void UI.alert(Messages.convertFolderToSF_SFParent); return void UI.alert(Messages.convertFolderToSF_SFParent);
@ -4247,8 +4247,12 @@ define([
}); });
} }
} else { // File or shared folder } else { // File or shared folder
var sf = manager.isSharedFolder(el); var sf = !anonDrive && manager.isSharedFolder(el);
data = sf ? manager.getSharedFolderData(el) : manager.getFileData(el); if (anonDrive) {
data = el;
} else {
data = sf ? manager.getSharedFolderData(el) : manager.getFileData(el);
}
parsed = (data.href && data.href.indexOf('#') !== -1) ? Hash.parsePadUrl(data.href) : {}; parsed = (data.href && data.href.indexOf('#') !== -1) ? Hash.parsePadUrl(data.href) : {};
var roParsed = Hash.parsePadUrl(data.roHref); var roParsed = Hash.parsePadUrl(data.roHref);
var padType = parsed.type || roParsed.type; var padType = parsed.type || roParsed.type;

@ -329,7 +329,7 @@ define([
if (!h) { return; } if (!h) { return; }
var next = waitFor(function () { var next = waitFor(function () {
Feedback.send('Migrate-10', true); Feedback.send('Migrate-10', true);
userObject.version = version = 10; // XXX userObject.version = version = 10;
}); });
var old; var old;
var opts = { var opts = {

@ -365,7 +365,6 @@ define([
} }
}; };
Messages.todo_move = "Your todo list has been moved to the pad <b>{0}</b>, as the Todo app is now deprecated."; // XXX
handlers['MOVE_TODO'] = function(common, data) { handlers['MOVE_TODO'] = function(common, data) {
var content = data.content; var content = data.content;
var msg = content.msg; var msg = content.msg;

@ -311,14 +311,7 @@ define([
common: Common common: Common
}; };
var $block = exp.$language = UIElements.createDropdown(dropdownConfig); var $block = exp.$language = UIElements.createDropdown(dropdownConfig);
$block.find('button').attr('title', Messages.languageButtonTitle).click(function () { $block.find('button').attr('title', Messages.languageButtonTitle);
var state = $block.find('.cp-dropdown-content').is(':visible');
var $c = $block.closest('.cp-toolbar-drawer-content');
$c.removeClass('cp-dropdown-visible');
if (!state) {
$c.addClass('cp-dropdown-visible');
}
});
var isHovering = false; var isHovering = false;
var $aLanguages = $block.find('a'); var $aLanguages = $block.find('a');
@ -359,7 +352,6 @@ define([
content: l.name // Pretty name of the language value content: l.name // Pretty name of the language value
}); });
}); });
Messages.code_editorTheme = "Editor theme"; // XXX
var dropdownConfig = { var dropdownConfig = {
text: Messages.code_editorTheme, // Button initial text text: Messages.code_editorTheme, // Button initial text
options: options, // Entries displayed in the menu options: options, // Entries displayed in the menu
@ -369,15 +361,7 @@ define([
common: Common common: Common
}; };
var $block = exp.$theme = UIElements.createDropdown(dropdownConfig); var $block = exp.$theme = UIElements.createDropdown(dropdownConfig);
$block.find('button').attr('title', Messages.themeButtonTitle).click(function () { $block.find('button').attr('title', Messages.themeButtonTitle);
// XXX copy-pasted code from configureLanguage. We can refactor this.
var state = $block.find('.cp-dropdown-content').is(':visible');
var $c = $block.closest('.cp-toolbar-drawer-content');
$c.removeClass('cp-dropdown-visible');
if (!state) {
$c.addClass('cp-dropdown-visible');
}
});
setTheme(lastTheme, $block); setTheme(lastTheme, $block);

@ -90,9 +90,7 @@ MessengerUI, Messages) {
var $file = $toolbar.find('.'+BOTTOM_LEFT_CLS); var $file = $toolbar.find('.'+BOTTOM_LEFT_CLS);
Messages.toolbar_file = "File"; // XXX
if (!config.hideDrawer) { if (!config.hideDrawer) {
// XXX a lot of this logic is duplicated (code, slide, here)
var $drawer = $(h('button.' + FILE_CLS, [ var $drawer = $(h('button.' + FILE_CLS, [
h('i.fa.fa-file-o'), h('i.fa.fa-file-o'),
h('span.cp-button-name', Messages.toolbar_file) h('span.cp-button-name', Messages.toolbar_file)
@ -100,30 +98,8 @@ MessengerUI, Messages) {
var $drawerContent = $('<div>', { var $drawerContent = $('<div>', {
'class': DRAWER_CLS, 'class': DRAWER_CLS,
'tabindex': 1 'tabindex': 1
}).appendTo($drawer).hide(); }).hide();
$drawer.click(function () { UI.createDrawer($drawer, $drawerContent);
$drawerContent.toggle();
$drawer.removeClass('cp-toolbar-button-active');
if ($drawerContent.is(':visible')) {
$drawer.addClass('cp-toolbar-button-active');
$drawerContent.focus();
var wh = $(window).height();
var topPos = $drawer[0].getBoundingClientRect().bottom;
$drawerContent.css('max-height', Math.floor(wh - topPos - 1)+'px');
}
});
var onBlur = function (e) {
if (e.relatedTarget) {
if ($(e.relatedTarget).is('.cp-toolbar-drawer-button')) { return; }
if ($(e.relatedTarget).parents('.'+DRAWER_CLS).length) {
$(e.relatedTarget).blur(onBlur);
return;
}
}
$drawer.removeClass('cp-toolbar-button-active');
$drawerContent.hide();
};
$drawerContent.blur(onBlur);
} }
// The 'notitle' class removes the line added for the title with a small screen // The 'notitle' class removes the line added for the title with a small screen

@ -832,19 +832,19 @@
"title": "Mit CryptPad anfangen", "title": "Mit CryptPad anfangen",
"generic": { "generic": {
"more": "Erfahre mehr über die Nutzung von CryptPad, indem du unsere <a href=\"/faq.html\" target=\"_blank\">FAQ</a> liest", "more": "Erfahre mehr über die Nutzung von CryptPad, indem du unsere <a href=\"/faq.html\" target=\"_blank\">FAQ</a> liest",
"share": "Benutze das Teilen-Menü (<span class=\"fa fa-share-alt\"></span>), um Links zu generieren, die Mitarbeiter zum Lesen oder Bearbeiten einladen", "share": "Teile dieses Dokument mit der Schaltfläche <i class=\"fa fa-shhare-alt\"></i> <b>Teilen</b> und verwalte die Zugriffsrechte mit <i class=\"fa fa-unlock-alt\"></i> <b>Zugriff</b>.",
"save": "Alle Änderungen werden automatisch synchronisiert. Du musst sie also nicht selbst speichern" "save": "Alle Änderungen werden automatisch synchronisiert. Du musst sie also nicht selbst speichern"
}, },
"text": { "text": {
"formatting": "Du kannst die Werkzeugleiste anzeigen oder verbergen, indem du auf <span class=\"fa fa-caret-down\"></span> oder <span class=\"fa fa-caret-up\"></span> klickst", "formatting": "Blende die Werkzeugleiste ein/aus mit der Schaltfläche <i class=\"fa fa-wrench\"></i><b>Werkzeuge</b>.",
"embed": "Registrierte Benutzer können mit <span class=\"fa fa-image\"></span> Bilder oder Dateien einbetten, die in ihrem CryptDrive gespeichert sind", "embed": "Füge mit der Schaltfläche <i class=\"fa fa-image\"></i> <b>Insert</b> ein Bild aus deinem CryptDrive oder deinem Computer ein (eingeloggte Benutzer).",
"history": "Du kannst das Menü <em>Verlauf</em> <span class=\"fa fa-history\"></span> benutzen, um frühere Versionen anzusehen oder wiederherzustellen" "history": "Du kannst das Menü <em>Verlauf</em> <span class=\"fa fa-history\"></span> benutzen, um frühere Versionen anzusehen oder wiederherzustellen"
}, },
"pad": { "pad": {
"export": "Du kannst Pads als PDF exportieren, indem du auf die Schaltfläche <span class=\"fa fa-print\"></span> in der Werkzeugleiste klickst" "export": "Du kannst Pads als PDF exportieren, indem du auf die Schaltfläche <span class=\"fa fa-print\"></span> in der Werkzeugleiste klickst"
}, },
"code": { "code": {
"modes": "Benutze das Dropdown-Menü im Untermenü <span class=\"fa fa-ellipsis-h\"></span>, um die Syntaxhervorhebung oder das Farbschema zu ändern" "modes": "Benutze Menü <span class=\"cptools cptools-palette\"></span><b>Theme</b>, um Editor-Theme und Syntaxhervorhebung auszuwählen."
}, },
"beta": { "beta": {
"warning": "Dieser Editor ist noch <strong>experimentell</strong>, du kannst Fehler <a href=\"https://github.com/xwiki-labs/cryptpad/issues/\" target=\"_blank\">hier</a> melden" "warning": "Dieser Editor ist noch <strong>experimentell</strong>, du kannst Fehler <a href=\"https://github.com/xwiki-labs/cryptpad/issues/\" target=\"_blank\">hier</a> melden"
@ -855,7 +855,7 @@
"slide": { "slide": {
"markdown": "Schreibe Folien in <a href=\"http://www.markdowntutorial.com/\">Markdown</a> and trenne sie mit <code>---</code> in einer Zeile", "markdown": "Schreibe Folien in <a href=\"http://www.markdowntutorial.com/\">Markdown</a> and trenne sie mit <code>---</code> in einer Zeile",
"present": "Starte die Präsentation mit der Schaltfläche <span class=\"fa fa-play-circle\"></span>", "present": "Starte die Präsentation mit der Schaltfläche <span class=\"fa fa-play-circle\"></span>",
"settings": "Ändere die Einstellungen der Präsentation (Hintergrund, Übergang, Anzeige der Foliennummer etc.) über die Schaltfläche <span class=\"fa fa-cog\"></span> im Untermenü <span class=\"fa fa-ellipsis-h\"></span>", "settings": "Benutze das Menü <span class=\"cptools cptools-palette\"></span><b>Theme</b>, um Folienfarben und <span class=\"fa fa-cog\"></span><b>Einstellungen</b> (Hintergrund, Übergänge, Anzeige der Foliennummer etc.) zu ändern.",
"colors": "Ändere Text- und Hintergrundfarbe mit den Schaltflächen <span class=\"fa fa-i-cursor\"></span> und <span class=\"fa fa-square\"></span>" "colors": "Ändere Text- und Hintergrundfarbe mit den Schaltflächen <span class=\"fa fa-i-cursor\"></span> und <span class=\"fa fa-square\"></span>"
}, },
"poll": { "poll": {
@ -866,8 +866,8 @@
}, },
"whiteboard": { "whiteboard": {
"colors": "Ein Doppelklick auf Farben erlaubt, die Palette zu verändern", "colors": "Ein Doppelklick auf Farben erlaubt, die Palette zu verändern",
"mode": "Deaktiviere den Zeichenmodus, um die vorhandenen Striche zu verschieben und zu verlängern", "mode": "Wechsle zum <span class=\"fa fa-arrows\"></span> Auswahlmodus, um Elemente zu verschieben und zu verändern.",
"embed": "Bette Bilder von deiner Festplatte <span class=\"fa fa-file-image-o\"></span> oder von deinem CryptDrive <span class=\"fa fa-image\"></span> ein und exportiere sie als PNG zu deiner Festplatte <span class=\"fa fa-download\"></span> oder zu deinem CryptDrive <span class=\"fa fa-cloud-upload\"></span>" "embed": "Bette Bilder von deinem CryptDrive oder deinem Computer ein mit <span class=\"fa fa-image\"></span> <b>Einfügen</b>. Exportiere die Zeichnung als PNG in dein CryptDrive mit <b><span class=\"fa fa-file-o\"></span> Datei > <span class=\"fa fa-file-image-o\"></span> Als Bild speichern</b> oder zu deinem Computer mit <b><span class=\"fa fa-file-o\"></span> Datei > <span class=\"fa fa-download\"></span> Exportieren</b>."
}, },
"kanban": { "kanban": {
"add": "Füge neue Karten und Boards mit der Schaltfläche <span class=\"fa fa-plus\"></span> hinzu", "add": "Füge neue Karten und Boards mit der Schaltfläche <span class=\"fa fa-plus\"></span> hinzu",
@ -1367,5 +1367,15 @@
"comments_edited": "Bearbeitet", "comments_edited": "Bearbeitet",
"unknownPad": "Unbekanntes Pad", "unknownPad": "Unbekanntes Pad",
"comments_error": "An dieser Stelle kann kein Kommentar hinzugefügt werden", "comments_error": "An dieser Stelle kann kein Kommentar hinzugefügt werden",
"fm_sort": "Sortieren" "fm_sort": "Sortieren",
"code_editorTheme": "Editor-Theme",
"toolbar_theme": "Theme",
"toolbar_tools": "Werkzeuge",
"todo_move": "Deine To-do-Liste ist nun im Kanban-Dokument <b>{0}</b> in deinem Drive.",
"drive_treeButton": "Dateien",
"toolbar_file": "Datei",
"toolbar_insert": "Einfügen",
"toolbar_savetodrive": "Als Bild speichern",
"slide_backCol": "Hintergrundfarbe",
"slide_textCol": "Textfarbe"
} }

@ -839,19 +839,19 @@
"title": "Pour bien démarrer", "title": "Pour bien démarrer",
"generic": { "generic": {
"more": "Apprenez-en davantage sur le fonctionnement de CryptPad en lisant notre <a href=\"/faq.html\" target=\"_blank\">FAQ</a>", "more": "Apprenez-en davantage sur le fonctionnement de CryptPad en lisant notre <a href=\"/faq.html\" target=\"_blank\">FAQ</a>",
"share": "Utilisez le menu partage (<span class=\"fa fa-shhare-alt\"></span>) pour générer un lien d'accès ou d'édition pad", "share": "Partagez ce document avec le bouton <i class=\"fa fa-shhare-alt\"></i> <b>Partager</b> et gérez les droits d'accès avec le bouton <i class=\"fa fa-unlock-alt\"></i> <b>Accès</b>.",
"save": "Tous les changements effectués sont enregistrés automatiquement" "save": "Tous les changements effectués sont enregistrés automatiquement"
}, },
"text": { "text": {
"formatting": "Vous pouvez afficher ou cacher la barre d'outils de texte en cliquant sur les boutons <span class=\"fa fa-caret-down\"></span> ou <span class=\"fa fa-caret-up\"></span>", "formatting": "Affichez ou cachez la barre d'outils texte avec le bouton <i class=\"fa fa-wrench\"></i> <b>Outils</b>.",
"embed": "Les utilisateurs enregistrés peuvent intégrer un fichier de leur CryptDrive en utilisant le bouton <span class=\"fa fa-image\"></span>", "embed": "Insérez une image de votre CryptDrive ou de votre ordinateur avec le bouton <i class=\"fa fa-image\"></i> <b>Insérer</b> (utilisateurs connectés à leur compte).",
"history": "Vous pouvez utiliser <em>l'historique</em> <span class=\"fa fa-history\"></span> pour voir ou restaurer les versions précédentes du pad" "history": "Vous pouvez utiliser <em>l'historique</em> <span class=\"fa fa-history\"></span> pour voir ou restaurer les versions précédentes du pad"
}, },
"pad": { "pad": {
"export": "Vous pouvez exporter le contenu en tant que PDF avec le bouton <span class=\"fa fa-print\"></span> de la barre d'outils de mise en forme du texte" "export": "Vous pouvez exporter le contenu en tant que PDF avec le bouton <span class=\"fa fa-print\"></span> de la barre d'outils de mise en forme du texte"
}, },
"code": { "code": {
"modes": "Utilisez le sous-menu <span class=\"fa fa-ellipsis-h\"></span> pour changer le mode de coloration syntaxique ou le thème de couleur" "modes": "Changez le thème de couleur et la coloration syntaxique avec le menu <span class=\"cptools cptools-palette\"></span> <b>Thème</b>."
}, },
"beta": { "beta": {
"warning": "Cet éditeur est encore <strong>expérimental</strong>, vous pouvez signaler tout problème rencontré sur <a href=\"https://github.com/xwiki-labs/cryptpad/issues/\" target=\"_blank\">GitHub</a>" "warning": "Cet éditeur est encore <strong>expérimental</strong>, vous pouvez signaler tout problème rencontré sur <a href=\"https://github.com/xwiki-labs/cryptpad/issues/\" target=\"_blank\">GitHub</a>"
@ -862,7 +862,7 @@
"slide": { "slide": {
"markdown": "Rédigez vos slides en <a href=\"http://www.markdowntutorial.com/\">Markdown</a> et séparez les avec une ligne contenant <code>---</code>", "markdown": "Rédigez vos slides en <a href=\"http://www.markdowntutorial.com/\">Markdown</a> et séparez les avec une ligne contenant <code>---</code>",
"present": "Démarrez la présentation en utilisant le bouton <span class=\"fa fa-play-circle\"></span>", "present": "Démarrez la présentation en utilisant le bouton <span class=\"fa fa-play-circle\"></span>",
"settings": "Modifiez les préférences de la présentation (image de fond, transitions, numéro de pages, ...) avec le bouton <span class=\"fa fa-cog\"></span> dans le sous-menu <span class=\"fa fa-ellipsis-h\"></span>", "settings": "Changez les couleurs de la présentation et autres <span class=\"fa fa-cog\"></span> <b>Options</b> (image de fond, transitions, numéro de pages, etc.) avec le menu <span class=\"cptools cptools-palette\"></span> <b>Thème</b>.",
"colors": "Modifiez la couleur du texte ou du fond en utilisant les boutons <span class=\"fa fa-i-cursor\"></span> et <span class=\"fa fa-square\"></span>" "colors": "Modifiez la couleur du texte ou du fond en utilisant les boutons <span class=\"fa fa-i-cursor\"></span> et <span class=\"fa fa-square\"></span>"
}, },
"poll": { "poll": {
@ -873,8 +873,8 @@
}, },
"whiteboard": { "whiteboard": {
"colors": "Double-cliquez sur les couleurs pour changer la palette", "colors": "Double-cliquez sur les couleurs pour changer la palette",
"mode": "Vous pouvez désactiver le mode dessin pour déplacer, redimensionner, ou supprimer des éléments du dessin", "mode": "Le mode <span class=\"fa fa-arrows\"></span> Sélection permet de déplacer et transformer des éléments du dessin.",
"embed": "Intégrez des images de votre disque <span class=\"fa fa-file-image-o\"></span> ou de votre CryptDrive <span class=\"fa fa-image\"></span> et exporter le contenu en tant que PNG sur votre disque <span class=\"fa fa-download\"></span> ou votre CryptDrive <span class=\"fa fa-cloud-upload\"></span>" "embed": "Insérez des images de votre CryptDrive ou ordinateur avec <span class=\"fa fa-image\"></span> <b>Insérer</b>. Exportez le dessin vers votre CryptDrive avec <b><span class=\"fa fa-file-o\"></span> Fichier > <span class=\"fa fa-file-image-o\"></span> Sauvegarder image</b> ou vers votre ordinateur avec <b><span class=\"fa fa-file-o\"></span> Fichier > <span class=\"fa fa-download\"></span> Exporter</b>."
}, },
"kanban": { "kanban": {
"add": "Ajoutez des cartes et tableaux en cliquant sur les boutons <span class=\"fa fa-plus\"></span>", "add": "Ajoutez des cartes et tableaux en cliquant sur les boutons <span class=\"fa fa-plus\"></span>",
@ -1367,5 +1367,15 @@
"unknownPad": "Pad inconnu", "unknownPad": "Pad inconnu",
"comments_notification": "Réponses à votre commentaire \"{0}\" sur <b>{1}</b>", "comments_notification": "Réponses à votre commentaire \"{0}\" sur <b>{1}</b>",
"comments_error": "Impossible d'ajouter un commentaire ici", "comments_error": "Impossible d'ajouter un commentaire ici",
"fm_sort": "Trier" "fm_sort": "Trier",
"slide_textCol": "Couleur de texte",
"slide_backCol": "Couleur de fond",
"toolbar_file": "Fichier",
"code_editorTheme": "Thème de l'éditeur",
"drive_treeButton": "Fichiers",
"toolbar_tools": "Outils",
"toolbar_savetodrive": "Sauvegarder image",
"toolbar_insert": "Insérer",
"toolbar_theme": "Thème",
"todo_move": "Votre liste de tâches est désormais dans le kanban <b>{0}</b> dans votre Drive."
} }

@ -857,19 +857,19 @@
"title": "Getting started", "title": "Getting started",
"generic": { "generic": {
"more": "Learn more about how CryptPad can work for you by reading our <a href=\"/faq.html\" target=\"_blank\">FAQ</a>", "more": "Learn more about how CryptPad can work for you by reading our <a href=\"/faq.html\" target=\"_blank\">FAQ</a>",
"share": "Use the share menu (<span class=\"fa fa-shhare-alt\"></span>) to generate a link so collaborators can view or edit this pad", "share": "Share this document with the <i class=\"fa fa-shhare-alt\"></i> <b>Share</b> button, and manage access rights with <i class=\"fa fa-unlock-alt\"></i> <b>Access</b>.",
"save": "All your changes are synced automatically so you never need to save" "save": "All your changes are synced automatically so you never need to save"
}, },
"text": { "text": {
"formatting": "You can display or hide the text formatting toolbar by clicking the <span class=\"fa fa-caret-down\"></span> or <span class=\"fa fa-caret-up\"></span> buttons", "formatting": "Show/hide the text toolbar with the <i class=\"fa fa-wrench\"></i> <b>Tools</b> button.",
"embed": "Registered users can embed an image or a file stored in their CryptDrive using <span class=\"fa fa-image\"></span>", "embed": "Insert an image from your CryptDrive or computer with the <i class=\"fa fa-image\"></i> <b>Insert</b> button (logged in users).",
"history": "You can use <em>history</em> <span class=\"fa fa-history\"></span> to view or restore previous versions" "history": "You can use <em>history</em> <span class=\"fa fa-history\"></span> to view or restore previous versions"
}, },
"pad": { "pad": {
"export": "You can export the content as PDF using the <span class=\"fa fa-print\"></span> button in the text formatting toolbar" "export": "You can export the content as PDF using the <span class=\"fa fa-print\"></span> button in the text formatting toolbar"
}, },
"code": { "code": {
"modes": "Use the dropdown menus in the <span class=\"fa fa-ellipsis-h\"></span> submenu to change syntax highlighting modes or color themes" "modes": "Use the <span class=\"cptools cptools-palette\"></span> <b>Theme</b> menu to choose an editor theme and syntax highlighting."
}, },
"beta": { "beta": {
"warning": "This editor is still <strong>experimental</strong>, you can report bugs on <a href=\"https://github.com/xwiki-labs/cryptpad/issues/\" target=\"_blank\">our issue tracker</a>" "warning": "This editor is still <strong>experimental</strong>, you can report bugs on <a href=\"https://github.com/xwiki-labs/cryptpad/issues/\" target=\"_blank\">our issue tracker</a>"
@ -880,7 +880,7 @@
"slide": { "slide": {
"markdown": "Write slides in <a href=\"http://www.markdowntutorial.com/\">Markdown</a> and separate them with a line containing <code>---</code>", "markdown": "Write slides in <a href=\"http://www.markdowntutorial.com/\">Markdown</a> and separate them with a line containing <code>---</code>",
"present": "Start the presentation using the <span class=\"fa fa-play-circle\"></span> button", "present": "Start the presentation using the <span class=\"fa fa-play-circle\"></span> button",
"settings": "Change the slide settings (background, transitions, page numbers, etc.) with the <span class=\"fa fa-cog\"></span> button in the <span class=\"fa fa-ellipsis-h\"></span> submenu", "settings": "Use the <span class=\"cptools cptools-palette\"></span> <b>Theme</b> menu to change slide colors and <span class=\"fa fa-cog\"></span> <b>Options</b> (background, transitions, page numbers, etc.).",
"colors": "Change the text and background colors using the <span class=\"fa fa-i-cursor\"></span> and <span class=\"fa fa-square\"></span> buttons" "colors": "Change the text and background colors using the <span class=\"fa fa-i-cursor\"></span> and <span class=\"fa fa-square\"></span> buttons"
}, },
"poll": { "poll": {
@ -891,8 +891,8 @@
}, },
"whiteboard": { "whiteboard": {
"colors": "Double-click colors to modify your palette", "colors": "Double-click colors to modify your palette",
"mode": "Disable draw mode to drag and stretch strokes", "mode": "Switch to <span class=\"fa fa-arrows\"></span> Select mode to move and transform strokes.",
"embed": "Embed images from your disk <span class=\"fa fa-file-image-o\"></span> or your CryptDrive <span class=\"fa fa-image\"></span> and export them as PNG to your disk <span class=\"fa fa-download\"></span> or your CryptDrive <span class=\"fa fa-cloud-upload\"></span>" "embed": "Embed images from your CryptDrive or computer with <span class=\"fa fa-image\"></span> <b>Insert</b>. Export the canvas as PNG to your CryptDrive with <b><span class=\"fa fa-file-o\"></span> File > <span class=\"fa fa-file-image-o\"></span> Save as image</b> or to your computer with <b><span class=\"fa fa-file-o\"></span> File > <span class=\"fa fa-download\"></span> Export</b>."
}, },
"kanban": { "kanban": {
"add": "Add new cards and boards by clicking the <span class=\"fa fa-plus\"></span> buttons", "add": "Add new cards and boards by clicking the <span class=\"fa fa-plus\"></span> buttons",
@ -1367,5 +1367,15 @@
"settings_padNotifHint": "Ignore notifications when someone replies to one of your comments", "settings_padNotifHint": "Ignore notifications when someone replies to one of your comments",
"settings_padNotifCheckbox": "Disable comment notifications", "settings_padNotifCheckbox": "Disable comment notifications",
"comments_error": "Can't add a comment here", "comments_error": "Can't add a comment here",
"fm_sort": "Sort" "fm_sort": "Sort",
"todo_move": "Your todo list is now in the kanban <b>{0}</b> in your Drive.",
"toolbar_theme": "Theme",
"toolbar_insert": "Insert",
"toolbar_savetodrive": "Save as image",
"toolbar_tools": "Tools",
"drive_treeButton": "Files",
"code_editorTheme": "Editor theme",
"toolbar_file": "File",
"slide_backCol": "Background color",
"slide_textCol": "Text color"
} }

@ -100,9 +100,7 @@ define([
}); });
}; };
// XXX this function is a duplicate of /code/
var mkThemeButton = function (framework) { var mkThemeButton = function (framework) {
Messages.toolbar_theme = "Theme"; // XXX
var $theme = $(h('button.cp-toolbar-appmenu', [ var $theme = $(h('button.cp-toolbar-appmenu', [
h('i.cptools.cptools-palette'), h('i.cptools.cptools-palette'),
h('span.cp-button-name', Messages.toolbar_theme) h('span.cp-button-name', Messages.toolbar_theme)
@ -110,29 +108,10 @@ define([
var $content = $(h('div.cp-toolbar-drawer-content', { var $content = $(h('div.cp-toolbar-drawer-content', {
tabindex: 1 tabindex: 1
})).hide(); })).hide();
$theme.click(function () {
$content.toggle(); // set up all the necessary events
$theme.removeClass('cp-toolbar-button-active'); UI.createDrawer($theme, $content);
if ($content.is(':visible')) {
$theme.addClass('cp-toolbar-button-active');
$content.focus();
var wh = $(window).height();
var topPos = $theme[0].getBoundingClientRect().bottom;
$content.css('max-height', Math.floor(wh - topPos - 1)+'px');
}
});
var onBlur = function (e) {
if (e.relatedTarget) {
if ($(e.relatedTarget).is('.cp-toolbar-drawer-button')) { return; }
if ($(e.relatedTarget).parents('.cp-toolbar-drawer-content').length) {
$(e.relatedTarget).blur(onBlur);
return;
}
}
$theme.removeClass('cp-toolbar-button-active');
$content.hide();
};
$content.blur(onBlur).appendTo($theme);
framework._.toolbar.$theme = $content; framework._.toolbar.$theme = $content;
framework._.toolbar.$bottomL.append($theme); framework._.toolbar.$bottomL.append($theme);
}; };
@ -378,7 +357,6 @@ define([
framework.localChange(); framework.localChange();
}; };
Messages.slide_backCol = "Background color"; // XXX
var $back = framework._.sfCommon.createButton(null, true, { var $back = framework._.sfCommon.createButton(null, true, {
icon: 'fa-square', icon: 'fa-square',
text: Messages.slide_backCol, text: Messages.slide_backCol,
@ -387,7 +365,6 @@ define([
name: 'background', name: 'background',
id: SLIDE_BACKCOLOR_ID id: SLIDE_BACKCOLOR_ID
}); });
Messages.slide_textCol = "Text color"; // XXX
var $text = framework._.sfCommon.createButton(null, true, { var $text = framework._.sfCommon.createButton(null, true, {
icon: 'fa-i-cursor', icon: 'fa-i-cursor',
text: Messages.slide_textCol, text: Messages.slide_textCol,

@ -394,7 +394,6 @@ define([
}); });
}).appendTo($drawer); }).appendTo($drawer);
} else { } else {
Messages.toolbar_insert = "Insert"; // XXX duplicate key from common-ui-elements
framework._.sfCommon.createButton('', true, { framework._.sfCommon.createButton('', true, {
title: Messages.canvas_imageEmbed, title: Messages.canvas_imageEmbed,
text: Messages.toolbar_insert, text: Messages.toolbar_insert,

Loading…
Cancel
Save