diff --git a/CHANGELOG.md b/CHANGELOG.md index a47f5e760..84c8e6cda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ +# Thylacine's revenge (3.19.1) + +Our upcoming 3.20.0 release is planned for July 7th, 2020, but we are once again releasing a minor version featuring some nice bug fixes and usability improvements which are ready to be deployed now. In case you missed [our announcement](https://social.weho.st/@cryptpad/104360490068671089) we are phasing out our usage of the `master` and basing our releases on the `main` branch. For best results we recommend explicitly checking out code by its tag. + +New features: + +* We've spent a little time making support tickets a little bit easier for both users and admins. + * Users can now label their tickets with a set of predefined categories, making it easier for admins to sort through related reports. + * Users and admins can both attach encrypted uploads to their messages, making it easier to demonstrate a problem with an image, video, or other example file. +* Teams now take advantage of the same "mailbox" functionality that powers user accounts' notification center. Team members with the "viewer" role can now use this feature to share documents with their team using the "share menu" as they already can with other users. Anyone with the ability to add a document to the team's drive will then be able to receive the notification and add the document to the team's drive for them. Going forward we'll use this functionality to implement more behaviour to make teams function more like shared user accounts. +* The "pad creation screen" which is displayed to registered users when they first create a pad will no longer remember the settings used when they last created a pad. While this behaviour was intended to streamline the process of creating documents, in practice it led to some user's documents getting deleted because they didn't realize they were set to automatically expire. If you prefer not to use the defaults (owned, non-expiring) then you'll have to click a few more times to create a document, but we think that's a worthwhile tradeoff to avoid data loss. + +Bug fixes: + +* Hitting _ctrl-A_ in the drive used to select lots of the page's elements which had no business being selected. Now it will select the contents of the directory currently being displayed. +* Due to some complications in OnlyOffice (which we use for spreadsheets) remote updates made to a sheet were not displayed for users who had opened the document in "view mode". We still don't have the means to apply these remote changes in real-time, but we now prompt users to click a button to refresh the editor (not the full page) to display the latest document state. +* A recent update set the text color of the team chat input to 'white', matching the input's background and making the text unreadable. We patched it to make it black text on a white background. +* We're slowly working on improving keyboard shortcuts for a variety of actions. This time around we fixed a bug that prevented "ESC" from closing an open "tag prompt" interface. +* We noticed that the zip file constructed in the browser when you downloaded a subtree of a shared folder in your drive contained the correct directory structure but did not contain the files that were supposed to be there. This has been fixed. +* Finally, we've tweaked our styles to use more specific CSS selectors to prevent a variety of styles from being accidentally applied to the wrong elements. This should make the platform a little easier to maintain and help us improve the visual consistency of a variety of elements on different pages. + +To update from 3.19.0 to 3.19.1: + +1. Stop your server +2. Get the latest code with `git checkout 3.19.1` +3. Restart your server + +If you're updating from anything other than 3.19.0 you may need other clientside dependencies (available with `bower update` and `npm i`). + # Thylacine release (3.19.0) ## Goals diff --git a/customize.dist/pages.js b/customize.dist/pages.js index 0e42b9a3a..c37e4b2f5 100644 --- a/customize.dist/pages.js +++ b/customize.dist/pages.js @@ -62,7 +62,7 @@ define([ var imprintUrl = AppConfig.imprint && (typeof(AppConfig.imprint) === "boolean" ? '/imprint.html' : AppConfig.imprint); - Pages.versionString = "CryptPad v3.19.0 (Thylacine)"; + Pages.versionString = "CryptPad v3.19.1 (Thylacine's revenge)"; // used for the about menu Pages.imprintLink = AppConfig.imprint ? footLink(imprintUrl, 'imprint') : undefined; diff --git a/customize.dist/src/less2/include/alertify.less b/customize.dist/src/less2/include/alertify.less index f9c63215c..2a7fd3761 100644 --- a/customize.dist/src/less2/include/alertify.less +++ b/customize.dist/src/less2/include/alertify.less @@ -3,7 +3,6 @@ @import (reference) "./variables.less"; @import (reference) "./avatar.less"; @import (reference) "./tools.less"; -@import (reference) "./buttons.less"; .alertify_main() { --LessLoader_require: LessLoader_currentFile(); @@ -272,7 +271,6 @@ } } - .buttons_main(); input:not(.form-control), textarea { margin-bottom: 15px; } diff --git a/customize.dist/src/less2/include/comments.less b/customize.dist/src/less2/include/comments.less index becc56f54..479609580 100644 --- a/customize.dist/src/less2/include/comments.less +++ b/customize.dist/src/less2/include/comments.less @@ -1,7 +1,6 @@ @import (reference) "./colortheme-all.less"; @import (reference) "./variables.less"; @import (reference) "./avatar.less"; -@import (reference) "./buttons.less"; @import (reference) "./tools.less"; .comments_main() { @@ -22,8 +21,6 @@ } - .buttons_main(); - .cp-comment-reply { margin-left: 30px; } diff --git a/customize.dist/src/less2/include/buttons.less b/customize.dist/src/less2/include/forms.less similarity index 98% rename from customize.dist/src/less2/include/buttons.less rename to customize.dist/src/less2/include/forms.less index 87fe9b050..96f419310 100644 --- a/customize.dist/src/less2/include/buttons.less +++ b/customize.dist/src/less2/include/forms.less @@ -1,7 +1,7 @@ @import (reference) "./colortheme-all.less"; @import (reference) "./variables.less"; -.buttons_main() { +.forms_main() { @alertify-fore: @colortheme_modal-fg; @alertify-btn-fg: @alertify-fore; @alertify-light-bg: fade(@alertify-fore, 25%); @@ -30,7 +30,7 @@ div.cp-alertify-type { display: flex; input { - margin: 0; + margin: 0 !important; flex: 1; min-width: 0; } @@ -83,7 +83,7 @@ margin-bottom: 3px !important; } - button:not(.pure-button):not(.md-button):not(.mdl-button) { + button.btn { background-color: @colortheme_alertify-cancel; box-sizing: border-box; diff --git a/customize.dist/src/less2/include/framework.less b/customize.dist/src/less2/include/framework.less index 94532d5c7..c698b91b9 100644 --- a/customize.dist/src/less2/include/framework.less +++ b/customize.dist/src/less2/include/framework.less @@ -16,6 +16,7 @@ @import (reference) "./cursor.less"; @import (reference) "./usergrid.less"; @import (reference) "./mentions.less"; +@import (reference) "./forms.less"; @import (reference) "./modals-ui-elements.less"; .framework_main(@bg-color, @warn-color, @color) { @@ -48,6 +49,7 @@ ); .cursor_main(); .usergrid_main(); + .forms_main(); .mentions_main(); .creation_main( @bg-color: @bg-color, @@ -84,6 +86,7 @@ .checkmark_main(20px); .password_main(); .usergrid_main(); + .forms_main(); font: @colortheme_app-font; } diff --git a/customize.dist/src/less2/include/modal.less b/customize.dist/src/less2/include/modal.less index 12d3c908c..8ed10a1b2 100644 --- a/customize.dist/src/less2/include/modal.less +++ b/customize.dist/src/less2/include/modal.less @@ -1,8 +1,5 @@ @import (reference) "./colortheme-all.less"; @import (reference) "./variables.less"; -@import (reference) './buttons.less'; - - .modal_base() { font-family: @colortheme_font; @@ -39,8 +36,6 @@ background-color: @colortheme_modal-dim; .cp-modal { - .buttons_main(); - background-color: @colortheme_modal-bg; color: @colortheme_modal-fg; box-shadow: @variables_shadow; diff --git a/customize.dist/src/less2/include/sidebar-layout.less b/customize.dist/src/less2/include/sidebar-layout.less index 7961e1bee..ace7350df 100644 --- a/customize.dist/src/less2/include/sidebar-layout.less +++ b/customize.dist/src/less2/include/sidebar-layout.less @@ -1,6 +1,5 @@ @import (reference) "/customize/src/less2/include/colortheme-all.less"; @import (reference) "/customize/src/less2/include/leftside-menu.less"; -@import (reference) "/customize/src/less2/include/buttons.less"; @import (reference) "/customize/src/less2/include/browser.less"; @sidebar_button-width: 400px; @@ -98,7 +97,6 @@ } } margin-bottom: 20px; - .buttons_main(); } [type="text"], [type="password"], button { vertical-align: middle; diff --git a/customize.dist/src/less2/include/tokenfield.less b/customize.dist/src/less2/include/tokenfield.less index 358f0d18b..42a06624c 100644 --- a/customize.dist/src/less2/include/tokenfield.less +++ b/customize.dist/src/less2/include/tokenfield.less @@ -84,7 +84,6 @@ width: 100%; min-width: 100% !important; &:focus { - border-color: transparent; outline: 0; box-shadow: none; } diff --git a/customize.dist/src/less2/pages/page-register.less b/customize.dist/src/less2/pages/page-register.less index 314ad7236..cc319a0e4 100644 --- a/customize.dist/src/less2/pages/page-register.less +++ b/customize.dist/src/less2/pages/page-register.less @@ -2,9 +2,11 @@ @import (reference) "../include/colortheme-all.less"; @import (reference) "../include/alertify.less"; @import (reference) "../include/checkmark.less"; +@import (reference) "../include/forms.less"; &.cp-page-register { .infopages_main(); + .forms_main(); .alertify_main(); .checkmark_main(20px); diff --git a/package-lock.json b/package-lock.json index ed2097eff..dcced0ee4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cryptpad", - "version": "3.19.0", + "version": "3.19.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index be6f77978..8b9bc912c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cryptpad", "description": "realtime collaborative visual editor with zero knowlege server", - "version": "3.19.0", + "version": "3.19.1", "license": "AGPL-3.0+", "repository": { "type": "git", diff --git a/www/common/common-interface.js b/www/common/common-interface.js index 4eba3755c..d406eccaf 100644 --- a/www/common/common-interface.js +++ b/www/common/common-interface.js @@ -145,12 +145,12 @@ define([ }; dialog.okButton = function (content, classString) { - var sel = typeof(classString) === 'string'? 'button.ok.' + classString:'button.ok.primary'; + var sel = typeof(classString) === 'string'? 'button.ok.' + classString:'button.btn.ok.primary'; return h(sel, { tabindex: '2', }, content || Messages.okButton); }; dialog.cancelButton = function (content, classString) { - var sel = typeof(classString) === 'string'? 'button.' + classString:'button.cancel'; + var sel = typeof(classString) === 'string'? 'button.' + classString:'button.btn.cancel'; return h(sel, { tabindex: '1'}, content || Messages.cancelButton); }; @@ -356,11 +356,15 @@ define([ var $cancel = findCancelButton(tagger).click(function (e) { close(null, e); }); - listener = listenForKeys(function () { - $ok.click(); - }, function () { - $cancel.click(); - }, tagger); + $(tagger).on('keydown', function (e) { + if (e.which === 27) { + $cancel.click(); + return; + } + if (e.which === 13) { + $ok.click(); + } + }); $(tagger).on('click submit', function (e) { e.stopPropagation(); @@ -392,6 +396,7 @@ define([ buttons.forEach(function (b) { if (!b.name || !b.onClick) { return; } var button = h('button', { tabindex: '1', 'class': b.className || '' }, b.name); + button.classList.add('btn'); var todo = function () { var noClose = b.onClick(); if (noClose) { return; } @@ -642,9 +647,6 @@ define([ var $ok = $(ok).click(function (ev) { close(true, ev); }); var $cancel = $(cancel).click(function (ev) { close(false, ev); }); - if (opt.cancelClass) { $cancel.addClass(opt.cancelClass); } - if (opt.okClass) { $ok.addClass(opt.okClass); } - listener = listenForKeys(function () { $ok.click(); }, function () { diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index abf98aa17..386353339 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -2155,6 +2155,11 @@ define([ 'class': 'fa fa-caret-down', }).prependTo($button); } + if (config.angleDown) { + $('', { + 'class': 'fa fa-angle-down', + }).prependTo($button); + } // Menu var $innerblock = $('
', {'class': 'cp-dropdown-content'}); @@ -2856,6 +2861,7 @@ define([ }); }; + /* UIElements.setExpirationValue = function (val, $expire) { if (val && typeof (val) === "number") { $expire.find('#cp-creation-expire').attr('checked', true).trigger('change'); @@ -2879,6 +2885,7 @@ define([ $expire.find('#cp-creation-expire-false').attr('checked', true); } }; + */ UIElements.getPadCreationScreen = function (common, cfg, appCfg, cb) { appCfg = appCfg || {}; if (!common.isLoggedIn()) { return void cb(); } @@ -3191,10 +3198,12 @@ define([ // Initial values + /* if (!cfg.owned && typeof cfg.owned !== "undefined") { $creation.find('#cp-creation-owned').prop('checked', false); } UIElements.setExpirationValue(cfg.expire, $creation); + */ // Create the pad var getFormValues = function () { @@ -3544,6 +3553,11 @@ define([ link ]); + var dismiss = function () { + common.mailbox.dismiss(data, function (err) { + console.log(err); + }); + }; var answer = function (yes) { common.mailbox.sendTo("ADD_OWNER_ANSWER", { channel: msg.content.channel, @@ -3555,9 +3569,7 @@ define([ channel: msg.content.user.notifications, curvePublic: msg.content.user.curvePublic }); - common.mailbox.dismiss(data, function (err) { - console.log(err); - }); + dismiss(); }; var todo = function (yes) { @@ -3572,6 +3584,8 @@ define([ if (err) { var text = err === "INSUFFICIENT_PERMISSIONS" ? Messages.fm_forbidden : Messages.error; + console.error(err); + dismiss(); return void UI.warn(text); } UI.log(Messages.saved); diff --git a/www/common/drive-ui.js b/www/common/drive-ui.js index 348962951..d7662b3df 100644 --- a/www/common/drive-ui.js +++ b/www/common/drive-ui.js @@ -4171,7 +4171,8 @@ define([ if (!manager.isSharedFolder(el)) { name = path.path[path.path.length - 1]; folderEl = el; - downloadFolder(folderEl, name); + var sfId = manager.isInSharedFolder(path.path); + downloadFolder(folderEl, name, sfId); } // shared folder else { diff --git a/www/common/inner/access.js b/www/common/inner/access.js index 190af4279..28dd2863b 100644 --- a/www/common/inner/access.js +++ b/www/common/inner/access.js @@ -805,7 +805,7 @@ define([ id: 'cp-app-prop-change-password', style: 'flex: 1;' }); - var passwordOk = h('button', Messages.properties_changePasswordButton); + var passwordOk = h('button.btn', Messages.properties_changePasswordButton); var changePass = h('span.cp-password-change-container', [ newPassword, passwordOk diff --git a/www/common/migrate-user-object.js b/www/common/migrate-user-object.js index 231c39ebd..b13aacb1c 100644 --- a/www/common/migrate-user-object.js +++ b/www/common/migrate-user-object.js @@ -499,7 +499,7 @@ define([ }, 500); progress(0, 0);*/ }).nThen(function () { - Realtime.whenRealtimeSyncs(store.realtime, Util.bake(cb)); + Realtime.whenRealtimeSyncs(store.realtime, Util.mkAsync(Util.bake(cb))); }); }; }); diff --git a/www/common/notifications.js b/www/common/notifications.js index 57ac38f8b..d1fbbaff9 100644 --- a/www/common/notifications.js +++ b/www/common/notifications.js @@ -83,11 +83,6 @@ define([ }; // Share pad - - Messages.notification_padSharedTeam = "{0} has shared a pad with the team {2}: {1}"; // XXX - Messages.notification_fileSharedTeam = "{0} has shared a file with the team {2}: {1}"; // XXX - Messages.notification_folderSharedTeam = "{0} has shared a pad with the team {2}: {1}"; // XXX - handlers['SHARE_PAD'] = function(common, data) { var content = data.content; var msg = content.msg; diff --git a/www/common/onlyoffice/inner.js b/www/common/onlyoffice/inner.js index 7534b552b..8e43e42b1 100644 --- a/www/common/onlyoffice/inner.js +++ b/www/common/onlyoffice/inner.js @@ -56,6 +56,7 @@ define([ var DISPLAY_RESTORE_BUTTON = false; var NEW_VERSION = 2; var PENDING_TIMEOUT = 30000; + var READ_ONLY_REFRESH_DATA_DELAY = 15000; var debug = function (x) { if (!window.CP_DEV_MODE) { return; } @@ -558,8 +559,6 @@ define([ xhr.send(null); }; -Messages.oo_refresh = "Refresh"; // XXX read-only corner popup when receiving remote updates -Messages.oo_refreshText = "out of date"; // XXX read-only corner popup when receiving remote updates var refreshReadOnly = function () { var cancel = h('button.cp-corner-cancel', Messages.cancel); var reload = h('button.cp-corner-primary', [ @@ -619,8 +618,8 @@ Messages.oo_refreshText = "out of date"; // XXX read-only corner popup when rece APP.refreshPopup = true; // Don't "spam" the user instantly and no more than - // 1 popup every 30s - setTimeout(refreshReadOnly, 30000); + // 1 popup every 15s + setTimeout(refreshReadOnly, READ_ONLY_REFRESH_DATA_DELAY); return; } ooChannel.send(obj.data.msg); @@ -1124,6 +1123,9 @@ Messages.oo_refreshText = "out of date"; // XXX read-only corner popup when rece if (ifr) { ifr.remove(); } }; + APP.UploadImageFiles = function (files, type, id, jwt, cb) { + cb('NO'); + }; APP.AddImage = function(cb1, cb2) { APP.AddImageSuccessCallback = cb1; APP.AddImageErrorCallback = cb2; diff --git a/www/common/onlyoffice/v2a/sdkjs/cell/sdk-all-min.js b/www/common/onlyoffice/v2a/sdkjs/cell/sdk-all-min.js index 895f49624..32aeb5823 100644 --- a/www/common/onlyoffice/v2a/sdkjs/cell/sdk-all-min.js +++ b/www/common/onlyoffice/v2a/sdkjs/cell/sdk-all-min.js @@ -624,10 +624,10 @@ url+'" method="POST" enctype="multipart/form-data">0&&indexHtml>0&&index0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls= -[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push(urls[i]);break}if(aFiles.length===0)callback(Asc.c_oAscError.ID.No,aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt); -xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback(Asc.c_oAscError.ID.UplImageFileCount)};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function UploadImageUrls(files,documentId,documentUserId, -jwt,callback){if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push({path:i, +return}}catch(err$12){}}callback(mapAscServerErrorToAscError(nError),files)}}}function UploadImageFiles(files,documentId,documentUserId,jwt,callback){window.parent.APP.UploadImageFiles(files,documentId,documentUserId,jwt,function(err,urls){callback(err||Asc.c_oAscError.ID.No,urls)});return;if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]); +var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push(urls[i]);break}if(aFiles.length===0)callback(Asc.c_oAscError.ID.No,aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+= +"?token="+encodeURIComponent(jwt);xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback(Asc.c_oAscError.ID.UplImageFileCount)};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function UploadImageUrls(files, +documentId,documentUserId,jwt,callback){if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push({path:i, url:urls[i]});break}if(aFiles.length===0)callback(aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback([])};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type", file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function ValidateUploadImage(files){var nRes=c_oAscServerError.NoError;if(files.length>0)for(var i=0,length=files.length;i-1)base64=cL[i].split("xslData;")[1];else if(cL[i].indexOf("docData;")>-1)base64FromWord=cL[i].split("docData;")[1];else if(cL[i].indexOf("pptData;")>-1)base64FromPresentation=cL[i].split("pptData;")[1]}return{base64:base64,base64FromWord:base64FromWord, -base64FromPresentation:base64FromPresentation}},_getImageFromHtml:function(html,isGetUrlsArray){var res=null;if(html){var allImages=html.getElementsByTagName("img");if(allImages&&allImages.length)if(isGetUrlsArray){var arrayImages=[];for(var i=0;i-1)base64=cL[i].split("xslData;")[1];else if(cL[i].indexOf("docData;")>-1)base64FromWord=cL[i].split("docData;")[1];else if(cL[i].indexOf("pptData;")>-1)base64FromPresentation=cL[i].split("pptData;")[1]}return{base64:base64, +base64FromWord:base64FromWord,base64FromPresentation:base64FromPresentation}},_getImageFromHtml:function(html,isGetUrlsArray){var res=null;if(html){var allImages=html.getElementsByTagName("img");if(allImages&&allImages.length)if(isGetUrlsArray){var arrayImages=[];for(var i=0;ic_oAscMaxCellOrCommentLength){isChange=true;var text=currentCellData[i].text;var format=currentCellData[i].format;var lengthOfText=text.length;var iterCount=Math.ceil(lengthOfText/c_oAscMaxCellOrCommentLength);var splitText; for(var j=0;j0&&indexHtml>0&&index0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls= -[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push(urls[i]);break}if(aFiles.length===0)callback(Asc.c_oAscError.ID.No,aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt); -xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback(Asc.c_oAscError.ID.UplImageFileCount)};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function UploadImageUrls(files,documentId,documentUserId, -jwt,callback){if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push({path:i, +return}}catch(err$17){}}callback(mapAscServerErrorToAscError(nError),files)}}}function UploadImageFiles(files,documentId,documentUserId,jwt,callback){window.parent.APP.UploadImageFiles(files,documentId,documentUserId,jwt,function(err,urls){callback(err||Asc.c_oAscError.ID.No,urls)});return;if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]); +var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push(urls[i]);break}if(aFiles.length===0)callback(Asc.c_oAscError.ID.No,aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+= +"?token="+encodeURIComponent(jwt);xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback(Asc.c_oAscError.ID.UplImageFileCount)};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function UploadImageUrls(files, +documentId,documentUserId,jwt,callback){if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push({path:i, url:urls[i]});break}if(aFiles.length===0)callback(aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback([])};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type", file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function ValidateUploadImage(files){var nRes=c_oAscServerError.NoError;if(files.length>0)for(var i=0,length=files.length;i0&&indexHtml>0&&index0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls= -[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push(urls[i]);break}if(aFiles.length===0)callback(Asc.c_oAscError.ID.No,aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt); -xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback(Asc.c_oAscError.ID.UplImageFileCount)};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function UploadImageUrls(files,documentId,documentUserId, -jwt,callback){if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push({path:i, +return}}catch(err$2){}}callback(mapAscServerErrorToAscError(nError),files)}}}function UploadImageFiles(files,documentId,documentUserId,jwt,callback){window.parent.APP.UploadImageFiles(files,documentId,documentUserId,jwt,function(err,urls){callback(err||Asc.c_oAscError.ID.No,urls)});return;if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]); +var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push(urls[i]);break}if(aFiles.length===0)callback(Asc.c_oAscError.ID.No,aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+= +"?token="+encodeURIComponent(jwt);xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback(Asc.c_oAscError.ID.UplImageFileCount)};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function UploadImageUrls(files, +documentId,documentUserId,jwt,callback){if(files.length>0){var url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);var aFiles=[];for(var i=files.length-1;i>-1;--i)aFiles.push(files[i]);var file=aFiles.pop();var aResultUrls=[];var fOnReadyChnageState=function(){if(4==this.readyState)if(this.status==200||this.status==1223){var urls=JSON.parse(this.responseText);g_oDocumentUrls.addUrls(urls);for(var i in urls)if(urls.hasOwnProperty(i)){aResultUrls.push({path:i, url:urls[i]});break}if(aFiles.length===0)callback(aResultUrls);else{file=aFiles.pop();var xhr=new XMLHttpRequest;url=sUploadServiceLocalUrl+"/"+documentId+"/"+documentUserId+"/"+g_oDocumentUrls.getMaxIndex();if(jwt)url+="?token="+encodeURIComponent(jwt);xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type",file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}}else callback([])};var xhr=new XMLHttpRequest;xhr.open("POST",url,true);xhr.setRequestHeader("Content-Type", file.type||"application/octet-stream");xhr.onreadystatechange=fOnReadyChnageState;xhr.send(file)}else callback(Asc.c_oAscError.ID.UplImageFileCount)}function ValidateUploadImage(files){var nRes=c_oAscServerError.NoError;if(files.length>0)for(var i=0,length=files.length;i').html(data.content.getFormatText()).text(); @@ -188,7 +187,6 @@ define([ onMessageHandlers.push(function (data, el) { var type = data.type; if (types.indexOf(type) === -1 && !(teams && /^team-/.test(type))) { return; } - console.log('okokok'); cfg.onMessage(data, el); }); } diff --git a/www/common/toolbar.js b/www/common/toolbar.js index 3afa55d61..e55cdcf82 100644 --- a/www/common/toolbar.js +++ b/www/common/toolbar.js @@ -1027,7 +1027,6 @@ MessengerUI, Messages) { Common.mailbox.subscribe(['notifications', 'team'], { onMessage: function (data, el) { - console.log(data, el, div); if (el) { $(div).prepend(el); } diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json index e792c6cc8..3ab3680ea 100644 --- a/www/common/translations/messages.de.json +++ b/www/common/translations/messages.de.json @@ -21,7 +21,7 @@ "button_newslide": "Neue Präsentation", "button_newwhiteboard": "Neues Whiteboard", "button_newkanban": "Neues Kanban", - "common_connectionLost": "Die Verbindung zum Server ist abgebrochen
Du verwendest jetzt das Dokument schreibgeschützt, bis die Verbindung wieder funktioniert.", + "common_connectionLost": "Die Verbindung zum Server ist abgebrochen
Du kannst das Dokument nicht bearbeiten, bis die Verbindung wieder funktioniert.", "websocketError": "Verbindung zum Websocket fehlgeschlagen...", "typeError": "Dieses Dokument ist nicht mit der ausgewählten Anwendung kompatibel", "onLogout": "Du bist ausgeloggt. {0}Klicke hier{1}, um dich wieder einzuloggen,
oder drücke Escape, um dein Pad schreibgeschützt zu benutzen.", @@ -1087,7 +1087,7 @@ "support_disabledTitle": "Support ist nicht aktiviert", "support_disabledHint": "Diese CryptPad-Instanz wurde noch nicht für die Verwendung eines Support-Formulars konfiguriert.", "support_cat_new": "Neues Ticket", - "support_formTitle": "Titel des Tickets", + "support_formTitle": "Neues Ticket", "support_formHint": "Mit diesem Formular kann ein neues Support-Ticket eröffnet werden. Es erlaubt die sichere Kontaktaufnahme mit den Administratoren zur Lösung von Problemen oder Beantwortung von Fragen. Bitte eröffne kein neues Ticket, wenn du bereits ein offenes Ticket bezüglich des gleichen Problems hast. Verwende stattdessen die Antworten-Schaltfläche, um weitere Informationen hinzuzufügen.", "support_formButton": "Absenden", "support_formTitleError": "Fehler: Titel ist leer", @@ -1123,7 +1123,7 @@ "properties_unknownUser": "{0} unbekannte(r) Benutzer", "fm_morePads": "Mehr", "fc_openInCode": "Im Code-Editor öffnen", - "uploadFolder_modal_title": "Optionen für Ordnerupload", + "uploadFolder_modal_title": "Optionen für Hochladen des Ordners", "uploadFolder_modal_filesPassword": "Passwort für Dateien", "uploadFolder_modal_owner": "Eigene Dateien", "uploadFolder_modal_forceSave": "Dateien im CryptDrive speichern", @@ -1181,7 +1181,7 @@ "team_rosterPromote": "Befördern", "team_rosterDemote": "Degradieren", "team_rosterKick": "Aus dem Team entfernen", - "team_inviteButton": "Kontakte einladen", + "team_inviteButton": "Mitglieder einladen", "team_leaveButton": "Dieses Team verlassen", "team_leaveConfirm": "Wenn du dieses Team verlässt, verlierst du den Zugriff auf das dazugehörige CryptDrive, den Chatverlauf und andere Inhalte. Bist du sicher?", "team_owner": "Eigentümer", @@ -1381,5 +1381,18 @@ "settings_safeLinkDefault": "Sichere Links sind nun standardmäßig aktiviert. Bitte verwende zum Kopieren von Links das Menü Teilen und nicht die Adressleiste des Browsers.", "info_imprintFlavour": "Rechtliche Informationen über die Administratoren dieses Servers.", "info_privacyFlavour": "Unsere Datenschutzerklärung beschreibt, wie wir deine Daten verarbeiten.", - "user_about": "Über CryptPad" + "user_about": "Über CryptPad", + "support_cat_all": "Alle", + "support_cat_other": "Anderes", + "support_cat_account": "Benutzerkonto", + "support_cat_data": "Datenverlust", + "notification_folderSharedTeam": "{0} hat einen Ordner mit dem Team {2} geteilt: {1}", + "notification_fileSharedTeam": "{0} hat eine Datei mit dem Team {2} geteilt: {1}", + "notification_padSharedTeam": "{0} hat ein Pad mit dem Team {2} geteilt: {1}", + "support_addAttachment": "Anhang hinzufügen", + "support_attachments": "Anhänge", + "support_cat_bug": "Fehlerbericht", + "oo_refresh": "Neu laden", + "support_category": "Wähle eine Kategorie", + "oo_refreshText": "Dieses Dokument wurde aktualisiert" } diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index 77e81fcf5..f4272d26a 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1086,7 +1086,7 @@ "support_disabledTitle": "Le support n'est pas activé", "support_disabledHint": "Cette instance de CryptPad n'est pas encore configurée pour utiliser le formulaire de support.", "support_cat_new": "Nouveau ticket", - "support_formTitle": "Titre du ticket", + "support_formTitle": "Nouveau Ticket", "support_formButton": "Envoyer", "support_formTitleError": "Erreur : le titre est vide", "support_formContentError": "Erreur : le contenu est vide", @@ -1164,7 +1164,7 @@ "team_inviteModalButton": "Inviter", "team_pcsSelectLabel": "Sauver dans", "team_pcsSelectHelp": "Créer un pad dans le drive d'une équipe rend cette équipe propriétaire du pad si l'option est cochée.", - "team_invitedToTeam": "{0} vous à inviter à rejoindre l'équipe : {1}", + "team_invitedToTeam": "{0} vous a invité à rejoindre l'équipe : {1}", "team_kickedFromTeam": "{0} vous a exclu de l'équipe : {1}", "team_acceptInvitation": "{0} a accepté votre offre de rejoindre l'équipe : {1}", "team_declineInvitation": "{0} a refusé votre offre de rejoindre l'équipe : {1}", @@ -1183,7 +1183,7 @@ "team_rosterPromote": "Promouvoir", "team_rosterDemote": "Rétrograder", "team_rosterKick": "Expulser de l'équipe", - "team_inviteButton": "Inviter des contacts", + "team_inviteButton": "Inviter des membres", "team_leaveButton": "Quitter cette équipe", "team_leaveConfirm": "Si vous quittez cette équipe, vous perdrez l'accès à son CryptDrive, son chat et les autres contenus. Êtes-vous sûr ?", "team_owner": "Propriétaires", @@ -1381,5 +1381,18 @@ "support_languagesPreamble": "L'équipe de support parle les langues suivantes :", "info_privacyFlavour": "Description de la confidentialité de vos données.", "user_about": "À propos de CryptPad", - "info_imprintFlavour": "Informations légales sur les administateurs de cette instance." + "info_imprintFlavour": "Informations légales sur les administateurs de cette instance.", + "support_cat_all": "Tout", + "support_cat_other": "Autre", + "support_cat_bug": "Rapport de bug", + "support_cat_data": "Perte de données", + "support_cat_account": "Compte utilisateur", + "notification_folderSharedTeam": "{0} a partagé un dossier avec l'équipe {2} : {1}", + "notification_fileSharedTeam": "{0} a partagé un fichier avec l'équipe {2} : {1}", + "notification_padSharedTeam": "{0} a partagé un pad avec l'équipe {2} : {1}", + "support_addAttachment": "Ajouter une pièce jointe", + "support_attachments": "Pièces jointes", + "oo_refreshText": "Ce document a été mis à jour", + "oo_refresh": "Recharger", + "support_category": "Choisir une catégorie" } diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index 2fcf5db4f..d99fd8d18 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1108,7 +1108,7 @@ "support_disabledTitle": "Support is not enabled", "support_disabledHint": "This CryptPad instance is not yet configured to use a support form.", "support_cat_new": "New ticket", - "support_formTitle": "Ticket title", + "support_formTitle": "New Ticket", "support_formHint": "This form can be used to create a new support ticket. Use it to contact the administrators to solve issues or ask any question in a secure way. Please don't create a new ticket if you already have an open ticket about the same issue, but use the reply button to provide more information.", "support_formButton": "Send", "support_formTitleError": "Error: title is empty", @@ -1187,7 +1187,7 @@ "team_rosterPromote": "Promote", "team_rosterDemote": "Demote", "team_rosterKick": "Kick from the team", - "team_inviteButton": "Invite contacts", + "team_inviteButton": "Invite members", "team_leaveButton": "Leave this team", "team_leaveConfirm": "If you leave this team you will lose access to its CryptDrive, chat history, and other contents. Are you sure?", "team_owner": "Owners", @@ -1381,5 +1381,18 @@ "settings_safeLinkDefault": "Safe Links are now turned on by default. Please use the Share menu to copy links rather than your browser's address bar.", "info_imprintFlavour": "Legal information about the administrators of this instance.", "user_about": "About CryptPad", - "info_privacyFlavour": "Our privacy policy describes how we treat your data." + "info_privacyFlavour": "Our privacy policy describes how we treat your data.", + "support_cat_account": "User account", + "support_cat_data": "Loss of content", + "support_cat_bug": "Bug report", + "support_cat_other": "Other", + "support_cat_all": "All", + "support_attachments": "Attachments", + "support_addAttachment": "Add attachment", + "notification_padSharedTeam": "{0} has shared a pad with the team {2}: {1}", + "notification_fileSharedTeam": "{0} has shared a file with the team {2}: {1}", + "notification_folderSharedTeam": "{0} has shared a folder with the team {2}: {1}", + "oo_refresh": "Refresh", + "oo_refreshText": "This document has been updated", + "support_category": "Choose a category" } diff --git a/www/contacts/app-contacts.less b/www/contacts/app-contacts.less index 88a93ae9d..99b927b6c 100644 --- a/www/contacts/app-contacts.less +++ b/www/contacts/app-contacts.less @@ -1,7 +1,6 @@ @import (reference) '../../customize/src/less2/include/framework.less'; @import (reference) '../../customize/src/less2/include/messenger.less'; @import (reference) '../../customize/src/less2/include/avatar.less'; -@import (reference) '../../customize/src/less2/include/buttons.less'; // body &.cp-app-contacts { @@ -19,9 +18,6 @@ display: flex; // We need this to remove a 3px border at the bottom of the toolbar } - .cp-app-contacts-friends { - .buttons_main(); - } .cp-contacts-muted-table { .avatar_main(50px); .cp-contacts-muted-user { @@ -33,8 +29,6 @@ } } - - .messenger_main(); } diff --git a/www/kanban/app-kanban.less b/www/kanban/app-kanban.less index f0af6eeca..879121be7 100644 --- a/www/kanban/app-kanban.less +++ b/www/kanban/app-kanban.less @@ -3,7 +3,6 @@ @import (reference) "../../customize/src/less2/include/tools.less"; @import (reference) "../../customize/src/less2/include/markdown.less"; @import (reference) "../../customize/src/less2/include/avatar.less"; -@import (reference) "../../customize/src/less2/include/buttons.less"; // body &.cp-app-kanban { @@ -142,6 +141,8 @@ .kanban-edit-item { padding: 5px; + border: 0; + background: transparent; align-self: flex-start; } @@ -310,7 +311,6 @@ position: relative; min-height: 50px; .cp-kanban-filterTags { - .buttons_main(); display: inline-flex; align-items: center; flex: 1; @@ -346,7 +346,7 @@ margin-left: 10px; display: flex; flex-wrap: wrap; - &:not(:empty) { + &:not(.cp-empty) { margin-top: -5px; } em { diff --git a/www/kanban/inner.js b/www/kanban/inner.js index 10db6261b..f328c3bc8 100644 --- a/www/kanban/inner.js +++ b/www/kanban/inner.js @@ -503,7 +503,7 @@ define([ $container.find('.kanban-item').each(function (i, el) { var itemId = $(el).attr('data-eid'); $('