diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index d46abf97d..936ea7eeb 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -648,6 +648,24 @@ define([ btnIconEl.addClass(cls || ''); }, + changeIcon: function(opts) { + var me = this; + if ( opts && (opts.prev || opts.next)) { + !!opts.prev && (me.$icon.removeClass(opts.prev)); + !!opts.next && !me.$icon.hasClass(opts.next) && (me.$icon.addClass(opts.next)); + + if ( !!me.options.signals ) { + if ( !(me.options.signals.indexOf('icon:changed') < 0) ) { + me.trigger('icon:changed', me, opts); + } + } + } + }, + + hasIcon: function(iconcls) { + return this.$icon.hasClass(iconcls); + }, + setVisible: function(visible) { if (this.cmpEl) this.cmpEl.toggleClass('hidden', !visible); this.visible = visible; diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index 2afe820fe..8b4481f5e 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -46,6 +46,11 @@ define([ var app = window.AscDesktopEditor, webapp = window.DE || window.PE || window.SSE; var titlebuttons; + var btnsave_icons = { + 'btn-save': 'save', + 'btn-save-coauth': 'coauth', + 'btn-synch': 'synch' }; + if ( !!app ) { window.on_native_message = function (cmd, param) { @@ -116,8 +121,7 @@ define([ var _serializeHeaderButton = function(action, config) { return { action: action, - width: config.btn.$el.width(), - height: config.btn.$el.height(), + icon: config.icon || undefined, hint: config.btn.options.hint, disabled: config.disabled }; @@ -130,6 +134,10 @@ define([ app.execCommand('title:button', JSON.stringify({disabled: _buttons})); }; + var _onSaveIconChanged = function (e, opts) { + app.execCommand('title:button', JSON.stringify({'icon:changed': {'save': btnsave_icons[opts.next]}})); + }; + var _onModalDialog = function (status) { if ( status == 'open' ) { app.execCommand('title:button', JSON.stringify({disabled: {'all':true}})); @@ -176,6 +184,12 @@ define([ titlebuttons[i].btn.options.signals = ['disabled']; titlebuttons[i].btn.on('disabled', _onTitleButtonDisabled.bind(this, i)); } + + header.btnSave.options.signals.push('icon:changed'); + header.btnSave.on('icon:changed', _onSaveIconChanged.bind(this)); + + var iconname = /\s?([^\s]+)$/.exec(titlebuttons.save.btn.$icon.attr('class')); + !!iconname && iconname.length && (titlebuttons.save.icon = btnsave_icons[iconname]); }); Common.NotificationCenter.on({ diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js index 0e2a7619d..822a1a754 100644 --- a/apps/common/main/lib/view/Header.js +++ b/apps/common/main/lib/view/Header.js @@ -527,7 +527,7 @@ define([ me.btnRedo = createTitleButton('svg-btn-redo', $html.findById('#slot-btn-dt-redo'), true); if ( me.btnSave.$icon.is('svg') ) { - me.btnSave.$icon.addClass('icon-save'); + me.btnSave.$icon.addClass('icon-save btn-save'); var _create_use = function (extid, intid) { var _use = document.createElementNS('http://www.w3.org/2000/svg', 'use'); _use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', extid); diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index acdb1b86a..d5bb63c36 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -2025,7 +2025,7 @@ define([ } this._state.hasCollaborativeChanges = true; - this.btnCollabChanges.$icon.removeClass(this.btnSaveCls).addClass('btn-synch'); + this.btnCollabChanges.changeIcon({prev:this.btnSaveCls, next:'btn-synch'}); if (this.showSynchTip) { this.btnCollabChanges.updateHint(''); if (this.synchTooltip === undefined) @@ -2061,8 +2061,8 @@ define([ if ( !this._state.previewmode && this.btnCollabChanges.rendered ) { var me = this; - if ( me.btnCollabChanges.$icon.hasClass('btn-synch') ) { - me.btnCollabChanges.$icon.removeClass('btn-synch').addClass(me.btnSaveCls); + if ( me.btnCollabChanges.isIcon('btn-synch') ) { + me.btnCollabChanges.changeIcon({prev:'btn-synch', next:me.btnSaveCls}); if (this.synchTooltip) this.synchTooltip.hide(); this.btnCollabChanges.updateHint(this.btnSaveTip); @@ -2086,10 +2086,9 @@ define([ if ( cls !== me.btnSaveCls && me.btnCollabChanges.rendered ) { me.btnSaveTip = ((length > 1) ? me.tipSaveCoauth : me.tipSave ) + Common.Utils.String.platformKey('Ctrl+S'); - if ( !me.btnCollabChanges.$icon.hasClass('btn-synch') ) { - me.btnCollabChanges.$icon.removeClass(me.btnSaveCls).addClass(cls); + if ( !me.btnCollabChanges.isIcon('btn-synch') ) { + me.btnCollabChanges.changeIcon({prev:me.btnSaveCls, next:cls}); me.btnCollabChanges.updateHint(me.btnSaveTip); - } me.btnSaveCls = cls; }