diff --git a/customize.dist/messages.js b/customize.dist/messages.js index 4c87d59a8..ec303b183 100755 --- a/customize.dist/messages.js +++ b/customize.dist/messages.js @@ -178,6 +178,11 @@ define(req, function(AppConfig, Default, Language) { // Messages.crowdfunding_popup_text = "

We need your help!

To ensure that CryptPad is actively developed, consider supporting the project via the OpenCollective page, where you can see our Roadmap and Funding goals." Messages.crowdfunding_popup_text2 = "Alternatively, you can subscribe on this instance." // XXX + Messages.diagram_modesOptionLabel = "Change theme to {0}, will refresh app"; // XXX + Messages.diagram_sketchTheme = "sketch"; + Messages.diagram_simpleTheme = "simple"; + Messages.diagram_classicTheme = "classic"; + return Messages; }); diff --git a/package-lock.json b/package-lock.json index 39339e1c5..87c7c980c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "cookie-parser": "^1.4.7", "croppie": "^2.5.0", "dragula": "3.7.2", - "drawio": "github:cryptpad/drawio-npm#npm-21.8.2+6", + "drawio": "github:cryptpad/drawio-npm#npm-29.6.7+3", "express": "~4.22.1", "file-saver": "1.3.1", "fs-extra": "^7.0.0", @@ -1902,8 +1902,8 @@ } }, "node_modules/drawio": { - "version": "21.8.2+6", - "resolved": "git+ssh://git@github.com/cryptpad/drawio-npm.git#61699f777690d23aab727461ff58b60e198ab0e4" + "version": "29.6.7+3", + "resolved": "git+ssh://git@github.com/cryptpad/drawio-npm.git#c3493636b4f3a65d9f068245a968887fd1332326" }, "node_modules/dunder-proto": { "version": "1.0.1", diff --git a/package.json b/package.json index 7a72e7b69..cac3ac249 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "cookie-parser": "^1.4.7", "croppie": "^2.5.0", "dragula": "3.7.2", - "drawio": "github:cryptpad/drawio-npm#npm-21.8.2+6", + "drawio": "github:cryptpad/drawio-npm#npm-29.6.7+3", "express": "~4.22.1", "file-saver": "1.3.1", "fs-extra": "^7.0.0", diff --git a/www/diagram/inner.js b/www/diagram/inner.js index a6b628c0b..e53bcae44 100644 --- a/www/diagram/inner.js +++ b/www/diagram/inner.js @@ -152,7 +152,40 @@ define([ }, true ); - var parameters; + var checkDefaultTheme = function(cb) { + var privateData = framework._.cpNfInner.metadataMgr.getPrivateData(); + if (!privateData.settings['diagram'] || !privateData.settings['diagram'].mode) { + cb('sketch'); + } else { + cb(privateData.settings['diagram'].mode); + } + }; + + var parameters = new URLSearchParams({ + test: 1, + stealth: 1, + embed: 1, + drafts: 0, + p: 'cryptpad', + integrated: framework.isIntegrated() ? 'true' : 'false', + chrome: 0, + dark: window.CryptPad_theme === "dark" ? 1 : 0, + + // Hide save and exit buttons + noSaveBtn: 1, + saveAndExit: 0, + noExitBtn: 1, + browser: 0, + pv: 0, + + noDevice: 1, + filesupport: 0, + + modified: 'unsavedChanges', + proto: 'json', + + lang: Messages._languageUsed + }); framework.onEditableChange(function () { var readOnly = framework.isReadOnly() || framework.isLocked(); @@ -163,41 +196,31 @@ define([ parameters.set('chrome', '1'); parameters.set('grid', '1'); } + }); + + var loadDiagram = function () { + checkDefaultTheme(function(theme) { + var defaultTheme = theme; + parameters.set('ui', defaultTheme); + }); + var isReadOnly = framework.isReadOnly() ? 0 : 1; + parameters.set('chrome', isReadOnly); drawioFrame.src = ApiConfig.httpSafeOrigin + '/components/drawio/src/main/webapp/index.html?' + parameters; - }); + }; // starting the CryptPad framework framework.start(); - parameters = new URLSearchParams({ - test: 1, - stealth: 1, - embed: 1, - drafts: 0, - p: 'cryptpad', - integrated: framework.isIntegrated() ? 'true' : 'false', - - chrome: 0, - dark: window.CryptPad_theme === "dark" ? 1 : 0, - - // Hide save and exit buttons - noSaveBtn: 1, - saveAndExit: 0, - noExitBtn: 1, - browser: 0, - - noDevice: 1, - filesupport: 0, - - modified: 'unsavedChanges', - proto: 'json', - - lang: Messages._languageUsed - }); - - drawioFrame.src = ApiConfig.httpSafeOrigin + '/components/drawio/src/main/webapp/index.html?' - + parameters; + //wait for metadata to update before checking the theme and loading Drawio UI + var metadataMgr = framework._.sfCommon.getMetadataMgr(); + var onChange = function () { + var privateData = metadataMgr.getPrivateData(); + if (!privateData.settings.toolbar) { return; } + loadDiagram(); + metadataMgr.off('change', onChange); + }; + metadataMgr.onChange(onChange); window.addEventListener("message", (event) => { if (event.source === drawioFrame.contentWindow) { @@ -209,6 +232,58 @@ define([ } } }, false); + + var setTheme = function (theme, cb) { + framework._.sfCommon.setAttribute(['diagram', 'mode'], theme, function() { + cb(); + }); + }; + + var mkModeButton = function (framework) { + var modes = [Messages.diagram_sketchTheme, Messages.diagram_simpleTheme, Messages.diagram_classicTheme]; + var types = []; + + modes.forEach(function(mode){ + types.push({ + tag: 'a', + attributes: { + 'data-value': mode, + 'aria-label': Messages._getKey('diagram_modesOptionLabel', [mode]), + }, + content: mode, + action: function () { + var $self = $('a[data-value="' + mode + '"]'); + parameters.set('ui', mode); + drawioFrame.src = ApiConfig.httpSafeOrigin + '/components/drawio/src/main/webapp/index.html?' + + parameters; + setTheme(mode, function() { + $('.cp-dropdown-content').find('.cp-dropdown-element-active').removeClass('cp-dropdown-element-active'); + $self.addClass('cp-dropdown-element-active'); + $self.closest('li').focus(); + $('.cp-dropdown-content').hide(); +} ); + }, + }); + }); + checkDefaultTheme(function(theme) { + var $drawer = UIElements.createDropdown({ + text: Messages.themeButton, + options: types, + common: framework._.sfCommon, + iconCls: 'color-palette', + initialValue: parameters.get('ui') || theme + }); + framework._.toolbar.$theme = $drawer.find('ul.cp-dropdown-content'); + framework._.toolbar.$bottomL.append($drawer); + $drawer.addClass('cp-toolbar-appmenu'); + $drawer.on('click', function () { + $('a[data-value="' + parameters.get('ui') || theme + '"]').addClass('cp-dropdown-element-active'); + }); + }); + + }; + mkModeButton(framework); + }; $('#cp-app-diagram-editor').hide();