From 43180c90eb5fa50da87bef9d82569be8d46310ca Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Mon, 7 Oct 2019 15:47:56 +0300 Subject: [PATCH 1/8] [all] sync info with desktop app --- apps/common/main/lib/controller/Desktop.js | 69 ++++++++++++++++++++-- build/Gruntfile.js | 2 +- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index ba7bd7336..bd53746e4 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -42,8 +42,10 @@ define([ 'use strict'; var Desktop = function () { - var config = {}; - var app = window.AscDesktopEditor; + var config = {version:'{{PRODUCT_VERSION}}'}; + var app = window.AscDesktopEditor, + webapp = window.DE || window.PE || window.SSE; + var titlebuttons; if ( !!app ) { window.on_native_message = function (cmd, param) { @@ -83,15 +85,54 @@ define([ } } else if (/editor:config/.test(cmd)) { - if ( param == 'request' ) - app.execCommand('editor:config', JSON.stringify({user: config.user, 'extraleft': $('#box-document-title #slot-btn-dt-save').parent().width()})); + if ( param == 'request' ) { + var opts = { + user: config.user, + title: { buttons: [] } + }; + + var header = webapp.getController('Viewport').getView('Common.Views.Header'); + if ( header ) { + for (var i in titlebuttons) { + opts.title.buttons.push(_serializeHeaderButton(i, titlebuttons[i])); + } + } + + app.execCommand('editor:config', JSON.stringify(opts)); + } + } else + if (/button:click/.test(cmd)) { + var obj = JSON.parse(param); + if ( !!obj.action ) { + // TODO: add method 'click' to button + titlebuttons[obj.action].btn.cmpEl.trigger({type:'click',which:1}); + } } }; - app.execCommand('webapps:events', 'loading'); - app.execCommand('window:features', 'request'); + // app.execCommand('webapps:events', 'loading'); + // app.execCommand('window:features', {version: config.version, action: 'request'}); + app.execCommand('webapps:features', {version: config.version, eventloading:true, titlebuttons:true}); } + var _serializeHeaderButton = function(action, config) { + var attr = config.btn.$el.find('.icon use').attr('xlink:href'); + var svgstr = '' + $(attr).html().replace(/'; + return { + icon: 'svg://' + btoa(svgstr), + action: action, + width: config.btn.$el.width(), + height: config.btn.$el.height(), + hint: config.btn.options.hint, + disabled: config.disabled + }; + }; + + var _onTitleButtonDasabled = function (action, e, status) { + titlebuttons[action].disabled = status; + app.execCommand('title:changed', JSON.stringify({'button':action, 'disabled':status})); + }; + return { init: function (opts) { _.extend(config, opts); @@ -112,6 +153,22 @@ define([ if ( config.canUndock ) { Common.NotificationCenter.trigger('app:config', {canUndock: true}); } + + var header = webapp.getController('Viewport').getView('Common.Views.Header'); + titlebuttons = { + 'save': {btn: header.btnSave, disabled:false}, + 'print': {btn: header.btnPrint, disabled:false}, + 'undo': {btn: header.btnUndo, disabled:false}, + 'redo': {btn: header.btnRedo, disabled:false} + }; + + var toolbar = webapp.getController('Toolbar').getView(); + if ( toolbar ) { + toolbar.btnUndo.on('disabled', _onTitleButtonDasabled.bind(this, 'undo')); + toolbar.btnRedo.on('disabled', _onTitleButtonDasabled.bind(this, 'redo')); + toolbar.btnSave.on('disabled', _onTitleButtonDasabled.bind(this, 'save')); + toolbar.btnPrint.on('disabled', _onTitleButtonDasabled.bind(this, 'print')); + } }); } }, diff --git a/build/Gruntfile.js b/build/Gruntfile.js index ff4862b6b..464b03a3c 100644 --- a/build/Gruntfile.js +++ b/build/Gruntfile.js @@ -231,7 +231,7 @@ module.exports = function(grunt) { src: ['<%= pkg.main.js.requirejs.options.out %>'], overwrite: true, replacements: [{ - from: /\{\{PRODUCT_VERSION\}\}/, + from: /\{\{PRODUCT_VERSION\}\}/g, to: packageFile.version }] }, From af1cb7884069158c64f0d8a96133549d8fce263a Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 30 Oct 2019 16:29:27 +0300 Subject: [PATCH 2/8] [desktop] doesn't serialize button's icon info --- apps/common/main/lib/controller/Desktop.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index bd53746e4..2da442abe 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -116,10 +116,7 @@ define([ } var _serializeHeaderButton = function(action, config) { - var attr = config.btn.$el.find('.icon use').attr('xlink:href'); - var svgstr = '' + $(attr).html().replace(/'; return { - icon: 'svg://' + btoa(svgstr), action: action, width: config.btn.$el.width(), height: config.btn.$el.height(), From 9e24e71941b36ecbc5e1903ae3a34deffd8ca081 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 30 Oct 2019 16:30:43 +0300 Subject: [PATCH 3/8] [desktop] bind to modal dailog show/hide events --- apps/common/main/lib/controller/Desktop.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index 2da442abe..8487c8793 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -127,7 +127,22 @@ define([ var _onTitleButtonDasabled = function (action, e, status) { titlebuttons[action].disabled = status; - app.execCommand('title:changed', JSON.stringify({'button':action, 'disabled':status})); + var _buttons = {}; + _buttons[action] = status; + app.execCommand('title:button', JSON.stringify({disabled: _buttons})); + }; + + var _onModalDialog = function (status) { + if ( status == 'open' ) { + app.execCommand('title:button', JSON.stringify({disabled: {'all':true}})); + } else { + var _buttons = {}; + for (var i in titlebuttons) { + _buttons[i] = titlebuttons[i].disabled; + } + + app.execCommand('title:button', JSON.stringify({'disabled': _buttons})); + } }; return { @@ -167,6 +182,11 @@ define([ toolbar.btnPrint.on('disabled', _onTitleButtonDasabled.bind(this, 'print')); } }); + + Common.NotificationCenter.on({ + 'modal:show': _onModalDialog.bind(this, 'open'), + 'modal:close': _onModalDialog.bind(this, 'close') + }); } }, process: function (opts) { From 15431b1eae9c06f5d5c4b0a9e67dcb82f5a3e8fa Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 30 Oct 2019 16:31:52 +0300 Subject: [PATCH 4/8] [common] repaire icons svg --- apps/common/main/resources/img/header/buttons.svg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/common/main/resources/img/header/buttons.svg b/apps/common/main/resources/img/header/buttons.svg index b808b1cb7..babf11d3a 100644 --- a/apps/common/main/resources/img/header/buttons.svg +++ b/apps/common/main/resources/img/header/buttons.svg @@ -21,8 +21,8 @@ - - + + @@ -30,9 +30,9 @@ c0.391,0.391,0.391,1.023,0,1.414L15.273,8.598z"/> - - - + + + From a0616e8f17815d79ee9772a020fab1c3ce4a3c1d Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Tue, 5 Nov 2019 15:17:48 +0300 Subject: [PATCH 5/8] [common] refactoring --- apps/common/main/lib/component/Button.js | 7 +++++++ apps/common/main/lib/controller/Desktop.js | 15 +++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index e097848f9..d46abf97d 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -573,6 +573,13 @@ define([ this.trigger('toggle', this, state); }, + click: function(opts) { + if ( !this.disabled ) { + this.doToggle(); + this.trigger('click', this, opts); + } + }, + isActive: function() { if (this.enableToggle) return this.pressed; diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index 8487c8793..2afe820fe 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -104,13 +104,11 @@ define([ if (/button:click/.test(cmd)) { var obj = JSON.parse(param); if ( !!obj.action ) { - // TODO: add method 'click' to button - titlebuttons[obj.action].btn.cmpEl.trigger({type:'click',which:1}); + titlebuttons[obj.action].btn.click(); } } }; - // app.execCommand('webapps:events', 'loading'); // app.execCommand('window:features', {version: config.version, action: 'request'}); app.execCommand('webapps:features', {version: config.version, eventloading:true, titlebuttons:true}); } @@ -125,7 +123,7 @@ define([ }; }; - var _onTitleButtonDasabled = function (action, e, status) { + var _onTitleButtonDisabled = function (action, e, status) { titlebuttons[action].disabled = status; var _buttons = {}; _buttons[action] = status; @@ -174,12 +172,9 @@ define([ 'redo': {btn: header.btnRedo, disabled:false} }; - var toolbar = webapp.getController('Toolbar').getView(); - if ( toolbar ) { - toolbar.btnUndo.on('disabled', _onTitleButtonDasabled.bind(this, 'undo')); - toolbar.btnRedo.on('disabled', _onTitleButtonDasabled.bind(this, 'redo')); - toolbar.btnSave.on('disabled', _onTitleButtonDasabled.bind(this, 'save')); - toolbar.btnPrint.on('disabled', _onTitleButtonDasabled.bind(this, 'print')); + for (var i in titlebuttons) { + titlebuttons[i].btn.options.signals = ['disabled']; + titlebuttons[i].btn.on('disabled', _onTitleButtonDisabled.bind(this, i)); } }); From a72d14d421757af55fe8464c44dd994131b9cabc Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Tue, 5 Nov 2019 15:28:33 +0300 Subject: [PATCH 6/8] [desktop] send 'save' button changed icon --- apps/common/main/lib/component/Button.js | 18 ++++++++++++++++++ apps/common/main/lib/controller/Desktop.js | 18 ++++++++++++++++-- apps/common/main/lib/view/Header.js | 2 +- apps/documenteditor/main/app/view/Toolbar.js | 11 +++++------ 4 files changed, 40 insertions(+), 9 deletions(-) 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; } From e8a746ab37fffc479f1018479a4e130f0078bfd9 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 6 Nov 2019 16:50:12 +0300 Subject: [PATCH 7/8] [component] refactoring --- apps/common/main/lib/component/Button.js | 4 ++-- apps/documenteditor/main/app/view/Toolbar.js | 10 +++++----- apps/presentationeditor/main/app/view/Toolbar.js | 10 +++++----- apps/spreadsheeteditor/main/app/view/Toolbar.js | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index 936ea7eeb..774de1cde 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -650,8 +650,8 @@ define([ changeIcon: function(opts) { var me = this; - if ( opts && (opts.prev || opts.next)) { - !!opts.prev && (me.$icon.removeClass(opts.prev)); + if ( opts && (opts.curr || opts.next)) { + !!opts.curr && (me.$icon.removeClass(opts.curr)); !!opts.next && !me.$icon.hasClass(opts.next) && (me.$icon.addClass(opts.next)); if ( !!me.options.signals ) { diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index d5bb63c36..651dd6373 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.changeIcon({prev:this.btnSaveCls, next:'btn-synch'}); + this.btnCollabChanges.changeIcon({curr: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.isIcon('btn-synch') ) { - me.btnCollabChanges.changeIcon({prev:'btn-synch', next:me.btnSaveCls}); + if ( me.btnCollabChanges.hasIcon('btn-synch') ) { + me.btnCollabChanges.changeIcon({curr:'btn-synch', next:me.btnSaveCls}); if (this.synchTooltip) this.synchTooltip.hide(); this.btnCollabChanges.updateHint(this.btnSaveTip); @@ -2086,8 +2086,8 @@ 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.isIcon('btn-synch') ) { - me.btnCollabChanges.changeIcon({prev:me.btnSaveCls, next:cls}); + if ( !me.btnCollabChanges.hasIcon('btn-synch') ) { + me.btnCollabChanges.changeIcon({curr:me.btnSaveCls, next:cls}); me.btnCollabChanges.updateHint(me.btnSaveTip); } me.btnSaveCls = cls; diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index ee4c99e5c..50044986b 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -1340,7 +1340,7 @@ define([ } this._state.hasCollaborativeChanges = true; - this.btnCollabChanges.$icon.removeClass(this.btnSaveCls).addClass('btn-synch'); + this.btnCollabChanges.changeIcon({curr:this.btnSaveCls, next:'btn-synch'}); if (this.showSynchTip) { this.btnCollabChanges.updateHint(''); if (this.synchTooltip === undefined) @@ -1376,8 +1376,8 @@ define([ if (this.btnCollabChanges.rendered) { var me = this; - if ( me.btnCollabChanges.$icon.hasClass('btn-synch') ) { - me.btnCollabChanges.$icon.removeClass('btn-synch').addClass(this.btnSaveCls); + if ( me.btnCollabChanges.hasIcon('btn-synch') ) { + me.btnCollabChanges.changeIcon({curr:'btn-synch', next:this.btnSaveCls}); if (this.synchTooltip) this.synchTooltip.hide(); this.btnCollabChanges.updateHint(this.btnSaveTip); @@ -1400,8 +1400,8 @@ define([ if (cls !== this.btnSaveCls && this.btnCollabChanges.rendered) { this.btnSaveTip = ((length > 1) ? this.tipSaveCoauth : this.tipSave ) + Common.Utils.String.platformKey('Ctrl+S'); - if ( !this.btnCollabChanges.$icon.hasClass('btn-synch') ) { - this.btnCollabChanges.$icon.removeClass(this.btnSaveCls).addClass(cls); + if ( !this.btnCollabChanges.hasIcon('btn-synch') ) { + this.btnCollabChanges.changeIcon({curr: this.btnSaveCls, next:cls}); this.btnCollabChanges.updateHint(this.btnSaveTip); } this.btnSaveCls = cls; diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 14173f21d..eb15a39e6 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -2103,7 +2103,7 @@ define([ } this._state.hasCollaborativeChanges = true; - this.btnCollabChanges.$icon.removeClass(this.btnSaveCls).addClass('btn-synch'); + this.btnCollabChanges.changeIcon({curr:this.btnSaveCls,next:'btn-synch'}); if (this.showSynchTip){ this.btnCollabChanges.updateHint(''); @@ -2140,8 +2140,8 @@ define([ if (this.btnCollabChanges.rendered) { var me = this; - if ( me.btnCollabChanges.$icon.hasClass('btn-synch') ) { - me.btnCollabChanges.$icon.removeClass('btn-synch').addClass(this.btnSaveCls); + if ( me.btnCollabChanges.hasIcon('btn-synch') ) { + me.btnCollabChanges.changeIcon({curr:'btn-synch',next:this.btnSaveCls}); if (this.synchTooltip) this.synchTooltip.hide(); this.btnCollabChanges.updateHint(this.btnSaveTip); @@ -2164,8 +2164,8 @@ define([ if (cls !== this.btnSaveCls && this.btnCollabChanges.rendered) { this.btnSaveTip = ((length>1) ? this.tipSaveCoauth : this.tipSave )+ Common.Utils.String.platformKey('Ctrl+S'); - if ( !this.btnCollabChanges.$icon.hasClass('btn-synch') ) { - this.btnCollabChanges.$icon.removeClass(this.btnSaveCls).addClass(cls); + if ( !this.btnCollabChanges.hasIcon('btn-synch') ) { + this.btnCollabChanges.changeIcon({curr:this.btnSaveCls, next:cls}); this.btnCollabChanges.updateHint(this.btnSaveTip); } this.btnSaveCls = cls; From 7141304b4e73de0e7250daca3d923337d3f11891 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 6 Nov 2019 16:55:02 +0300 Subject: [PATCH 8/8] [desktop] keep early requests for 'desktop' plugin --- apps/common/main/lib/controller/Desktop.js | 38 ++++++++++++++----- apps/documenteditor/main/index.html.deploy | 7 ++++ .../presentationeditor/main/index.html.deploy | 7 ++++ apps/spreadsheeteditor/main/index.html.deploy | 7 ++++ 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/apps/common/main/lib/controller/Desktop.js b/apps/common/main/lib/controller/Desktop.js index 8b4481f5e..41fa95d7c 100644 --- a/apps/common/main/lib/controller/Desktop.js +++ b/apps/common/main/lib/controller/Desktop.js @@ -91,19 +91,26 @@ define([ } else if (/editor:config/.test(cmd)) { if ( param == 'request' ) { - var opts = { - user: config.user, - title: { buttons: [] } - }; + if ( !!titlebuttons ) { + var opts = { + user: config.user, + title: { buttons: [] } + }; - var header = webapp.getController('Viewport').getView('Common.Views.Header'); - if ( header ) { - for (var i in titlebuttons) { - opts.title.buttons.push(_serializeHeaderButton(i, titlebuttons[i])); + var header = webapp.getController('Viewport').getView('Common.Views.Header'); + if ( header ) { + for (var i in titlebuttons) { + opts.title.buttons.push(_serializeHeaderButton(i, titlebuttons[i])); + } + } + + app.execCommand('editor:config', JSON.stringify(opts)); + } else + if ( !config.callback_editorconfig ) { + config.callback_editorconfig = function() { + setTimeout(function(){window.on_native_message(cmd, param);},0); } } - - app.execCommand('editor:config', JSON.stringify(opts)); } } else if (/button:click/.test(cmd)) { @@ -114,6 +121,12 @@ define([ } }; + if ( !!window.native_message_cmd ) { + for ( var c in window.native_message_cmd ) { + window.on_native_message(c, window.native_message_cmd[c]); + } + } + // app.execCommand('window:features', {version: config.version, action: 'request'}); app.execCommand('webapps:features', {version: config.version, eventloading:true, titlebuttons:true}); } @@ -190,6 +203,11 @@ define([ var iconname = /\s?([^\s]+)$/.exec(titlebuttons.save.btn.$icon.attr('class')); !!iconname && iconname.length && (titlebuttons.save.icon = btnsave_icons[iconname]); + + if ( !!config.callback_editorconfig ) { + config.callback_editorconfig(); + delete config.callback_editorconfig; + } }); Common.NotificationCenter.on({ diff --git a/apps/documenteditor/main/index.html.deploy b/apps/documenteditor/main/index.html.deploy index 5a11eb7c6..8bb439d43 100644 --- a/apps/documenteditor/main/index.html.deploy +++ b/apps/documenteditor/main/index.html.deploy @@ -212,6 +212,13 @@ logo = params["headerlogo"] ? encodeUrlParam(params["headerlogo"]) : null; window.frameEditorId = params["frameEditorId"]; + + if ( window.AscDesktopEditor ) { + window.on_native_message = function (cmd, param) { + !window.native_message_cmd && (window.native_message_cmd = []); + window.native_message_cmd[cmd] = param; + } + } diff --git a/apps/presentationeditor/main/index.html.deploy b/apps/presentationeditor/main/index.html.deploy index 5225cc248..56d2c45a2 100644 --- a/apps/presentationeditor/main/index.html.deploy +++ b/apps/presentationeditor/main/index.html.deploy @@ -249,6 +249,13 @@ logo = params["headerlogo"] ? encodeUrlParam(params["headerlogo"]) : null; window.frameEditorId = params["frameEditorId"]; + + if ( window.AscDesktopEditor ) { + window.on_native_message = function (cmd, param) { + !window.native_message_cmd && (window.native_message_cmd = []); + window.native_message_cmd[cmd] = param; + } + } diff --git a/apps/spreadsheeteditor/main/index.html.deploy b/apps/spreadsheeteditor/main/index.html.deploy index e8e17a25b..c112c666e 100644 --- a/apps/spreadsheeteditor/main/index.html.deploy +++ b/apps/spreadsheeteditor/main/index.html.deploy @@ -227,6 +227,13 @@ logo = params["headerlogo"] ? encodeUrlParam(params["headerlogo"]) : null; window.frameEditorId = params["frameEditorId"]; + + if ( window.AscDesktopEditor ) { + window.on_native_message = function (cmd, param) { + !window.native_message_cmd && (window.native_message_cmd = []); + window.native_message_cmd[cmd] = param; + } + }