diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index f3cee4d13..96b3f31e8 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -76,7 +76,8 @@ define([ 'reviewchange:delete': _.bind(this.onDeleteClick, this), 'reviewchange:preview': _.bind(this.onBtnPreviewClick, this), 'reviewchanges:view': _.bind(this.onReviewViewClick, this), - 'lang:document': _.bind(this.onDocLanguage, this) + 'lang:document': _.bind(this.onDocLanguage, this), + 'collaboration:coauthmode': _.bind(this.onCoAuthMode, this) }, 'Common.Views.ReviewChangesDialog': { 'reviewchange:accept': _.bind(this.onAcceptClick, this), @@ -131,7 +132,7 @@ define([ SetDisabled: function(state) { if (this.dlgChanges) this.dlgChanges.close(); - this.view && this.view.SetDisabled(state); + this.view && this.view.SetDisabled(state, this.langs); }, onApiShowChange: function (sdkchange) { @@ -487,7 +488,7 @@ define([ state = (state == 'on'); this.api.asc_SetTrackRevisions(state); - Common.localStorage.setItem("de-track-changes", state ? 1 : 0); + Common.localStorage.setItem(this.view.appPrefix + "track-changes", state ? 1 : 0); this.view.turnChanges(state); } @@ -497,7 +498,7 @@ define([ state = (state == 'on'); this.view.turnSpelling(state); - Common.localStorage.setItem("de-settings-spellcheck", state ? 1 : 0); + Common.localStorage.setItem(this.view.appPrefix + "settings-spellcheck", state ? 1 : 0); this.api.asc_setSpellCheck(state); Common.Utils.InternalSettings.set("de-settings-spellcheck", state); }, @@ -520,6 +521,32 @@ define([ return this._state.previewMode; }, + onCoAuthMode: function(menu, item, e) { + Common.localStorage.setItem(this.view.appPrefix + "settings-coauthmode", item.value); + + if (this.api) { + this.api.asc_SetFastCollaborative(item.value==1); + + if (this.api.SetCollaborativeMarksShowType) { + var value = Common.localStorage.getItem(item.value ? this.view.appPrefix + "settings-showchanges-fast" : this.view.appPrefix + "settings-showchanges-strict"); + if (value !== null) + this.api.SetCollaborativeMarksShowType(value == 'all' ? Asc.c_oAscCollaborativeMarksShowType.All : + value == 'none' ? Asc.c_oAscCollaborativeMarksShowType.None : Asc.c_oAscCollaborativeMarksShowType.LastChanges); + else + this.api.SetCollaborativeMarksShowType(item.value ? Asc.c_oAscCollaborativeMarksShowType.None : Asc.c_oAscCollaborativeMarksShowType.LastChanges); + } + + value = Common.localStorage.getItem(this.view.appPrefix + "settings-autosave"); + if (value===null && this.appConfig.customization && this.appConfig.customization.autosave===false) + value = 0; + value = (!item.value && value!==null) ? parseInt(value) : 1; + + Common.localStorage.setItem(this.view.appPrefix + "settings-autosave", value); + this.api.asc_setAutoSaveGap(value); + } + Common.NotificationCenter.trigger('edit:complete', this.view); + }, + disableEditing: function(disable) { var app = this.getApplication(); app.getController('RightMenu').getView('RightMenu').clearSelection(); @@ -537,6 +564,12 @@ define([ if (this.view) { this.view.$el.find('.no-group-mask').css('opacity', 1); + + this.view.btnsDocLang && this.view.btnsDocLang.forEach(function(button) { + if ( button ) { + button.setDisabled(disable || this.langs.length<1); + } + }, this); } }, @@ -551,7 +584,7 @@ define([ onAppReady: function (config) { var me = this; - if ( me.view && Common.localStorage.getBool("de-settings-spellcheck", true) ) + if ( me.view && Common.localStorage.getBool(me.view.appPrefix + "settings-spellcheck", true) ) me.view.turnSpelling(true); if ( config.canReview ) { @@ -572,7 +605,7 @@ define([ _setReviewStatus(false); } else { me.api.asc_HaveRevisionsChanges() && me.view.markChanges(true); - _setReviewStatus(Common.localStorage.getBool("de-track-changes")); + _setReviewStatus(Common.localStorage.getBool(me.view.appPrefix + "track-changes")); } if ( typeof (me.appConfig.customization) == 'object' && (me.appConfig.customization.showReviewChanges==true) ) { @@ -586,10 +619,19 @@ define([ } }); } + + if (me.view && me.view.btnChat) { + me.getApplication().getController('LeftMenu').leftMenu.btnChat.on('toggle', function(btn, state){ + if (state !== me.view.btnChat.pressed) + me.view.turnChat(state); + }); + + } }, applySettings: function(menu) { - this.view && this.view.turnSpelling( Common.localStorage.getBool("de-settings-spellcheck", true) ); + this.view && this.view.turnSpelling( Common.localStorage.getBool(this.view.appPrefix + "settings-spellcheck", true) ); + this.view && this.view.turnCoAuthMode( Common.localStorage.getBool(this.view.appPrefix + "settings-coauthmode", true) ); }, synchronizeChanges: function() { @@ -600,7 +642,11 @@ define([ setLanguages: function (array) { this.langs = array; - this.view.btnDocLang.setDisabled(this.langs.length<1); + this.view && this.view.btnsDocLang && this.view.btnsDocLang.forEach(function(button) { + if ( button ) { + button.setDisabled(this.langs.length<1); + } + }, this); }, onDocLanguage: function() { @@ -625,6 +671,10 @@ define([ })).show(); }, + onLostEditRights: function() { + this.view && this.view.onLostEditRights(); + }, + textInserted: 'Inserted:', textDeleted: 'Deleted:', textParaInserted: 'Paragraph Inserted ', diff --git a/apps/common/main/lib/util/LocalStorage.js b/apps/common/main/lib/util/LocalStorage.js index 8b3b1daa8..1b0a86888 100644 --- a/apps/common/main/lib/util/LocalStorage.js +++ b/apps/common/main/lib/util/LocalStorage.js @@ -125,6 +125,9 @@ define(['gateway'], function () { setKeysFilter: function(value) { _filter = value; }, + getKeysFilter: function() { + return _filter; + }, itemExists: _getItemExists, sync: _refresh, save: _save diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index 71ef4c32c..5a34cb260 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -412,30 +412,35 @@ define([ Common.Views.ReviewChanges = Common.UI.BaseView.extend(_.extend((function(){ var template = '
' + - '
' + - '' + + '
' + + '' + + '' + '
' + - '
' + - '' + - '
' + - '
' + + '
'; function setEvents() { @@ -489,8 +494,26 @@ define([ }); }); - this.btnDocLang.on('click', function (btn, e) { - me.fireEvent('lang:document', this); + this.btnsDocLang.forEach(function(button) { + button.on('click', function (b, e) { + me.fireEvent('lang:document', this); + }); + }); + + this.btnSharing && this.btnSharing.on('click', function (btn, e) { + Common.NotificationCenter.trigger('collaboration:sharing'); + }); + + this.btnCoAuthMode && this.btnCoAuthMode.menu.on('item:click', function (menu, item, e) { + me.fireEvent('collaboration:coauthmode', [menu, item]); + }); + + this.btnHistory && this.btnHistory.on('click', function (btn, e) { + Common.NotificationCenter.trigger('collaboration:history'); + }); + + this.btnChat && this.btnChat.on('click', function (btn, e) { + me.fireEvent('collaboration:chat', [btn.pressed]); }); } @@ -549,20 +572,45 @@ define([ }); } - this.btnSetSpelling = new Common.UI.Button({ - cls: 'btn-toolbar x-huge icon-top', - iconCls: 'btn-ic-docspell', - caption: this.txtSpelling, - enableToggle: true - }); - this.btnsSpelling = [this.btnSetSpelling]; + if (!!this.appConfig.sharingSettingsUrl && this.appConfig.sharingSettingsUrl.length && this._readonlyRights!==true) { + this.btnSharing = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-ic-sharing', + caption: this.txtSharing + }); + } - this.btnDocLang = new Common.UI.Button({ - cls: 'btn-toolbar x-huge icon-top', - iconCls: 'btn-ic-doclang', - caption: this.txtDocLang, - disabled: true - }); + if (!this.appConfig.isOffline && this.appConfig.canCoAuthoring) { + this.btnCoAuthMode = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-ic-coedit', + caption: this.txtCoAuthMode, + menu: true + }); + } + + this.btnsSpelling = []; + this.btnsDocLang = []; + + if (this.appConfig.canUseHistory && !this.appConfig.isDisconnected) { + this.btnHistory = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-ic-history', + caption: this.txtHistory + }); + } + + if (this.appConfig.canCoAuthoring && this.appConfig.canChat) { + this.btnChat = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-ic-chat', + caption: this.txtChat, + enableToggle: true + }); + } + + var filter = Common.localStorage.getKeysFilter(); + this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, @@ -616,29 +664,39 @@ define([ ); me.btnReject.updateHint([me.tipRejectCurrent, me.txtRejectChanges]); + var menuTemplate = _.template('
<%= caption %>
' + + '<% if (options.description !== null) { %>' + + '<% } %>
'); + me.btnReviewView.setMenu( new Common.UI.Menu({ cls: 'ppm-toolbar', items: [ { - caption: me.txtMarkup, + caption: me.txtMarkupCap, checkable: true, toggleGroup: 'menuReviewView', checked: true, - value: 'markup' + value: 'markup', + template: menuTemplate, + description: me.txtMarkup }, { - caption: me.txtFinal, + caption: me.txtFinalCap, checkable: true, toggleGroup: 'menuReviewView', checked: false, + template: menuTemplate, + description: me.txtFinal, value: 'final' }, { - caption: me.txtOriginal, + caption: me.txtOriginalCap, checkable: true, toggleGroup: 'menuReviewView', checked: false, + template: menuTemplate, + description: me.txtOriginal, value: 'original' } ] @@ -647,20 +705,76 @@ define([ me.btnAccept.setDisabled(config.isReviewOnly); me.btnReject.setDisabled(config.isReviewOnly); - } else { - me.$el.find('.separator.review') - .hide() - .next('.group').hide(); } - if ( !config.canComments || !config.canCoAuthoring) { - $('.separator.comments', me.$el) - .hide() - .next('.group').hide(); + me.btnSharing && me.btnSharing.updateHint(me.tipSharing); + me.btnHistory && me.btnHistory.updateHint(me.tipHistory); + me.btnChat && me.btnChat.updateHint(me.txtChat + Common.Utils.String.platformKey('Alt+Q')); + + if (me.btnCoAuthMode) { + me.btnCoAuthMode.setMenu( + new Common.UI.Menu({ + cls: 'ppm-toolbar', + style: 'max-width: 220px;', + items: [ + { + caption: me.strFast, + checkable: true, + toggleGroup: 'menuCoauthMode', + checked: true, + template: menuTemplate, + description: me.strFastDesc, + value: 1 + }, + { + caption: me.strStrict, + checkable: true, + toggleGroup: 'menuCoauthMode', + checked: false, + template: menuTemplate, + description: me.strStrictDesc, + value: 0 + } + ] + })); + me.btnCoAuthMode.updateHint(me.tipCoAuthMode); + + var value = Common.localStorage.getItem(me.appPrefix + "settings-coauthmode"); + if (value===null && !Common.localStorage.itemExists(me.appPrefix + "settings-autosave") && + config.customization && config.customization.autosave===false) { + value = 0; // use customization.autosave only when de-settings-coauthmode and de-settings-autosave are null + } + me.turnCoAuthMode((value===null || parseInt(value) == 1) && !(config.isDesktopApp && config.isOffline) && config.canCoAuthoring); } - me.btnDocLang.updateHint(me.tipSetDocLang); - me.btnSetSpelling.updateHint(me.tipSetSpelling); + var separator_sharing = !(me.btnSharing || me.btnCoAuthMode) ? me.$el.find('.separator.sharing') : '.separator.sharing', + separator_comments = !(config.canComments && config.canCoAuthoring) ? me.$el.find('.separator.comments') : '.separator.comments', + separator_review = !config.canReview ? me.$el.find('.separator.review') : '.separator.review', + separator_chat = !me.btnChat ? me.$el.find('.separator.chat') : '.separator.chat', + separator_last; + + if (typeof separator_sharing == 'object') + separator_sharing.hide().prev('.group').hide(); + else + separator_last = separator_sharing; + + if (typeof separator_comments == 'object') + separator_comments.hide().prev('.group').hide(); + else + separator_last = separator_comments; + + if (typeof separator_review == 'object') + separator_review.hide().prevUntil('.separator.comments').hide(); + else + separator_last = separator_review; + + if (typeof separator_chat == 'object') + separator_chat.hide().prev('.group').hide(); + else + separator_last = separator_chat; + + if (!me.btnHistory && separator_last) + me.$el.find(separator_last).hide(); Common.NotificationCenter.trigger('tab:visible', 'review', true); @@ -680,8 +794,10 @@ define([ this.btnReviewView.render(this.$el.find('#btn-review-view')); } - this.btnSetSpelling.render(this.$el.find('#slot-btn-spelling')); - this.btnDocLang.render(this.$el.find('#slot-set-lang')); + this.btnSharing && this.btnSharing.render(this.$el.find('#slot-btn-sharing')); + this.btnCoAuthMode && this.btnCoAuthMode.render(this.$el.find('#slot-btn-coauthmode')); + this.btnHistory && this.btnHistory.render(this.$el.find('#slot-btn-history')); + this.btnChat && this.btnChat.render(this.$el.find('#slot-btn-chat')); return this.$el; }, @@ -727,6 +843,17 @@ define([ }); this.btnsSpelling.push(button); + return button; + } else if (type == 'doclang' && parent == 'statusbar' ) { + button = new Common.UI.Button({ + cls: 'btn-toolbar', + iconCls: 'btn-ic-doclang', + hintAnchor : 'top', + hint: this.tipSetDocLang, + disabled: true + }); + this.btnsDocLang.push(button); + return button; } }, @@ -760,17 +887,42 @@ define([ }, this); }, - SetDisabled: function (state) { + turnCoAuthMode: function (fast) { + if (this.btnCoAuthMode) { + this.btnCoAuthMode.menu.items[0].setChecked(fast, true); + this.btnCoAuthMode.menu.items[1].setChecked(!fast, true); + } + }, + + turnChat: function (state) { + this.btnChat && this.btnChat.toggle(state, true); + }, + + SetDisabled: function (state, langs) { this.btnsSpelling && this.btnsSpelling.forEach(function(button) { if ( button ) { button.setDisabled(state); } }, this); + this.btnsDocLang && this.btnsDocLang.forEach(function(button) { + if ( button ) { + button.setDisabled(state || langs && langs.length<1); + } + }, this); this.btnsTurnReview && this.btnsTurnReview.forEach(function(button) { if ( button ) { button.setDisabled(state); } }, this); + this.btnChat && this.btnChat.setDisabled(state); + }, + + onLostEditRights: function() { + this._readonlyRights = true; + if (!this.rendered) + return; + + this.btnSharing && this.btnSharing.setDisabled(true); }, txtAccept: 'Accept', @@ -792,12 +944,26 @@ define([ txtAcceptChanges: 'Accept Changes', txtRejectChanges: 'Reject Changes', txtView: 'Display Mode', - txtMarkup: 'All changes (Editing)', - txtFinal: 'All changes accepted (Preview)', - txtOriginal: 'All changes rejected (Preview)', + txtMarkup: 'Text with changes (Editing)', + txtFinal: 'All changes like accept (Preview)', + txtOriginal: 'Text without changes (Preview)', tipReviewView: 'Select the way you want the changes to be displayed', tipAcceptCurrent: 'Accept current changes', - tipRejectCurrent: 'Reject current changes' + tipRejectCurrent: 'Reject current changes', + txtSharing: 'Sharing', + tipSharing: 'Manage document access rights', + txtCoAuthMode: 'Co-editing Mode', + tipCoAuthMode: 'Set co-editing mode', + strFast: 'Fast', + strStrict: 'Strict', + txtHistory: 'Version History', + tipHistory: 'Show version history', + txtChat: 'Chat', + txtMarkupCap: 'Markup', + txtFinalCap: 'Final', + txtOriginalCap: 'Original', + strFastDesc: 'Real-time co-editing. All changes are saved automatically.', + strStrictDesc: 'Use the \'Save\' button to sync the changes you and others make.' } }()), Common.Views.ReviewChanges || {})); diff --git a/apps/common/main/resources/img/controls/toolbarbig.png b/apps/common/main/resources/img/controls/toolbarbig.png index d5bbddcae..21d0714b4 100644 Binary files a/apps/common/main/resources/img/controls/toolbarbig.png and b/apps/common/main/resources/img/controls/toolbarbig.png differ diff --git a/apps/common/main/resources/img/controls/toolbarbig@2x.png b/apps/common/main/resources/img/controls/toolbarbig@2x.png index 63d5f5de2..cb65c79b2 100644 Binary files a/apps/common/main/resources/img/controls/toolbarbig@2x.png and b/apps/common/main/resources/img/controls/toolbarbig@2x.png differ diff --git a/apps/common/main/resources/img/header/buttons.svg b/apps/common/main/resources/img/header/buttons.svg index 28656d8d3..3b82b4ee7 100644 --- a/apps/common/main/resources/img/header/buttons.svg +++ b/apps/common/main/resources/img/header/buttons.svg @@ -11,10 +11,10 @@ - + + + + diff --git a/apps/common/main/resources/less/toolbar.less b/apps/common/main/resources/less/toolbar.less index df297f9b4..08a6fb6f0 100644 --- a/apps/common/main/resources/less/toolbar.less +++ b/apps/common/main/resources/less/toolbar.less @@ -279,6 +279,10 @@ .button-normal-icon(~'x-huge .btn-ic-docspell', 12, @toolbar-big-icon-size); .button-normal-icon(~'x-huge .btn-ic-review', 13, @toolbar-big-icon-size); .button-normal-icon(~'x-huge .btn-ic-reviewview', 30, @toolbar-big-icon-size); +.button-normal-icon(~'x-huge .btn-ic-sharing', 31, @toolbar-big-icon-size); +.button-normal-icon(~'x-huge .btn-ic-coedit', 32, @toolbar-big-icon-size); +.button-normal-icon(~'x-huge .btn-ic-chat', 33, @toolbar-big-icon-size); +.button-normal-icon(~'x-huge .btn-ic-history', 34, @toolbar-big-icon-size); .button-normal-icon(review-save, 14, @toolbar-big-icon-size); .button-normal-icon(review-deny, 15, @toolbar-big-icon-size); .button-normal-icon(review-next, 16, @toolbar-big-icon-size); diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 3a58b4080..4b1ae3385 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -103,11 +103,18 @@ define([ 'search:replace': _.bind(this.onQueryReplace, this), 'search:replaceall': _.bind(this.onQueryReplaceAll, this), 'search:highlight': _.bind(this.onSearchHighlight, this) + }, + 'Common.Views.ReviewChanges': { + 'collaboration:chat': _.bind(this.onShowHideChat, this) } }); Common.NotificationCenter.on('leftmenu:change', _.bind(this.onMenuChange, this)); Common.NotificationCenter.on('app:comment:add', _.bind(this.onAppAddComment, this)); + Common.NotificationCenter.on('collaboration:history', _.bind(function () { + if ( !this.leftMenu.panelHistory.isVisible() ) + this.clickMenuFileItem(null, 'history'); + }, this)); }, onLaunch: function() { @@ -271,7 +278,7 @@ define([ default: close_menu = false; } - if (close_menu) { + if (close_menu && menu) { menu.hide(); } }, @@ -718,7 +725,7 @@ define([ win = new Common.Views.SignDialog({ api: me.api, signType: 'invisible', - handler: function(dlg, result) { + handler: function (dlg, result) { if (result == 'ok') { var props = dlg.getSettings(); me.api.asc_Sign(props.certificateId); @@ -732,6 +739,18 @@ define([ menu.hide(); }, + onShowHideChat: function(state) { + if (this.mode.canCoAuthoring && this.mode.canChat && !this.mode.isLightVersion) { + if (state) { + Common.UI.Menu.Manager.hideAll(); + this.leftMenu.showMenu('chat'); + } else { + this.leftMenu.btnChat.toggle(false, true); + this.leftMenu.onBtnMenuClick(this.leftMenu.btnChat); + } + } + }, + textNoTextFound : 'Text not found', newDocumentTitle : 'Unnamed document', requestEditRightsText : 'Requesting editing rights...', diff --git a/apps/documenteditor/main/app/controller/Statusbar.js b/apps/documenteditor/main/app/controller/Statusbar.js index f275bba77..b1028280e 100644 --- a/apps/documenteditor/main/app/controller/Statusbar.js +++ b/apps/documenteditor/main/app/controller/Statusbar.js @@ -99,6 +99,8 @@ define([ me.btnSpelling = review.getButton('spelling', 'statusbar'); me.btnSpelling.render( me.statusbar.$layout.find('#btn-doc-spell') ); + me.btnDocLang = review.getButton('doclang', 'statusbar'); + me.btnDocLang.render( me.statusbar.$layout.find('#btn-doc-lang') ); } else { me.statusbar.$el.find('.el-edit, .el-review').hide(); } diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 49079b515..b12fb024c 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -2841,7 +2841,7 @@ define([ me.toolbar.render(_.extend({isCompactView: compactview}, config)); if ( config.isEdit ) { - var tab = {action: 'review', caption: me.toolbar.textTabReview}; + var tab = {action: 'review', caption: me.toolbar.textTabCollaboration}; var $panel = DE.getController('Common.Controllers.ReviewChanges').createToolbarPanel(); if ( $panel ) { diff --git a/apps/documenteditor/main/app/template/StatusBar.template b/apps/documenteditor/main/app/template/StatusBar.template index 4d7133891..c9cccb90e 100644 --- a/apps/documenteditor/main/app/template/StatusBar.template +++ b/apps/documenteditor/main/app/template/StatusBar.template @@ -19,6 +19,7 @@
+
diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index dfa6e436d..0b5669489 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -870,6 +870,8 @@ define([ }); } + Common.NotificationCenter.on('collaboration:sharing', _.bind(this.changeAccessRights, this)); + return this; }, diff --git a/apps/documenteditor/main/app/view/LeftMenu.js b/apps/documenteditor/main/app/view/LeftMenu.js index 1396e18c7..4d082d3cd 100644 --- a/apps/documenteditor/main/app/view/LeftMenu.js +++ b/apps/documenteditor/main/app/view/LeftMenu.js @@ -276,7 +276,7 @@ define([ } if (this.mode.canChat) { this.panelChat['hide'](); - this.btnChat.toggle(false, true); + this.btnChat.toggle(false); } } /** coauthoring end **/ diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 955ecd0a2..950efcc1a 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -2507,7 +2507,8 @@ define([ capImgWrapping: 'Wrapping', capBtnComment: 'Comment', textColumnsCustom: 'Custom Columns', - textSurface: 'Surface' + textSurface: 'Surface', + textTabCollaboration: 'Collaboration' } })(), DE.Views.Toolbar || {})); }); diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 8802c80a2..62a9e21ad 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -207,10 +207,13 @@ "Common.Views.ReviewChanges.txtAcceptCurrent": "Accept Current Change", "Common.Views.ReviewChanges.txtClose": "Close", "Common.Views.ReviewChanges.txtDocLang": "Language", - "Common.Views.ReviewChanges.txtFinal": "All changes accepted (Preview)", - "Common.Views.ReviewChanges.txtMarkup": "All changes (Editing)", + "Common.Views.ReviewChanges.txtFinal": "All changes like accept (Preview)", + "Common.Views.ReviewChanges.txtMarkup": "Text with changes (Editing)", "Common.Views.ReviewChanges.txtNext": "Next", - "Common.Views.ReviewChanges.txtOriginal": "All changes rejected (Preview)", + "Common.Views.ReviewChanges.txtOriginal": "Text without changes (Preview)", + "Common.Views.ReviewChanges.txtMarkupCap": "Markup", + "Common.Views.ReviewChanges.txtFinalCap": "Final", + "Common.Views.ReviewChanges.txtOriginalCap": "Original", "Common.Views.ReviewChanges.txtPrev": "Previous", "Common.Views.ReviewChanges.txtReject": "Reject", "Common.Views.ReviewChanges.txtRejectAll": "Reject All Changes", @@ -219,6 +222,16 @@ "Common.Views.ReviewChanges.txtSpelling": "Spell Checking", "Common.Views.ReviewChanges.txtTurnon": "Track Changes", "Common.Views.ReviewChanges.txtView": "Display Mode", + "Common.Views.ReviewChanges.txtSharing": "Sharing", + "Common.Views.ReviewChanges.tipSharing": "Manage document access rights", + "Common.Views.ReviewChanges.txtCoAuthMode": "Co-editing Mode", + "Common.Views.ReviewChanges.tipCoAuthMode": "Set co-editing mode", + "Common.Views.ReviewChanges.strFast": "Fast", + "Common.Views.ReviewChanges.strStrict": "Strict", + "Common.Views.ReviewChanges.strFastDesc": "Real-time co-editing. All changes are saved automatically.", + "Common.Views.ReviewChanges.strStrictDesc": "Use the 'Save' button to sync the changes you and others make.", + "Common.Views.ReviewChanges.txtHistory": "Version History", + "Common.Views.ReviewChanges.tipHistory": "Show version history", "Common.Views.ReviewChangesDialog.textTitle": "Review Changes", "Common.Views.ReviewChangesDialog.txtAccept": "Accept", "Common.Views.ReviewChangesDialog.txtAcceptAll": "Accept All Changes", @@ -1665,6 +1678,7 @@ "DE.Views.Toolbar.textTabInsert": "Insert", "DE.Views.Toolbar.textTabLayout": "Layout", "DE.Views.Toolbar.textTabReview": "Review", + "DE.Views.Toolbar.textTabCollaboration": "Collaboration", "DE.Views.Toolbar.textTitleError": "Error", "DE.Views.Toolbar.textToCurrent": "To current position", "DE.Views.Toolbar.textTop": "Top: ", diff --git a/apps/documenteditor/main/resources/img/toolbar-menu.png b/apps/documenteditor/main/resources/img/toolbar-menu.png index c7d05082f..262b0d758 100644 Binary files a/apps/documenteditor/main/resources/img/toolbar-menu.png and b/apps/documenteditor/main/resources/img/toolbar-menu.png differ diff --git a/apps/documenteditor/main/resources/img/toolbar-menu@2x.png b/apps/documenteditor/main/resources/img/toolbar-menu@2x.png index c544741f9..d93c424e8 100644 Binary files a/apps/documenteditor/main/resources/img/toolbar-menu@2x.png and b/apps/documenteditor/main/resources/img/toolbar-menu@2x.png differ diff --git a/apps/documenteditor/main/resources/less/toolbar.less b/apps/documenteditor/main/resources/less/toolbar.less index 2ec7009c3..8f3718162 100644 --- a/apps/documenteditor/main/resources/less/toolbar.less +++ b/apps/documenteditor/main/resources/less/toolbar.less @@ -317,7 +317,7 @@ //.button-normal-icon(btn-text, 46, @toolbar-icon-size); //.button-normal-icon(btn-insertequation, 53, @toolbar-icon-size); //.button-normal-icon(btn-dropcap, 50, @toolbar-icon-size); -//.button-normal-icon(btn-ic-doclang, 67, @toolbar-icon-size); +.button-normal-icon(btn-ic-doclang, 67, @toolbar-icon-size); @menu-icon-size: 22px; .menu-icon-normal(mnu-wrap-inline, 0, @menu-icon-size); diff --git a/apps/presentationeditor/main/app.js b/apps/presentationeditor/main/app.js index 0cb25efb3..03d2bac45 100644 --- a/apps/presentationeditor/main/app.js +++ b/apps/presentationeditor/main/app.js @@ -155,6 +155,7 @@ require([ /** coauthoring end **/ ,'Common.Controllers.Plugins' ,'Common.Controllers.ExternalDiagramEditor' + ,'Common.Controllers.ReviewChanges' ] }); @@ -185,6 +186,7 @@ require([ 'common/main/lib/controller/Plugins', 'presentationeditor/main/app/view/ChartSettings', 'common/main/lib/controller/ExternalDiagramEditor' + ,'common/main/lib/controller/ReviewChanges' ], function() { app.start(); }); diff --git a/apps/presentationeditor/main/app/controller/LeftMenu.js b/apps/presentationeditor/main/app/controller/LeftMenu.js index 7f96d0fde..6540455fe 100644 --- a/apps/presentationeditor/main/app/controller/LeftMenu.js +++ b/apps/presentationeditor/main/app/controller/LeftMenu.js @@ -96,6 +96,9 @@ define([ 'hide': _.bind(this.onSearchDlgHide, this), 'search:back': _.bind(this.onQuerySearch, this, 'back'), 'search:next': _.bind(this.onQuerySearch, this, 'next') + }, + 'Common.Views.ReviewChanges': { + 'collaboration:chat': _.bind(this.onShowHideChat, this) } }); Common.NotificationCenter.on('leftmenu:change', _.bind(this.onMenuChange, this)); @@ -587,6 +590,18 @@ define([ } }, + onShowHideChat: function(state) { + if (this.mode.canCoAuthoring && this.mode.canChat && !this.mode.isLightVersion) { + if (state) { + Common.UI.Menu.Manager.hideAll(); + this.leftMenu.showMenu('chat'); + } else { + this.leftMenu.btnChat.toggle(false, true); + this.leftMenu.onBtnMenuClick(this.leftMenu.btnChat); + } + } + }, + textNoTextFound : 'Text not found', newDocumentTitle : 'Unnamed document', requestEditRightsText : 'Requesting editing rights...' diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index cc22aebe1..09eddb963 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -874,7 +874,8 @@ define([ application = this.getApplication(), toolbarController = application.getController('Toolbar'), rightmenuController = application.getController('RightMenu'), - fontsControllers = application.getController('Common.Controllers.Fonts'); + fontsControllers = application.getController('Common.Controllers.Fonts'), + reviewController = application.getController('Common.Controllers.ReviewChanges'); // me.getStore('SlideLayouts'); fontsControllers && fontsControllers.setApi(me.api); @@ -882,6 +883,8 @@ define([ rightmenuController && rightmenuController.setApi(me.api); + reviewController.setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); + var viewport = this.getApplication().getController('Viewport').getView('Viewport'); viewport.applyEditorMode(); diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js index 9ec7b044b..a16caa756 100644 --- a/apps/presentationeditor/main/app/controller/Toolbar.js +++ b/apps/presentationeditor/main/app/controller/Toolbar.js @@ -2071,6 +2071,15 @@ define([ } me.toolbar.render(_.extend({compactview: compactview}, config)); + + if ( config.isEdit ) { + var tab = {action: 'review', caption: me.toolbar.textTabCollaboration}; + var $panel = PE.getController('Common.Controllers.ReviewChanges').createToolbarPanel(); + + if ( $panel ) { + me.toolbar.addTab(tab, $panel, 3); + } + } }, onAppReady: function (config) { diff --git a/apps/presentationeditor/main/app/view/FileMenuPanels.js b/apps/presentationeditor/main/app/view/FileMenuPanels.js index 2c48c0270..363033366 100644 --- a/apps/presentationeditor/main/app/view/FileMenuPanels.js +++ b/apps/presentationeditor/main/app/view/FileMenuPanels.js @@ -665,6 +665,8 @@ define([ }); } + Common.NotificationCenter.on('collaboration:sharing', _.bind(this.changeAccessRights, this)); + return this; }, diff --git a/apps/presentationeditor/main/app/view/LeftMenu.js b/apps/presentationeditor/main/app/view/LeftMenu.js index 24b70ed54..cf850daf2 100644 --- a/apps/presentationeditor/main/app/view/LeftMenu.js +++ b/apps/presentationeditor/main/app/view/LeftMenu.js @@ -282,7 +282,7 @@ define([ } if (this.mode.canChat) { this.panelChat['hide'](); - this.btnChat.toggle(false, true); + this.btnChat.toggle(false); } } /** coauthoring end **/ diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index 212234db0..c4949e3c9 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -1841,7 +1841,8 @@ define([ textTabHome: 'Home', textTabInsert: 'Insert', textSurface: 'Surface', - textShowPresenterView: 'Show presenter view' + textShowPresenterView: 'Show presenter view', + textTabCollaboration: 'Collaboration' } }()), PE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app_dev.js b/apps/presentationeditor/main/app_dev.js index af1cdf9fa..36dbe9e3f 100644 --- a/apps/presentationeditor/main/app_dev.js +++ b/apps/presentationeditor/main/app_dev.js @@ -146,6 +146,7 @@ require([ /** coauthoring end **/ ,'Common.Controllers.Plugins' ,'Common.Controllers.ExternalDiagramEditor' + ,'Common.Controllers.ReviewChanges' ] }); @@ -176,6 +177,7 @@ require([ 'common/main/lib/controller/Plugins', 'presentationeditor/main/app/view/ChartSettings', 'common/main/lib/controller/ExternalDiagramEditor' + ,'common/main/lib/controller/ReviewChanges' ], function() { window.compareVersions = true; app.start(); diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 3d49815c3..ad785e97a 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -126,6 +126,45 @@ "Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.textName": "File name", "Common.Views.RenameDialog.txtInvalidName": "The file name cannot contain any of the following characters: ", + "Common.Views.ReviewChanges.hintNext": "To next change", + "Common.Views.ReviewChanges.hintPrev": "To previous change", + "Common.Views.ReviewChanges.tipAcceptCurrent": "Accept current change", + "Common.Views.ReviewChanges.tipRejectCurrent": "Reject current change", + "Common.Views.ReviewChanges.tipReview": "Track changes", + "Common.Views.ReviewChanges.tipReviewView": "Select the mode you want the changes to be displayed", + "Common.Views.ReviewChanges.tipSetDocLang": "Set document language", + "Common.Views.ReviewChanges.tipSetSpelling": "Spell checking", + "Common.Views.ReviewChanges.txtAccept": "Accept", + "Common.Views.ReviewChanges.txtAcceptAll": "Accept All Changes", + "Common.Views.ReviewChanges.txtAcceptChanges": "Accept changes", + "Common.Views.ReviewChanges.txtAcceptCurrent": "Accept Current Change", + "Common.Views.ReviewChanges.txtClose": "Close", + "Common.Views.ReviewChanges.txtDocLang": "Language", + "Common.Views.ReviewChanges.txtFinal": "All changes like accept (Preview)", + "Common.Views.ReviewChanges.txtMarkup": "Text with changes (Editing)", + "Common.Views.ReviewChanges.txtNext": "Next", + "Common.Views.ReviewChanges.txtOriginal": "Text without changes (Preview)", + "Common.Views.ReviewChanges.txtMarkupCap": "Markup", + "Common.Views.ReviewChanges.txtFinalCap": "Final", + "Common.Views.ReviewChanges.txtOriginalCap": "Original", + "Common.Views.ReviewChanges.txtPrev": "Previous", + "Common.Views.ReviewChanges.txtReject": "Reject", + "Common.Views.ReviewChanges.txtRejectAll": "Reject All Changes", + "Common.Views.ReviewChanges.txtRejectChanges": "Reject changes", + "Common.Views.ReviewChanges.txtRejectCurrent": "Reject Current Change", + "Common.Views.ReviewChanges.txtSpelling": "Spell Checking", + "Common.Views.ReviewChanges.txtTurnon": "Track Changes", + "Common.Views.ReviewChanges.txtView": "Display Mode", + "Common.Views.ReviewChanges.txtSharing": "Sharing", + "Common.Views.ReviewChanges.tipSharing": "Manage document access rights", + "Common.Views.ReviewChanges.txtCoAuthMode": "Co-editing Mode", + "Common.Views.ReviewChanges.tipCoAuthMode": "Set co-editing mode", + "Common.Views.ReviewChanges.strFast": "Fast", + "Common.Views.ReviewChanges.strStrict": "Strict", + "Common.Views.ReviewChanges.strFastDesc": "Real-time co-editing. All changes are saved automatically.", + "Common.Views.ReviewChanges.strStrictDesc": "Use the 'Save' button to sync the changes you and others make.", + "Common.Views.ReviewChanges.txtHistory": "Version History", + "Common.Views.ReviewChanges.tipHistory": "Show version history", "Common.Views.SignDialog.textTitle": "Sign Document", "Common.Views.SignDialog.textPurpose": "Purpose for signing this document", "Common.Views.SignDialog.textCertificate": "Certificate", @@ -1352,6 +1391,7 @@ "PE.Views.Toolbar.textTabFile": "File", "PE.Views.Toolbar.textTabHome": "Home", "PE.Views.Toolbar.textTabInsert": "Insert", + "PE.Views.Toolbar.textTabCollaboration": "Collaboration", "PE.Views.Toolbar.textTitleError": "Error", "PE.Views.Toolbar.textUnderline": "Underline", "PE.Views.Toolbar.textZoom": "Zoom", diff --git a/apps/presentationeditor/main/resources/img/toolbar-menu.png b/apps/presentationeditor/main/resources/img/toolbar-menu.png index 9e974f07a..13271481d 100644 Binary files a/apps/presentationeditor/main/resources/img/toolbar-menu.png and b/apps/presentationeditor/main/resources/img/toolbar-menu.png differ diff --git a/apps/presentationeditor/main/resources/img/toolbar-menu@2x.png b/apps/presentationeditor/main/resources/img/toolbar-menu@2x.png index 019642884..b6a317b03 100644 Binary files a/apps/presentationeditor/main/resources/img/toolbar-menu@2x.png and b/apps/presentationeditor/main/resources/img/toolbar-menu@2x.png differ diff --git a/apps/spreadsheeteditor/main/app.js b/apps/spreadsheeteditor/main/app.js index ce515d97f..8131b9fd2 100644 --- a/apps/spreadsheeteditor/main/app.js +++ b/apps/spreadsheeteditor/main/app.js @@ -160,6 +160,7 @@ require([ 'Common.Controllers.Chat', 'Common.Controllers.Comments', 'Common.Controllers.Plugins' + ,'Common.Controllers.ReviewChanges' ] }); @@ -191,6 +192,7 @@ require([ 'common/main/lib/controller/Comments', 'common/main/lib/controller/Chat', 'common/main/lib/controller/Plugins' + ,'common/main/lib/controller/ReviewChanges' ], function() { app.start(); }); diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index 7519e1fce..f652f2008 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -90,6 +90,9 @@ define([ 'search:next': _.bind(this.onQuerySearch, this, 'next'), 'search:replace': _.bind(this.onQueryReplace, this), 'search:replaceall': _.bind(this.onQueryReplaceAll, this) + }, + 'Common.Views.ReviewChanges': { + 'collaboration:chat': _.bind(this.onShowHideChat, this) } }); Common.NotificationCenter.on('app:comment:add', _.bind(this.onAppAddComment, this)); @@ -812,6 +815,18 @@ define([ menu.hide(); }, + onShowHideChat: function(state) { + if (this.mode.canCoAuthoring && this.mode.canChat && !this.mode.isLightVersion) { + if (state) { + Common.UI.Menu.Manager.hideAll(); + this.leftMenu.showMenu('chat'); + } else { + this.leftMenu.btnChat.toggle(false, true); + this.leftMenu.onBtnMenuClick(this.leftMenu.btnChat); + } + } + }, + textNoTextFound : 'Text not found', newDocumentTitle : 'Unnamed document', textItemEntireCell : 'Entire cell contents', diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 68bddf0f7..9e26a0058 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -943,7 +943,8 @@ define([ toolbarController = application.getController('Toolbar'), statusbarController = application.getController('Statusbar'), rightmenuController = application.getController('RightMenu'), - fontsControllers = application.getController('Common.Controllers.Fonts'); + fontsControllers = application.getController('Common.Controllers.Fonts'), + reviewController = application.getController('Common.Controllers.ReviewChanges'); fontsControllers && fontsControllers.setApi(me.api); toolbarController && toolbarController.setApi(me.api); @@ -951,6 +952,8 @@ define([ rightmenuController && rightmenuController.setApi(me.api); + reviewController.setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); + if (statusbarController) { statusbarController.getView('Statusbar').changeViewMode(true); } diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index a58b55878..c637e2d93 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -2926,11 +2926,18 @@ define([ if ( !config.isEditDiagram && !config.isEditMailMerge ) { var tab = {action: 'pivot', caption: me.textPivot}; var $panel = me.getApplication().getController('PivotTable').createToolbarPanel(); - if ( $panel ) { me.toolbar.addTab(tab, $panel, 3); me.toolbar.setVisible('pivot', true); } + + tab = {action: 'review', caption: me.toolbar.textTabCollaboration}; + $panel = SSE.getController('Common.Controllers.ReviewChanges').createToolbarPanel(); + + if ( $panel ) { + me.toolbar.addTab(tab, $panel, 4); + me.toolbar.setVisible('review', true); + } } }); }, diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index 173fdfdf6..6801af7d6 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -1119,6 +1119,8 @@ define([ }); } + Common.NotificationCenter.on('collaboration:sharing', _.bind(this.changeAccessRights, this)); + return this; }, diff --git a/apps/spreadsheeteditor/main/app/view/LeftMenu.js b/apps/spreadsheeteditor/main/app/view/LeftMenu.js index b39fa6412..2d1326f96 100644 --- a/apps/spreadsheeteditor/main/app/view/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/view/LeftMenu.js @@ -255,7 +255,7 @@ define([ } if (this.mode.canChat) { this.panelChat['hide'](); - this.btnChat.toggle(false, true); + this.btnChat.toggle(false); } } /** coauthoring end **/ diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 078143e7f..80640070f 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -2068,6 +2068,7 @@ define([ textTabHome: 'Home', textTabInsert: 'Insert', textSurface: 'Surface', - tipChangeChart: 'Change Chart Type' + tipChangeChart: 'Change Chart Type', + textTabCollaboration: 'Collaboration' }, SSE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app_dev.js b/apps/spreadsheeteditor/main/app_dev.js index cc88f835a..894287a0a 100644 --- a/apps/spreadsheeteditor/main/app_dev.js +++ b/apps/spreadsheeteditor/main/app_dev.js @@ -150,6 +150,7 @@ require([ 'Common.Controllers.Chat', 'Common.Controllers.Comments', 'Common.Controllers.Plugins' + ,'Common.Controllers.ReviewChanges' ] }); @@ -181,6 +182,7 @@ require([ 'common/main/lib/controller/Comments', 'common/main/lib/controller/Chat', 'common/main/lib/controller/Plugins' + ,'common/main/lib/controller/ReviewChanges' ], function() { window.compareVersions = true; app.start(); diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 2bd1ee1ce..6ee71c64a 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -112,6 +112,45 @@ "Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.textName": "File name", "Common.Views.RenameDialog.txtInvalidName": "The file name cannot contain any of the following characters: ", + "Common.Views.ReviewChanges.hintNext": "To next change", + "Common.Views.ReviewChanges.hintPrev": "To previous change", + "Common.Views.ReviewChanges.tipAcceptCurrent": "Accept current change", + "Common.Views.ReviewChanges.tipRejectCurrent": "Reject current change", + "Common.Views.ReviewChanges.tipReview": "Track changes", + "Common.Views.ReviewChanges.tipReviewView": "Select the mode you want the changes to be displayed", + "Common.Views.ReviewChanges.tipSetDocLang": "Set document language", + "Common.Views.ReviewChanges.tipSetSpelling": "Spell checking", + "Common.Views.ReviewChanges.txtAccept": "Accept", + "Common.Views.ReviewChanges.txtAcceptAll": "Accept All Changes", + "Common.Views.ReviewChanges.txtAcceptChanges": "Accept changes", + "Common.Views.ReviewChanges.txtAcceptCurrent": "Accept Current Change", + "Common.Views.ReviewChanges.txtClose": "Close", + "Common.Views.ReviewChanges.txtDocLang": "Language", + "Common.Views.ReviewChanges.txtFinal": "All changes like accept (Preview)", + "Common.Views.ReviewChanges.txtMarkup": "Text with changes (Editing)", + "Common.Views.ReviewChanges.txtNext": "Next", + "Common.Views.ReviewChanges.txtOriginal": "Text without changes (Preview)", + "Common.Views.ReviewChanges.txtMarkupCap": "Markup", + "Common.Views.ReviewChanges.txtFinalCap": "Final", + "Common.Views.ReviewChanges.txtOriginalCap": "Original", + "Common.Views.ReviewChanges.txtPrev": "Previous", + "Common.Views.ReviewChanges.txtReject": "Reject", + "Common.Views.ReviewChanges.txtRejectAll": "Reject All Changes", + "Common.Views.ReviewChanges.txtRejectChanges": "Reject changes", + "Common.Views.ReviewChanges.txtRejectCurrent": "Reject Current Change", + "Common.Views.ReviewChanges.txtSpelling": "Spell Checking", + "Common.Views.ReviewChanges.txtTurnon": "Track Changes", + "Common.Views.ReviewChanges.txtView": "Display Mode", + "Common.Views.ReviewChanges.txtSharing": "Sharing", + "Common.Views.ReviewChanges.tipSharing": "Manage document access rights", + "Common.Views.ReviewChanges.txtCoAuthMode": "Co-editing Mode", + "Common.Views.ReviewChanges.tipCoAuthMode": "Set co-editing mode", + "Common.Views.ReviewChanges.strFast": "Fast", + "Common.Views.ReviewChanges.strStrict": "Strict", + "Common.Views.ReviewChanges.strFastDesc": "Real-time co-editing. All changes are saved automatically.", + "Common.Views.ReviewChanges.strStrictDesc": "Use the 'Save' button to sync the changes you and others make.", + "Common.Views.ReviewChanges.txtHistory": "Version History", + "Common.Views.ReviewChanges.tipHistory": "Show version history", "Common.Views.SignDialog.textTitle": "Sign Document", "Common.Views.SignDialog.textPurpose": "Purpose for signing this document", "Common.Views.SignDialog.textCertificate": "Certificate", @@ -1694,6 +1733,7 @@ "SSE.Views.Toolbar.textTabFile": "File", "SSE.Views.Toolbar.textTabHome": "Home", "SSE.Views.Toolbar.textTabInsert": "Insert", + "SSE.Views.Toolbar.textTabCollaboration": "Collaboration", "SSE.Views.Toolbar.textTopBorders": "Top Borders", "SSE.Views.Toolbar.textUnderline": "Underline", "SSE.Views.Toolbar.textWinLossSpark": "Win/Loss", diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar-menu.png b/apps/spreadsheeteditor/main/resources/img/toolbar-menu.png index 2f165110c..86b28d397 100644 Binary files a/apps/spreadsheeteditor/main/resources/img/toolbar-menu.png and b/apps/spreadsheeteditor/main/resources/img/toolbar-menu.png differ diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar-menu@2x.png b/apps/spreadsheeteditor/main/resources/img/toolbar-menu@2x.png index 12c20e083..749fd5ca1 100644 Binary files a/apps/spreadsheeteditor/main/resources/img/toolbar-menu@2x.png and b/apps/spreadsheeteditor/main/resources/img/toolbar-menu@2x.png differ