diff --git a/Readme.md b/Readme.md index 1c936b3db8..a80eb6aea5 100644 --- a/Readme.md +++ b/Readme.md @@ -1,27 +1,104 @@ [![License](https://img.shields.io/badge/License-GNU%20AGPL%20V3-green.svg?style=flat)](https://www.gnu.org/licenses/agpl-3.0.en.html) -## web-apps +# web-apps The frontend for [ONLYOFFICE Document Server][2] and [ONLYOFFICE Desktop Editors](https://github.com/ONLYOFFICE/DesktopEditors). Builds the program interface and allows the user create, edit, save and export text documents, spreadsheets, and presentations. -## Previous versions - -Until 2019-10-23 the repository was called web-apps-pro. - ## Project information Official website: [https://www.onlyoffice.com/](https://www.onlyoffice.com "https://www.onlyoffice.com") Code repository: [https://github.com/ONLYOFFICE/web-apps](https://github.com/ONLYOFFICE/web-apps "https://github.com/ONLYOFFICE/web-apps") -## User feedback and support +# Onlyoffice + +R&D document: [https://docs.google.com/document/d/1AoNY1s_5eRTxvwHdlS2DcYon70tfvbj24eQNgXkc0Qs/edit#heading=h.l4dgzjogzgry](https://docs.google.com/document/d/1AoNY1s_5eRTxvwHdlS2DcYon70tfvbj24eQNgXkc0Qs/edit#heading=h.l4dgzjogzgry "https://docs.google.com/document/d/1AoNY1s_5eRTxvwHdlS2DcYon70tfvbj24eQNgXkc0Qs/edit#heading=h.l4dgzjogzgry") + +## How to change the source code of the document editor? +For changing source code, need to setup development environment with using powershell (x86) +https://github.com/ONLYOFFICE/build_tools/tree/master/develop + +Here we will change the web-apps repository for updating editor options. + +## How to compile ONLYOFFICE Docs for a local server? +https://helpcenter.onlyoffice.com/installation/docs-community-compile.aspx + +Require os is 64-bit Ubuntu 16.04 + +# How to compile only web-app and deploy only documenteditor changes (in use) + +1. For compile web-app, require sdkjs repository. So clone the repository beside the current repository + + ``` + cd .. + git clone https://github.com/ONLYOFFICE/sdkjs.git + ``` + +2. Make sure the version of the document editor is match with live document server version. + + - Check the current version of the document editor to follow the below link. + ``` + // current: /web-apps/apps/documenteditor/main/app.js + // live: https://asc.docs.onlyoffice.com/web-apps/apps/documenteditor/main/app.js + + * Copyright (c) Ascensio System SIA 2023. All rights reserved + * + * http://www.onlyoffice.com + * + * Version: 7.5.1 (build:23) + */ + ``` + - Here you get two things, Version and build number. These both things to update in here. Set Version number with same value but build number use with 1 decrease, because it will be automatically increase during build. + ``` + // path: /build/documenteditor.json + + "version": "7.5.1", + "build": 22, + ``` + +3. Now, ready to start build process using following commands. Run one by one + + ``` + cd build + ./sprites.sh + npm install + grunt + ``` + After the process, you notice that some files are changed and some new files are created. Don't commit those files to repo. + +4. Once the process is completed, `deploy` folder generated on root. Now we are ready to move the documenteditor to production server + ``` + local path: deploy/web-apps/apps/documenteditor/ + + server path: /repos/OnlyOffice/deploy/web-apps/apps/documenteditor/ + ``` + Deployment is done. Now you can change the change on live + + +### If it is first time, then you have to change the docker command for start document server -If you have any problems with or questions about [ONLYOFFICE Document Server][2], please visit our official forum: [forum.onlyoffice.com][1] or you can ask and answer ONLYOFFICE development questions on [Stack Overflow][3]. +``` +sudo docker run -i -t -d -p :80 --restart=always \ + -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \ + -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \ + -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \ + -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql \ + -v /repos/OnlyOffice/deploy/web-apps/apps/documenteditor/:/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/ \ + -e JWT_SECRET= onlyoffice/documentserver:7.5.1 +``` - [1]: https://forum.onlyoffice.com - [2]: https://github.com/ONLYOFFICE/DocumentServer - [3]: http://stackoverflow.com/questions/tagged/onlyoffice -## License +#### If you have already docker, then remove it first and create new as above -web-apps is released under an GNU AGPL v3.0 license. See the LICENSE file for more information. +1. Show the list of docker containers, get the name of container for next process + ``` + docker ps -a + ``` +2. Stop the container + ``` + docker container stop + ``` +3. Remove old container + ``` + docker rm + ``` \ No newline at end of file diff --git a/apps/common/main/lib/component/ComboBox.js b/apps/common/main/lib/component/ComboBox.js index 408395e489..e7865861b1 100644 --- a/apps/common/main/lib/component/ComboBox.js +++ b/apps/common/main/lib/component/ComboBox.js @@ -48,746 +48,869 @@ * */ -if (Common === undefined) - var Common = {}; +if (Common === undefined) var Common = {}; define([ - 'common/main/lib/component/BaseView', - 'common/main/lib/component/Scroller' + "common/main/lib/component/BaseView", + "common/main/lib/component/Scroller", ], function () { - 'use strict'; - - Common.UI.ComboBoxModel = Backbone.Model.extend({ - defaults: function() { - return { - id: Common.UI.getId(), - value: null, - displayValue: null + "use strict"; + + Common.UI.ComboBoxModel = Backbone.Model.extend({ + defaults: function () { + return { + id: Common.UI.getId(), + value: null, + displayValue: null, + }; + }, + }); + + Common.UI.ComboBoxStore = Backbone.Collection.extend({ + model: Common.UI.ComboBoxModel, + }); + + Common.UI.ComboBox = Common.UI.BaseView.extend( + (function () { + return { + options: { + id: null, + cls: "", + style: "", + hint: false, + editable: true, + disabled: false, + menuCls: "", + menuStyle: "", + restoreMenuHeight: true, + displayField: "displayValue", + valueField: "value", + value: null, + search: false, + placeHolder: "test", + scrollAlwaysVisible: false, + takeFocusOnClose: false, + dataHint: "", + dataHintDirection: "", + dataHintOffset: "", + }, + + template: _.template( + [ + '', + '', + '", + '", + "", + ].join("") + ), + + initialize: function (options) { + Common.UI.BaseView.prototype.initialize.call(this, options); + Common.localStorage.setItem("options", JSON.stringify(options)); + var me = this; + + this.id = me.options.id || Common.UI.getId(); + this.cls = me.options.cls; + this.style = me.options.style; + this.menuCls = me.options.menuCls; + this.menuStyle = me.options.menuStyle; + this.template = me.options.template || me.template; + this.itemsTemplate = me.options.itemsTemplate; + this.hint = me.options.hint; + this.editable = me.options.editable; + this.disabled = me.options.disabled; + this.store = me.options.store || new Common.UI.ComboBoxStore(); + this.displayField = me.options.displayField; + this.valueField = me.options.valueField; + this.value = me.options.value; + this.placeHolder = me.options.placeHolder; + this.search = me.options.search; + this.scrollAlwaysVisible = me.options.scrollAlwaysVisible; + this.focusWhenNoSelection = me.options.focusWhenNoSelection !== false; + + this.restoreMenuHeight = me.options.restoreMenuHeight; + + me.rendered = me.options.rendered || false; + this.lastValue = null; + + me.store.add(me.options.data); + + if (me.options.el) { + me.render(); + } + }, + + render: function (parentEl) { + var me = this; + + if (!me.rendered) { + var items = this.store.toJSON(); + this.cmpEl = $( + this.template({ + id: this.id, + cls: this.cls, + style: this.style, + menuCls: this.menuCls, + menuStyle: this.menuStyle, + items: items, + scope: me, + placeHolder: this.placeHolder, + value: this.value, + dataHint: this.options.dataHint, + dataHintDirection: this.options.dataHintDirection, + dataHintOffset: this.options.dataHintOffset, + isRTL: Common.UI.isRTL(), + }) + ); + if (this.itemsTemplate) + this.cmpEl.find("ul").html( + $( + this.itemsTemplate({ + items: items, + scope: me, + }) + ) + ); + + if (parentEl) { + this.setElement(parentEl, false); + parentEl.html(this.cmpEl); + } else { + this.$el.html(this.cmpEl); + } + } else { + this.cmpEl = me.$el || $(this.el); + } + + if (!me.rendered) { + var el = this.cmpEl; + + this._input = el.find("input"); + this._button = el.find(".btn"); + + el.on("click", "a", _.bind(this.itemClicked, this)); + el.on("mousedown", "a", _.bind(this.itemMouseDown, this)); + + if (this.editable) { + el.on("change", "input", _.bind(this.onInputChanged, this)); + el.on("input", "input", _.bind(this.onInputChanging, this)); + el.on("keydown", "input", _.bind(this.onInputKeyDown, this)); + el.on("focusin", "input", _.bind(this.onInputFocusIn, this)); + el.on( + "click", + ".form-control", + _.bind(this.onEditableInputClick, this) + ); + } else { + el.on("click", ".form-control", _.bind(this.onInputClick, this)); + this._input.attr("readonly", "readonly"); + this._input.attr("data-can-copy", false); + this._input.on("mousedown", function (e) { + e.preventDefault(); + }); } - } - }); - - Common.UI.ComboBoxStore = Backbone.Collection.extend({ - model: Common.UI.ComboBoxModel - }); - - Common.UI.ComboBox = Common.UI.BaseView.extend((function() { - return { - options : { - id : null, - cls : '', - style : '', - hint : false, - editable : true, - disabled : false, - menuCls : '', - menuStyle : '', - restoreMenuHeight: true, - displayField: 'displayValue', - valueField : 'value', - search : false, - placeHolder : '', - scrollAlwaysVisible: false, - takeFocusOnClose: false, - dataHint: '', - dataHintDirection: '', - dataHintOffset: '' - }, - - template: _.template([ - '', - '', - '', - '', - '' - ].join('')), - - initialize : function(options) { - Common.UI.BaseView.prototype.initialize.call(this, options); - - var me = this; - - this.id = me.options.id || Common.UI.getId(); - this.cls = me.options.cls; - this.style = me.options.style; - this.menuCls = me.options.menuCls; - this.menuStyle = me.options.menuStyle; - this.template = me.options.template || me.template; - this.itemsTemplate = me.options.itemsTemplate; - this.hint = me.options.hint; - this.editable = me.options.editable; - this.disabled = me.options.disabled; - this.store = me.options.store || new Common.UI.ComboBoxStore(); - this.displayField = me.options.displayField; - this.valueField = me.options.valueField; - this.placeHolder = me.options.placeHolder; - this.search = me.options.search; - this.scrollAlwaysVisible = me.options.scrollAlwaysVisible; - this.focusWhenNoSelection = (me.options.focusWhenNoSelection!==false); - - this.restoreMenuHeight = me.options.restoreMenuHeight; - - me.rendered = me.options.rendered || false; - - this.lastValue = null; - - me.store.add(me.options.data); - - if (me.options.el) { - me.render(); - } - }, - - render : function(parentEl) { - var me = this; - - if (!me.rendered) { - var items = this.store.toJSON(); - this.cmpEl = $(this.template({ - id : this.id, - cls : this.cls, - style : this.style, - menuCls : this.menuCls, - menuStyle : this.menuStyle, - items : items, - scope : me, - placeHolder : this.placeHolder, - dataHint : this.options.dataHint, - dataHintDirection: this.options.dataHintDirection, - dataHintOffset: this.options.dataHintOffset, - isRTL : Common.UI.isRTL() - })); - if (this.itemsTemplate) - this.cmpEl.find('ul').html( - $(this.itemsTemplate({ - items : items, - scope : me - }))); - - if (parentEl) { - this.setElement(parentEl, false); - parentEl.html(this.cmpEl); - } else { - this.$el.html(this.cmpEl); - } - } else { - this.cmpEl = me.$el || $(this.el); - } - if (!me.rendered) { - var el = this.cmpEl; - - this._input = el.find('input'); - this._button = el.find('.btn'); - - el.on('click', 'a', _.bind(this.itemClicked, this)); - el.on('mousedown', 'a', _.bind(this.itemMouseDown, this)); - - if (this.editable) { - el.on('change', 'input', _.bind(this.onInputChanged, this)); - el.on('input', 'input', _.bind(this.onInputChanging, this)); - el.on('keydown', 'input', _.bind(this.onInputKeyDown, this)); - el.on('focusin', 'input', _.bind(this.onInputFocusIn, this)); - el.on('click', '.form-control', _.bind(this.onEditableInputClick, this)); - } else { - el.on('click', '.form-control', _.bind(this.onInputClick, this)); - this._input.attr('readonly', 'readonly'); - this._input.attr('data-can-copy', false); - this._input.on('mousedown',function (e){e.preventDefault();}) - } - - if (me.options.hint) { - el.attr('data-toggle', 'tooltip'); - el.tooltip({ - title : me.options.hint, - placement : me.options.hintAnchor||'cursor' - }); - - var modalParents = el.closest('.asc-window'); - if (modalParents.length > 0) { - el.data('bs.tooltip').tip().css('z-index', parseInt(modalParents.css('z-index')) + 10); - var onModalClose = function(dlg) { - if (modalParents[0] !== dlg.$window[0]) return; - var tip = el.data('bs.tooltip'); - if (tip) { - if (tip.dontShow===undefined) - tip.dontShow = true; - - tip.hide(); - } - Common.NotificationCenter.off({'modal:close': onModalClose}); - }; - Common.NotificationCenter.on({'modal:close': onModalClose}); - } - - el.find('.dropdown-menu').on('mouseenter', function(){ // hide tooltip when mouse is over menu - var tip = el.data('bs.tooltip'); - if (tip) { - if (tip.dontShow===undefined) - tip.dontShow = true; - tip.hide(); - } - }); - } - - var $list = el.find('.dropdown-menu'); - if ($list.hasClass('menu-absolute')) { - $list.css('min-width', el.outerWidth()); - } - - el.on('show.bs.dropdown', _.bind(me.onBeforeShowMenu, me)); - el.on('shown.bs.dropdown', _.bind(me.onAfterShowMenu, me)); - el.on('hide.bs.dropdown', _.bind(me.onBeforeHideMenu, me)); - el.on('hidden.bs.dropdown', _.bind(me.onAfterHideMenu, me)); - el.on('keydown.after.bs.dropdown', _.bind(me.onAfterKeydownMenu, me)); - - Common.NotificationCenter.on('menumanager:hideall', _.bind(me.closeMenu, me)); - - // set default selection - this.setDefaultSelection(); - - this.listenTo(this.store, 'reset', this.onResetItems); + if (me.options.hint) { + el.attr("data-toggle", "tooltip"); + el.tooltip({ + title: me.options.hint, + placement: me.options.hintAnchor || "cursor", + }); + + var modalParents = el.closest(".asc-window"); + if (modalParents.length > 0) { + el.data("bs.tooltip") + .tip() + .css("z-index", parseInt(modalParents.css("z-index")) + 10); + var onModalClose = function (dlg) { + if (modalParents[0] !== dlg.$window[0]) return; + var tip = el.data("bs.tooltip"); + if (tip) { + if (tip.dontShow === undefined) tip.dontShow = true; + + tip.hide(); + } + Common.NotificationCenter.off({ + "modal:close": onModalClose, + }); + }; + Common.NotificationCenter.on({ "modal:close": onModalClose }); + } + + el.find(".dropdown-menu").on("mouseenter", function () { + // hide tooltip when mouse is over menu + var tip = el.data("bs.tooltip"); + if (tip) { + if (tip.dontShow === undefined) tip.dontShow = true; + tip.hide(); } + }); + } - me.rendered = true; - if (me.disabled) me.setDisabled(me.disabled); + var $list = el.find(".dropdown-menu"); + if ($list.hasClass("menu-absolute")) { + $list.css("min-width", el.outerWidth()); + } - return this; - }, + el.on("show.bs.dropdown", _.bind(me.onBeforeShowMenu, me)); + el.on("shown.bs.dropdown", _.bind(me.onAfterShowMenu, me)); + el.on("hide.bs.dropdown", _.bind(me.onBeforeHideMenu, me)); + el.on("hidden.bs.dropdown", _.bind(me.onAfterHideMenu, me)); + el.on( + "keydown.after.bs.dropdown", + _.bind(me.onAfterKeydownMenu, me) + ); - setData: function(data) { - this.store.reset([]); - this.store.add(data); + Common.NotificationCenter.on( + "menumanager:hideall", + _.bind(me.closeMenu, me) + ); - this.setRawValue(''); - this.onResetItems(); - }, + // set default selection + this.setDefaultSelection(); - openMenu: function(delay) { - if (this.store.length<1) return; + this.listenTo(this.store, "reset", this.onResetItems); + } - var me = this; + me.rendered = true; + if (me.disabled) me.setDisabled(me.disabled); - if ( !this.scroller ) { - this.scroller = new Common.UI.Scroller(_.extend({ - el: $('.dropdown-menu', this.cmpEl), - minScrollbarLength: 40, - includePadding: true, - wheelSpeed: 10, - alwaysVisibleY: this.scrollAlwaysVisible - }, this.options.scroller)); - } + return this; + }, - _.delay(function(){ - me.cmpEl.addClass('open'); - }, delay || 0); - }, - - closeMenu: function() { - this.cmpEl.removeClass('open'); - }, - - isMenuOpen: function() { - return this.cmpEl.hasClass('open'); - }, - - onBeforeShowMenu: function(e) { - if ( !this.scroller ) { - this.scroller = new Common.UI.Scroller(_.extend({ - el: $('.dropdown-menu', this.cmpEl), - minScrollbarLength: 40, - includePadding: true, - wheelSpeed: 10, - alwaysVisibleY: this.scrollAlwaysVisible - }, this.options.scroller)); - } + setData: function (data) { + this.store.reset([]); + this.store.add(data); - Common.NotificationCenter.trigger('menu:show'); - this.trigger('show:before', this, e); - if (this.options.hint) { - var tip = this.cmpEl.data('bs.tooltip'); - if (tip) { - if (tip.dontShow===undefined) - tip.dontShow = true; - tip.hide(); - } - } + this.setRawValue(""); + this.onResetItems(); + }, - var $list = this.cmpEl.find('ul'); - if ($list.hasClass('menu-absolute')) { - var offset = this.cmpEl.offset(); - var left = offset.left; - if (left + $list.outerWidth()>Common.Utils.innerWidth()) - left += (this.cmpEl.outerWidth() - $list.outerWidth()); - $list.css({left: left, top: offset.top + this.cmpEl.outerHeight() + 2}); - } else if ($list.hasClass('menu-aligned')) { - var offset = this.cmpEl.offset(); - $list.toggleClass('show-top', offset.top + this.cmpEl.outerHeight() + $list.outerHeight() > Common.Utils.innerHeight()); - } - }, - - onAfterShowMenu: function(e) { - this.alignMenuPosition(); - var $list = $(this.el).find('ul'), - $selected = $list.find('> li.selected'); - - if ($selected.length) { - var itemTop = $selected.position().top, - itemHeight = $selected.outerHeight(), - listHeight = $list.outerHeight(); - - if (itemTop < 0 || itemTop + itemHeight > listHeight) { - var height = $list.scrollTop() + itemTop + (itemHeight - listHeight)/2; - height = (Math.floor(height/itemHeight) * itemHeight); - $list.scrollTop(height); - } - setTimeout(function(){$selected.find('a').focus();}, 1); - } else if (this.focusWhenNoSelection) { - var me = this; - setTimeout(function(){me.cmpEl.find('ul li:first a').focus();}, 1); - } + openMenu: function (delay) { + if (this.store.length < 1) return; + + var me = this; + + if (!this.scroller) { + this.scroller = new Common.UI.Scroller( + _.extend( + { + el: $(".dropdown-menu", this.cmpEl), + minScrollbarLength: 40, + includePadding: true, + wheelSpeed: 10, + alwaysVisibleY: this.scrollAlwaysVisible, + }, + this.options.scroller + ) + ); + } + + _.delay(function () { + me.cmpEl.addClass("open"); + }, delay || 0); + }, - if (this.scroller) - this.scroller.update({alwaysVisibleY: this.scrollAlwaysVisible}); - - this.trigger('show:after', this, e, {fromKeyDown: e===undefined}); - this._search = {}; - }, - - alignMenuPosition: function () { - if (this.restoreMenuHeight) { - var $list = $(this.el).find('ul'); - if (typeof this.restoreMenuHeight !== "number") { - var maxHeight = parseFloat($list.css('max-height')); - if ($list.hasClass('scrollable-menu') || maxHeight) { - this.restoreMenuHeight = maxHeight ? maxHeight : 100000; - } else { - this.restoreMenuHeight = 100000; - } - } - var cg = Common.Utils.croppedGeometry(), - docH = cg.height - 10, - menuH = $list.outerHeight(), - menuTop = $list.get(0).getBoundingClientRect().top, - newH = menuH; - - if (menuH < this.restoreMenuHeight) - newH = this.restoreMenuHeight; - - if (menuTop + newH > docH) - newH = docH - menuTop; - - if (newH !== menuH) - $list.css('max-height', newH + 'px'); - } - }, - - onBeforeHideMenu: function(e) { - this.trigger('hide:before', this, e); - - if (Common.UI.Scroller.isMouseCapture()) - e.preventDefault(); - }, - - onAfterHideMenu: function(e, isFromInputControl) { - this.cmpEl.find('.dropdown-toggle').blur(); - this.trigger('hide:after', this, e, isFromInputControl); - Common.NotificationCenter.trigger('menu:hide', this, isFromInputControl); - if (this.options.takeFocusOnClose) { - var me = this; - (me._input && me._input.length>0 && !me.editable) && (me._input[0].selectionStart===me._input[0].selectionEnd) && setTimeout(function() { - me._input[0].selectionStart = me._input[0].selectionEnd = 0; - },1); - setTimeout(function(){me.focus();}, 1); - } - }, - - onAfterKeydownMenu: function(e) { - if (e.keyCode == Common.UI.Keys.DOWN && !this.editable && !this.isMenuOpen()) { - this.openMenu(); - this.onAfterShowMenu(); - return false; - } else if (!this.focusWhenNoSelection && (e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.UP)) { - var $items = this.cmpEl.find('ul > li a'); - if ($items.filter(':focus').length===0 && $items.length>0) { - setTimeout(function(){$items[e.keyCode == Common.UI.Keys.DOWN ? 0 : $items.length-1].focus();}, 1); - } - } else if (e.keyCode == Common.UI.Keys.RETURN && (this.editable || this.isMenuOpen())) { - var isopen = this.isMenuOpen(); - $(e.target).click(); - if (this.rendered) { - if (Common.Utils.isIE) - this._input.trigger('change', { onkeydown: true }); - else - this._input.blur(); - } - return !isopen; - } - else if (e.keyCode == Common.UI.Keys.ESC && this.isMenuOpen()) { - this._input.val(this.lastValue); - this.closeMenu(); - this.onAfterHideMenu(e); - return false; - } else if (this.search && e.keyCode > 64 && e.keyCode < 91 && e.key){ - if (typeof this._search !== 'object') return; - - var me = this; - clearTimeout(this._search.timer); - this._search.timer = setTimeout(function () { me._search = {}; }, 1000); - - (!this._search.text) && (this._search.text = ''); - (!this._search.char) && (this._search.char = e.key); - (this._search.char !== e.key) && (this._search.full = true); - this._search.text += e.key; - if (this._search.index===undefined) { - var $items = this.cmpEl.find('ul > li').find('> a'); - this._search.index = $items.index($items.filter(':focus')); - } - this.selectCandidate(); - } - }, - - selectCandidate: function() { - var index = (this._search.index && this._search.index != -1) ? this._search.index : 0, - re = new RegExp('^' + ((this._search.full) ? this._search.text : this._search.char), 'i'), - isFirstCharsEqual = re.test(this.store.at(index).get(this.displayField)), - itemCandidate, idxCandidate; - - for (var i=0; iindex) { - itemCandidate = item; - idxCandidate = i; - break; - } - } - } + closeMenu: function () { + this.cmpEl.removeClass("open"); + }, - if (itemCandidate) { - this._search.index = idxCandidate; - var item = $('#' + itemCandidate.get('id') + ' a', $(this.el)); - if (this.scroller) { - this.scroller.update({alwaysVisibleY: this.scrollAlwaysVisible}); - var $list = $(this.el).find('ul'); - var itemTop = item.position().top, - itemHeight = item.outerHeight(), - listHeight = $list.outerHeight(); - if (itemTop < 0 || itemTop + itemHeight > listHeight) { - var height = $list.scrollTop() + itemTop; - height = (Math.floor(height/itemHeight) * itemHeight); - $list.scrollTop(height); - } - } - item.focus(); - } - }, - - onInputKeyDown: function(e) { - var me = this; - - if (e.keyCode == Common.UI.Keys.ESC){ - this._input.val(this.lastValue); - this.closeMenu(); - this.onAfterHideMenu(e); - } else if (e.keyCode == Common.UI.Keys.UP || e.keyCode == Common.UI.Keys.DOWN) { - if (!this.isMenuOpen()) { - this.openMenu(); - this.onAfterShowMenu(); - } - - _.delay(function() { - me._skipInputChange = true; - me.cmpEl.find('ul li:first a').focus(); - }, 10); - } else if (e.keyCode == Common.UI.Keys.RETURN && $(e.target).val() === me.lastValue){ - this._input.trigger('change', { reapply: true }); - } else - me._skipInputChange = false; - }, - - onInputFocusIn: function(e) { - this.trigger('combo:focusin', this, e); - }, - - onInputChanged: function(e, extra) { - // skip processing for internally-generated synthetic event - // to avoid double processing - if (extra && extra.synthetic) - return; - - if (this._skipInputChange) { - this._skipInputChange = false; return; - } + isMenuOpen: function () { + return this.cmpEl.hasClass("open"); + }, - var val = $(e.target).val(), - record = {}; + onBeforeShowMenu: function (e) { + if (!this.scroller) { + this.scroller = new Common.UI.Scroller( + _.extend( + { + el: $(".dropdown-menu", this.cmpEl), + minScrollbarLength: 40, + includePadding: true, + wheelSpeed: 10, + alwaysVisibleY: this.scrollAlwaysVisible, + }, + this.options.scroller + ) + ); + } + + Common.NotificationCenter.trigger("menu:show"); + this.trigger("show:before", this, e); + if (this.options.hint) { + var tip = this.cmpEl.data("bs.tooltip"); + if (tip) { + if (tip.dontShow === undefined) tip.dontShow = true; + tip.hide(); + } + } + + var $list = this.cmpEl.find("ul"); + if ($list.hasClass("menu-absolute")) { + var offset = this.cmpEl.offset(); + var left = offset.left; + if (left + $list.outerWidth() > Common.Utils.innerWidth()) + left += this.cmpEl.outerWidth() - $list.outerWidth(); + $list.css({ + left: left, + top: offset.top + this.cmpEl.outerHeight() + 2, + }); + } else if ($list.hasClass("menu-aligned")) { + var offset = this.cmpEl.offset(); + $list.toggleClass( + "show-top", + offset.top + this.cmpEl.outerHeight() + $list.outerHeight() > + Common.Utils.innerHeight() + ); + } + }, - if (this.lastValue === val && !(extra && extra.reapply)) { - if (extra && extra.onkeydown) - this.trigger('combo:blur', this, e); - return; - } + onAfterShowMenu: function (e) { + this.alignMenuPosition(); + var $list = $(this.el).find("ul"), + $selected = $list.find("> li.selected"); + + if ($selected.length) { + var itemTop = $selected.position().top, + itemHeight = $selected.outerHeight(), + listHeight = $list.outerHeight(); + + if (itemTop < 0 || itemTop + itemHeight > listHeight) { + var height = + $list.scrollTop() + itemTop + (itemHeight - listHeight) / 2; + height = Math.floor(height / itemHeight) * itemHeight; + $list.scrollTop(height); + } + setTimeout(function () { + $selected.find("a").focus(); + }, 1); + } else if (this.focusWhenNoSelection) { + var me = this; + setTimeout(function () { + me.cmpEl.find("ul li:first a").focus(); + }, 1); + } + + if (this.scroller) + this.scroller.update({ alwaysVisibleY: this.scrollAlwaysVisible }); + + this.trigger("show:after", this, e, { fromKeyDown: e === undefined }); + this._search = {}; + }, - record[this.valueField] = val; + alignMenuPosition: function () { + if (this.restoreMenuHeight) { + var $list = $(this.el).find("ul"); + if (typeof this.restoreMenuHeight !== "number") { + var maxHeight = parseFloat($list.css("max-height")); + if ($list.hasClass("scrollable-menu") || maxHeight) { + this.restoreMenuHeight = maxHeight ? maxHeight : 100000; + } else { + this.restoreMenuHeight = 100000; + } + } + var cg = Common.Utils.croppedGeometry(), + docH = cg.height - 10, + menuH = $list.outerHeight(), + menuTop = $list.get(0).getBoundingClientRect().top, + newH = menuH; - this.trigger('changed:before', this, record, e); + if (menuH < this.restoreMenuHeight) newH = this.restoreMenuHeight; - if (e.isDefaultPrevented()) - return; + if (menuTop + newH > docH) newH = docH - menuTop; - var obj; - this._selectedItem = this.store.findWhere((obj={}, obj[this.displayField]=val, obj)); + if (newH !== menuH) $list.css("max-height", newH + "px"); + } + }, - if (this._selectedItem) { - record = this._selectedItem.toJSON(); - $('.selected', $(this.el)).removeClass('selected'); - $('#' + this._selectedItem.get('id'), $(this.el)).addClass('selected'); - } + onBeforeHideMenu: function (e) { + this.trigger("hide:before", this, e); - // trigger changed event - this.trigger('changed:after', this, record, e); - }, + if (Common.UI.Scroller.isMouseCapture()) e.preventDefault(); + }, - onInputChanging: function(e, extra) { - var newValue = $(e.target).val(); + onAfterHideMenu: function (e, isFromInputControl) { + this.cmpEl.find(".dropdown-toggle").blur(); + this.trigger("hide:after", this, e, isFromInputControl); + Common.NotificationCenter.trigger( + "menu:hide", + this, + isFromInputControl + ); + if (this.options.takeFocusOnClose) { + var me = this; + me._input && + me._input.length > 0 && + !me.editable && + me._input[0].selectionStart === me._input[0].selectionEnd && + setTimeout(function () { + me._input[0].selectionStart = me._input[0].selectionEnd = 0; + }, 1); + setTimeout(function () { + me.focus(); + }, 1); + } + }, - if (e.isDefaultPrevented()) - return; + onAfterKeydownMenu: function (e) { + if ( + e.keyCode == Common.UI.Keys.DOWN && + !this.editable && + !this.isMenuOpen() + ) { + this.openMenu(); + this.onAfterShowMenu(); + return false; + } else if ( + !this.focusWhenNoSelection && + (e.keyCode == Common.UI.Keys.DOWN || e.keyCode == Common.UI.Keys.UP) + ) { + var $items = this.cmpEl.find("ul > li a"); + if ($items.filter(":focus").length === 0 && $items.length > 0) { + setTimeout(function () { + $items[ + e.keyCode == Common.UI.Keys.DOWN ? 0 : $items.length - 1 + ].focus(); + }, 1); + } + } else if ( + e.keyCode == Common.UI.Keys.RETURN && + (this.editable || this.isMenuOpen()) + ) { + var isopen = this.isMenuOpen(); + $(e.target).click(); + if (this.rendered) { + if (Common.Utils.isIE) + this._input.trigger("change", { onkeydown: true }); + else this._input.blur(); + } + return !isopen; + } else if (e.keyCode == Common.UI.Keys.ESC && this.isMenuOpen()) { + this._input.val(this.lastValue); + this.closeMenu(); + this.onAfterHideMenu(e); + return false; + } else if (this.search && e.keyCode > 64 && e.keyCode < 91 && e.key) { + if (typeof this._search !== "object") return; + + var me = this; + clearTimeout(this._search.timer); + this._search.timer = setTimeout(function () { + me._search = {}; + }, 1000); + + !this._search.text && (this._search.text = ""); + !this._search.char && (this._search.char = e.key); + this._search.char !== e.key && (this._search.full = true); + this._search.text += e.key; + if (this._search.index === undefined) { + var $items = this.cmpEl.find("ul > li").find("> a"); + this._search.index = $items.index($items.filter(":focus")); + } + this.selectCandidate(); + } + }, - // trigger changing event - this.trigger('changing', this, newValue, e); - }, + selectCandidate: function () { + var index = + this._search.index && this._search.index != -1 + ? this._search.index + : 0, + re = new RegExp( + "^" + (this._search.full ? this._search.text : this._search.char), + "i" + ), + isFirstCharsEqual = re.test( + this.store.at(index).get(this.displayField) + ), + itemCandidate, + idxCandidate; + + for (var i = 0; i < this.store.length; i++) { + var item = this.store.at(i); + if (re.test(item.get(this.displayField))) { + if (!itemCandidate) { + itemCandidate = item; + idxCandidate = i; + if (!isFirstCharsEqual) break; + } + if ((this._search.full && i == index) || i > index) { + itemCandidate = item; + idxCandidate = i; + break; + } + } + } + + if (itemCandidate) { + this._search.index = idxCandidate; + var item = $("#" + itemCandidate.get("id") + " a", $(this.el)); + if (this.scroller) { + this.scroller.update({ + alwaysVisibleY: this.scrollAlwaysVisible, + }); + var $list = $(this.el).find("ul"); + var itemTop = item.position().top, + itemHeight = item.outerHeight(), + listHeight = $list.outerHeight(); + if (itemTop < 0 || itemTop + itemHeight > listHeight) { + var height = $list.scrollTop() + itemTop; + height = Math.floor(height / itemHeight) * itemHeight; + $list.scrollTop(height); + } + } + item.focus(); + } + }, - onInputClick: function(e) { - if (this._button) - this._button.dropdown('toggle'); + onInputKeyDown: function (e) { + var me = this; + + if (e.keyCode == Common.UI.Keys.ESC) { + this._input.val(this.lastValue); + this.closeMenu(); + this.onAfterHideMenu(e); + } else if ( + e.keyCode == Common.UI.Keys.UP || + e.keyCode == Common.UI.Keys.DOWN + ) { + if (!this.isMenuOpen()) { + this.openMenu(); + this.onAfterShowMenu(); + } - e.preventDefault(); - e.stopPropagation(); - }, - - onEditableInputClick: function(e) { - if (this.options.hint) { - var tip = this.cmpEl.data('bs.tooltip'); - if (tip) { - if (tip.dontShow===undefined) - tip.dontShow = true; - tip.hide(); - } - } - if (this.isMenuOpen() && e.which == 1) - e.stopPropagation(); - }, + _.delay(function () { + me._skipInputChange = true; + me.cmpEl.find("ul li:first a").focus(); + }, 10); + } else if ( + e.keyCode == Common.UI.Keys.RETURN && + $(e.target).val() === me.lastValue + ) { + this._input.trigger("change", { reapply: true }); + } else me._skipInputChange = false; + }, - setDefaultSelection: function () { - if (!this.rendered) - return; + onInputFocusIn: function (e) { + this.trigger("combo:focusin", this, e); + }, - var val = this._input.val(), - obj; + onInputChanged: function (e, extra) { + // skip processing for internally-generated synthetic event + // to avoid double processing + if (extra && extra.synthetic) return; - if (val) { - this._selectedItem = this.store.findWhere((obj={}, obj[this.displayField]=val, obj)); + if (this._skipInputChange) { + this._skipInputChange = false; + return; + } - if (this._selectedItem) { - $('.selected', $(this.el)).removeClass('selected'); - $('#' + this._selectedItem.get('id'), $(this.el)).addClass('selected'); - } - } - }, + var val = $(e.target).val(), + record = {}; - setDisabled: function(disabled) { - disabled = !!disabled; - this.disabled = disabled; + if (this.lastValue === val && !(extra && extra.reapply)) { + if (extra && extra.onkeydown) this.trigger("combo:blur", this, e); + return; + } - if (!this.rendered) - return; + record[this.valueField] = val; - disabled - ? this._input.attr('disabled', true) - : this._input.removeAttr('disabled'); + this.trigger("changed:before", this, record, e); - this.cmpEl.toggleClass('disabled', disabled); - this._button.toggleClass('disabled', disabled); - }, + if (e.isDefaultPrevented()) return; - isDisabled: function() { - return this.disabled; - }, + var obj; + this._selectedItem = this.store.findWhere( + ((obj = {}), (obj[this.displayField] = val), obj) + ); - setRawValue: function(value) { - if (this.rendered) { - this._input.val(value).trigger('change', { synthetic: true }); - this.lastValue = (value!==null && value !== undefined) ? value.toString() : value; - } - }, + if (this._selectedItem) { + record = this._selectedItem.toJSON(); + $(".selected", $(this.el)).removeClass("selected"); + $("#" + this._selectedItem.get("id"), $(this.el)).addClass( + "selected" + ); + } - getRawValue: function() { - return this.rendered ? this._input.val() : null; - }, + // trigger changed event + this.trigger("changed:after", this, record, e); + }, - setValue: function(value, defValue) { - if (!this.rendered) - return; + onInputChanging: function (e, extra) { + var newValue = $(e.target).val(); - var obj; - this._selectedItem = this.store.findWhere((obj={}, obj[this.valueField]=value, obj)); + if (e.isDefaultPrevented()) return; - $('.selected', $(this.el)).removeClass('selected'); + // trigger changing event + this.trigger("changing", this, newValue, e); + }, - if (this._selectedItem) { - this.setRawValue(this._selectedItem.get(this.displayField)); - $('#' + this._selectedItem.get('id'), $(this.el)).addClass('selected'); - } else { - this.setRawValue((defValue!==undefined) ? defValue : value); - } - }, + onInputClick: function (e) { + if (this._button) this._button.dropdown("toggle"); - getValue: function() { - if (!this.rendered) - return null; + e.preventDefault(); + e.stopPropagation(); + }, - if (this._selectedItem && !_.isUndefined(this._selectedItem.get(this.valueField))) { - return this._selectedItem.get(this.valueField); - } + onEditableInputClick: function (e) { + if (this.options.hint) { + var tip = this.cmpEl.data("bs.tooltip"); + if (tip) { + if (tip.dontShow === undefined) tip.dontShow = true; + tip.hide(); + } + } + if (this.isMenuOpen() && e.which == 1) e.stopPropagation(); + }, - return this._input.val(); - }, + setDefaultSelection: function () { + if (!this.rendered) return; - getDisplayValue: function(record) { - return Common.Utils.String.htmlEncode(record[this.displayField]); - }, + var val = this._input.val(), + obj; - getSelectedRecord: function() { - if (!this.rendered) - return null; + if (val) { + this._selectedItem = this.store.findWhere( + ((obj = {}), (obj[this.displayField] = val), obj) + ); - if (this._selectedItem && !_.isUndefined(this._selectedItem.get(this.valueField))) { - return _.extend({}, this._selectedItem.toJSON()); - } + if (this._selectedItem) { + $(".selected", $(this.el)).removeClass("selected"); + $("#" + this._selectedItem.get("id"), $(this.el)).addClass( + "selected" + ); + } + } + }, - return null; - }, + setDisabled: function (disabled) { + disabled = !!disabled; + this.disabled = disabled; - selectRecord: function(record) { - if (!this.rendered || !record) - return; + if (!this.rendered) return; - this._selectedItem = record; + disabled + ? this._input.attr("disabled", true) + : this._input.removeAttr("disabled"); - $('.selected', $(this.el)).removeClass('selected'); - this.setRawValue(this._selectedItem.get(this.displayField)); - $('#' + this._selectedItem.get('id'), $(this.el)).addClass('selected'); - }, + this.cmpEl.toggleClass("disabled", disabled); + this._button.toggleClass("disabled", disabled); + }, - clearSelection: function (){ - $('.selected', $(this.el)).removeClass('selected'); - this._selectedItem = null; - }, + isDisabled: function () { + return this.disabled; + }, - itemClicked: function (e) { - var el = $(e.target).closest('li'); + setRawValue: function (value) { + if (this.rendered) { + this._input.val(value).trigger("change", { synthetic: true }); + this.lastValue = + value !== null && value !== undefined ? value.toString() : value; + } + }, - this._selectedItem = this.store.findWhere({ - id: el.attr('id') - }); + getRawValue: function () { + return this.rendered ? this._input.val() : null; + }, - if (this._selectedItem) { - // set input text and trigger input change event marked as synthetic - this.lastValue = this._selectedItem.get(this.displayField); - this._input.val(this.lastValue).trigger('change', { synthetic: true }); + setValue: function (value, defValue) { + if (!this.rendered) return; - $('.selected', $(this.el)).removeClass('selected'); - el.addClass('selected'); + var obj; + this._selectedItem = this.store.findWhere( + ((obj = {}), (obj[this.valueField] = value), obj) + ); - // trigger changed event - this.trigger('selected', this, _.extend({}, this._selectedItem.toJSON()), e); + $(".selected", $(this.el)).removeClass("selected"); - e.preventDefault(); - } - this._isMouseDownMenu = false; - }, + if (this._selectedItem) { + this.setRawValue(this._selectedItem.get(this.displayField)); + $("#" + this._selectedItem.get("id"), $(this.el)).addClass( + "selected" + ); + } else { + this.setRawValue(defValue !== undefined ? defValue : value); + } + }, - itemMouseDown: function(e) { - if (e.which != 1) { - e.preventDefault(); - e.stopPropagation(); + getValue: function () { + if (!this.rendered) return null; - return false; - } - this._isMouseDownMenu = true; - }, - - onResetItems: function() { - if (this.itemsTemplate) { - $(this.el).find('ul').html( $(this.itemsTemplate({ - items: this.store.toJSON(), - scope: this - }))); - } else { - $(this.el).find('ul').html(_.template([ - '<% _.each(items, function(item) { %>', - '
  • <%= scope.getDisplayValue(item) %>
  • ', - '<% }); %>' - ].join(''))({ - items: this.store.toJSON(), - scope: this - })); - } + if ( + this._selectedItem && + !_.isUndefined(this._selectedItem.get(this.valueField)) + ) { + return this._selectedItem.get(this.valueField); + } - if (!_.isUndefined(this.scroller)) { - this.scroller.destroy(); - delete this.scroller; - } - this.scroller = new Common.UI.Scroller(_.extend({ - el: $('.dropdown-menu', this.cmpEl), - minScrollbarLength : 40, - includePadding : true, - wheelSpeed: 10, - alwaysVisibleY: this.scrollAlwaysVisible - }, this.options.scroller)); - }, - - focus: function() { - this._input && this._input.focus(); - } - } - })()); + return this._input.val(); + }, + + getDisplayValue: function (record) { + return Common.Utils.String.htmlEncode(record[this.displayField]); + }, + + getSelectedRecord: function () { + if (!this.rendered) return null; + + if ( + this._selectedItem && + !_.isUndefined(this._selectedItem.get(this.valueField)) + ) { + return _.extend({}, this._selectedItem.toJSON()); + } + + return null; + }, + + selectRecord: function (record) { + if (!this.rendered || !record) return; + + this._selectedItem = record; + + $(".selected", $(this.el)).removeClass("selected"); + this.setRawValue(this._selectedItem.get(this.displayField)); + $("#" + this._selectedItem.get("id"), $(this.el)).addClass( + "selected" + ); + }, + + clearSelection: function () { + $(".selected", $(this.el)).removeClass("selected"); + this._selectedItem = null; + }, - Common.UI.ComboBoxCustom = Common.UI.ComboBox.extend(_.extend({ itemClicked: function (e) { - Common.UI.ComboBox.prototype.itemClicked.call(this, e); - if (this.options.updateFormControl) - this.options.updateFormControl.call(this, this._selectedItem); + var el = $(e.target).closest("li"); + + this._selectedItem = this.store.findWhere({ + id: el.attr("id"), + }); + + if (this._selectedItem) { + // set input text and trigger input change event marked as synthetic + this.lastValue = this._selectedItem.get(this.displayField); + this._input + .val(this.lastValue) + .trigger("change", { synthetic: true }); + + $(".selected", $(this.el)).removeClass("selected"); + el.addClass("selected"); + + // trigger changed event + this.trigger( + "selected", + this, + _.extend({}, this._selectedItem.toJSON()), + e + ); + + e.preventDefault(); + } + this._isMouseDownMenu = false; }, - setValue: function(value, defValue) { - Common.UI.ComboBox.prototype.setValue.call(this, value, defValue); - if (this.options.updateFormControl) - this.options.updateFormControl.call(this, this._selectedItem, defValue); + itemMouseDown: function (e) { + if (e.which != 1) { + e.preventDefault(); + e.stopPropagation(); + + return false; + } + this._isMouseDownMenu = true; + }, + + onResetItems: function () { + if (this.itemsTemplate) { + $(this.el) + .find("ul") + .html( + $( + this.itemsTemplate({ + items: this.store.toJSON(), + scope: this, + }) + ) + ); + } else { + $(this.el) + .find("ul") + .html( + _.template( + [ + "<% _.each(items, function(item) { %>", + '
  • <%= scope.getDisplayValue(item) %>
  • ', + "<% }); %>", + ].join("") + )({ + items: this.store.toJSON(), + scope: this, + }) + ); + } + + if (!_.isUndefined(this.scroller)) { + this.scroller.destroy(); + delete this.scroller; + } + this.scroller = new Common.UI.Scroller( + _.extend( + { + el: $(".dropdown-menu", this.cmpEl), + minScrollbarLength: 40, + includePadding: true, + wheelSpeed: 10, + alwaysVisibleY: this.scrollAlwaysVisible, + }, + this.options.scroller + ) + ); }, - selectRecord: function(record) { - Common.UI.ComboBox.prototype.selectRecord.call(this, record); - if (this.options.updateFormControl) - this.options.updateFormControl.call(this, this._selectedItem); + focus: function () { + this._input && this._input.focus(); + }, + }; + })() + ); + + Common.UI.ComboBoxCustom = Common.UI.ComboBox.extend( + _.extend( + { + itemClicked: function (e) { + Common.UI.ComboBox.prototype.itemClicked.call(this, e); + if (this.options.updateFormControl) + this.options.updateFormControl.call(this, this._selectedItem); }, - focus: function() { - this.cmpEl && this.cmpEl.find('.form-control').focus(); - } - }, Common.UI.ComboBoxCustom || {})); -}); \ No newline at end of file + setValue: function (value, defValue) { + Common.UI.ComboBox.prototype.setValue.call(this, value, defValue); + if (this.options.updateFormControl) + this.options.updateFormControl.call( + this, + this._selectedItem, + defValue + ); + }, + + selectRecord: function (record) { + Common.UI.ComboBox.prototype.selectRecord.call(this, record); + if (this.options.updateFormControl) + this.options.updateFormControl.call(this, this._selectedItem); + }, + + focus: function () { + this.cmpEl && this.cmpEl.find(".form-control").focus(); + }, + }, + Common.UI.ComboBoxCustom || {} + ) + ); +}); diff --git a/apps/common/main/lib/component/InputField.js b/apps/common/main/lib/component/InputField.js index 22a193c0f0..eeec4ed1e7 100644 --- a/apps/common/main/lib/component/InputField.js +++ b/apps/common/main/lib/component/InputField.js @@ -46,768 +46,795 @@ * */ - -if (Common === undefined) - var Common = {}; +if (Common === undefined) var Common = {}; define([ - 'common/main/lib/component/BaseView', - 'common/main/lib/component/Tooltip', - 'common/main/lib/component/Button' -], function () { 'use strict'; + "common/main/lib/component/BaseView", + "common/main/lib/component/Tooltip", + "common/main/lib/component/Button", +], function () { + "use strict"; + + Common.UI.InputField = Common.UI.BaseView.extend( + (function () { + return { + options: { + id: null, + cls: "", + style: "", + value: "text", + type: "text", + name: "", + validation: null, + allowBlank: true, + placeHolder: "", + blankError: null, + spellcheck: false, + maskExp: "", + validateOnChange: false, + validateOnBlur: true, + disabled: false, + editable: true, + }, + + template: _.template( + [ + '
    ', + "", + '', + "
    ", + ].join("") + ), + + initialize: function (options) { + Common.UI.BaseView.prototype.initialize.call(this, options); + + var me = this; + + this.id = me.options.id || Common.UI.getId(); + this.cls = me.options.cls; + this.style = me.options.style; + this.value = me.options.value; + this.type = me.options.type; + this.name = me.options.name; + this.validation = me.options.validation; + this.allowBlank = me.options.allowBlank; + this.placeHolder = me.options.placeHolder; + this.template = me.options.template || me.template; + this.editable = me.options.editable; + this.disabled = me.options.disabled; + this.spellcheck = me.options.spellcheck; + this.blankError = me.options.blankError || "This field is required"; + this.validateOnChange = me.options.validateOnChange; + this.validateOnBlur = me.options.validateOnBlur; + this.maxLength = me.options.maxLength; + + me.rendered = me.options.rendered || false; + + if (me.options.el) { + me.render(); + } + }, + + render: function (parentEl) { + var me = this; + + if (!me.rendered) { + this.cmpEl = $( + this.template({ + id: this.id, + cls: this.cls, + style: this.style, + value: this.value, + type: this.type, + name: this.name, + placeHolder: this.placeHolder, + spellcheck: this.spellcheck, + dataHint: this.options.dataHint, + dataHintDirection: this.options.dataHintDirection, + dataHintOffset: this.options.dataHintOffset, + scope: me, + }) + ); + + if (parentEl) { + this.setElement(parentEl, false); + parentEl.html(this.cmpEl); + } else { + this.$el.html(this.cmpEl); + } + } else { + this.cmpEl = this.$el; + } + + if (!me.rendered) { + var el = this.cmpEl; + + this._input = this.cmpEl + .find("input") + .addBack() + .filter("input") + .first(); + + if (this.editable) { + this._input.on("blur", _.bind(this.onInputChanged, this)); + this._input.on("keypress", _.bind(this.onKeyPress, this)); + this._input.on("keydown", _.bind(this.onKeyDown, this)); + this._input.on("keyup", _.bind(this.onKeyUp, this)); + if (this.validateOnChange) + this._input.on("input", _.bind(this.onInputChanging, this)); + if (this.maxLength) this._input.attr("maxlength", this.maxLength); + } - Common.UI.InputField = Common.UI.BaseView.extend((function() { - return { - options : { - id : null, - cls : '', - style : '', - value : '', - type : 'text', - name : '', - validation : null, - allowBlank : true, - placeHolder : '', - blankError : null, - spellcheck : false, - maskExp : '', - validateOnChange: false, - validateOnBlur: true, - disabled: false, - editable: true - }, - - template: _.template([ - '
    ', - '', - '', - '
    ' - ].join('')), - - initialize : function(options) { - Common.UI.BaseView.prototype.initialize.call(this, options); - - var me = this; - - this.id = me.options.id || Common.UI.getId(); - this.cls = me.options.cls; - this.style = me.options.style; - this.value = me.options.value; - this.type = me.options.type; - this.name = me.options.name; - this.validation = me.options.validation; - this.allowBlank = me.options.allowBlank; - this.placeHolder = me.options.placeHolder; - this.template = me.options.template || me.template; - this.editable = me.options.editable; - this.disabled = me.options.disabled; - this.spellcheck = me.options.spellcheck; - this.blankError = me.options.blankError || 'This field is required'; - this.validateOnChange = me.options.validateOnChange; - this.validateOnBlur = me.options.validateOnBlur; - this.maxLength = me.options.maxLength; - - me.rendered = me.options.rendered || false; - - if (me.options.el) { - me.render(); - } - }, - - render : function(parentEl) { - var me = this; - - if (!me.rendered) { - this.cmpEl = $(this.template({ - id : this.id, - cls : this.cls, - style : this.style, - value : this.value, - type : this.type, - name : this.name, - placeHolder : this.placeHolder, - spellcheck : this.spellcheck, - dataHint : this.options.dataHint, - dataHintDirection: this.options.dataHintDirection, - dataHintOffset: this.options.dataHintOffset, - scope : me - })); - - if (parentEl) { - this.setElement(parentEl, false); - parentEl.html(this.cmpEl); - } else { - this.$el.html(this.cmpEl); - } - } else { - this.cmpEl = this.$el; - } - - if (!me.rendered) { - var el = this.cmpEl; - - this._input = this.cmpEl.find('input').addBack().filter('input').first(); - - if (this.editable) { - this._input.on('blur', _.bind(this.onInputChanged, this)); - this._input.on('keypress', _.bind(this.onKeyPress, this)); - this._input.on('keydown', _.bind(this.onKeyDown, this)); - this._input.on('keyup', _.bind(this.onKeyUp, this)); - if (this.validateOnChange) this._input.on('input', _.bind(this.onInputChanging, this)); - if (this.maxLength) this._input.attr('maxlength', this.maxLength); - } - - this.setEditable(this.editable); - if (this.disabled) - this.setDisabled(this.disabled); - - if (this._input.closest('.asc-window').length>0) - var onModalClose = function() { - var errorTip = el.find('.input-error').data('bs.tooltip'); - if (errorTip) errorTip.tip().remove(); - Common.NotificationCenter.off({'modal:close': onModalClose}); - }; - Common.NotificationCenter.on({'modal:close': onModalClose}); - } - - me.rendered = true; - - if (me.value) - me.setValue(me.value); - - return this; - }, - - _doChange: function(e, extra) { - // skip processing for internally-generated synthetic event - // to avoid double processing - if (extra && extra.synthetic) - return; - - var newValue = $(e.target).val(), - oldValue = this.value; - - this.trigger('changed:before', this, newValue, oldValue, e); - - if (e.isDefaultPrevented()) - return; - - this.value = newValue; - if (this.validateOnBlur) - this.checkValidate(); - - // trigger changed event - this.trigger('changed:after', this, newValue, oldValue, e); - }, - - onInputChanged: function(e, extra) { - this._doChange(e, extra); - }, - - onInputChanging: function(e, extra) { - var newValue = $(e.target).val(), - oldValue = this.value; - - if (e.isDefaultPrevented()) - return; - - this.value = newValue; - if (this.validateOnBlur) - this.checkValidate(); - - // trigger changing event - this.trigger('changing', this, newValue, oldValue, e); - }, - - onKeyPress: function(e) { - this.trigger('keypress:before', this, e); - - if (e.isDefaultPrevented()) - return; - - if (this.options.maskExp && !_.isEmpty(this.options.maskExp.source)){ - var charCode = String.fromCharCode(e.which); - if(!this.options.maskExp.test(charCode) && !e.ctrlKey && e.keyCode !== Common.UI.Keys.RETURN){ - e.preventDefault(); - e.stopPropagation(); - } - } - - this.trigger('keypress:after', this, e); - }, - - onKeyDown: function(e) { - this.trigger('keydown:before', this, e); - - if (e.isDefaultPrevented()) - return; - - if (e.keyCode === Common.UI.Keys.RETURN) - this._doChange(e); - if (e.keyCode == Common.UI.Keys.ESC) - this.setValue(this.value); - if (e.keyCode==Common.UI.Keys.RETURN || e.keyCode==Common.UI.Keys.ESC) - this.trigger('inputleave', this); - }, - - onKeyUp: function(e) { - this.trigger('keyup:before', this, e); - - if (e.isDefaultPrevented()) - return; - - this.trigger('keyup:after', this, e); - }, - - setEditable: function(editable) { - var input = this._input; - - this.editable = editable; - - if (editable && input) { - input.removeAttr('readonly'); - input.removeAttr('data-can-copy'); - } else { - input.attr('readonly', 'readonly'); - input.attr('data-can-copy', false); - } - }, - - isEditable: function() { - return this.editable; - }, - - setDisabled: function(disabled) { - disabled = !!disabled; - this.disabled = disabled; - $(this.el).toggleClass('disabled', disabled); - if (this._input) { - disabled - ? this._input.attr('disabled', true) - : this._input.removeAttr('disabled'); - } - }, - - isDisabled: function() { - return this.disabled; - }, - - setValue: function(value) { - this.value = value; - - if (this.rendered){ - this._input.val(value); - } - }, - - getValue: function() { - return this.value; - }, - - focus: function() { - this._input && this._input.focus(); - }, - - checkValidate: function() { - var me = this, - errors = []; - - if (!me.allowBlank && _.isEmpty(me.value)) { - errors.push(me.blankError); - } - - if (_.isFunction(me.validation)) { - var res = me.validation.call(me, me.value); - - if (res !== true) { - errors = _.flatten(errors.concat(res)); - } - } - - if (!_.isEmpty(errors)) { - if (me.cmpEl.hasClass('error')) { - var errorTip = me.cmpEl.find('.input-error').data('bs.tooltip'); - if (errorTip) { - errorTip.options.title = errors.join('\n'); - errorTip.setContent(); - } - return errors; - } else { - me.cmpEl.addClass('error'); - - var errorBadge = me.cmpEl.find('.input-error'), - modalParents = errorBadge.closest('.asc-window'), - errorTip = errorBadge.data('bs.tooltip'); - - if (errorTip) errorTip.tip().remove(); - errorBadge.attr('data-toggle', 'tooltip'); - errorBadge.removeData('bs.tooltip'); - errorBadge.tooltip({ - title : errors.join('\n'), - placement : 'cursor' - }); - if (modalParents.length > 0) { - errorBadge.data('bs.tooltip').tip().css('z-index', parseInt(modalParents.css('z-index')) + 10); - } - - return errors; - } - } else { - me.cmpEl.removeClass('error'); - } - - return true; - }, - - showError: function(errors, isWarning) { - var me = this; - if (!_.isEmpty(errors)) { - me.cmpEl.addClass(isWarning ? 'warning' : 'error'); - - var errorBadge = me.cmpEl.find('.input-error'), - modalParents = errorBadge.closest('.asc-window'), - errorTip = errorBadge.data('bs.tooltip'); - - if (errorTip) errorTip.tip().remove(); - errorBadge.attr('data-toggle', 'tooltip'); - errorBadge.removeData('bs.tooltip'); - errorBadge.tooltip({ - title : errors.join('\n'), - placement : 'cursor' - }); - - if (modalParents.length > 0) { - errorBadge.data('bs.tooltip').tip().css('z-index', parseInt(modalParents.css('z-index')) + 10); - } - } else { - me.cmpEl.removeClass('error'); - me.cmpEl.removeClass('warning'); - } - }, - - showWarning: function(errors) { - this.showError(errors, true); + this.setEditable(this.editable); + if (this.disabled) this.setDisabled(this.disabled); + + if (this._input.closest(".asc-window").length > 0) + var onModalClose = function () { + var errorTip = el.find(".input-error").data("bs.tooltip"); + if (errorTip) errorTip.tip().remove(); + Common.NotificationCenter.off({ "modal:close": onModalClose }); + }; + Common.NotificationCenter.on({ "modal:close": onModalClose }); + } + + me.rendered = true; + + if (me.value) me.setValue(me.value); + + return this; + }, + + _doChange: function (e, extra) { + // skip processing for internally-generated synthetic event + // to avoid double processing + if (extra && extra.synthetic) return; + + var newValue = $(e.target).val(), + oldValue = this.value; + + this.trigger("changed:before", this, newValue, oldValue, e); + + if (e.isDefaultPrevented()) return; + + this.value = newValue; + if (this.validateOnBlur) this.checkValidate(); + + // trigger changed event + this.trigger("changed:after", this, newValue, oldValue, e); + }, + + onInputChanged: function (e, extra) { + this._doChange(e, extra); + }, + + onInputChanging: function (e, extra) { + var newValue = $(e.target).val(), + oldValue = this.value; + + if (e.isDefaultPrevented()) return; + + this.value = newValue; + if (this.validateOnBlur) this.checkValidate(); + + // trigger changing event + this.trigger("changing", this, newValue, oldValue, e); + }, + + onKeyPress: function (e) { + this.trigger("keypress:before", this, e); + + if (e.isDefaultPrevented()) return; + + if (this.options.maskExp && !_.isEmpty(this.options.maskExp.source)) { + var charCode = String.fromCharCode(e.which); + if ( + !this.options.maskExp.test(charCode) && + !e.ctrlKey && + e.keyCode !== Common.UI.Keys.RETURN + ) { + e.preventDefault(); + e.stopPropagation(); + } + } + + this.trigger("keypress:after", this, e); + }, + + onKeyDown: function (e) { + this.trigger("keydown:before", this, e); + + if (e.isDefaultPrevented()) return; + + if (e.keyCode === Common.UI.Keys.RETURN) this._doChange(e); + if (e.keyCode == Common.UI.Keys.ESC) this.setValue(this.value); + if ( + e.keyCode == Common.UI.Keys.RETURN || + e.keyCode == Common.UI.Keys.ESC + ) + this.trigger("inputleave", this); + }, + + onKeyUp: function (e) { + this.trigger("keyup:before", this, e); + + if (e.isDefaultPrevented()) return; + + this.trigger("keyup:after", this, e); + }, + + setEditable: function (editable) { + var input = this._input; + + this.editable = editable; + + if (editable && input) { + input.removeAttr("readonly"); + input.removeAttr("data-can-copy"); + } else { + input.attr("readonly", "readonly"); + input.attr("data-can-copy", false); + } + }, + + isEditable: function () { + return this.editable; + }, + + setDisabled: function (disabled) { + disabled = !!disabled; + this.disabled = disabled; + $(this.el).toggleClass("disabled", disabled); + if (this._input) { + disabled + ? this._input.attr("disabled", true) + : this._input.removeAttr("disabled"); + } + }, + + isDisabled: function () { + return this.disabled; + }, + + setValue: function (value) { + this.value = value; + + if (this.rendered) { + this._input.val(value); + } + }, + + getValue: function () { + return this.value; + }, + + focus: function () { + this._input && this._input.focus(); + }, + + checkValidate: function () { + var me = this, + errors = []; + + if (!me.allowBlank && _.isEmpty(me.value)) { + errors.push(me.blankError); + } + + if (_.isFunction(me.validation)) { + var res = me.validation.call(me, me.value); + + if (res !== true) { + errors = _.flatten(errors.concat(res)); + } + } + + if (!_.isEmpty(errors)) { + if (me.cmpEl.hasClass("error")) { + var errorTip = me.cmpEl.find(".input-error").data("bs.tooltip"); + if (errorTip) { + errorTip.options.title = errors.join("\n"); + errorTip.setContent(); + } + return errors; + } else { + me.cmpEl.addClass("error"); + + var errorBadge = me.cmpEl.find(".input-error"), + modalParents = errorBadge.closest(".asc-window"), + errorTip = errorBadge.data("bs.tooltip"); + + if (errorTip) errorTip.tip().remove(); + errorBadge.attr("data-toggle", "tooltip"); + errorBadge.removeData("bs.tooltip"); + errorBadge.tooltip({ + title: errors.join("\n"), + placement: "cursor", + }); + if (modalParents.length > 0) { + errorBadge + .data("bs.tooltip") + .tip() + .css("z-index", parseInt(modalParents.css("z-index")) + 10); + } + + return errors; + } + } else { + me.cmpEl.removeClass("error"); + } + + return true; + }, + + showError: function (errors, isWarning) { + var me = this; + if (!_.isEmpty(errors)) { + me.cmpEl.addClass(isWarning ? "warning" : "error"); + + var errorBadge = me.cmpEl.find(".input-error"), + modalParents = errorBadge.closest(".asc-window"), + errorTip = errorBadge.data("bs.tooltip"); + + if (errorTip) errorTip.tip().remove(); + errorBadge.attr("data-toggle", "tooltip"); + errorBadge.removeData("bs.tooltip"); + errorBadge.tooltip({ + title: errors.join("\n"), + placement: "cursor", + }); + + if (modalParents.length > 0) { + errorBadge + .data("bs.tooltip") + .tip() + .css("z-index", parseInt(modalParents.css("z-index")) + 10); + } + } else { + me.cmpEl.removeClass("error"); + me.cmpEl.removeClass("warning"); + } + }, + + showWarning: function (errors) { + this.showError(errors, true); + }, + }; + })() + ); + + Common.UI.InputFieldBtn = Common.UI.InputField.extend( + (function () { + return { + options: { + id: null, + cls: "", + style: "", + value: "", + type: "text", + name: "", + validation: null, + allowBlank: true, + placeHolder: "", + blankError: null, + spellcheck: false, + maskExp: "", + validateOnChange: false, + validateOnBlur: true, + disabled: false, + editable: true, + iconCls: "toolbar__icon btn-select-range", + btnHint: "", + }, + + template: _.template( + [ + '
    ', + " ", + 'name="<%= name %>" ', + 'spellcheck="<%= spellcheck %>" ', + 'class="form-control <%= cls %>" ', + 'placeholder="<%= placeHolder %>" ', + 'value="<%= value %>"', + 'data-hint="<%= dataHint %>"', + 'data-hint-offset="<%= dataHintOffset %>"', + 'data-hint-direction="<%= dataHintDirection %>"', + ">", + '', + '
    ' + "
    ", + "
    ", + ].join("") + ), + + render: function (parentEl) { + var me = this; + + if (!me.rendered) { + this.cmpEl = $( + this.template({ + id: this.id, + cls: this.cls, + style: this.style, + value: this.value, + type: this.type, + name: this.name, + placeHolder: this.placeHolder, + spellcheck: this.spellcheck, + scope: me, + dataHint: this.options.dataHint, + dataHintOffset: this.options.dataHintOffset, + dataHintDirection: this.options.dataHintDirection, + }) + ); + + if (parentEl) { + this.setElement(parentEl, false); + parentEl.html(this.cmpEl); + } else { + this.$el.html(this.cmpEl); + } + } else { + this.cmpEl = this.$el; + } + + if (!me.rendered) { + var el = this.cmpEl; + + this._button = new Common.UI.Button({ + cls: "btn-toolbar", + iconCls: this.options.iconCls, + hint: this.options.btnHint || "", + menu: this.options.menu, + }); + this._button.render(this.cmpEl.find(".select-button")); + this._button.on("click", _.bind(this.onButtonClick, this)); + + this._input = this.cmpEl.find("input").addBack().filter("input"); + + if (this.editable) { + this._input.on("blur", _.bind(this.onInputChanged, this)); + this._input.on("keypress", _.bind(this.onKeyPress, this)); + this._input.on("keydown", _.bind(this.onKeyDown, this)); + this._input.on("keyup", _.bind(this.onKeyUp, this)); + if (this.validateOnChange) + this._input.on("input", _.bind(this.onInputChanging, this)); + if (this.maxLength) this._input.attr("maxlength", this.maxLength); } - } - })()); - Common.UI.InputFieldBtn = Common.UI.InputField.extend((function() { + this.setEditable(this.editable); + + if (this.disabled) this.setDisabled(this.disabled); + + if (this._input.closest(".asc-window").length > 0) + var onModalClose = function () { + var errorTip = el.find(".input-error").data("bs.tooltip"); + if (errorTip) errorTip.tip().remove(); + Common.NotificationCenter.off({ "modal:close": onModalClose }); + }; + Common.NotificationCenter.on({ "modal:close": onModalClose }); + } + + me.rendered = true; + if (me.value) me.setValue(me.value); + + return this; + }, + + onButtonClick: function (btn, e) { + this.trigger("button:click", this, e); + }, + + setDisabled: function (disabled) { + disabled = !!disabled; + this.disabled = disabled; + $(this.el).toggleClass("disabled", disabled); + disabled + ? this._input.attr("disabled", true) + : this._input.removeAttr("disabled"); + this._button.setDisabled(disabled); + }, + + setBtnDisabled: function (disabled) { + this._button.setDisabled(disabled); + }, + + updateBtnHint: function (hint) { + this.options.hint = hint; + + if (!this.rendered) return; + this._button.updateHint(this.options.hint); + }, + }; + })() + ); + + Common.UI.InputFieldBtnPassword = Common.UI.InputFieldBtn.extend( + _.extend( + (function () { return { - options : { - id : null, - cls : '', - style : '', - value : '', - type : 'text', - name : '', - validation : null, - allowBlank : true, - placeHolder : '', - blankError : null, - spellcheck : false, - maskExp : '', - validateOnChange: false, - validateOnBlur: true, - disabled: false, - editable: true, - iconCls: 'toolbar__icon btn-select-range', - btnHint: '' - }, - - template: _.template([ - '
    ', - ' ', - 'name="<%= name %>" ', - 'spellcheck="<%= spellcheck %>" ', - 'class="form-control <%= cls %>" ', - 'placeholder="<%= placeHolder %>" ', - 'value="<%= value %>"', - 'data-hint="<%= dataHint %>"', - 'data-hint-offset="<%= dataHintOffset %>"', - 'data-hint-direction="<%= dataHintDirection %>"', - '>', - '', - '
    ' + - '
    ', - '
    ' - ].join('')), - - render : function(parentEl) { - var me = this; - - if (!me.rendered) { - this.cmpEl = $(this.template({ - id : this.id, - cls : this.cls, - style : this.style, - value : this.value, - type : this.type, - name : this.name, - placeHolder : this.placeHolder, - spellcheck : this.spellcheck, - scope : me, - dataHint : this.options.dataHint, - dataHintOffset: this.options.dataHintOffset, - dataHintDirection: this.options.dataHintDirection - })); - - if (parentEl) { - this.setElement(parentEl, false); - parentEl.html(this.cmpEl); - } else { - this.$el.html(this.cmpEl); - } - } else { - this.cmpEl = this.$el; - } - - if (!me.rendered) { - var el = this.cmpEl; - - this._button = new Common.UI.Button({ - cls: 'btn-toolbar', - iconCls: this.options.iconCls, - hint: this.options.btnHint || '', - menu: this.options.menu - }); - this._button.render(this.cmpEl.find('.select-button')); - this._button.on('click', _.bind(this.onButtonClick, this)); - - this._input = this.cmpEl.find('input').addBack().filter('input'); - - if (this.editable) { - this._input.on('blur', _.bind(this.onInputChanged, this)); - this._input.on('keypress', _.bind(this.onKeyPress, this)); - this._input.on('keydown', _.bind(this.onKeyDown, this)); - this._input.on('keyup', _.bind(this.onKeyUp, this)); - if (this.validateOnChange) this._input.on('input', _.bind(this.onInputChanging, this)); - if (this.maxLength) this._input.attr('maxlength', this.maxLength); - } - - this.setEditable(this.editable); - - if (this.disabled) - this.setDisabled(this.disabled); - - if (this._input.closest('.asc-window').length>0) - var onModalClose = function() { - var errorTip = el.find('.input-error').data('bs.tooltip'); - if (errorTip) errorTip.tip().remove(); - Common.NotificationCenter.off({'modal:close': onModalClose}); - }; - Common.NotificationCenter.on({'modal:close': onModalClose}); - } - - me.rendered = true; - if (me.value) - me.setValue(me.value); - - return this; - }, - - onButtonClick: function(btn, e) { - this.trigger('button:click', this, e); - }, - - setDisabled: function(disabled) { - disabled = !!disabled; - this.disabled = disabled; - $(this.el).toggleClass('disabled', disabled); - disabled - ? this._input.attr('disabled', true) - : this._input.removeAttr('disabled'); - this._button.setDisabled(disabled); - }, - - setBtnDisabled: function(disabled) { - this._button.setDisabled(disabled); - }, - - updateBtnHint: function(hint) { - this.options.hint = hint; - - if (!this.rendered) return; - this._button.updateHint(this.options.hint); + options: { + id: null, + cls: "", + style: "", + value: "", + name: "", + type: "password", + validation: null, + allowBlank: true, + placeHolder: "", + blankError: null, + spellcheck: false, + maskExp: "", + validateOnChange: false, + validateOnBlur: true, + disabled: false, + editable: true, + showCls: "toolbar__icon btn-sheet-view", + hideCls: "toolbar__icon btn-hide-password", + btnHint: "", + repeatInput: null, + showPwdOnClick: true, + }, + + initialize: function (options) { + options = options || {}; + options.btnHint = options.btnHint || this.textHintShowPwd; + options.iconCls = options.showCls || this.options.showCls; + + Common.UI.InputFieldBtn.prototype.initialize.call(this, options); + + this.hidePwd = true; + this.repeatInput = this.options.repeatInput; + }, + + render: function (parentEl) { + Common.UI.InputFieldBtn.prototype.render.call(this, parentEl); + + this._btnElm = this._button.$el; + if (this.options.showPwdOnClick) + this._button.on("click", _.bind(this.passwordClick, this)); + else this._btnElm.on("mousedown", _.bind(this.passwordShow, this)); + + return this; + }, + + passwordClick: function (e) { + if (this.hidePwd) { + this.passwordShow(e); + this.hidePwd = false; + } else { + this.passwordHide(e); + this.hidePwd = true; + } + var me = this; + var prevstart = me._input[0].selectionStart, + prevend = me._input[0].selectionEnd; + setTimeout(function () { + me.focus(); + me._input[0].selectionStart = prevstart; + me._input[0].selectionEnd = prevend; + }, 1); + }, + + passwordShow: function (e) { + if (this.disabled) return; + this._button.setIconCls(this.options.hideCls); + this.type = "text"; + + this._input.attr("type", this.type); + if (this.repeatInput) { + this.repeatInput.type = this.type; + this.repeatInput._input.attr("type", this.type); } - } - })()); - Common.UI.InputFieldBtnPassword = Common.UI.InputFieldBtn.extend(_.extend((function() { - return { - options: { - id: null, - cls: '', - style: '', - value: '', - name: '', - type: 'password', - validation: null, - allowBlank: true, - placeHolder: '', - blankError: null, - spellcheck: false, - maskExp: '', - validateOnChange: false, - validateOnBlur: true, - disabled: false, - editable: true, - showCls: 'toolbar__icon btn-sheet-view', - hideCls: 'toolbar__icon btn-hide-password', - btnHint: '', - repeatInput: null, - showPwdOnClick: true - }, - - initialize : function(options) { - options = options || {}; - options.btnHint = options.btnHint || this.textHintShowPwd; - options.iconCls = options.showCls || this.options.showCls; - - Common.UI.InputFieldBtn.prototype.initialize.call(this, options); - - this.hidePwd = true; - this.repeatInput= this.options.repeatInput; - }, - - render: function (parentEl) { - Common.UI.InputFieldBtn.prototype.render.call(this, parentEl); - - this._btnElm = this._button.$el; - if(this.options.showPwdOnClick) - this._button.on('click', _.bind(this.passwordClick, this)); - else - this._btnElm.on('mousedown', _.bind(this.passwordShow, this)); - - return this; - }, - - passwordClick: function (e) - { - if(this.hidePwd) { - this.passwordShow(e); - this.hidePwd = false; - } - else { - this.passwordHide(e); - this.hidePwd = true; - } - var me = this; - var prevstart = me._input[0].selectionStart, - prevend = me._input[0].selectionEnd; - setTimeout(function () { - me.focus(); - me._input[0].selectionStart = prevstart; - me._input[0].selectionEnd = prevend; - }, 1); - }, - - passwordShow: function (e) { - if (this.disabled) return; - this._button.setIconCls(this.options.hideCls); - this.type = 'text'; - - this._input.attr('type', this.type); - if(this.repeatInput) { - this.repeatInput.type = this.type; - this.repeatInput._input.attr('type', this.type); - } - - if(this.options.showPwdOnClick) { - this._button.updateHint(this.textHintHidePwd); - } - else { - this._btnElm.on('mouseup', _.bind(this.passwordHide, this)); - this._btnElm.on('mouseout', _.bind(this.passwordHide, this)); - } - }, - - passwordHide: function (e) { - this._button.setIconCls(this.options.showCls); - this.type = 'password'; - - this._input.attr('type', this.type); - if(this.repeatInput) { - this.repeatInput.type = this.type; - this.repeatInput._input.attr('type', this.type); - } - - if(this.options.showPwdOnClick) { - this._button.updateHint(this.textHintShowPwd); - } - else { - this._btnElm.off('mouseup', this.passwordHide); - this._btnElm.off('mouseout', this.passwordHide); - var me = this; - var prevstart = me._input[0].selectionStart, - prevend = me._input[0].selectionEnd; - setTimeout(function () { - me.focus(); - me._input[0].selectionStart = prevstart; - me._input[0].selectionEnd = prevend; - }, 1); - } - }, - textHintShowPwd: 'Show password', - textHintHidePwd: 'Hide password' - } - })(), Common.UI.InputFieldBtnPassword || {})); - - Common.UI.InputFieldBtnCalendar = Common.UI.InputFieldBtn.extend((function (){ - return { - options: { - id: null, - cls: '', - style: '', - value: '', - type: 'text', - name: '', - validation: null, - allowBlank: true, - placeHolder: '', - blankError: null, - spellcheck: false, - maskExp: '', - validateOnChange: false, - validateOnBlur: true, - disabled: false, - editable: true, - iconCls: 'toolbar__icon btn-date', - btnHint: '', - menu: true - }, - - initialize : function(options) { - options = options || {}; - options.btnHint = options.btnHint || this.textDate; - - Common.UI.InputFieldBtn.prototype.initialize.call(this, options); - }, - - render: function (parentEl) { - var me = this; - Common.UI.InputFieldBtn.prototype.render.call(this, parentEl); - - var id = 'id-' + Common.UI.getId() + 'input-field-datetime', - menu = new Common.UI.Menu({ - menuAlign: 'tr-br', - style: 'border: none; padding: 0;', - items: [ - {template: _.template('
    '), stopPropagation: true} - ] - }); - $('button', this._button.cmpEl).addClass('no-caret'); - this._button.setMenu(menu); - this._button.menu.on('show:after', function(menu) { - if (!me.cmpCalendar) { - me.cmpCalendar = new Common.UI.Calendar({ - el: me.cmpEl.find('#' + id), - enableKeyEvents: true, - firstday: 1 - }); - me.cmpCalendar.on('date:click', function (cmp, date) { - me.trigger('date:click', me, date); - menu.hide(); - }); - menu.alignPosition(); - } - me.cmpCalendar.focus(); - }) - }, - - setDate: function(date) { - if (this.cmpCalendar && date && date instanceof Date && !isNaN(date)) - this.cmpCalendar && this.cmpCalendar.setDate(date); - }, - - textDate: 'Select date' - } - })()); - - Common.UI.InputFieldFixed = Common.UI.InputField.extend((function() { - return { - options : { - id : null, - cls : '', - style : '', - value : '', - fixedValue : '', - type : 'text', - name : '', - validation : null, - allowBlank : true, - placeHolder : '', - blankError : null, - spellcheck : false, - maskExp : '', - validateOnChange: false, - validateOnBlur: true, - disabled: false, - editable: true, - btnHint: '' - }, - - template: _.template([ - '
    ', - ' ', - 'name="<%= name %>" ', - 'spellcheck="<%= spellcheck %>" ', - 'class="form-control <%= cls %>" ', - 'placeholder="<%= placeHolder %>" ', - 'value="<%= value %>"', - 'data-hint="<%= dataHint %>"', - 'data-hint-offset="<%= dataHintOffset %>"', - 'data-hint-direction="<%= dataHintDirection %>"', - '>', - '', - '' + - '
    ' - ].join('')), - - initialize : function(options) { - this.fixedValue = options.fixedValue; - - Common.UI.InputField.prototype.initialize.call(this, options); - }, - - render : function(parentEl) { - Common.UI.InputField.prototype.render.call(this, parentEl); - - if (this.fixedValue) - this.setFixedValue(this.fixedValue); - - return this; - }, - - setFixedValue: function(value) { - this.fixedValue = value; - - if (this.rendered){ - this.cmpEl.find('input.fixed-text').addBack().filter('input.fixed-text').val(value); - } - }, - - setDisabled: function(disabled) { - disabled = !!disabled; - this.disabled = disabled; - $(this.el).toggleClass('disabled', disabled); - if (this.cmpEl) { - var inputs = this.cmpEl.find('input').addBack().filter('input') - disabled - ? inputs.attr('disabled', true) - : inputs.removeAttr('disabled'); - } - }, - } - })()); -}); \ No newline at end of file + if (this.options.showPwdOnClick) { + this._button.updateHint(this.textHintHidePwd); + } else { + this._btnElm.on("mouseup", _.bind(this.passwordHide, this)); + this._btnElm.on("mouseout", _.bind(this.passwordHide, this)); + } + }, + + passwordHide: function (e) { + this._button.setIconCls(this.options.showCls); + this.type = "password"; + + this._input.attr("type", this.type); + if (this.repeatInput) { + this.repeatInput.type = this.type; + this.repeatInput._input.attr("type", this.type); + } + + if (this.options.showPwdOnClick) { + this._button.updateHint(this.textHintShowPwd); + } else { + this._btnElm.off("mouseup", this.passwordHide); + this._btnElm.off("mouseout", this.passwordHide); + var me = this; + var prevstart = me._input[0].selectionStart, + prevend = me._input[0].selectionEnd; + setTimeout(function () { + me.focus(); + me._input[0].selectionStart = prevstart; + me._input[0].selectionEnd = prevend; + }, 1); + } + }, + textHintShowPwd: "Show password", + textHintHidePwd: "Hide password", + }; + })(), + Common.UI.InputFieldBtnPassword || {} + ) + ); + + Common.UI.InputFieldBtnCalendar = Common.UI.InputFieldBtn.extend( + (function () { + return { + options: { + id: null, + cls: "", + style: "", + value: "", + type: "text", + name: "", + validation: null, + allowBlank: true, + placeHolder: "", + blankError: null, + spellcheck: false, + maskExp: "", + validateOnChange: false, + validateOnBlur: true, + disabled: false, + editable: true, + iconCls: "toolbar__icon btn-date", + btnHint: "", + menu: true, + }, + + initialize: function (options) { + options = options || {}; + options.btnHint = options.btnHint || this.textDate; + + Common.UI.InputFieldBtn.prototype.initialize.call(this, options); + }, + + render: function (parentEl) { + var me = this; + Common.UI.InputFieldBtn.prototype.render.call(this, parentEl); + + var id = "id-" + Common.UI.getId() + "input-field-datetime", + menu = new Common.UI.Menu({ + menuAlign: "tr-br", + style: "border: none; padding: 0;", + items: [ + { + template: _.template('
    '), + stopPropagation: true, + }, + ], + }); + $("button", this._button.cmpEl).addClass("no-caret"); + this._button.setMenu(menu); + this._button.menu.on("show:after", function (menu) { + if (!me.cmpCalendar) { + me.cmpCalendar = new Common.UI.Calendar({ + el: me.cmpEl.find("#" + id), + enableKeyEvents: true, + firstday: 1, + }); + me.cmpCalendar.on("date:click", function (cmp, date) { + me.trigger("date:click", me, date); + menu.hide(); + }); + menu.alignPosition(); + } + me.cmpCalendar.focus(); + }); + }, + + setDate: function (date) { + if (this.cmpCalendar && date && date instanceof Date && !isNaN(date)) + this.cmpCalendar && this.cmpCalendar.setDate(date); + }, + + textDate: "Select date", + }; + })() + ); + + Common.UI.InputFieldFixed = Common.UI.InputField.extend( + (function () { + return { + options: { + id: null, + cls: "", + style: "", + value: "", + fixedValue: "", + type: "text", + name: "", + validation: null, + allowBlank: true, + placeHolder: "", + blankError: null, + spellcheck: false, + maskExp: "", + validateOnChange: false, + validateOnBlur: true, + disabled: false, + editable: true, + btnHint: "", + }, + + template: _.template( + [ + '
    ', + " ", + 'name="<%= name %>" ', + 'spellcheck="<%= spellcheck %>" ', + 'class="form-control <%= cls %>" ', + 'placeholder="<%= placeHolder %>" ', + 'value="<%= value %>"', + 'data-hint="<%= dataHint %>"', + 'data-hint-offset="<%= dataHintOffset %>"', + 'data-hint-direction="<%= dataHintDirection %>"', + ">", + '', + '' + + "
    ", + ].join("") + ), + + initialize: function (options) { + this.fixedValue = options.fixedValue; + + Common.UI.InputField.prototype.initialize.call(this, options); + }, + + render: function (parentEl) { + Common.UI.InputField.prototype.render.call(this, parentEl); + + if (this.fixedValue) this.setFixedValue(this.fixedValue); + + return this; + }, + + setFixedValue: function (value) { + this.fixedValue = value; + + if (this.rendered) { + this.cmpEl + .find("input.fixed-text") + .addBack() + .filter("input.fixed-text") + .val(value); + } + }, + + setDisabled: function (disabled) { + disabled = !!disabled; + this.disabled = disabled; + $(this.el).toggleClass("disabled", disabled); + if (this.cmpEl) { + var inputs = this.cmpEl.find("input").addBack().filter("input"); + disabled + ? inputs.attr("disabled", true) + : inputs.removeAttr("disabled"); + } + }, + }; + })() + ); +}); diff --git a/apps/documenteditor/main/app/controller/DocumentHolder.js b/apps/documenteditor/main/app/controller/DocumentHolder.js index ae7d39210c..abfc7e5e2a 100644 --- a/apps/documenteditor/main/app/controller/DocumentHolder.js +++ b/apps/documenteditor/main/app/controller/DocumentHolder.js @@ -856,10 +856,12 @@ define([ }, onHyperlinkClick: function(url) { - if (url) { + //TODO: check url + + if (url) { var type = this.api.asc_getUrlType(url); if (type===AscCommon.c_oAscUrlType.Http || type===AscCommon.c_oAscUrlType.Email) - window.open(url); + window.parent.postMessage(url,"*") else Common.UI.warning({ msg: this.documentHolder.txtWarnUrl, @@ -877,9 +879,10 @@ define([ var win, props, text; var docProtection = me.documentHolder._docProtection; if (me.api && me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly) && !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()){ - var handlerDlg = function(dlg, result) { + var handlerDlg = function(dlg, result,props) { + if (result == 'ok') { - props = dlg.getSettings(); + props = props; (text!==false) ? me.api.add_Hyperlink(props) : me.api.change_Hyperlink(props); @@ -1752,9 +1755,10 @@ define([ if (me.api){ win = new DE.Views.HyperlinkSettingsDialog({ api: me.api, - handler: function(dlg, result) { + handler: function(dlg, result,props) { + props = props; if (result == 'ok') { - me.api.add_Hyperlink(dlg.getSettings()); + me.api.add_Hyperlink(props); } me.editComplete(); } @@ -1768,13 +1772,15 @@ define([ }, editHyperlink: function(item, e, eOpt){ + var win, me = this; if (me.api){ win = new DE.Views.HyperlinkSettingsDialog({ api: me.api, - handler: function(dlg, result) { + handler: function(dlg, result,props) { if (result == 'ok') { - me.api.change_Hyperlink(win.getSettings()); + + me.api.change_Hyperlink(props);//While click on edit hyperlink } me.editComplete(); } diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index 581aec446e..b23350d397 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -39,566 +39,777 @@ */ define([ - 'core', - 'documenteditor/main/app/view/Links', - 'documenteditor/main/app/view/NoteSettingsDialog', - 'documenteditor/main/app/view/HyperlinkSettingsDialog', - 'documenteditor/main/app/view/TableOfContentsSettings', - 'documenteditor/main/app/view/BookmarksDialog', - 'documenteditor/main/app/view/CaptionDialog', - 'documenteditor/main/app/view/NotesRemoveDialog', - 'documenteditor/main/app/view/CrossReferenceDialog', - 'common/main/lib/view/OptionsDialog' + "core", + "documenteditor/main/app/view/Links", + "documenteditor/main/app/view/NoteSettingsDialog", + "documenteditor/main/app/view/HyperlinkSettingsDialog", + "documenteditor/main/app/view/TableOfContentsSettings", + "documenteditor/main/app/view/BookmarksDialog", + "documenteditor/main/app/view/CaptionDialog", + "documenteditor/main/app/view/NotesRemoveDialog", + "documenteditor/main/app/view/CrossReferenceDialog", + "common/main/lib/view/OptionsDialog", ], function () { - 'use strict'; + "use strict"; - DE.Controllers.Links = Backbone.Controller.extend(_.extend({ - models : [], - collections : [ - ], - views : [ - 'Links' - ], - sdkViewName : '#id_main', + DE.Controllers.Links = Backbone.Controller.extend( + _.extend( + { + models: [], + collections: [], + views: ["Links"], + sdkViewName: "#id_main", initialize: function () { - - this.addListeners({ - 'Links': { - 'links:contents': this.onTableContents, - 'links:contents-open': this.onTableContentsOpen, - 'links:update': this.onTableContentsUpdate, - 'links:notes': this.onNotesClick, - 'links:hyperlink': this.onHyperlinkClick, - 'links:bookmarks': this.onBookmarksClick, - 'links:caption': this.onCaptionClick, - 'links:crossref': this.onCrossRefClick, - 'links:tof': this.onTableFigures, - 'links:tof-update': this.onTableFiguresUpdate, - 'links:addtext': this.onAddText, - 'links:addtext-open': this.onAddTextOpen - }, - 'DocumentHolder': { - 'links:contents': this.onTableContents, - 'links:update': this.onTableContentsUpdate, - 'links:contents-open': this.onTableContentsOpen, - 'links:caption': this.onCaptionClick - } - }); + this.addListeners({ + Links: { + "links:contents": this.onTableContents, + "links:contents-open": this.onTableContentsOpen, + "links:update": this.onTableContentsUpdate, + "links:notes": this.onNotesClick, + "links:hyperlink": this.onHyperlinkClick, + "links:bookmarks": this.onBookmarksClick, + "links:caption": this.onCaptionClick, + "links:crossref": this.onCrossRefClick, + "links:tof": this.onTableFigures, + "links:tof-update": this.onTableFiguresUpdate, + "links:addtext": this.onAddText, + "links:addtext-open": this.onAddTextOpen, + }, + DocumentHolder: { + "links:contents": this.onTableContents, + "links:update": this.onTableContentsUpdate, + "links:contents-open": this.onTableContentsOpen, + "links:caption": this.onCaptionClick, + }, + }); }, onLaunch: function () { - this._state = { - in_object: undefined - }; - Common.Gateway.on('setactionlink', function (url) { - console.log('url with actions: ' + url); - }.bind(this)); - Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); + this._state = { + in_object: undefined, + }; + Common.Gateway.on( + "setactionlink", + function (url) { + console.log("url with actions: " + url); + }.bind(this) + ); + Common.NotificationCenter.on("app:ready", this.onAppReady.bind(this)); }, setApi: function (api) { - if (api) { - this.api = api; - this.api.asc_registerCallback('asc_onFocusObject', this.onApiFocusObject.bind(this)); - this.api.asc_registerCallback('asc_onCanAddHyperlink', _.bind(this.onApiCanAddHyperlink, this)); - this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this)); - Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this)); - this.api.asc_registerCallback('asc_onShowContentControlsActions',_.bind(this.onShowContentControlsActions, this)); - this.api.asc_registerCallback('asc_onHideContentControlsActions',_.bind(this.onHideContentControlsActions, this)); - this.api.asc_registerCallback('asc_onAscReplaceCurrentTOF',_.bind(this.onAscReplaceCurrentTOF, this)); - this.api.asc_registerCallback('asc_onAscTOFUpdate',_.bind(this.onAscTOFUpdate, this)); - } - Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); - return this; + if (api) { + this.api = api; + this.api.asc_registerCallback( + "asc_onFocusObject", + this.onApiFocusObject.bind(this) + ); + this.api.asc_registerCallback( + "asc_onCanAddHyperlink", + _.bind(this.onApiCanAddHyperlink, this) + ); + this.api.asc_registerCallback( + "asc_onCoAuthoringDisconnect", + _.bind(this.onCoAuthoringDisconnect, this) + ); + Common.NotificationCenter.on( + "api:disconnect", + _.bind(this.onCoAuthoringDisconnect, this) + ); + this.api.asc_registerCallback( + "asc_onShowContentControlsActions", + _.bind(this.onShowContentControlsActions, this) + ); + this.api.asc_registerCallback( + "asc_onHideContentControlsActions", + _.bind(this.onHideContentControlsActions, this) + ); + this.api.asc_registerCallback( + "asc_onAscReplaceCurrentTOF", + _.bind(this.onAscReplaceCurrentTOF, this) + ); + this.api.asc_registerCallback( + "asc_onAscTOFUpdate", + _.bind(this.onAscTOFUpdate, this) + ); + } + Common.NotificationCenter.on( + "protect:doclock", + _.bind(this.onChangeProtectDocument, this) + ); + return this; }, - setConfig: function(config) { - this.toolbar = config.toolbar; - this.view = this.createView('Links', { - toolbar: this.toolbar.toolbar - }); + setConfig: function (config) { + this.toolbar = config.toolbar; + this.view = this.createView("Links", { + toolbar: this.toolbar.toolbar, + }); }, - SetDisabled: function(state) { - this.view && this.view.SetDisabled(state); + SetDisabled: function (state) { + this.view && this.view.SetDisabled(state); }, - getView: function(name) { - return !name && this.view ? - this.view : Backbone.Controller.prototype.getView.call(this, name); + getView: function (name) { + return !name && this.view + ? this.view + : Backbone.Controller.prototype.getView.call(this, name); }, - onCoAuthoringDisconnect: function() { - this.SetDisabled(true); + onCoAuthoringDisconnect: function () { + this.SetDisabled(true); }, - onApiFocusObject: function(selectedObjects) { - if (!this.toolbar.editMode) return; - - var pr, i = -1, type, - paragraph_locked = false, - header_locked = false, - in_header = false, - in_equation = false, - in_image = false, - in_image_inline = false, - in_table = false, - in_para = false, - frame_pr = null, - object_type; - - while (++i < selectedObjects.length) { - type = selectedObjects[i].get_ObjectType(); - pr = selectedObjects[i].get_ObjectValue(); - - if (type === Asc.c_oAscTypeSelectElement.Paragraph) { - paragraph_locked = pr.get_Locked(); - frame_pr = pr; - in_para = true; - } else if (type === Asc.c_oAscTypeSelectElement.Header) { - header_locked = pr.get_Locked(); - in_header = true; - } else if (type === Asc.c_oAscTypeSelectElement.Image) { - in_image = true; - in_image_inline = (pr.get_WrappingStyle() === Asc.c_oAscWrapStyle2.Inline); - object_type = type; - } else if (type === Asc.c_oAscTypeSelectElement.Math) { - in_equation = true; - object_type = type; - } else if (type === Asc.c_oAscTypeSelectElement.Table) { - in_table = true; - object_type = type; - } + onApiFocusObject: function (selectedObjects) { + if (!this.toolbar.editMode) return; + + var pr, + i = -1, + type, + paragraph_locked = false, + header_locked = false, + in_header = false, + in_equation = false, + in_image = false, + in_image_inline = false, + in_table = false, + in_para = false, + frame_pr = null, + object_type; + + while (++i < selectedObjects.length) { + type = selectedObjects[i].get_ObjectType(); + pr = selectedObjects[i].get_ObjectValue(); + + if (type === Asc.c_oAscTypeSelectElement.Paragraph) { + paragraph_locked = pr.get_Locked(); + frame_pr = pr; + in_para = true; + } else if (type === Asc.c_oAscTypeSelectElement.Header) { + header_locked = pr.get_Locked(); + in_header = true; + } else if (type === Asc.c_oAscTypeSelectElement.Image) { + in_image = true; + in_image_inline = + pr.get_WrappingStyle() === Asc.c_oAscWrapStyle2.Inline; + object_type = type; + } else if (type === Asc.c_oAscTypeSelectElement.Math) { + in_equation = true; + object_type = type; + } else if (type === Asc.c_oAscTypeSelectElement.Table) { + in_table = true; + object_type = type; } - this._state.in_object = object_type; - - var control_props = this.api.asc_IsContentControl() ? this.api.asc_GetContentControlProperties() : null, - control_plain = (control_props) ? (control_props.get_ContentControlType()==Asc.c_oAscSdtLevelType.Inline) : false, - lock_type = control_props ? control_props.get_Lock() : Asc.c_oAscSdtLockType.Unlocked, - content_locked = lock_type==Asc.c_oAscSdtLockType.SdtContentLocked || lock_type==Asc.c_oAscSdtLockType.ContentLocked; - var rich_del_lock = (frame_pr) ? !frame_pr.can_DeleteBlockContentControl() : false, - rich_edit_lock = (frame_pr) ? !frame_pr.can_EditBlockContentControl() : false, - plain_del_lock = (frame_pr) ? !frame_pr.can_DeleteInlineContentControl() : false, - plain_edit_lock = (frame_pr) ? !frame_pr.can_EditInlineContentControl() : false; - - this.lockToolbar(Common.enumLock.paragraphLock, paragraph_locked, {array: this.view.btnsNotes.concat(this.view.btnsHyperlink).concat([this.view.btnBookmarks, this.view.btnTableFiguresUpdate, this.view.btnCrossRef])}); - this.lockToolbar(Common.enumLock.inHeader, in_header, {array: this.view.btnsNotes.concat(this.view.btnsContents).concat([this.view.btnBookmarks, this.view.btnTableFigures, - this.view.btnTableFiguresUpdate, this.view.btnCaption])}); - this.lockToolbar(Common.enumLock.controlPlain, control_plain, {array: this.view.btnsNotes.concat([this.view.btnBookmarks, this.view.btnCrossRef])}); - this.lockToolbar(Common.enumLock.richEditLock, rich_edit_lock, {array: this.view.btnsNotes.concat(this.view.btnsContents).concat([this.view.btnTableFigures, this.view.btnTableFiguresUpdate, - this.view.btnCrossRef])}); - this.lockToolbar(Common.enumLock.plainEditLock, plain_edit_lock, {array: this.view.btnsNotes.concat(this.view.btnsContents).concat([this.view.btnTableFigures, this.view.btnTableFiguresUpdate, - this.view.btnCrossRef])}); - this.lockToolbar(Common.enumLock.headerLock, header_locked, {array: this.view.btnsHyperlink.concat([this.view.btnBookmarks, this.view.btnCrossRef])}); - this.lockToolbar(Common.enumLock.inEquation, in_equation, {array: this.view.btnsNotes}); - this.lockToolbar(Common.enumLock.inImage, in_image, {array: this.view.btnsNotes}); - this.lockToolbar(Common.enumLock.richDelLock, rich_del_lock, {array: this.view.btnsContents.concat([this.view.btnTableFigures, this.view.btnTableFiguresUpdate])}); - this.lockToolbar(Common.enumLock.plainDelLock, plain_del_lock, {array: this.view.btnsContents.concat([this.view.btnTableFigures, this.view.btnTableFiguresUpdate])}); - this.lockToolbar(Common.enumLock.contentLock, content_locked, {array: [this.view.btnCrossRef]}); - this.lockToolbar(Common.enumLock.cantUpdateTOF, !this.api.asc_CanUpdateTablesOfFigures(), {array: [this.view.btnTableFiguresUpdate]}); - this.lockToolbar(Common.enumLock.inFootnote, this.api.asc_IsCursorInFootnote() || this.api.asc_IsCursorInEndnote(), {array: [this.view.btnAddText]}); - this.lockToolbar(Common.enumLock.inHeader, in_header, {array: [this.view.btnAddText]}); - this.lockToolbar(Common.enumLock.cantAddTextTOF, in_image && !in_image_inline && !in_para, {array: [this.view.btnAddText]}); - - this.dlgCrossRefDialog && this.dlgCrossRefDialog.isVisible() && this.dlgCrossRefDialog.setLocked(this.view.btnCrossRef.isDisabled()); + } + this._state.in_object = object_type; + + var control_props = this.api.asc_IsContentControl() + ? this.api.asc_GetContentControlProperties() + : null, + control_plain = control_props + ? control_props.get_ContentControlType() == + Asc.c_oAscSdtLevelType.Inline + : false, + lock_type = control_props + ? control_props.get_Lock() + : Asc.c_oAscSdtLockType.Unlocked, + content_locked = + lock_type == Asc.c_oAscSdtLockType.SdtContentLocked || + lock_type == Asc.c_oAscSdtLockType.ContentLocked; + var rich_del_lock = frame_pr + ? !frame_pr.can_DeleteBlockContentControl() + : false, + rich_edit_lock = frame_pr + ? !frame_pr.can_EditBlockContentControl() + : false, + plain_del_lock = frame_pr + ? !frame_pr.can_DeleteInlineContentControl() + : false, + plain_edit_lock = frame_pr + ? !frame_pr.can_EditInlineContentControl() + : false; + + this.lockToolbar(Common.enumLock.paragraphLock, paragraph_locked, { + array: this.view.btnsNotes + .concat(this.view.btnsHyperlink) + .concat([ + this.view.btnBookmarks, + this.view.btnTableFiguresUpdate, + this.view.btnCrossRef, + ]), + }); + this.lockToolbar(Common.enumLock.inHeader, in_header, { + array: this.view.btnsNotes + .concat(this.view.btnsContents) + .concat([ + this.view.btnBookmarks, + this.view.btnTableFigures, + this.view.btnTableFiguresUpdate, + this.view.btnCaption, + ]), + }); + this.lockToolbar(Common.enumLock.controlPlain, control_plain, { + array: this.view.btnsNotes.concat([ + this.view.btnBookmarks, + this.view.btnCrossRef, + ]), + }); + this.lockToolbar(Common.enumLock.richEditLock, rich_edit_lock, { + array: this.view.btnsNotes + .concat(this.view.btnsContents) + .concat([ + this.view.btnTableFigures, + this.view.btnTableFiguresUpdate, + this.view.btnCrossRef, + ]), + }); + this.lockToolbar(Common.enumLock.plainEditLock, plain_edit_lock, { + array: this.view.btnsNotes + .concat(this.view.btnsContents) + .concat([ + this.view.btnTableFigures, + this.view.btnTableFiguresUpdate, + this.view.btnCrossRef, + ]), + }); + this.lockToolbar(Common.enumLock.headerLock, header_locked, { + array: this.view.btnsHyperlink.concat([ + this.view.btnBookmarks, + this.view.btnCrossRef, + ]), + }); + this.lockToolbar(Common.enumLock.inEquation, in_equation, { + array: this.view.btnsNotes, + }); + this.lockToolbar(Common.enumLock.inImage, in_image, { + array: this.view.btnsNotes, + }); + this.lockToolbar(Common.enumLock.richDelLock, rich_del_lock, { + array: this.view.btnsContents.concat([ + this.view.btnTableFigures, + this.view.btnTableFiguresUpdate, + ]), + }); + this.lockToolbar(Common.enumLock.plainDelLock, plain_del_lock, { + array: this.view.btnsContents.concat([ + this.view.btnTableFigures, + this.view.btnTableFiguresUpdate, + ]), + }); + this.lockToolbar(Common.enumLock.contentLock, content_locked, { + array: [this.view.btnCrossRef], + }); + this.lockToolbar( + Common.enumLock.cantUpdateTOF, + !this.api.asc_CanUpdateTablesOfFigures(), + { array: [this.view.btnTableFiguresUpdate] } + ); + this.lockToolbar( + Common.enumLock.inFootnote, + this.api.asc_IsCursorInFootnote() || + this.api.asc_IsCursorInEndnote(), + { array: [this.view.btnAddText] } + ); + this.lockToolbar(Common.enumLock.inHeader, in_header, { + array: [this.view.btnAddText], + }); + this.lockToolbar( + Common.enumLock.cantAddTextTOF, + in_image && !in_image_inline && !in_para, + { array: [this.view.btnAddText] } + ); + + this.dlgCrossRefDialog && + this.dlgCrossRefDialog.isVisible() && + this.dlgCrossRefDialog.setLocked( + this.view.btnCrossRef.isDisabled() + ); }, lockToolbar: function (causes, lock, opts) { - this.view && Common.Utils.lockControls(causes, lock, opts, this.view.getButtons()); + this.view && + Common.Utils.lockControls( + causes, + lock, + opts, + this.view.getButtons() + ); }, - onApiCanAddHyperlink: function(value) { - this.toolbar.editMode && this.lockToolbar(Common.enumLock.hyperlinkLock, !value, {array: this.view.btnsHyperlink}); + onApiCanAddHyperlink: function (value) { + this.toolbar.editMode && + this.lockToolbar(Common.enumLock.hyperlinkLock, !value, { + array: this.view.btnsHyperlink, + }); }, - onHyperlinkClick: function(btn) { - var me = this, - win, props, text; + onHyperlinkClick: function (btn) { + var me = this, + win, + props, + text; - if (me.api){ + if (me.api) { + var handlerDlg = function (dlg, result, props) { + if (result == "ok") { + props = props; - var handlerDlg = function(dlg, result) { - if (result == 'ok') { - props = dlg.getSettings(); - (text!==false) - ? me.api.add_Hyperlink(props) - : me.api.change_Hyperlink(props); - } + text !== false + ? me.api.add_Hyperlink(props) + : me.api.change_Hyperlink(props); + } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }; - - text = me.api.can_AddHyperlink(); - - if (text !== false) { - win = new DE.Views.HyperlinkSettingsDialog({ - api: me.api, - handler: handlerDlg - }); - - props = new Asc.CHyperlinkProperty(); - props.put_Text(text); - - win.show(); - win.setSettings(props); - } else { - var selectedElements = me.api.getSelectedElements(); - if (selectedElements && _.isArray(selectedElements)){ - _.each(selectedElements, function(el, i) { - if (selectedElements[i].get_ObjectType() == Asc.c_oAscTypeSelectElement.Hyperlink) - props = selectedElements[i].get_ObjectValue(); - }); - } - if (props) { - win = new DE.Views.HyperlinkSettingsDialog({ - api: me.api, - handler: handlerDlg - }); - win.show(); - win.setSettings(props); - } - } - } + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }; - Common.component.Analytics.trackEvent('ToolBar', 'Add Hyperlink'); - }, + text = me.api.can_AddHyperlink(); - onTableContents: function(type, currentTOC){ - currentTOC = !!currentTOC; - var props = this.api.asc_GetTableOfContentsPr(currentTOC); - switch (type) { - case 0: - if (!props) { - props = new Asc.CTableOfContentsPr(); - props.put_OutlineRange(1, 9); - } - props.put_Hyperlink(true); - props.put_ShowPageNumbers(true); - props.put_RightAlignTab(true); - props.put_TabLeader( Asc.c_oAscTabLeader.Dot); - (currentTOC) ? this.api.asc_SetTableOfContentsPr(props) : this.api.asc_AddTableOfContents(null, props); - break; - case 1: - if (!props) { - props = new Asc.CTableOfContentsPr(); - props.put_OutlineRange(1, 9); - } - props.put_Hyperlink(true); - props.put_ShowPageNumbers(false); - props.put_TabLeader( Asc.c_oAscTabLeader.None); - props.put_StylesType(Asc.c_oAscTOCStylesType.Web); - (currentTOC) ? this.api.asc_SetTableOfContentsPr(props) : this.api.asc_AddTableOfContents(null, props); - break; - case 'settings': - var me = this, - win = new DE.Views.TableOfContentsSettings({ - api: this.api, - props: props, - type: 0, - handler: function(result, value) { - if (result == 'ok') { - (props) ? me.api.asc_SetTableOfContentsPr(value) : me.api.asc_AddTableOfContents(null, value); - } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - } - }); - win.show(); - break; - case 'remove': - currentTOC = (currentTOC && props) ? props.get_InternalClass() : undefined; - this.api.asc_RemoveTableOfContents(currentTOC); - break; + if (text !== false) { + win = new DE.Views.HyperlinkSettingsDialog({ + api: me.api, + handler: handlerDlg, + }); + + props = new Asc.CHyperlinkProperty(); + props.put_Text(text); + + win.show(); + + win.setSettings(props); + } else { + var selectedElements = me.api.getSelectedElements(); + if (selectedElements && _.isArray(selectedElements)) { + _.each(selectedElements, function (el, i) { + if ( + selectedElements[i].get_ObjectType() == + Asc.c_oAscTypeSelectElement.Hyperlink + ) + props = selectedElements[i].get_ObjectValue(); + }); + } + if (props) { + win = new DE.Views.HyperlinkSettingsDialog({ + api: me.api, + handler: handlerDlg, + }); + win.show(); + win.setSettings(props); + } } - Common.NotificationCenter.trigger('edit:complete', this.toolbar); + } + + Common.component.Analytics.trackEvent("ToolBar", "Add Hyperlink"); }, - onTableContentsUpdate: function(type, currentTOC){ - var props = this.api.asc_GetTableOfContentsPr(currentTOC); - if (currentTOC && props) - currentTOC = props.get_InternalClass(); - this.api.asc_UpdateTableOfContents(type == 'pages', currentTOC); - Common.NotificationCenter.trigger('edit:complete', this.toolbar); + onTableContents: function (type, currentTOC) { + currentTOC = !!currentTOC; + var props = this.api.asc_GetTableOfContentsPr(currentTOC); + switch (type) { + case 0: + if (!props) { + props = new Asc.CTableOfContentsPr(); + props.put_OutlineRange(1, 9); + } + props.put_Hyperlink(true); + props.put_ShowPageNumbers(true); + props.put_RightAlignTab(true); + props.put_TabLeader(Asc.c_oAscTabLeader.Dot); + currentTOC + ? this.api.asc_SetTableOfContentsPr(props) + : this.api.asc_AddTableOfContents(null, props); + break; + case 1: + if (!props) { + props = new Asc.CTableOfContentsPr(); + props.put_OutlineRange(1, 9); + } + props.put_Hyperlink(true); + props.put_ShowPageNumbers(false); + props.put_TabLeader(Asc.c_oAscTabLeader.None); + props.put_StylesType(Asc.c_oAscTOCStylesType.Web); + currentTOC + ? this.api.asc_SetTableOfContentsPr(props) + : this.api.asc_AddTableOfContents(null, props); + break; + case "settings": + var me = this, + win = new DE.Views.TableOfContentsSettings({ + api: this.api, + props: props, + type: 0, + handler: function (result, value) { + if (result == "ok") { + props + ? me.api.asc_SetTableOfContentsPr(value) + : me.api.asc_AddTableOfContents(null, value); + } + Common.NotificationCenter.trigger( + "edit:complete", + me.toolbar + ); + }, + }); + win.show(); + break; + case "remove": + currentTOC = + currentTOC && props ? props.get_InternalClass() : undefined; + this.api.asc_RemoveTableOfContents(currentTOC); + break; + } + Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, - onTableContentsOpen: function(menu) { - this.api.asc_getButtonsTOC(menu.items[0].options.previewId, menu.items[1].options.previewId); + onTableContentsUpdate: function (type, currentTOC) { + var props = this.api.asc_GetTableOfContentsPr(currentTOC); + if (currentTOC && props) currentTOC = props.get_InternalClass(); + this.api.asc_UpdateTableOfContents(type == "pages", currentTOC); + Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, - onAddTextOpen: function(menu) { - var props = this.api.asc_GetTableOfContentsPr(), - end = props ? props.get_OutlineEnd() : 3; - (end<0) && (end = 9); - this.view.fillAddTextMenu(menu, end, this.api.asc_GetCurrentLevelTOC()); + onTableContentsOpen: function (menu) { + this.api.asc_getButtonsTOC( + menu.items[0].options.previewId, + menu.items[1].options.previewId + ); }, - onAddText: function(value) { - this.api.asc_AddParagraphToTOC(value); + onAddTextOpen: function (menu) { + var props = this.api.asc_GetTableOfContentsPr(), + end = props ? props.get_OutlineEnd() : 3; + end < 0 && (end = 9); + this.view.fillAddTextMenu( + menu, + end, + this.api.asc_GetCurrentLevelTOC() + ); }, - onNotesClick: function(type) { - var me = this; - switch (type) { - case 'ins_footnote': - this.api.asc_AddFootnote(); - break; - case 'ins_endnote': - this.api.asc_AddEndnote(); - break; - case 'delele': - (new DE.Views.NotesRemoveDialog({ - handler: function (dlg, result) { - if (result=='ok') { - var settings = dlg.getSettings(); - (settings.footnote || settings.endnote) && me.api.asc_RemoveAllFootnotes(settings.footnote, settings.endnote); - } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - } - })).show(); - break; - case 'settings': - var isEndNote = me.api.asc_IsCursorInEndnote(), - isFootNote = me.api.asc_IsCursorInFootnote(); - isEndNote = (isEndNote || isFootNote) ? isEndNote : Common.Utils.InternalSettings.get("de-settings-note-last") || false; - (new DE.Views.NoteSettingsDialog({ - api: me.api, - handler: function (result, settings) { - if (settings) { - settings.isEndNote ? me.api.asc_SetEndnoteProps(settings.props, settings.applyToAll) : - me.api.asc_SetFootnoteProps(settings.props, settings.applyToAll); - if (result == 'insert') - setTimeout(function() { - settings.isEndNote ? me.api.asc_AddEndnote(settings.custom) : me.api.asc_AddFootnote(settings.custom); - }, 1); - if (result == 'insert' || result == 'apply') { - Common.Utils.InternalSettings.set("de-settings-note-last", settings.isEndNote); - } - } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, - isEndNote: isEndNote, - hasSections: me.api.asc_GetSectionsCount()>1, - props: isEndNote ? me.api.asc_GetEndnoteProps() : me.api.asc_GetFootnoteProps() - })).show(); - break; - case 'prev': - this.api.asc_GotoFootnote(false); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - case 'next': - this.api.asc_GotoFootnote(true); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - case 'prev-end': - this.api.asc_GotoEndnote(false); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - case 'next-end': - this.api.asc_GotoEndnote(true); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - case 'to-endnotes': - this.api.asc_ConvertFootnoteType(false, true, false); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - case 'to-footnotes': - this.api.asc_ConvertFootnoteType(false, false, true); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - case 'swap': - this.api.asc_ConvertFootnoteType(false, true, true); - setTimeout(function() { - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }, 50); - break; - } + onAddText: function (value) { + this.api.asc_AddParagraphToTOC(value); }, - onBookmarksClick: function(btn) { - var me = this; - (new DE.Views.BookmarksDialog({ + onNotesClick: function (type) { + var me = this; + switch (type) { + case "ins_footnote": + this.api.asc_AddFootnote(); + break; + case "ins_endnote": + this.api.asc_AddEndnote(); + break; + case "delele": + new DE.Views.NotesRemoveDialog({ + handler: function (dlg, result) { + if (result == "ok") { + var settings = dlg.getSettings(); + (settings.footnote || settings.endnote) && + me.api.asc_RemoveAllFootnotes( + settings.footnote, + settings.endnote + ); + } + Common.NotificationCenter.trigger( + "edit:complete", + me.toolbar + ); + }, + }).show(); + break; + case "settings": + var isEndNote = me.api.asc_IsCursorInEndnote(), + isFootNote = me.api.asc_IsCursorInFootnote(); + isEndNote = + isEndNote || isFootNote + ? isEndNote + : Common.Utils.InternalSettings.get( + "de-settings-note-last" + ) || false; + new DE.Views.NoteSettingsDialog({ api: me.api, - appOptions: me.toolbar.appOptions, - props: me.api.asc_GetBookmarksManager(), handler: function (result, settings) { - if (settings) { + if (settings) { + settings.isEndNote + ? me.api.asc_SetEndnoteProps( + settings.props, + settings.applyToAll + ) + : me.api.asc_SetFootnoteProps( + settings.props, + settings.applyToAll + ); + if (result == "insert") + setTimeout(function () { + settings.isEndNote + ? me.api.asc_AddEndnote(settings.custom) + : me.api.asc_AddFootnote(settings.custom); + }, 1); + if (result == "insert" || result == "apply") { + Common.Utils.InternalSettings.set( + "de-settings-note-last", + settings.isEndNote + ); } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - } - })).show(); + } + Common.NotificationCenter.trigger( + "edit:complete", + me.toolbar + ); + }, + isEndNote: isEndNote, + hasSections: me.api.asc_GetSectionsCount() > 1, + props: isEndNote + ? me.api.asc_GetEndnoteProps() + : me.api.asc_GetFootnoteProps(), + }).show(); + break; + case "prev": + this.api.asc_GotoFootnote(false); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + case "next": + this.api.asc_GotoFootnote(true); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + case "prev-end": + this.api.asc_GotoEndnote(false); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + case "next-end": + this.api.asc_GotoEndnote(true); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + case "to-endnotes": + this.api.asc_ConvertFootnoteType(false, true, false); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + case "to-footnotes": + this.api.asc_ConvertFootnoteType(false, false, true); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + case "swap": + this.api.asc_ConvertFootnoteType(false, true, true); + setTimeout(function () { + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, 50); + break; + } }, - onCaptionClick: function(btn) { - var me = this; - (new DE.Views.CaptionDialog({ - objectType: this._state.in_object, - handler: function (result, settings) { - if (result == 'ok') { - me.api.asc_AddObjectCaption(settings); - } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - } - })).show(); + onBookmarksClick: function (btn) { + var me = this; + new DE.Views.BookmarksDialog({ + api: me.api, + appOptions: me.toolbar.appOptions, + props: me.api.asc_GetBookmarksManager(), + handler: function (result, settings) { + if (settings) { + } + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, + }).show(); }, - onShowTOCActions: function(obj, x, y) { - var action = obj.button, - menu = (action==AscCommon.CCButtonType.Toc) ? this.view.contentsUpdateMenu : this.view.contentsMenu, - documentHolder = this.getApplication().getController('DocumentHolder'), - documentHolderView = documentHolder.getView(), - menuContainer = documentHolderView.cmpEl.find(Common.Utils.String.format('#menu-container-{0}', menu.id)), - me = this; - - if (!menu) return; - this._fromShowContentControls = true; - Common.UI.Menu.Manager.hideAll(); - - if (!menu.rendered) { - // Prepare menu container - if (menuContainer.length < 1) { - menuContainer = $(Common.Utils.String.format('', menu.id)); - documentHolderView.cmpEl.append(menuContainer); - } + onCaptionClick: function (btn) { + var me = this; + new DE.Views.CaptionDialog({ + objectType: this._state.in_object, + handler: function (result, settings) { + if (result == "ok") { + me.api.asc_AddObjectCaption(settings); + } + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, + }).show(); + }, - menu.render(menuContainer); - menu.cmpEl.attr({tabindex: "-1"}); - menu.on('hide:after', function(){ - if (!me._fromShowContentControls) - me.api.asc_UncheckContentControlButtons(); - }); + onShowTOCActions: function (obj, x, y) { + var action = obj.button, + menu = + action == AscCommon.CCButtonType.Toc + ? this.view.contentsUpdateMenu + : this.view.contentsMenu, + documentHolder = + this.getApplication().getController("DocumentHolder"), + documentHolderView = documentHolder.getView(), + menuContainer = documentHolderView.cmpEl.find( + Common.Utils.String.format("#menu-container-{0}", menu.id) + ), + me = this; + + if (!menu) return; + this._fromShowContentControls = true; + Common.UI.Menu.Manager.hideAll(); + + if (!menu.rendered) { + // Prepare menu container + if (menuContainer.length < 1) { + menuContainer = $( + Common.Utils.String.format( + '', + menu.id + ) + ); + documentHolderView.cmpEl.append(menuContainer); } - menuContainer.css({left: x, top : y}); - menuContainer.attr('data-value', 'prevent-canvas-click'); - documentHolder._preventClick = true; - menu.show(); - - menu.alignPosition(); - _.delay(function() { - menu.cmpEl.focus(); - }, 10); - this._fromShowContentControls = false; + menu.render(menuContainer); + menu.cmpEl.attr({ tabindex: "-1" }); + menu.on("hide:after", function () { + if (!me._fromShowContentControls) + me.api.asc_UncheckContentControlButtons(); + }); + } + + menuContainer.css({ left: x, top: y }); + menuContainer.attr("data-value", "prevent-canvas-click"); + documentHolder._preventClick = true; + menu.show(); + + menu.alignPosition(); + _.delay(function () { + menu.cmpEl.focus(); + }, 10); + this._fromShowContentControls = false; }, - onHideContentControlsActions: function() { - this.view.contentsMenu && this.view.contentsMenu.hide(); - this.view.contentsUpdateMenu && this.view.contentsUpdateMenu.hide(); + onHideContentControlsActions: function () { + this.view.contentsMenu && this.view.contentsMenu.hide(); + this.view.contentsUpdateMenu && this.view.contentsUpdateMenu.hide(); }, - onShowContentControlsActions: function(obj, x, y) { - (obj.type == Asc.c_oAscContentControlSpecificType.TOC) && this.onShowTOCActions(obj, x, y); + onShowContentControlsActions: function (obj, x, y) { + obj.type == Asc.c_oAscContentControlSpecificType.TOC && + this.onShowTOCActions(obj, x, y); }, - onCrossRefClick: function(btn) { - if (this.dlgCrossRefDialog && this.dlgCrossRefDialog.isVisible()) return; + onCrossRefClick: function (btn) { + if (this.dlgCrossRefDialog && this.dlgCrossRefDialog.isVisible()) + return; + + var me = this; + me.dlgCrossRefDialog = new DE.Views.CrossReferenceDialog({ + api: me.api, + crossRefProps: me.crossRefProps, + handler: function (result, settings) { + if (result != "ok") + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, + }); + me.dlgCrossRefDialog.on("close", function (obj) { + me.crossRefProps = me.dlgCrossRefDialog.getSettings(); + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }); + me.dlgCrossRefDialog.show(); + }, - var me = this; - me.dlgCrossRefDialog = new DE.Views.CrossReferenceDialog({ - api: me.api, - crossRefProps: me.crossRefProps, - handler: function (result, settings) { - if (result != 'ok') - Common.NotificationCenter.trigger('edit:complete', me.toolbar); + onTableFigures: function () { + var props = this.api.asc_GetTableOfFiguresPr(); + var me = this, + win = new DE.Views.TableOfContentsSettings({ + api: this.api, + props: props, + type: 1, + handler: function (result, value) { + if (result == "ok") { + me.api.asc_AddTableOfFigures(value); } + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, }); - me.dlgCrossRefDialog.on('close', function(obj){ - me.crossRefProps = me.dlgCrossRefDialog.getSettings(); - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - }); - me.dlgCrossRefDialog.show(); + win.show(); + Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, - onTableFigures: function(){ - var props = this.api.asc_GetTableOfFiguresPr(); - var me = this, - win = new DE.Views.TableOfContentsSettings({ - api: this.api, - props: props, - type: 1, - handler: function(result, value) { - if (result == 'ok') { - me.api.asc_AddTableOfFigures(value); - } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - } - }); - win.show(); - Common.NotificationCenter.trigger('edit:complete', this.toolbar); + onTableFiguresUpdate: function () { + this.api.asc_UpdateTablesOfFigures(); + Common.NotificationCenter.trigger("edit:complete", this.toolbar); }, - onTableFiguresUpdate: function(){ - this.api.asc_UpdateTablesOfFigures(); - Common.NotificationCenter.trigger('edit:complete', this.toolbar); + onAscReplaceCurrentTOF: function (apiCallback) { + Common.UI.warning({ + msg: this.view.confirmReplaceTOF, + buttons: ["yes", "no", "cancel"], + primary: "yes", + callback: _.bind(function (btn) { + if (btn == "yes" || btn == "no") { + apiCallback && apiCallback(btn === "yes"); + } + Common.NotificationCenter.trigger("edit:complete", this.toolbar); + }, this), + }); }, - onAscReplaceCurrentTOF: function(apiCallback) { - Common.UI.warning({ - msg: this.view.confirmReplaceTOF, - buttons: ['yes', 'no', 'cancel'], - primary: 'yes', - callback: _.bind(function(btn) { - if (btn=='yes' || btn=='no') { - apiCallback && apiCallback(btn === 'yes'); - } - Common.NotificationCenter.trigger('edit:complete', this.toolbar); - }, this) - }); + onAscTOFUpdate: function (apiCallback) { + var me = this; + new Common.Views.OptionsDialog({ + width: 300, + title: this.view.titleUpdateTOF, + items: [ + { + caption: this.view.textUpdatePages, + value: true, + checked: true, + }, + { + caption: this.view.textUpdateAll, + value: false, + checked: false, + }, + ], + handler: function (dlg, result) { + if (result == "ok") { + apiCallback && apiCallback(dlg.getSettings()); + } + Common.NotificationCenter.trigger("edit:complete", me.toolbar); + }, + }).show(); }, - onAscTOFUpdate: function(apiCallback) { - var me = this; - (new Common.Views.OptionsDialog({ - width: 300, - title: this.view.titleUpdateTOF, - items: [ - {caption: this.view.textUpdatePages, value: true, checked: true}, - {caption: this.view.textUpdateAll, value: false, checked: false} - ], - handler: function (dlg, result) { - if (result=='ok') { - apiCallback && apiCallback(dlg.getSettings()); - } - Common.NotificationCenter.trigger('edit:complete', me.toolbar); - } - })).show(); + onChangeProtectDocument: function (props) { + if (!props) { + var docprotect = + this.getApplication().getController("DocProtection"); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.lockToolbar(Common.enumLock.docLockView, props.isReadOnly); + this.lockToolbar(Common.enumLock.docLockForms, props.isFormsOnly); + this.lockToolbar(Common.enumLock.docLockReview, props.isReviewOnly); + this.lockToolbar( + Common.enumLock.docLockComments, + props.isCommentsOnly + ); + } }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; - } - if (props) { - this._state.docProtection = props; - this.lockToolbar(Common.enumLock.docLockView, props.isReadOnly); - this.lockToolbar(Common.enumLock.docLockForms, props.isFormsOnly); - this.lockToolbar(Common.enumLock.docLockReview, props.isReviewOnly); - this.lockToolbar(Common.enumLock.docLockComments, props.isCommentsOnly); + onAppReady: function (config) { + var me = this; + new Promise(function (accept, reject) { + accept(); + }).then(function () { + if (me.view) { + me.view.onAppReady(config); + me.onChangeProtectDocument(); } + }); }, - - onAppReady: function (config) { - var me = this; - (new Promise(function (accept, reject) { - accept(); - })).then(function(){ - if (me.view) { - me.view.onAppReady(config); - me.onChangeProtectDocument(); - } - }); - } - - }, DE.Controllers.Links || {})); -}); \ No newline at end of file + }, + DE.Controllers.Links || {} + ) + ); +}); diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index dec84cce44..8af1d14884 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -40,3417 +40,5139 @@ */ define([ - 'core', - 'irregularstack', - 'common/main/lib/component/Window', - 'common/main/lib/component/LoadMask', - 'common/main/lib/component/Tooltip', - 'common/main/lib/controller/Fonts', - 'common/main/lib/collection/TextArt', - 'common/main/lib/view/OpenDialog', - 'common/main/lib/view/UserNameDialog', - 'common/main/lib/util/LocalStorage', - 'documenteditor/main/app/collection/ShapeGroups', - 'documenteditor/main/app/collection/EquationGroups', - 'common/main/lib/controller/FocusManager', - 'common/main/lib/controller/HintManager', - 'common/main/lib/controller/LayoutManager', - 'common/main/lib/controller/ExternalUsers' + "core", + "irregularstack", + "common/main/lib/component/Window", + "common/main/lib/component/LoadMask", + "common/main/lib/component/Tooltip", + "common/main/lib/controller/Fonts", + "common/main/lib/collection/TextArt", + "common/main/lib/view/OpenDialog", + "common/main/lib/view/UserNameDialog", + "common/main/lib/util/LocalStorage", + "documenteditor/main/app/collection/ShapeGroups", + "documenteditor/main/app/collection/EquationGroups", + "common/main/lib/controller/FocusManager", + "common/main/lib/controller/HintManager", + "common/main/lib/controller/LayoutManager", + "common/main/lib/controller/ExternalUsers", ], function () { - 'use strict'; + "use strict"; - DE.Controllers.Main = Backbone.Controller.extend(_.extend((function() { + DE.Controllers.Main = Backbone.Controller.extend( + _.extend( + (function () { var appHeader; var ApplyEditRights = -255; var LoadingDocument = -256; var mapCustomizationElements = { - about: 'button#left-btn-about', - feedback: 'button#left-btn-support', - goback: '#fm-btn-back > a, #header-back > div' + about: "button#left-btn-about", + feedback: "button#left-btn-support", + goback: "#fm-btn-back > a, #header-back > div", }; var mapCustomizationExtElements = { - toolbar: '#viewport #toolbar', - leftMenu: '#viewport #left-menu, #viewport #id-toolbar-full-placeholder-btn-settings, #viewport #id-toolbar-short-placeholder-btn-settings', - rightMenu: '#viewport #right-menu', - statusBar: '#statusbar' + toolbar: "#viewport #toolbar", + leftMenu: + "#viewport #left-menu, #viewport #id-toolbar-full-placeholder-btn-settings, #viewport #id-toolbar-short-placeholder-btn-settings", + rightMenu: "#viewport #right-menu", + statusBar: "#statusbar", }; - Common.localStorage.setId('text'); - Common.localStorage.setKeysFilter('de-,asc.text'); + Common.localStorage.setId("text"); + Common.localStorage.setKeysFilter("de-,asc.text"); Common.localStorage.sync(); return { - - models: [], - collections: [ - 'ShapeGroups', - 'EquationGroups', - 'Common.Collections.HistoryUsers', - 'Common.Collections.TextArt' - ], - views: [], - - initialize: function() { - this.addListeners({ - 'FileMenu': { - 'settings:apply': _.bind(this.applySettings, this) - }, - 'Common.Views.ReviewChanges': { - 'settings:apply': _.bind(this.applySettings, this) - } - }); - - var me = this, - styleNames = ['Normal', 'No Spacing', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', - 'Heading 6', 'Heading 7', 'Heading 8', 'Heading 9', 'Title', 'Subtitle', 'Quote', 'Intense Quote', 'List Paragraph', 'footnote text', - 'Caption', 'endnote text'], - translate = { - 'Series': this.txtSeries, - 'Diagram Title': this.txtDiagramTitle, - 'X Axis': this.txtXAxis, - 'Y Axis': this.txtYAxis, - 'Your text here': this.txtArt, - "Error! Bookmark not defined.": this.txtBookmarkError, - "above": this.txtAbove, - "below": this.txtBelow, - "on page ": this.txtOnPage + " ", - "Header": this.txtHeader, - "Footer": this.txtFooter, - " -Section ": " " + this.txtSection + " ", - "First Page ": this.txtFirstPage + " ", - "Even Page ": this.txtEvenPage + " ", - "Odd Page ": this.txtOddPage + " ", - "Same as Previous": this.txtSameAsPrev, - "Current Document": this.txtCurrentDocument, - "No table of contents entries found.": this.txtNoTableOfContents, - "Table of Contents": this.txtTableOfContents, - "Syntax Error": this.txtSyntaxError, - "Missing Operator": this.txtMissOperator, - "Missing Argument": this.txtMissArg, - "Number Too Large To Format": this.txtTooLarge, - "Zero Divide": this.txtZeroDivide, - "Is Not In Table": this.txtNotInTable, - "Index Too Large": this.txtIndTooLarge, - "The Formula Not In Table": this.txtFormulaNotInTable, - "Table Index Cannot be Zero": this.txtTableInd, - "Undefined Bookmark": this.txtUndefBookmark, - "Unexpected End of Formula": this.txtEndOfFormula, - "Hyperlink": this.txtHyperlink, - "Error! Main Document Only.": this.txtMainDocOnly, - "Error! Not a valid bookmark self-reference.": this.txtNotValidBookmark, - "Error! No text of specified style in document.": this.txtNoText, - "Choose an item": this.txtChoose, - "Enter a date": this.txtEnterDate, - "Type equation here": this.txtTypeEquation, - "Click to load image": this.txtClickToLoad, - "None": this.txtNone, - "No table of figures entries found.": this.txtNoTableOfFigures, - "table of figures": this.txtTableOfFigures, - "TOC Heading": this.txtTOCHeading, - "Anyone": this.textAnyone, - "Text": this.textText - }; - styleNames.forEach(function(item){ - translate[item] = me['txtStyle_' + item.replace(/ /g, '_')] || item; - }); - me.translationTable = translate; - }, - - onLaunch: function() { - var me = this; - - this.stackLongActions = new Common.IrregularStack({ - strongCompare : function(obj1, obj2){return obj1.id === obj2.id && obj1.type === obj2.type;}, - weakCompare : function(obj1, obj2){return obj1.type === obj2.type;} - }); - - this.stackDisableActions = new Common.IrregularStack({ - strongCompare : function(obj1, obj2){return obj1.type === obj2.type;}, - weakCompare : function(obj1, obj2){return obj1.type === obj2.type;} - }); - - this.stackMacrosRequests = []; - - this._state = {isDisconnected: false, usersCount: 1, fastCoauth: true, lostEditingRights: false, licenseType: false, isDocModified: false}; - this.languages = null; - - // Initialize viewport - - if (!Common.Utils.isBrowserSupported()){ - Common.Utils.showBrowserRestriction(); - Common.Gateway.reportError(undefined, this.unsupportedBrowserErrorText); - return; + models: [], + collections: [ + "ShapeGroups", + "EquationGroups", + "Common.Collections.HistoryUsers", + "Common.Collections.TextArt", + ], + views: [], + + initialize: function () { + this.addListeners({ + FileMenu: { + "settings:apply": _.bind(this.applySettings, this), + }, + "Common.Views.ReviewChanges": { + "settings:apply": _.bind(this.applySettings, this), + }, + }); + + var me = this, + styleNames = [ + "Normal", + "No Spacing", + "Heading 1", + "Heading 2", + "Heading 3", + "Heading 4", + "Heading 5", + "Heading 6", + "Heading 7", + "Heading 8", + "Heading 9", + "Title", + "Subtitle", + "Quote", + "Intense Quote", + "List Paragraph", + "footnote text", + "Caption", + "endnote text", + ], + translate = { + Series: this.txtSeries, + "Diagram Title": this.txtDiagramTitle, + "X Axis": this.txtXAxis, + "Y Axis": this.txtYAxis, + "Your text here": this.txtArt, + "Error! Bookmark not defined.": this.txtBookmarkError, + above: this.txtAbove, + below: this.txtBelow, + "on page ": this.txtOnPage + " ", + Header: this.txtHeader, + Footer: this.txtFooter, + " -Section ": " " + this.txtSection + " ", + "First Page ": this.txtFirstPage + " ", + "Even Page ": this.txtEvenPage + " ", + "Odd Page ": this.txtOddPage + " ", + "Same as Previous": this.txtSameAsPrev, + "Current Document": this.txtCurrentDocument, + "No table of contents entries found.": + this.txtNoTableOfContents, + "Table of Contents": this.txtTableOfContents, + "Syntax Error": this.txtSyntaxError, + "Missing Operator": this.txtMissOperator, + "Missing Argument": this.txtMissArg, + "Number Too Large To Format": this.txtTooLarge, + "Zero Divide": this.txtZeroDivide, + "Is Not In Table": this.txtNotInTable, + "Index Too Large": this.txtIndTooLarge, + "The Formula Not In Table": this.txtFormulaNotInTable, + "Table Index Cannot be Zero": this.txtTableInd, + "Undefined Bookmark": this.txtUndefBookmark, + "Unexpected End of Formula": this.txtEndOfFormula, + Hyperlink: this.txtHyperlink, + "Error! Main Document Only.": this.txtMainDocOnly, + "Error! Not a valid bookmark self-reference.": + this.txtNotValidBookmark, + "Error! No text of specified style in document.": + this.txtNoText, + "Choose an item": this.txtChoose, + "Enter a date": this.txtEnterDate, + "Type equation here": this.txtTypeEquation, + "Click to load image": this.txtClickToLoad, + None: this.txtNone, + "No table of figures entries found.": this.txtNoTableOfFigures, + "table of figures": this.txtTableOfFigures, + "TOC Heading": this.txtTOCHeading, + Anyone: this.textAnyone, + Text: this.textText, + }; + styleNames.forEach(function (item) { + translate[item] = + me["txtStyle_" + item.replace(/ /g, "_")] || item; + }); + me.translationTable = translate; + }, + + onLaunch: function () { + var me = this; + + this.stackLongActions = new Common.IrregularStack({ + strongCompare: function (obj1, obj2) { + return obj1.id === obj2.id && obj1.type === obj2.type; + }, + weakCompare: function (obj1, obj2) { + return obj1.type === obj2.type; + }, + }); + + this.stackDisableActions = new Common.IrregularStack({ + strongCompare: function (obj1, obj2) { + return obj1.type === obj2.type; + }, + weakCompare: function (obj1, obj2) { + return obj1.type === obj2.type; + }, + }); + + this.stackMacrosRequests = []; + + this._state = { + isDisconnected: false, + usersCount: 1, + fastCoauth: true, + lostEditingRights: false, + licenseType: false, + isDocModified: false, + }; + this.languages = null; + + // Initialize viewport + + if (!Common.Utils.isBrowserSupported()) { + Common.Utils.showBrowserRestriction(); + Common.Gateway.reportError( + undefined, + this.unsupportedBrowserErrorText + ); + return; + } + + // Initialize api + window["flat_desine"] = true; + this.api = this.getApplication().getController("Viewport").getApi(); + + Common.UI.FocusManager.init(); + Common.UI.HintManager.init(this.api); + Common.UI.Themes.init(this.api); + + if (this.api) { + this.api.SetDrawingFreeze(true); + + var value = Common.localStorage.getBool( + "de-settings-cachemode", + true + ); + Common.Utils.InternalSettings.set("de-settings-cachemode", value); + this.api.asc_setDefaultBlitMode(!!value); + + value = Common.localStorage.getItem("de-settings-fontrender"); + if (value === null) value = "0"; + Common.Utils.InternalSettings.set( + "de-settings-fontrender", + value + ); + switch (value) { + case "0": + this.api.SetFontRenderingMode(3); + break; + case "1": + this.api.SetFontRenderingMode(1); + break; + case "2": + this.api.SetFontRenderingMode(2); + break; + } + + if (!Common.Utils.isIE) { + if (/^https?:\/\//.test("{{HELP_CENTER_WEB_DE}}")) { + const _url_obj = new URL("{{HELP_CENTER_WEB_DE}}"); + if (!!_url_obj.searchParams) + _url_obj.searchParams.set( + "lang", + Common.Locale.getCurrentLanguage() + ); + + Common.Utils.InternalSettings.set( + "url-help-center", + _url_obj.toString() + ); } - - // Initialize api - window["flat_desine"] = true; - this.api = this.getApplication().getController('Viewport').getApi(); - - Common.UI.FocusManager.init(); - Common.UI.HintManager.init(this.api); - Common.UI.Themes.init(this.api); - - if (this.api){ - this.api.SetDrawingFreeze(true); - - var value = Common.localStorage.getBool("de-settings-cachemode", true); - Common.Utils.InternalSettings.set("de-settings-cachemode", value); - this.api.asc_setDefaultBlitMode(!!value); - - value = Common.localStorage.getItem("de-settings-fontrender"); - if (value === null) - value = '0'; - Common.Utils.InternalSettings.set("de-settings-fontrender", value); - switch (value) { - case '0': this.api.SetFontRenderingMode(3); break; - case '1': this.api.SetFontRenderingMode(1); break; - case '2': this.api.SetFontRenderingMode(2); break; - } - - if ( !Common.Utils.isIE ) { - if ( /^https?:\/\//.test('{{HELP_CENTER_WEB_DE}}') ) { - const _url_obj = new URL('{{HELP_CENTER_WEB_DE}}'); - if ( !!_url_obj.searchParams ) - _url_obj.searchParams.set('lang', Common.Locale.getCurrentLanguage()); - - Common.Utils.InternalSettings.set("url-help-center", _url_obj.toString()); - } - } - - this.api.asc_registerCallback('asc_onError', _.bind(this.onError, this)); - this.api.asc_registerCallback('asc_onDocumentContentReady', _.bind(this.onDocumentContentReady, this)); - this.api.asc_registerCallback('asc_onOpenDocumentProgress', _.bind(this.onOpenDocument, this)); - this.api.asc_registerCallback('asc_onDocumentUpdateVersion', _.bind(this.onUpdateVersion, this)); - this.api.asc_registerCallback('asc_onServerVersion', _.bind(this.onServerVersion, this)); - this.api.asc_registerCallback('asc_onAdvancedOptions', _.bind(this.onAdvancedOptions, this)); - this.api.asc_registerCallback('asc_onDocumentName', _.bind(this.onDocumentName, this)); - this.api.asc_registerCallback('asc_onPrintUrl', _.bind(this.onPrintUrl, this)); - this.api.asc_registerCallback('asc_onMeta', _.bind(this.onMeta, this)); - this.api.asc_registerCallback('asc_onSpellCheckInit', _.bind(this.loadLanguages, this)); - - Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this)); - Common.NotificationCenter.on('goback', _.bind(this.goBack, this)); - Common.NotificationCenter.on('markfavorite', _.bind(this.markFavorite, this)); - Common.NotificationCenter.on('download:advanced', _.bind(this.onAdvancedOptions, this)); - Common.NotificationCenter.on('showmessage', _.bind(this.onExternalMessage, this)); - Common.NotificationCenter.on('showerror', _.bind(this.onError, this)); - Common.NotificationCenter.on('editing:disable', _.bind(this.onEditingDisable, this)); - - this.isShowOpenDialog = false; - - // Initialize api gateway - this.editorConfig = {}; - this.appOptions = {}; - Common.Gateway.on('init', _.bind(this.loadConfig, this)); - Common.Gateway.on('showmessage', _.bind(this.onExternalMessage, this)); - Common.Gateway.on('opendocument', _.bind(this.loadDocument, this)); - Common.Gateway.on('grabfocus', _.bind(this.onGrabFocus, this)); - Common.Gateway.appReady(); - -// $(window.top).resize(_.bind(this.onDocumentResize, this)); - this.getApplication().getController('Viewport').setApi(this.api); - this.getApplication().getController('Statusbar').setApi(this.api); - - /** coauthoring begin **/ - this.contComments = this.getApplication().getController('Common.Controllers.Comments'); - /** coauthoring end **/ - - // Syncronize focus with api - $(document.body).on('focus', 'input, textarea', function(e) { - if (!/area_id/.test(e.target.id)) { - if (/msg-reply/.test(e.target.className)) { - me.dontCloseDummyComment = true; - me.beforeShowDummyComment = me.beforeCloseDummyComment = false; - } else if (/textarea-control/.test(e.target.className)) - me.inTextareaControl = true; - else if (!Common.Utils.ModalWindow.isVisible() && /form-control/.test(e.target.className)) - me.inFormControl = true; - } - }); - - $(document.body).on('blur', 'input, textarea', function(e) { - if (!Common.Utils.ModalWindow.isVisible()) { - if (/form-control/.test(e.target.className)) - me.inFormControl = false; - if (me.getApplication().getController('LeftMenu').getView('LeftMenu').getMenu('file').isVisible()) - return; - if (!e.relatedTarget || - !/area_id/.test(e.target.id) - && !(e.target.localName == 'input' && $(e.target).parent().find(e.relatedTarget).length>0) /* Check if focus in combobox goes from input to it's menu button or menu items, or from comment editing area to Ok/Cancel button */ - && !(e.target.localName == 'textarea' && $(e.target).closest('.asc-window').find('.dropdown-menu').find(e.relatedTarget).length>0) /* Check if focus in comment goes from textarea to it's email menu */ - && (e.relatedTarget.localName != 'input' || !/form-control/.test(e.relatedTarget.className)) /* Check if focus goes to text input with class "form-control" */ - && (e.relatedTarget.localName != 'textarea' || /area_id/.test(e.relatedTarget.id))) /* Check if focus goes to textarea, but not to "area_id" */ { - if (Common.Utils.isIE && e.originalEvent && e.originalEvent.target && /area_id/.test(e.originalEvent.target.id) && (e.originalEvent.target === e.originalEvent.srcElement)) - return; - if (Common.Utils.isLinux && me.appOptions && me.appOptions.isDesktopApp) { - if (e.relatedTarget || !e.originalEvent || e.originalEvent.sourceCapabilities) - me.api.asc_enableKeyEvents(true); - } else - me.api.asc_enableKeyEvents(true); - if (me.dontCloseDummyComment && /msg-reply/.test(e.target.className)) { - if ($(e.target).closest('.user-comment-item').find(e.relatedTarget).length<1) /* Check if focus goes to buttons in the comment window */ - me.dontCloseDummyComment = me.beforeCloseDummyComment = false; - else - me.beforeCloseDummyComment = true; - } - else if (/textarea-control/.test(e.target.className)) - me.inTextareaControl = false; - } - } - }).on('dragover', function(e) { - var event = e.originalEvent; - if (event.target && $(event.target).closest('#editor_sdk').length<1 ) { - event.preventDefault(); - event.dataTransfer.dropEffect ="none"; - return false; - } - }).on('dragstart', function(e) { - var event = e.originalEvent; - if (event.target ) { - var target = $(event.target); - if (target.closest('.combobox').length>0 || target.closest('.dropdown-menu').length>0 || - target.closest('.input-field').length>0 || target.closest('.spinner').length>0 || target.closest('.textarea-field').length>0 || - target.closest('.ribtab').length>0 || target.closest('.combo-dataview').length>0) { - event.preventDefault(); - } - } - }).on('mouseup', function(e){ - me.beforeCloseDummyComment && setTimeout(function(){ // textbox in dummy comment lost focus - me.dontCloseDummyComment = me.beforeCloseDummyComment = false; - }, 10); - }); - - Common.Utils.isChrome && $(document.body).on('keydown', 'textarea', function(e) {// chromium bug890248 (Bug 39614) - if (e.keyCode===Common.UI.Keys.PAGEUP || e.keyCode===Common.UI.Keys.PAGEDOWN) { - setTimeout(function(){ - $('#viewport').scrollLeft(0); - $('#viewport').scrollTop(0); - }, 0); - } - }); - - Common.NotificationCenter.on({ - 'modal:show': function(){ - Common.Utils.ModalWindow.show(); - me.api.asc_enableKeyEvents(false); - }, - 'modal:close': function(dlg) { - Common.Utils.ModalWindow.close(); - if (!Common.Utils.ModalWindow.isVisible()) - me.api.asc_enableKeyEvents(true); - }, - 'modal:hide': function(dlg) { - Common.Utils.ModalWindow.close(); - if (!Common.Utils.ModalWindow.isVisible()) - me.api.asc_enableKeyEvents(true); - }, - 'settings:unitschanged':_.bind(this.unitsChanged, this), - 'dataview:focus': function(e){ - }, - 'dataview:blur': function(e){ - if (!Common.Utils.ModalWindow.isVisible()) { - me.api.asc_enableKeyEvents(true); - } - }, - 'menu:show': function(e){ - }, - 'menu:hide': function(e, isFromInputControl){ - if (!Common.Utils.ModalWindow.isVisible() && !isFromInputControl) - me.api.asc_enableKeyEvents(true); - }, - 'edit:complete': _.bind(me.onEditComplete, me) - }); - - this.initNames(); //for shapes - - Common.util.Shortcuts.delegateShortcuts({ - shortcuts: { - 'command+s,ctrl+s,command+p,ctrl+p,command+k,ctrl+k,command+d,ctrl+d': _.bind(function (e) { - e.preventDefault(); - e.stopPropagation(); - }, this) - } - }); - } - - me.defaultTitleText = '{{APP_TITLE_TEXT}}'; - me.warnNoLicense = me.warnNoLicense.replace(/%1/g, '{{COMPANY_NAME}}'); - me.warnNoLicenseUsers = me.warnNoLicenseUsers.replace(/%1/g, '{{COMPANY_NAME}}'); - me.textNoLicenseTitle = me.textNoLicenseTitle.replace(/%1/g, '{{COMPANY_NAME}}'); - me.warnLicenseExceeded = me.warnLicenseExceeded.replace(/%1/g, '{{COMPANY_NAME}}'); - me.warnLicenseUsersExceeded = me.warnLicenseUsersExceeded.replace(/%1/g, '{{COMPANY_NAME}}'); - }, - - loadConfig: function(data) { - this.editorConfig = $.extend(this.editorConfig, data.config); - - this.appOptions.customization = this.editorConfig.customization; - this.appOptions.canRenameAnonymous = !((typeof (this.appOptions.customization) == 'object') && (typeof (this.appOptions.customization.anonymous) == 'object') && (this.appOptions.customization.anonymous.request===false)); - this.appOptions.guestName = (typeof (this.appOptions.customization) == 'object') && (typeof (this.appOptions.customization.anonymous) == 'object') && - (typeof (this.appOptions.customization.anonymous.label) == 'string') && this.appOptions.customization.anonymous.label.trim()!=='' ? - Common.Utils.String.htmlEncode(this.appOptions.customization.anonymous.label) : this.textGuest; - var value; - if (this.appOptions.canRenameAnonymous) { - value = Common.localStorage.getItem("guest-username"); - Common.Utils.InternalSettings.set("guest-username", value); - Common.Utils.InternalSettings.set("save-guest-username", !!value); + } + + this.api.asc_registerCallback( + "asc_onError", + _.bind(this.onError, this) + ); + this.api.asc_registerCallback( + "asc_onDocumentContentReady", + _.bind(this.onDocumentContentReady, this) + ); + this.api.asc_registerCallback( + "asc_onOpenDocumentProgress", + _.bind(this.onOpenDocument, this) + ); + this.api.asc_registerCallback( + "asc_onDocumentUpdateVersion", + _.bind(this.onUpdateVersion, this) + ); + this.api.asc_registerCallback( + "asc_onServerVersion", + _.bind(this.onServerVersion, this) + ); + this.api.asc_registerCallback( + "asc_onAdvancedOptions", + _.bind(this.onAdvancedOptions, this) + ); + this.api.asc_registerCallback( + "asc_onDocumentName", + _.bind(this.onDocumentName, this) + ); + this.api.asc_registerCallback( + "asc_onPrintUrl", + _.bind(this.onPrintUrl, this) + ); + this.api.asc_registerCallback( + "asc_onMeta", + _.bind(this.onMeta, this) + ); + this.api.asc_registerCallback( + "asc_onSpellCheckInit", + _.bind(this.loadLanguages, this) + ); + + Common.NotificationCenter.on( + "api:disconnect", + _.bind(this.onCoAuthoringDisconnect, this) + ); + Common.NotificationCenter.on("goback", _.bind(this.goBack, this)); + Common.NotificationCenter.on( + "markfavorite", + _.bind(this.markFavorite, this) + ); + Common.NotificationCenter.on( + "download:advanced", + _.bind(this.onAdvancedOptions, this) + ); + Common.NotificationCenter.on( + "showmessage", + _.bind(this.onExternalMessage, this) + ); + Common.NotificationCenter.on( + "showerror", + _.bind(this.onError, this) + ); + Common.NotificationCenter.on( + "editing:disable", + _.bind(this.onEditingDisable, this) + ); + + this.isShowOpenDialog = false; + + // Initialize api gateway + this.editorConfig = {}; + this.appOptions = {}; + Common.Gateway.on("init", _.bind(this.loadConfig, this)); + Common.Gateway.on( + "showmessage", + _.bind(this.onExternalMessage, this) + ); + Common.Gateway.on( + "opendocument", + _.bind(this.loadDocument, this) + ); + Common.Gateway.on("grabfocus", _.bind(this.onGrabFocus, this)); + Common.Gateway.appReady(); + + // $(window.top).resize(_.bind(this.onDocumentResize, this)); + this.getApplication().getController("Viewport").setApi(this.api); + this.getApplication().getController("Statusbar").setApi(this.api); + + /** coauthoring begin **/ + this.contComments = this.getApplication().getController( + "Common.Controllers.Comments" + ); + /** coauthoring end **/ + + // Syncronize focus with api + $(document.body).on("focus", "input, textarea", function (e) { + if (!/area_id/.test(e.target.id)) { + if (/msg-reply/.test(e.target.className)) { + me.dontCloseDummyComment = true; + me.beforeShowDummyComment = + me.beforeCloseDummyComment = false; + } else if (/textarea-control/.test(e.target.className)) + me.inTextareaControl = true; + else if ( + !Common.Utils.ModalWindow.isVisible() && + /form-control/.test(e.target.className) + ) + me.inFormControl = true; } - if (this.appOptions.customization.font) { - if (this.appOptions.customization.font.name && typeof this.appOptions.customization.font.name === 'string') { - var arr = this.appOptions.customization.font.name.split(','); - for (var i=0; i 0 + ) /* Check if focus in combobox goes from input to it's menu button or menu items, or from comment editing area to Ok/Cancel button */ && + !( + e.target.localName == "textarea" && + $(e.target) + .closest(".asc-window") + .find(".dropdown-menu") + .find(e.relatedTarget).length > 0 + ) /* Check if focus in comment goes from textarea to it's email menu */ && + (e.relatedTarget.localName != "input" || + !/form-control/.test( + e.relatedTarget.className + )) /* Check if focus goes to text input with class "form-control" */ && + (e.relatedTarget.localName != "textarea" || + /area_id/.test(e.relatedTarget.id))) + ) { + /* Check if focus goes to textarea, but not to "area_id" */ if ( + Common.Utils.isIE && + e.originalEvent && + e.originalEvent.target && + /area_id/.test(e.originalEvent.target.id) && + e.originalEvent.target === e.originalEvent.srcElement + ) + return; + if ( + Common.Utils.isLinux && + me.appOptions && + me.appOptions.isDesktopApp + ) { + if ( + e.relatedTarget || + !e.originalEvent || + e.originalEvent.sourceCapabilities + ) + me.api.asc_enableKeyEvents(true); + } else me.api.asc_enableKeyEvents(true); + if ( + me.dontCloseDummyComment && + /msg-reply/.test(e.target.className) + ) { + if ( + $(e.target) + .closest(".user-comment-item") + .find(e.relatedTarget).length < 1 + ) + /* Check if focus goes to buttons in the comment window */ + me.dontCloseDummyComment = + me.beforeCloseDummyComment = false; + else me.beforeCloseDummyComment = true; + } else if (/textarea-control/.test(e.target.className)) + me.inTextareaControl = false; } - - if (this.appOptions.customization.font.size) { - var size = parseInt(this.appOptions.customization.font.size); - !isNaN(size) && document.documentElement.style.setProperty("--font-size-base-app-custom", size + "px"); + } + }) + .on("dragover", function (e) { + var event = e.originalEvent; + if ( + event.target && + $(event.target).closest("#editor_sdk").length < 1 + ) { + event.preventDefault(); + event.dataTransfer.dropEffect = "none"; + return false; + } + }) + .on("dragstart", function (e) { + var event = e.originalEvent; + if (event.target) { + var target = $(event.target); + if ( + target.closest(".combobox").length > 0 || + target.closest(".dropdown-menu").length > 0 || + target.closest(".input-field").length > 0 || + target.closest(".spinner").length > 0 || + target.closest(".textarea-field").length > 0 || + target.closest(".ribtab").length > 0 || + target.closest(".combo-dataview").length > 0 + ) { + event.preventDefault(); } - } + } + }) + .on("mouseup", function (e) { + me.beforeCloseDummyComment && + setTimeout(function () { + // textbox in dummy comment lost focus + me.dontCloseDummyComment = + me.beforeCloseDummyComment = false; + }, 10); + }); - this.editorConfig.user = - this.appOptions.user = Common.Utils.fillUserInfo(this.editorConfig.user, this.editorConfig.lang, value ? (value + ' (' + this.appOptions.guestName + ')' ) : this.textAnonymous, - Common.localStorage.getItem("guest-id") || ('uid-' + Date.now())); - this.appOptions.user.anonymous && Common.localStorage.setItem("guest-id", this.appOptions.user.id); + Common.Utils.isChrome && + $(document.body).on("keydown", "textarea", function (e) { + // chromium bug890248 (Bug 39614) + if ( + e.keyCode === Common.UI.Keys.PAGEUP || + e.keyCode === Common.UI.Keys.PAGEDOWN + ) { + setTimeout(function () { + $("#viewport").scrollLeft(0); + $("#viewport").scrollTop(0); + }, 0); + } + }); - this.appOptions.isDesktopApp = this.editorConfig.targetApp == 'desktop' || Common.Controllers.Desktop.isActive(); - if( Common.Controllers.Desktop.isActive() ) { - !this.editorConfig.recent && (this.editorConfig.recent = []); + Common.NotificationCenter.on({ + "modal:show": function () { + Common.Utils.ModalWindow.show(); + me.api.asc_enableKeyEvents(false); + }, + "modal:close": function (dlg) { + Common.Utils.ModalWindow.close(); + if (!Common.Utils.ModalWindow.isVisible()) + me.api.asc_enableKeyEvents(true); + }, + "modal:hide": function (dlg) { + Common.Utils.ModalWindow.close(); + if (!Common.Utils.ModalWindow.isVisible()) + me.api.asc_enableKeyEvents(true); + }, + "settings:unitschanged": _.bind(this.unitsChanged, this), + "dataview:focus": function (e) {}, + "dataview:blur": function (e) { + if (!Common.Utils.ModalWindow.isVisible()) { + me.api.asc_enableKeyEvents(true); + } + }, + "menu:show": function (e) {}, + "menu:hide": function (e, isFromInputControl) { + if ( + !Common.Utils.ModalWindow.isVisible() && + !isFromInputControl + ) + me.api.asc_enableKeyEvents(true); + }, + "edit:complete": _.bind(me.onEditComplete, me), + }); + + this.initNames(); //for shapes + + Common.util.Shortcuts.delegateShortcuts({ + shortcuts: { + "command+s,ctrl+s,command+p,ctrl+p,command+k,ctrl+k,command+d,ctrl+d": + _.bind(function (e) { + e.preventDefault(); + e.stopPropagation(); + }, this), + }, + }); + } + + me.defaultTitleText = "{{APP_TITLE_TEXT}}"; + me.warnNoLicense = me.warnNoLicense.replace( + /%1/g, + "{{COMPANY_NAME}}" + ); + me.warnNoLicenseUsers = me.warnNoLicenseUsers.replace( + /%1/g, + "{{COMPANY_NAME}}" + ); + me.textNoLicenseTitle = me.textNoLicenseTitle.replace( + /%1/g, + "{{COMPANY_NAME}}" + ); + me.warnLicenseExceeded = me.warnLicenseExceeded.replace( + /%1/g, + "{{COMPANY_NAME}}" + ); + me.warnLicenseUsersExceeded = me.warnLicenseUsersExceeded.replace( + /%1/g, + "{{COMPANY_NAME}}" + ); + }, + + loadConfig: function (data) { + this.editorConfig = $.extend(this.editorConfig, data.config); + + this.appOptions.customization = this.editorConfig.customization; + this.appOptions.canRenameAnonymous = !( + typeof this.appOptions.customization == "object" && + typeof this.appOptions.customization.anonymous == "object" && + this.appOptions.customization.anonymous.request === false + ); + this.appOptions.guestName = + typeof this.appOptions.customization == "object" && + typeof this.appOptions.customization.anonymous == "object" && + typeof this.appOptions.customization.anonymous.label == + "string" && + this.appOptions.customization.anonymous.label.trim() !== "" + ? Common.Utils.String.htmlEncode( + this.appOptions.customization.anonymous.label + ) + : this.textGuest; + var value; + if (this.appOptions.canRenameAnonymous) { + value = Common.localStorage.getItem("guest-username"); + Common.Utils.InternalSettings.set("guest-username", value); + Common.Utils.InternalSettings.set("save-guest-username", !!value); + } + if (this.appOptions.customization.font) { + if ( + this.appOptions.customization.font.name && + typeof this.appOptions.customization.font.name === "string" + ) { + var arr = this.appOptions.customization.font.name.split(","); + for (var i = 0; i < arr.length; i++) { + var item = arr[i].trim(); + if (item && /[\s0-9\.]/.test(item)) { + arr[i] = "'" + item + "'"; + } } - - this.appOptions.canCreateNew = this.editorConfig.canRequestCreateNew || !_.isEmpty(this.editorConfig.createUrl) || this.editorConfig.templates && this.editorConfig.templates.length; - this.appOptions.canOpenRecent = this.editorConfig.recent !== undefined; - this.appOptions.templates = this.editorConfig.templates; - this.appOptions.recent = this.editorConfig.recent; - this.appOptions.createUrl = this.editorConfig.createUrl; - this.appOptions.canRequestCreateNew = this.editorConfig.canRequestCreateNew; - this.appOptions.lang = this.editorConfig.lang; - this.appOptions.location = (typeof (this.editorConfig.location) == 'string') ? this.editorConfig.location.toLowerCase() : ''; - this.appOptions.sharingSettingsUrl = this.editorConfig.sharingSettingsUrl; - this.appOptions.fileChoiceUrl = this.editorConfig.fileChoiceUrl; - this.appOptions.mergeFolderUrl = this.editorConfig.mergeFolderUrl; - this.appOptions.saveAsUrl = this.editorConfig.saveAsUrl; - this.appOptions.canAnalytics = false; - this.appOptions.canRequestClose = this.editorConfig.canRequestClose; - this.appOptions.canBackToFolder = (this.editorConfig.canBackToFolder!==false) && (typeof (this.editorConfig.customization) == 'object') && (typeof (this.editorConfig.customization.goback) == 'object') - && (!_.isEmpty(this.editorConfig.customization.goback.url) || this.editorConfig.customization.goback.requestClose && this.appOptions.canRequestClose); - this.appOptions.canBack = this.appOptions.canBackToFolder === true; - this.appOptions.canPlugins = false; - this.appOptions.canMakeActionLink = this.editorConfig.canMakeActionLink; - this.appOptions.canRequestUsers = this.editorConfig.canRequestUsers; - this.appOptions.canRequestSendNotify = this.editorConfig.canRequestSendNotify; - this.appOptions.canRequestSaveAs = this.editorConfig.canRequestSaveAs; - this.appOptions.canRequestInsertImage = this.editorConfig.canRequestInsertImage; - this.appOptions.canRequestCompareFile = this.editorConfig.canRequestCompareFile; - this.appOptions.canRequestMailMergeRecipients = this.editorConfig.canRequestMailMergeRecipients; - this.appOptions.canRequestSharingSettings = this.editorConfig.canRequestSharingSettings; - this.appOptions.canRequestSelectDocument = this.editorConfig.canRequestSelectDocument; - this.appOptions.canRequestSelectSpreadsheet = this.editorConfig.canRequestSelectSpreadsheet; - this.appOptions.compatibleFeatures = (typeof (this.appOptions.customization) == 'object') && !!this.appOptions.customization.compatibleFeatures; - this.appOptions.canFeatureComparison = true; - this.appOptions.canFeatureContentControl = true; - this.appOptions.canFeatureForms = !!this.api.asc_isSupportFeature("forms"); - this.appOptions.uiRtl = false; - this.appOptions.disableNetworkFunctionality = !!(window["AscDesktopEditor"] && window["AscDesktopEditor"]["isSupportNetworkFunctionality"] && false === window["AscDesktopEditor"]["isSupportNetworkFunctionality"]()); - this.appOptions.mentionShare = !((typeof (this.appOptions.customization) == 'object') && (this.appOptions.customization.mentionShare==false)); - - this.appOptions.user.guest && this.appOptions.canRenameAnonymous && Common.NotificationCenter.on('user:rename', _.bind(this.showRenameUserDialog, this)); - - appHeader = this.getApplication().getController('Viewport').getView('Common.Views.Header'); - appHeader.setCanBack(this.appOptions.canBackToFolder === true, (this.appOptions.canBackToFolder) ? this.editorConfig.customization.goback.text : ''); - - if (this.editorConfig.lang) - this.api.asc_setLocale(this.editorConfig.lang); - - if (this.appOptions.location == 'us' || this.appOptions.location == 'ca') - Common.Utils.Metric.setDefaultMetric(Common.Utils.Metric.c_MetricUnits.inch); - - value = Common.localStorage.getItem("de-macros-mode"); - if (value === null) { - value = this.editorConfig.customization ? this.editorConfig.customization.macrosMode : 'warn'; - value = (value == 'enable') ? 1 : (value == 'disable' ? 2 : 0); - } else - value = parseInt(value); - Common.Utils.InternalSettings.set("de-macros-mode", value); - - value = Common.localStorage.getItem("de-allow-macros-request"); - Common.Utils.InternalSettings.set("de-allow-macros-request", (value !== null) ? parseInt(value) : 0); - - this.appOptions.wopi = this.editorConfig.wopi; - appHeader.setWopi(this.appOptions.wopi); - - Common.Controllers.Desktop.init(this.appOptions); - Common.UI.HintManager.setMode(this.appOptions); - }, - - loadDocument: function(data) { - this.permissions = {}; - this.document = data.doc; - - var docInfo = {}; - - if (data.doc) { - this.permissions = $.extend(this.permissions, data.doc.permissions); - - var _options = $.extend({}, data.doc.options, this.editorConfig.actionLink || {}); - - var _user = new Asc.asc_CUserInfo(); - _user.put_Id(this.appOptions.user.id); - _user.put_FullName(this.appOptions.user.fullname); - _user.put_IsAnonymousUser(!!this.appOptions.user.anonymous); - - docInfo = new Asc.asc_CDocInfo(); - docInfo.put_Id(data.doc.key); - docInfo.put_Url(data.doc.url); - docInfo.put_DirectUrl(data.doc.directUrl); - docInfo.put_Title(data.doc.title); - docInfo.put_Format(data.doc.fileType); - docInfo.put_VKey(data.doc.vkey); - docInfo.put_Options(_options); - docInfo.put_UserInfo(_user); - docInfo.put_CallbackUrl(this.editorConfig.callbackUrl); - docInfo.put_Token(data.doc.token); - docInfo.put_Permissions(data.doc.permissions); - docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); - docInfo.put_Lang(this.editorConfig.lang); - docInfo.put_Mode(this.editorConfig.mode); - - var enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); - docInfo.asc_putIsEnabledMacroses(!!enable); - enable = !this.editorConfig.customization || (this.editorConfig.customization.plugins!==false); - docInfo.asc_putIsEnabledPlugins(!!enable); -// docInfo.put_Review(this.permissions.review); - - var type = /^(?:(pdf|djvu|xps|oxps))$/.exec(data.doc.fileType); - var coEditMode = (type && typeof type[1] === 'string') ? 'strict' : // offline viewer for pdf|djvu|xps|oxps - !(this.editorConfig.coEditing && typeof this.editorConfig.coEditing == 'object') ? 'fast' : // fast by default - this.editorConfig.mode === 'view' && this.editorConfig.coEditing.change!==false ? 'fast' : // if can change mode in viewer - set fast for using live viewer - this.editorConfig.coEditing.mode || 'fast'; - docInfo.put_CoEditingMode(coEditMode); - - if (type && typeof type[1] === 'string') { - this.permissions.edit = this.permissions.review = false; + document.documentElement.style.setProperty( + "--font-family-base-custom", + arr.join(",") + ); + } + + if (this.appOptions.customization.font.size) { + var size = parseInt(this.appOptions.customization.font.size); + !isNaN(size) && + document.documentElement.style.setProperty( + "--font-size-base-app-custom", + size + "px" + ); + } + } + + this.editorConfig.user = this.appOptions.user = + Common.Utils.fillUserInfo( + this.editorConfig.user, + this.editorConfig.lang, + value + ? value + " (" + this.appOptions.guestName + ")" + : this.textAnonymous, + Common.localStorage.getItem("guest-id") || "uid-" + Date.now() + ); + this.appOptions.user.anonymous && + Common.localStorage.setItem("guest-id", this.appOptions.user.id); + Common.localStorage.setItem("token", this.editorConfig.token); // set token to the local storage + Common.localStorage.setItem("linkUrl", this.editorConfig.linkUrl); + Common.localStorage.setItem( + "documentId", + this.editorConfig.documentId + ); + Common.localStorage.setItem( + "getDocumentUrl", + this.editorConfig.getDocumentUrl + ); + Common.localStorage.setItem( + "getLayoutUrl", + this.editorConfig.getLayoutUrl + ); + Common.localStorage.setItem( + "getErrandUrl", + this.editorConfig.getErrandUrl + ); + Common.localStorage.setItem( + "getDocumentLinkToTypes", + this.editorConfig.getDocumentLinkToTypes + ); + Common.localStorage.setItem( + "getDocumentActionTypes", + this.editorConfig.getDocumentActionTypes + ); + + Common.localStorage.setItem( + "editorUrl", + this.editorConfig.editorUrl + ); + Common.localStorage.removeItem("this._arrLineRule"); + + this.appOptions.isDesktopApp = + this.editorConfig.targetApp == "desktop" || + Common.Controllers.Desktop.isActive(); + if (Common.Controllers.Desktop.isActive()) { + !this.editorConfig.recent && (this.editorConfig.recent = []); + } + + this.appOptions.canCreateNew = + this.editorConfig.canRequestCreateNew || + !_.isEmpty(this.editorConfig.createUrl) || + (this.editorConfig.templates && + this.editorConfig.templates.length); + this.appOptions.canOpenRecent = + this.editorConfig.recent !== undefined; + this.appOptions.templates = this.editorConfig.templates; + this.appOptions.recent = this.editorConfig.recent; + this.appOptions.createUrl = this.editorConfig.createUrl; + this.appOptions.canRequestCreateNew = + this.editorConfig.canRequestCreateNew; + this.appOptions.lang = this.editorConfig.lang; + this.appOptions.location = + typeof this.editorConfig.location == "string" + ? this.editorConfig.location.toLowerCase() + : ""; + this.appOptions.sharingSettingsUrl = + this.editorConfig.sharingSettingsUrl; + this.appOptions.fileChoiceUrl = this.editorConfig.fileChoiceUrl; + this.appOptions.mergeFolderUrl = this.editorConfig.mergeFolderUrl; + this.appOptions.saveAsUrl = this.editorConfig.saveAsUrl; + this.appOptions.canAnalytics = false; + this.appOptions.canRequestClose = this.editorConfig.canRequestClose; + this.appOptions.canBackToFolder = + this.editorConfig.canBackToFolder !== false && + typeof this.editorConfig.customization == "object" && + typeof this.editorConfig.customization.goback == "object" && + (!_.isEmpty(this.editorConfig.customization.goback.url) || + (this.editorConfig.customization.goback.requestClose && + this.appOptions.canRequestClose)); + this.appOptions.canBack = this.appOptions.canBackToFolder === true; + this.appOptions.canPlugins = false; + this.appOptions.canMakeActionLink = + this.editorConfig.canMakeActionLink; + this.appOptions.canRequestUsers = this.editorConfig.canRequestUsers; + this.appOptions.canRequestSendNotify = + this.editorConfig.canRequestSendNotify; + this.appOptions.canRequestSaveAs = + this.editorConfig.canRequestSaveAs; + this.appOptions.canRequestInsertImage = + this.editorConfig.canRequestInsertImage; + this.appOptions.canRequestCompareFile = + this.editorConfig.canRequestCompareFile; + this.appOptions.canRequestMailMergeRecipients = + this.editorConfig.canRequestMailMergeRecipients; + this.appOptions.canRequestSharingSettings = + this.editorConfig.canRequestSharingSettings; + this.appOptions.canRequestSelectDocument = + this.editorConfig.canRequestSelectDocument; + this.appOptions.canRequestSelectSpreadsheet = + this.editorConfig.canRequestSelectSpreadsheet; + this.appOptions.compatibleFeatures = + typeof this.appOptions.customization == "object" && + !!this.appOptions.customization.compatibleFeatures; + this.appOptions.canFeatureComparison = true; + this.appOptions.canFeatureContentControl = true; + this.appOptions.canFeatureForms = + !!this.api.asc_isSupportFeature("forms"); + this.appOptions.uiRtl = false; + this.appOptions.disableNetworkFunctionality = !!( + window["AscDesktopEditor"] && + window["AscDesktopEditor"]["isSupportNetworkFunctionality"] && + false === + window["AscDesktopEditor"]["isSupportNetworkFunctionality"]() + ); + this.appOptions.mentionShare = !( + typeof this.appOptions.customization == "object" && + this.appOptions.customization.mentionShare == false + ); + + this.appOptions.user.guest && + this.appOptions.canRenameAnonymous && + Common.NotificationCenter.on( + "user:rename", + _.bind(this.showRenameUserDialog, this) + ); + + appHeader = this.getApplication() + .getController("Viewport") + .getView("Common.Views.Header"); + appHeader.setCanBack( + this.appOptions.canBackToFolder === true, + this.appOptions.canBackToFolder + ? this.editorConfig.customization.goback.text + : "" + ); + + if (this.editorConfig.lang) + this.api.asc_setLocale(this.editorConfig.lang); + + if ( + this.appOptions.location == "us" || + this.appOptions.location == "ca" + ) + Common.Utils.Metric.setDefaultMetric( + Common.Utils.Metric.c_MetricUnits.inch + ); + + value = Common.localStorage.getItem("de-macros-mode"); + if (value === null) { + value = this.editorConfig.customization + ? this.editorConfig.customization.macrosMode + : "warn"; + value = value == "enable" ? 1 : value == "disable" ? 2 : 0; + } else value = parseInt(value); + Common.Utils.InternalSettings.set("de-macros-mode", value); + + value = Common.localStorage.getItem("de-allow-macros-request"); + Common.Utils.InternalSettings.set( + "de-allow-macros-request", + value !== null ? parseInt(value) : 0 + ); + + this.appOptions.wopi = this.editorConfig.wopi; + appHeader.setWopi(this.appOptions.wopi); + + Common.Controllers.Desktop.init(this.appOptions); + Common.UI.HintManager.setMode(this.appOptions); + }, + + loadDocument: function (data) { + this.permissions = {}; + this.document = data.doc; + + var docInfo = {}; + + if (data.doc) { + this.permissions = $.extend( + this.permissions, + data.doc.permissions + ); + + var _options = $.extend( + {}, + data.doc.options, + this.editorConfig.actionLink || {} + ); + + var _user = new Asc.asc_CUserInfo(); + _user.put_Id(this.appOptions.user.id); + _user.put_FullName(this.appOptions.user.fullname); + _user.put_IsAnonymousUser(!!this.appOptions.user.anonymous); + + docInfo = new Asc.asc_CDocInfo(); + docInfo.put_Id(data.doc.key); + docInfo.put_Url(data.doc.url); + docInfo.put_DirectUrl(data.doc.directUrl); + docInfo.put_Title(data.doc.title); + docInfo.put_Format(data.doc.fileType); + docInfo.put_VKey(data.doc.vkey); + docInfo.put_Options(_options); + docInfo.put_UserInfo(_user); + docInfo.put_CallbackUrl(this.editorConfig.callbackUrl); + docInfo.put_Token(data.doc.token); + docInfo.put_Permissions(data.doc.permissions); + docInfo.put_EncryptedInfo(this.editorConfig.encryptionKeys); + docInfo.put_Lang(this.editorConfig.lang); + docInfo.put_Mode(this.editorConfig.mode); + + var enable = + !this.editorConfig.customization || + this.editorConfig.customization.macros !== false; + docInfo.asc_putIsEnabledMacroses(!!enable); + enable = + !this.editorConfig.customization || + this.editorConfig.customization.plugins !== false; + docInfo.asc_putIsEnabledPlugins(!!enable); + // docInfo.put_Review(this.permissions.review); + + var type = /^(?:(pdf|djvu|xps|oxps))$/.exec(data.doc.fileType); + var coEditMode = + type && typeof type[1] === "string" + ? "strict" // offline viewer for pdf|djvu|xps|oxps + : !( + this.editorConfig.coEditing && + typeof this.editorConfig.coEditing == "object" + ) + ? "fast" // fast by default + : this.editorConfig.mode === "view" && + this.editorConfig.coEditing.change !== false + ? "fast" // if can change mode in viewer - set fast for using live viewer + : this.editorConfig.coEditing.mode || "fast"; + docInfo.put_CoEditingMode(coEditMode); + + if (type && typeof type[1] === "string") { + this.permissions.edit = this.permissions.review = false; + } + } + + if ( + !( + this.editorConfig.customization && + (this.editorConfig.customization.toolbarNoTabs || + (this.editorConfig.targetApp !== "desktop" && + (this.editorConfig.customization.loaderName || + this.editorConfig.customization.loaderLogo))) + ) + ) { + $("#editor-container").css("overflow", "hidden"); + $("#editor-container").append( + '
    ' + + '
    '.repeat(20) + + "
    " + ); + if ( + this.editorConfig.mode == "view" || + (this.permissions.edit === false && !this.permissions.review) + ) + $("#editor-container") + .find(".doc-placeholder") + .css("margin-top", 19); + } + + var type = data.doc + ? /^(?:(docxf))$/.exec(data.doc.fileType) + : false; + this.appOptions.isFormCreator = + !!(type && typeof type[1] === "string") && + this.appOptions.canFeatureForms; // show forms only for docxf + + type = data.doc ? /^(?:(oform))$/.exec(data.doc.fileType) : false; + if (type && typeof type[1] === "string") { + this.permissions.fillForms === undefined && + (this.permissions.fillForms = this.permissions.edit !== false); + this.permissions.edit = + this.permissions.review = + this.permissions.comment = + false; + } + this.api.asc_registerCallback( + "asc_onGetEditorPermissions", + _.bind(this.onEditorPermissions, this) + ); + this.api.asc_registerCallback( + "asc_onLicenseChanged", + _.bind(this.onLicenseChanged, this) + ); + this.api.asc_registerCallback( + "asc_onMacrosPermissionRequest", + _.bind(this.onMacrosPermissionRequest, this) + ); + this.api.asc_registerCallback( + "asc_onRunAutostartMacroses", + _.bind(this.onRunAutostartMacroses, this) + ); + this.api.asc_setDocInfo(docInfo); + this.api.asc_getEditorPermissions( + this.editorConfig.licenseUrl, + this.editorConfig.customerId + ); + + if (data.doc) { + appHeader.setDocumentCaption(data.doc.title); + } + }, + + onProcessSaveResult: function (data) { + this.api.asc_OnSaveEnd(data.result); + if (data && data.result === false) { + Common.UI.error({ + title: this.criticalErrorTitle, + msg: _.isEmpty(data.message) + ? this.errorProcessSaveResult + : data.message, + }); + } + }, + + onProcessRightsChange: function (data) { + if (data && data.enabled === false) { + var me = this, + old_rights = this._state.lostEditingRights; + this._state.lostEditingRights = !this._state.lostEditingRights; + this.api.asc_coAuthoringDisconnect(); + Common.NotificationCenter.trigger("collaboration:sharingdeny"); + Common.NotificationCenter.trigger("api:disconnect"); + if (!old_rights) + Common.UI.warning({ + title: this.notcriticalErrorTitle, + maxwidth: 600, + msg: _.isEmpty(data.message) + ? this.warnProcessRightsChange + : data.message, + callback: function () { + me._state.lostEditingRights = false; + me.onEditComplete(); + }, + }); + } + }, + + onDownloadAs: function (format) { + if ( + !this.appOptions.canDownload && + !this.appOptions.canDownloadOrigin + ) { + Common.Gateway.reportError( + Asc.c_oAscError.ID.AccessDeny, + this.errorAccessDeny + ); + return; + } + + this._state.isFromGatewayDownloadAs = true; + var _format = + format && typeof format == "string" + ? Asc.c_oAscFileType[format.toUpperCase()] + : null, + _defaultFormat = null, + textParams, + _supported = [ + Asc.c_oAscFileType.TXT, + Asc.c_oAscFileType.RTF, + Asc.c_oAscFileType.ODT, + Asc.c_oAscFileType.DOCX, + Asc.c_oAscFileType.HTML, + Asc.c_oAscFileType.DOTX, + Asc.c_oAscFileType.OTT, + Asc.c_oAscFileType.FB2, + Asc.c_oAscFileType.EPUB, + Asc.c_oAscFileType.DOCM, + Asc.c_oAscFileType.JPG, + Asc.c_oAscFileType.PNG, + ]; + var type = /^(?:(pdf|djvu|xps|oxps))$/.exec(this.document.fileType); + if (type && typeof type[1] === "string") { + if ( + !(format && typeof format == "string") || + type[1] === format.toLowerCase() + ) { + this.api.asc_DownloadOrigin(true); + return; + } + if (/^xps|oxps$/.test(this.document.fileType)) + _supported = _supported.concat([ + Asc.c_oAscFileType.PDF, + Asc.c_oAscFileType.PDFA, + ]); + else if (/^djvu$/.test(this.document.fileType)) { + _supported = [Asc.c_oAscFileType.PDF]; + } + textParams = new AscCommon.asc_CTextParams( + Asc.c_oAscTextAssociation.PlainLine + ); + } else { + _supported = _supported.concat([ + Asc.c_oAscFileType.PDF, + Asc.c_oAscFileType.PDFA, + ]); + _defaultFormat = Asc.c_oAscFileType.DOCX; + } + if ( + this.appOptions.canFeatureForms && + !/^djvu$/.test(this.document.fileType) + ) { + _supported = _supported.concat([ + Asc.c_oAscFileType.DOCXF, + Asc.c_oAscFileType.OFORM, + ]); + } + if (!_format || _supported.indexOf(_format) < 0) + _format = _defaultFormat; + if (_format) { + var options = new Asc.asc_CDownloadOptions(_format, true); + textParams && options.asc_setTextParams(textParams); + this.api.asc_DownloadAs(options); + } else { + this.api.asc_DownloadOrigin(true); + } + }, + + onProcessMouse: function (data) { + if (data.type == "mouseup") { + var e = document.getElementById("editor_sdk"); + if (e) { + var r = e.getBoundingClientRect(); + this.api.OnMouseUp(data.x - r.left, data.y - r.top); + } + } + }, + + onRefreshHistory: function (opts) { + if (!this.appOptions.canUseHistory) return; + + this.loadMask && this.loadMask.hide(); + if (opts.data.error || !opts.data.history) { + var historyStore = this.getApplication().getCollection( + "Common.Collections.HistoryVersions" + ); + if (historyStore && historyStore.size() > 0) { + historyStore.each(function (item) { + item.set("canRestore", false); + }); + } + Common.UI.alert({ + title: this.notcriticalErrorTitle, + msg: opts.data.error + ? opts.data.error + : this.txtErrorLoadHistory, + iconCls: "warn", + buttons: ["ok"], + callback: _.bind(function (btn) { + this.onEditComplete(); + }, this), + }); + } else { + this.api.asc_coAuthoringDisconnect(); + appHeader.setCanRename(false); + appHeader.getButton("users") && + appHeader.getButton("users").hide(); + appHeader.getButton("share") && + appHeader.getButton("share").setVisible(false); + this.getApplication() + .getController("LeftMenu") + .getView("LeftMenu") + .showHistory(); + this.disableEditing(true); + this._renameDialog && this._renameDialog.close(); + var versions = opts.data.history, + historyStore = this.getApplication().getCollection( + "Common.Collections.HistoryVersions" + ), + currentVersion = null; + if (historyStore) { + var arrVersions = [], + ver, + version, + group = -1, + prev_ver = -1, + arrColors = [], + docIdPrev = "", + usersStore = this.getApplication().getCollection( + "Common.Collections.HistoryUsers" + ), + user = null, + usersCnt = 0; + + for (ver = versions.length - 1; ver >= 0; ver--) { + version = versions[ver]; + if ( + version.versionGroup === undefined || + version.versionGroup === null + ) + version.versionGroup = version.version; + if (version) { + if (!version.user) version.user = {}; + docIdPrev = + ver > 0 && versions[ver - 1] + ? versions[ver - 1].key + : version.key + "0"; + user = usersStore.findUser(version.user.id); + if (!user) { + user = new Common.Models.User({ + id: version.user.id, + username: version.user.name || this.textAnonymous, + colorval: Asc.c_oAscArrUserColors[usersCnt], + color: this.generateUserColor( + Asc.c_oAscArrUserColors[usersCnt++] + ), + }); + usersStore.add(user); } - } - - if (!( this.editorConfig.customization && ( this.editorConfig.customization.toolbarNoTabs || - (this.editorConfig.targetApp!=='desktop') && (this.editorConfig.customization.loaderName || this.editorConfig.customization.loaderLogo)))) { - $('#editor-container').css('overflow', 'hidden'); - $('#editor-container').append('
    ' + '
    '.repeat(20) + '
    '); - if (this.editorConfig.mode == 'view' || (this.permissions.edit === false && !this.permissions.review )) - $('#editor-container').find('.doc-placeholder').css('margin-top', 19); - } - - var type = data.doc ? /^(?:(docxf))$/.exec(data.doc.fileType) : false; - this.appOptions.isFormCreator = !!(type && typeof type[1] === 'string') && this.appOptions.canFeatureForms; // show forms only for docxf - - type = data.doc ? /^(?:(oform))$/.exec(data.doc.fileType) : false; - if (type && typeof type[1] === 'string') { - (this.permissions.fillForms===undefined) && (this.permissions.fillForms = (this.permissions.edit!==false)); - this.permissions.edit = this.permissions.review = this.permissions.comment = false; - } - this.api.asc_registerCallback('asc_onGetEditorPermissions', _.bind(this.onEditorPermissions, this)); - this.api.asc_registerCallback('asc_onLicenseChanged', _.bind(this.onLicenseChanged, this)); - this.api.asc_registerCallback('asc_onMacrosPermissionRequest', _.bind(this.onMacrosPermissionRequest, this)); - this.api.asc_registerCallback('asc_onRunAutostartMacroses', _.bind(this.onRunAutostartMacroses, this)); - this.api.asc_setDocInfo(docInfo); - this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); - - if (data.doc) { - appHeader.setDocumentCaption(data.doc.title); - } - }, - - onProcessSaveResult: function(data) { - this.api.asc_OnSaveEnd(data.result); - if (data && data.result === false) { - Common.UI.error({ - title: this.criticalErrorTitle, - msg : _.isEmpty(data.message) ? this.errorProcessSaveResult : data.message - }); - } - }, - - onProcessRightsChange: function(data) { - if (data && data.enabled === false) { - var me = this, - old_rights = this._state.lostEditingRights; - this._state.lostEditingRights = !this._state.lostEditingRights; - this.api.asc_coAuthoringDisconnect(); - Common.NotificationCenter.trigger('collaboration:sharingdeny'); - Common.NotificationCenter.trigger('api:disconnect'); - if (!old_rights) - Common.UI.warning({ - title: this.notcriticalErrorTitle, - maxwidth: 600, - msg : _.isEmpty(data.message) ? this.warnProcessRightsChange : data.message, - callback: function(){ - me._state.lostEditingRights = false; - me.onEditComplete(); - } - }); - } - }, - - onDownloadAs: function(format) { - if ( !this.appOptions.canDownload && !this.appOptions.canDownloadOrigin) { - Common.Gateway.reportError(Asc.c_oAscError.ID.AccessDeny, this.errorAccessDeny); - return; - } - this._state.isFromGatewayDownloadAs = true; - var _format = (format && (typeof format == 'string')) ? Asc.c_oAscFileType[ format.toUpperCase() ] : null, - _defaultFormat = null, - textParams, - _supported = [ - Asc.c_oAscFileType.TXT, - Asc.c_oAscFileType.RTF, - Asc.c_oAscFileType.ODT, - Asc.c_oAscFileType.DOCX, - Asc.c_oAscFileType.HTML, - Asc.c_oAscFileType.DOTX, - Asc.c_oAscFileType.OTT, - Asc.c_oAscFileType.FB2, - Asc.c_oAscFileType.EPUB, - Asc.c_oAscFileType.DOCM, - Asc.c_oAscFileType.JPG, - Asc.c_oAscFileType.PNG - ]; - var type = /^(?:(pdf|djvu|xps|oxps))$/.exec(this.document.fileType); - if (type && typeof type[1] === 'string') { - if (!(format && (typeof format == 'string')) || type[1]===format.toLowerCase()) { - this.api.asc_DownloadOrigin(true); - return; - } - if (/^xps|oxps$/.test(this.document.fileType)) - _supported = _supported.concat([Asc.c_oAscFileType.PDF, Asc.c_oAscFileType.PDFA]); - else if (/^djvu$/.test(this.document.fileType)) { - _supported = [Asc.c_oAscFileType.PDF]; + arrVersions.push( + new Common.Models.HistoryVersion({ + version: version.versionGroup, + revision: version.version, + userid: version.user.id, + username: version.user.name || this.textAnonymous, + usercolor: user.get("color"), + created: version.created, + docId: version.key, + markedAsVersion: group !== version.versionGroup, + selected: opts.data.currentVersion == version.version, + canRestore: + this.appOptions.canHistoryRestore && + ver < versions.length - 1, + isExpanded: true, + serverVersion: version.serverVersion, + fileType: "docx", + }) + ); + if (opts.data.currentVersion == version.version) { + currentVersion = arrVersions[arrVersions.length - 1]; } - textParams = new AscCommon.asc_CTextParams(Asc.c_oAscTextAssociation.PlainLine); - } else { - _supported = _supported.concat([Asc.c_oAscFileType.PDF, Asc.c_oAscFileType.PDFA]); - _defaultFormat = Asc.c_oAscFileType.DOCX; - } - if (this.appOptions.canFeatureForms && !/^djvu$/.test(this.document.fileType)) { - _supported = _supported.concat([Asc.c_oAscFileType.DOCXF, Asc.c_oAscFileType.OFORM]); - } - if ( !_format || _supported.indexOf(_format) < 0 ) - _format = _defaultFormat; - if (_format) { - var options = new Asc.asc_CDownloadOptions(_format, true); - textParams && options.asc_setTextParams(textParams); - this.api.asc_DownloadAs(options); - } else { - this.api.asc_DownloadOrigin(true); - } - }, - - onProcessMouse: function(data) { - if (data.type == 'mouseup') { - var e = document.getElementById('editor_sdk'); - if (e) { - var r = e.getBoundingClientRect(); - this.api.OnMouseUp( - data.x - r.left, - data.y - r.top + group = version.versionGroup; + if (prev_ver !== version.version) { + prev_ver = version.version; + arrColors.reverse(); + for (i = 0; i < arrColors.length; i++) { + arrVersions[arrVersions.length - i - 2].set( + "arrColors", + arrColors ); + } + arrColors = []; } - } - }, - - onRefreshHistory: function(opts) { - if (!this.appOptions.canUseHistory) return; - - this.loadMask && this.loadMask.hide(); - if (opts.data.error || !opts.data.history) { - var historyStore = this.getApplication().getCollection('Common.Collections.HistoryVersions'); - if (historyStore && historyStore.size()>0) { - historyStore.each(function(item){ - item.set('canRestore', false); - }); - } - Common.UI.alert({ - title: this.notcriticalErrorTitle, - msg: (opts.data.error) ? opts.data.error : this.txtErrorLoadHistory, - iconCls: 'warn', - buttons: ['ok'], - callback: _.bind(function(btn){ - this.onEditComplete(); - }, this) - }); - } else { - this.api.asc_coAuthoringDisconnect(); - appHeader.setCanRename(false); - appHeader.getButton('users') && appHeader.getButton('users').hide(); - appHeader.getButton('share') && appHeader.getButton('share').setVisible(false); - this.getApplication().getController('LeftMenu').getView('LeftMenu').showHistory(); - this.disableEditing(true); - this._renameDialog && this._renameDialog.close(); - var versions = opts.data.history, - historyStore = this.getApplication().getCollection('Common.Collections.HistoryVersions'), - currentVersion = null; - if (historyStore) { - var arrVersions = [], ver, version, group = -1, prev_ver = -1, arrColors = [], docIdPrev = '', - usersStore = this.getApplication().getCollection('Common.Collections.HistoryUsers'), user = null, usersCnt = 0; - - for (ver=versions.length-1; ver>=0; ver--) { - version = versions[ver]; - if (version.versionGroup===undefined || version.versionGroup===null) - version.versionGroup = version.version; - if (version) { - if (!version.user) version.user = {}; - docIdPrev = (ver>0 && versions[ver-1]) ? versions[ver-1].key : version.key + '0'; - user = usersStore.findUser(version.user.id); - if (!user) { - user = new Common.Models.User({ - id : version.user.id, - username : version.user.name || this.textAnonymous, - colorval : Asc.c_oAscArrUserColors[usersCnt], - color : this.generateUserColor(Asc.c_oAscArrUserColors[usersCnt++]) - }); - usersStore.add(user); - } - - arrVersions.push(new Common.Models.HistoryVersion({ - version: version.versionGroup, - revision: version.version, - userid : version.user.id, - username : version.user.name || this.textAnonymous, - usercolor: user.get('color'), - created: version.created, - docId: version.key, - markedAsVersion: (group!==version.versionGroup), - selected: (opts.data.currentVersion == version.version), - canRestore: this.appOptions.canHistoryRestore && (ver < versions.length-1), - isExpanded: true, - serverVersion: version.serverVersion, - fileType: 'docx' - })); - if (opts.data.currentVersion == version.version) { - currentVersion = arrVersions[arrVersions.length-1]; - } - group = version.versionGroup; - if (prev_ver!==version.version) { - prev_ver = version.version; - arrColors.reverse(); - for (i=0; i0) { - arrVersions[arrVersions.length-1].set('docIdPrev', docIdPrev); - if (!_.isEmpty(version.serverVersion) && version.serverVersion == this.appOptions.buildVersion) { - arrVersions[arrVersions.length-1].set('changeid', changes.length-1); - arrVersions[arrVersions.length-1].set('hasChanges', changes.length>1); - for (i=changes.length-2; i>=0; i--) { - change = changes[i]; - - user = usersStore.findUser(change.user.id); - if (!user) { - user = new Common.Models.User({ - id : change.user.id, - username : change.user.name || this.textAnonymous, - colorval : Asc.c_oAscArrUserColors[usersCnt], - color : this.generateUserColor(Asc.c_oAscArrUserColors[usersCnt++]) - }); - usersStore.add(user); - } - - arrVersions.push(new Common.Models.HistoryVersion({ - version: version.versionGroup, - revision: version.version, - changeid: i, - userid : change.user.id, - username : change.user.name || this.textAnonymous, - usercolor: user.get('color'), - created: change.created, - docId: version.key, - docIdPrev: docIdPrev, - selected: false, - canRestore: this.appOptions.canHistoryRestore && this.appOptions.canDownload, - isRevision: false, - isVisible: true, - serverVersion: version.serverVersion, - fileType: 'docx' - })); - arrColors.push(user.get('colorval')); - } - } - } else if (ver==0 && versions.length==1) { - arrVersions[arrVersions.length-1].set('docId', version.key + '1'); - } - } - } - if (arrColors.length>0) { - arrColors.reverse(); - for (i=0; i0) { - currentVersion = historyStore.at(0); - currentVersion.set('selected', true); + arrColors.push(user.get("colorval")); + + var changes = version.changes, + change, + i; + if (changes && changes.length > 0) { + arrVersions[arrVersions.length - 1].set( + "docIdPrev", + docIdPrev + ); + if ( + !_.isEmpty(version.serverVersion) && + version.serverVersion == this.appOptions.buildVersion + ) { + arrVersions[arrVersions.length - 1].set( + "changeid", + changes.length - 1 + ); + arrVersions[arrVersions.length - 1].set( + "hasChanges", + changes.length > 1 + ); + for (i = changes.length - 2; i >= 0; i--) { + change = changes[i]; + + user = usersStore.findUser(change.user.id); + if (!user) { + user = new Common.Models.User({ + id: change.user.id, + username: change.user.name || this.textAnonymous, + colorval: Asc.c_oAscArrUserColors[usersCnt], + color: this.generateUserColor( + Asc.c_oAscArrUserColors[usersCnt++] + ), + }); + usersStore.add(user); + } + + arrVersions.push( + new Common.Models.HistoryVersion({ + version: version.versionGroup, + revision: version.version, + changeid: i, + userid: change.user.id, + username: change.user.name || this.textAnonymous, + usercolor: user.get("color"), + created: change.created, + docId: version.key, + docIdPrev: docIdPrev, + selected: false, + canRestore: + this.appOptions.canHistoryRestore && + this.appOptions.canDownload, + isRevision: false, + isVisible: true, + serverVersion: version.serverVersion, + fileType: "docx", + }) + ); + arrColors.push(user.get("colorval")); } - if (currentVersion) - this.getApplication().getController('Common.Controllers.History').onSelectRevision(null, null, currentVersion); + } + } else if (ver == 0 && versions.length == 1) { + arrVersions[arrVersions.length - 1].set( + "docId", + version.key + "1" + ); } + } } - }, - - generateUserColor: function(color) { - return"#"+("000000"+color.toString(16)).substr(-6); - }, - - disableEditing: function(disable, temp) { - var app = this.getApplication(); - Common.NotificationCenter.trigger('editing:disable', disable, { - viewMode: disable, - reviewMode: false, - fillFormMode: false, - allowMerge: false, - allowSignature: false, - allowProtect: false, - rightMenu: {clear: !temp, disable: true}, - statusBar: true, - leftMenu: {disable: true, previewMode: true}, - fileMenu: {protect: true, history: temp}, - navigation: {disable: !temp, previewMode: true}, - comments: {disable: !temp, previewMode: true}, - chat: true, - review: true, - viewport: true, - documentHolder: {clear: !temp, disable: true}, - toolbar: true, - plugins: false, - protect: false - }, temp ? 'reconnect' : 'disconnect'); - }, - - onEditingDisable: function(disable, options, type) { - var app = this.getApplication(); - - var action = {type: type, disable: disable, options: options}; - if (disable && !this.stackDisableActions.get({type: type})) - this.stackDisableActions.push(action); - !disable && this.stackDisableActions.pop({type: type}); - var prev_options = !disable && (this.stackDisableActions.length()>0) ? this.stackDisableActions.get(this.stackDisableActions.length()-1) : null; - - if (options.rightMenu && app.getController('RightMenu')) { - options.rightMenu.clear && app.getController('RightMenu').getView('RightMenu').clearSelection(); - options.rightMenu.disable && app.getController('RightMenu').SetDisabled(disable, options.allowMerge, options.allowSignature); - } - if (options.statusBar) { - app.getController('Statusbar').getView('Statusbar').SetDisabled(disable); - } - if (options.review) { - app.getController('Common.Controllers.ReviewChanges').SetDisabled(disable, options.reviewMode, options.fillFormMode); - } - if (options.viewport) { - app.getController('Viewport').SetDisabled(disable); - } - if (options.toolbar) { - app.getController('Toolbar').DisableToolbar(disable, options.viewMode, options.reviewMode, options.fillFormMode); - } - if (options.documentHolder) { - options.documentHolder.clear && app.getController('DocumentHolder').clearSelection(); - options.documentHolder.disable && app.getController('DocumentHolder').SetDisabled(disable, options.allowProtect, options.fillFormMode); - } - if (options.leftMenu) { - if (options.leftMenu.disable) - app.getController('LeftMenu').SetDisabled(disable, options); - if (options.leftMenu.previewMode) - app.getController('LeftMenu').setPreviewMode(disable); - } - if (options.fileMenu) { - app.getController('LeftMenu').leftMenu.getMenu('file').SetDisabled(disable, options.fileMenu); - if (options.leftMenu.disable) - app.getController('LeftMenu').leftMenu.getMenu('file').applyMode(); - } - if (options.comments) { - var comments = this.getApplication().getController('Common.Controllers.Comments'); - if (comments && options.comments.previewMode) - comments.setPreviewMode(disable); + if (arrColors.length > 0) { + arrColors.reverse(); + for (i = 0; i < arrColors.length; i++) { + arrVersions[arrVersions.length - i - 1].set( + "arrColors", + arrColors + ); + } + arrColors = []; } - if (options.navigation && options.navigation.previewMode) { - app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); + historyStore.reset(arrVersions); + if (currentVersion === null && historyStore.size() > 0) { + currentVersion = historyStore.at(0); + currentVersion.set("selected", true); } - if (options.plugins) { - app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').SetDisabled(disable, options.reviewMode, options.fillFormMode); - } - if (options.protect) { - app.getController('Common.Controllers.Protection').SetDisabled(disable, false); - } - - if (prev_options) { - this.onEditingDisable(prev_options.disable, prev_options.options, prev_options.type); - } - }, - - disableLiveViewing: function(disable) { - this.appOptions.canLiveView = !disable; - this.api.asc_SetFastCollaborative(!disable); - Common.Utils.InternalSettings.set("de-settings-coauthmode", !disable); - }, - - onRequestClose: function() { - var me = this; - if (this.api.isDocumentModified()) { - this.api.asc_stopSaving(); - Common.UI.warning({ - closable: false, - width: 500, - title: this.notcriticalErrorTitle, - msg: this.leavePageTextOnClose, - buttons: ['ok', 'cancel'], - primary: 'ok', - callback: function(btn) { - if (btn == 'ok') { - me.api.asc_undoAllChanges(); - me.api.asc_continueSaving(); - Common.Gateway.requestClose(); - // Common.Controllers.Desktop.requestClose(); - } else - me.api.asc_continueSaving(); - } - }); - } else { + if (currentVersion) + this.getApplication() + .getController("Common.Controllers.History") + .onSelectRevision(null, null, currentVersion); + } + } + }, + + generateUserColor: function (color) { + return "#" + ("000000" + color.toString(16)).substr(-6); + }, + + disableEditing: function (disable, temp) { + var app = this.getApplication(); + Common.NotificationCenter.trigger( + "editing:disable", + disable, + { + viewMode: disable, + reviewMode: false, + fillFormMode: false, + allowMerge: false, + allowSignature: false, + allowProtect: false, + rightMenu: { clear: !temp, disable: true }, + statusBar: true, + leftMenu: { disable: true, previewMode: true }, + fileMenu: { protect: true, history: temp }, + navigation: { disable: !temp, previewMode: true }, + comments: { disable: !temp, previewMode: true }, + chat: true, + review: true, + viewport: true, + documentHolder: { clear: !temp, disable: true }, + toolbar: true, + plugins: false, + protect: false, + }, + temp ? "reconnect" : "disconnect" + ); + }, + + onEditingDisable: function (disable, options, type) { + var app = this.getApplication(); + + var action = { type: type, disable: disable, options: options }; + if (disable && !this.stackDisableActions.get({ type: type })) + this.stackDisableActions.push(action); + !disable && this.stackDisableActions.pop({ type: type }); + var prev_options = + !disable && this.stackDisableActions.length() > 0 + ? this.stackDisableActions.get( + this.stackDisableActions.length() - 1 + ) + : null; + + if (options.rightMenu && app.getController("RightMenu")) { + options.rightMenu.clear && + app + .getController("RightMenu") + .getView("RightMenu") + .clearSelection(); + options.rightMenu.disable && + app + .getController("RightMenu") + .SetDisabled( + disable, + options.allowMerge, + options.allowSignature + ); + } + if (options.statusBar) { + app + .getController("Statusbar") + .getView("Statusbar") + .SetDisabled(disable); + } + if (options.review) { + app + .getController("Common.Controllers.ReviewChanges") + .SetDisabled(disable, options.reviewMode, options.fillFormMode); + } + if (options.viewport) { + app.getController("Viewport").SetDisabled(disable); + } + if (options.toolbar) { + app + .getController("Toolbar") + .DisableToolbar( + disable, + options.viewMode, + options.reviewMode, + options.fillFormMode + ); + } + if (options.documentHolder) { + options.documentHolder.clear && + app.getController("DocumentHolder").clearSelection(); + options.documentHolder.disable && + app + .getController("DocumentHolder") + .SetDisabled( + disable, + options.allowProtect, + options.fillFormMode + ); + } + if (options.leftMenu) { + if (options.leftMenu.disable) + app.getController("LeftMenu").SetDisabled(disable, options); + if (options.leftMenu.previewMode) + app.getController("LeftMenu").setPreviewMode(disable); + } + if (options.fileMenu) { + app + .getController("LeftMenu") + .leftMenu.getMenu("file") + .SetDisabled(disable, options.fileMenu); + if (options.leftMenu.disable) + app + .getController("LeftMenu") + .leftMenu.getMenu("file") + .applyMode(); + } + if (options.comments) { + var comments = this.getApplication().getController( + "Common.Controllers.Comments" + ); + if (comments && options.comments.previewMode) + comments.setPreviewMode(disable); + } + if (options.navigation && options.navigation.previewMode) { + app.getController("Navigation") && + app.getController("Navigation").SetDisabled(disable); + } + if (options.plugins) { + app + .getController("Common.Controllers.Plugins") + .getView("Common.Views.Plugins") + .SetDisabled(disable, options.reviewMode, options.fillFormMode); + } + if (options.protect) { + app + .getController("Common.Controllers.Protection") + .SetDisabled(disable, false); + } + + if (prev_options) { + this.onEditingDisable( + prev_options.disable, + prev_options.options, + prev_options.type + ); + } + }, + + disableLiveViewing: function (disable) { + this.appOptions.canLiveView = !disable; + this.api.asc_SetFastCollaborative(!disable); + Common.Utils.InternalSettings.set( + "de-settings-coauthmode", + !disable + ); + }, + + onRequestClose: function () { + var me = this; + if (this.api.isDocumentModified()) { + this.api.asc_stopSaving(); + Common.UI.warning({ + closable: false, + width: 500, + title: this.notcriticalErrorTitle, + msg: this.leavePageTextOnClose, + buttons: ["ok", "cancel"], + primary: "ok", + callback: function (btn) { + if (btn == "ok") { + me.api.asc_undoAllChanges(); + me.api.asc_continueSaving(); Common.Gateway.requestClose(); // Common.Controllers.Desktop.requestClose(); - } - }, - - goBack: function(current) { - if ( !Common.Controllers.Desktop.process('goback') ) { - if (this.appOptions.customization.goback.requestClose && this.appOptions.canRequestClose) { - this.onRequestClose(); - } else { - var href = this.appOptions.customization.goback.url; - if (!current && this.appOptions.customization.goback.blank!==false) { - window.open(href, "_blank"); - } else { - parent.location.href = href; - } - } - } - }, - - markFavorite: function(favorite) { - if ( !Common.Controllers.Desktop.process('markfavorite') ) { - Common.Gateway.metaChange({ - favorite: favorite - }); - } - }, - - onSetFavorite: function(favorite) { - this.appOptions.canFavorite && appHeader.setFavorite(!!favorite); - }, - - onEditComplete: function(cmp) { -// this.getMainMenu().closeFullScaleMenu(); - var application = this.getApplication(), - toolbarController = application.getController('Toolbar'), - toolbarView = toolbarController.getView(), - rightMenu = application.getController('RightMenu').getView('RightMenu'); - - if (this.appOptions.isEdit && toolbarView && (toolbarView.btnInsertShape.pressed || toolbarView.btnInsertText.pressed) && - ( !_.isObject(arguments[1]) || arguments[1].id !== 'tlbtn-insertshape')) { // TODO: Event from api is needed to clear btnInsertShape state - if (this.api) - this.api.StartAddShape('', false); - - toolbarView.btnInsertShape.toggle(false, false); - toolbarView.btnInsertText.toggle(false, false); - } - if (this.appOptions.isEdit && toolbarView && toolbarView.btnHighlightColor.pressed && - ( !_.isObject(arguments[1]) || arguments[1].id !== 'id-toolbar-btn-highlight')) { - this.api.SetMarkerFormat(false); - toolbarView.btnHighlightColor.toggle(false, false); - } - if (this.appOptions.isEdit && (toolbarView && toolbarView._isEyedropperStart || rightMenu && rightMenu._isEyedropperStart)) { - toolbarView._isEyedropperStart ? toolbarView._isEyedropperStart = false : rightMenu._isEyedropperStart = false; - this.api.asc_cancelEyedropper(); - } - application.getController('DocumentHolder').getView().focus(); - - if (this.api && this.appOptions.isEdit && !toolbarView._state.previewmode) { - var cansave = this.api.asc_isDocumentCanSave(), - forcesave = this.appOptions.forcesave, - isSyncButton = (toolbarView.btnCollabChanges.rendered) ? toolbarView.btnCollabChanges.cmpEl.hasClass('notify') : false, - isDisabled = !cansave && !isSyncButton && !forcesave || this._state.isDisconnected || this._state.fastCoauth && this._state.usersCount>1 && !forcesave; - toolbarView.btnSave.setDisabled(isDisabled); - } - - Common.UI.HintManager.clearHints(true); - }, - - onLongActionBegin: function(type, id) { - var action = {id: id, type: type}; - this.stackLongActions.push(action); - this.setLongActionView(action); - }, - - onLongActionEnd: function(type, id) { - var action = {id: id, type: type}; - this.stackLongActions.pop(action); - - appHeader && appHeader.setDocumentCaption(this.api.asc_getDocumentName()); - this.updateWindowTitle(true); - - action = this.stackLongActions.get({type: Asc.c_oAscAsyncActionType.Information}); - if (action) { - this.setLongActionView(action) - } else { - var me = this; - if ((id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) && !this.appOptions.isOffline) { - if (this._state.fastCoauth && this._state.usersCount>1) { - me._state.timerSave = setTimeout(function () { - me.getApplication().getController('Statusbar').setStatusCaption(me.textChangesSaved, false, 3000); - }, 500); - } else - me.getApplication().getController('Statusbar').setStatusCaption(me.textChangesSaved, false, 3000); - } else - this.getApplication().getController('Statusbar').setStatusCaption(''); - } - - action = this.stackLongActions.get({type: Asc.c_oAscAsyncActionType.BlockInteraction}); - action ? this.setLongActionView(action) : this.loadMask && this.loadMask.hide(); - - if (this.appOptions.isEdit && (id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) && (!this._state.fastCoauth || this._state.usersCount<2 || - this.getApplication().getController('Common.Controllers.ReviewChanges').isPreviewChangesMode())) - this.synchronizeChanges(); - else if (this.appOptions.isEdit && (id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton'] || id == Asc.c_oAscAsyncAction['ApplyChanges']) && - this._state.fastCoauth) - this.getApplication().getController('Common.Controllers.ReviewChanges').synchronizeChanges(); - - if ( id == Asc.c_oAscAsyncAction['Open']) { - Common.Utils.InternalSettings.get("de-settings-livecomment") ? this.api.asc_showComments(Common.Utils.InternalSettings.get("de-settings-resolvedcomment")) : this.api.asc_hideComments(); - } - - if ( id == Asc.c_oAscAsyncAction['Disconnect']) { - this._state.timerDisconnect && clearTimeout(this._state.timerDisconnect); - this.disableEditing(false, true); - this.getApplication().getController('Statusbar').hideDisconnectTip(); - this.getApplication().getController('Statusbar').setStatusCaption(this.textReconnect); - } - - if ( type == Asc.c_oAscAsyncActionType.BlockInteraction && - (!this.getApplication().getController('LeftMenu').dlgSearch || !this.getApplication().getController('LeftMenu').dlgSearch.isVisible()) && - (!this.getApplication().getController('Toolbar').dlgSymbolTable || !this.getApplication().getController('Toolbar').dlgSymbolTable.isVisible()) && - !((id == Asc.c_oAscAsyncAction['LoadDocumentFonts'] || id == Asc.c_oAscAsyncAction['ApplyChanges'] || id == Asc.c_oAscAsyncAction['DownloadAs']) && (this.dontCloseDummyComment || this.inTextareaControl || Common.Utils.ModalWindow.isVisible() || this.inFormControl)) ) { -// this.onEditComplete(this.loadMask); //если делать фокус, то при принятии чужих изменений, заканчивается свой композитный ввод - this.api.asc_enableKeyEvents(true); - } - }, - - setLongActionView: function(action) { - var title = '', text = '', force = false; - var statusCallback = null; // call after showing status - - switch (action.id) { - case Asc.c_oAscAsyncAction['Open']: - title = this.openTitleText; - text = this.openTextText; - break; - - case Asc.c_oAscAsyncAction['Save']: - case Asc.c_oAscAsyncAction['ForceSaveButton']: - clearTimeout(this._state.timerSave); - force = true; - title = this.saveTitleText; - text = (!this.appOptions.isOffline) ? this.saveTextText : ''; - break; - - case Asc.c_oAscAsyncAction['LoadDocumentFonts']: - title = this.loadFontsTitleText; - text = this.loadFontsTextText; - break; - - case Asc.c_oAscAsyncAction['LoadDocumentImages']: - title = this.loadImagesTitleText; - text = this.loadImagesTextText; - break; - - case Asc.c_oAscAsyncAction['LoadFont']: - title = this.loadFontTitleText; - text = this.loadFontTextText; - break; - - case Asc.c_oAscAsyncAction['LoadImage']: - title = this.loadImageTitleText; - text = this.loadImageTextText; - break; - - case Asc.c_oAscAsyncAction['DownloadAs']: - title = this.downloadTitleText; - text = this.downloadTextText; - break; - - case Asc.c_oAscAsyncAction['Print']: - title = this.printTitleText; - text = this.printTextText; - break; - - case Asc.c_oAscAsyncAction['UploadImage']: - title = this.uploadImageTitleText; - text = this.uploadImageTextText; - break; - - case Asc.c_oAscAsyncAction['ApplyChanges']: - title = this.applyChangesTitleText; - text = this.applyChangesTextText; - break; - - case Asc.c_oAscAsyncAction['MailMergeLoadFile']: - title = this.mailMergeLoadFileText; - text = this.mailMergeLoadFileTitle; - break; - - case Asc.c_oAscAsyncAction['DownloadMerge']: - title = this.downloadMergeTitle; - text = this.downloadMergeText; - break; - - case Asc.c_oAscAsyncAction['SendMailMerge']: - title = this.sendMergeTitle; - text = this.sendMergeText; - break; - - case Asc.c_oAscAsyncAction['Waiting']: - title = this.waitText; - text = this.waitText; - break; - - case ApplyEditRights: - title = this.txtEditingMode; - text = this.txtEditingMode; - break; - - case LoadingDocument: - title = this.loadingDocumentTitleText + ' '; - text = this.loadingDocumentTextText; - break; - - case Asc.c_oAscAsyncAction['Disconnect']: - text = this.textDisconnect; - Common.UI.Menu.Manager.hideAll(); - this.disableEditing(true, true); - var me = this; - statusCallback = function() { - me._state.timerDisconnect = setTimeout(function(){ - me.getApplication().getController('Statusbar').showDisconnectTip(); - }, me._state.unloadTimer || 0); - }; - break; - - default: - if (typeof action.id == 'string'){ - title = action.id; - text = action.id; - } - break; - } - - if (action.type == Asc.c_oAscAsyncActionType['BlockInteraction']) { - if (!this.loadMask) - this.loadMask = new Common.UI.LoadMask({owner: $('#viewport')}); - - this.loadMask.setTitle(title); - - if (!this.isShowOpenDialog) - this.loadMask.show(action.id===Asc.c_oAscAsyncAction['Open']); + } else me.api.asc_continueSaving(); + }, + }); + } else { + Common.Gateway.requestClose(); + // Common.Controllers.Desktop.requestClose(); + } + }, + + goBack: function (current) { + if (!Common.Controllers.Desktop.process("goback")) { + if ( + this.appOptions.customization.goback.requestClose && + this.appOptions.canRequestClose + ) { + this.onRequestClose(); + } else { + var href = this.appOptions.customization.goback.url; + if ( + !current && + this.appOptions.customization.goback.blank !== false + ) { + window.open(href, "_blank"); } else { - this.getApplication().getController('Statusbar').setStatusCaption(text, force, 0, statusCallback); - } - }, - - onApplyEditRights: function(data) { - this.getApplication().getController('Statusbar').setStatusCaption(''); - - if (data && !data.allowed) { - Common.UI.info({ - title: this.requestEditFailedTitleText, - msg: data.message || this.requestEditFailedMessageText - }); + parent.location.href = href; } - }, - - onDocumentContentReady: function() { - if (this._isDocReady) - return; - - if (this._state.openDlg) - this._state.openDlg.close(); - - var me = this, - value; - - me._isDocReady = true; - Common.NotificationCenter.trigger('app:ready', this.appOptions); - - me.api.SetDrawingFreeze(false); - me.hidePreloader(); - me.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); - - Common.Utils.InternalSettings.set("de-settings-datetime-default", Common.localStorage.getItem("de-settings-datetime-default")); - - /** coauthoring begin **/ - this.isLiveCommenting = Common.localStorage.getBool("de-settings-livecomment", true); - Common.Utils.InternalSettings.set("de-settings-livecomment", this.isLiveCommenting); - value = Common.localStorage.getBool("de-settings-resolvedcomment"); - Common.Utils.InternalSettings.set("de-settings-resolvedcomment", value); - this.isLiveCommenting ? this.api.asc_showComments(value) : this.api.asc_hideComments(); - /** coauthoring end **/ - - value = Common.localStorage.getItem("de-settings-zoom"); - Common.Utils.InternalSettings.set("de-settings-zoom", value); - var zf = (value!==null) ? parseInt(value) : (this.appOptions.customization && this.appOptions.customization.zoom ? parseInt(this.appOptions.customization.zoom) : 100); - value = Common.localStorage.getItem("de-last-zoom"); - var lastZoom = (value!==null) ? parseInt(value):0; - (zf == -1) ? this.api.zoomFitToPage() : ((zf == -2) ? this.api.zoomFitToWidth() : this.api.zoom(zf>0 ? zf : (zf == -3 && lastZoom > 0) ? lastZoom : 100)); - - value = Common.localStorage.getItem("de-show-hiddenchars"); - me.api.put_ShowParaMarks((value!==null) ? eval(value) : false); - - value = Common.localStorage.getItem("de-show-tableline"); - me.api.put_ShowTableEmptyLine((value!==null) ? eval(value) : true); - - // spellcheck - value = Common.UI.FeaturesManager.getInitValue('spellcheck', true); - value = (value !== undefined) ? value : !(this.appOptions.customization && this.appOptions.customization.spellcheck===false); - if (this.appOptions.customization && this.appOptions.customization.spellcheck!==undefined) - console.log("Obsolete: The 'spellcheck' parameter of the 'customization' section is deprecated. Please use 'spellcheck' parameter in the 'customization.features' section instead."); - if (Common.UI.FeaturesManager.canChange('spellcheck')) { // get from local storage - value = Common.localStorage.getBool("de-settings-spellcheck", value); - Common.Utils.InternalSettings.set("de-settings-spellcheck", value); - } - me.api.asc_setSpellCheck(value); - Common.NotificationCenter.trigger('spelling:turn', value ? 'on' : 'off', true); // only toggle buttons - - if (Common.UI.FeaturesManager.canChange('spellcheck')) { // get settings for spellcheck from local storage - value = Common.localStorage.getBool("de-spellcheck-ignore-uppercase-words", true); - Common.Utils.InternalSettings.set("de-spellcheck-ignore-uppercase-words", value); - value = Common.localStorage.getBool("de-spellcheck-ignore-numbers-words", true); - Common.Utils.InternalSettings.set("de-spellcheck-ignore-numbers-words", value); - value = new AscCommon.CSpellCheckSettings(); - value.put_IgnoreWordsInUppercase(Common.Utils.InternalSettings.get("de-spellcheck-ignore-uppercase-words")); - value.put_IgnoreWordsWithNumbers(Common.Utils.InternalSettings.get("de-spellcheck-ignore-numbers-words")); - this.api.asc_setSpellCheckSettings(value); - } - - value = Common.localStorage.getBool("de-settings-compatible", false); - Common.Utils.InternalSettings.set("de-settings-compatible", value); - - Common.Utils.InternalSettings.set("de-settings-showsnaplines", me.api.get_ShowSnapLines()); - - function checkWarns() { - if (!Common.Controllers.Desktop.isActive()) { - var tips = []; - Common.Utils.isIE9m && tips.push(me.warnBrowserIE9); - - if (tips.length) me.showTips(tips); - } - document.removeEventListener('visibilitychange', checkWarns); - } - - if (typeof document.hidden !== 'undefined' && document.hidden) { - document.addEventListener('visibilitychange', checkWarns); - } else checkWarns(); - - me.api.asc_registerCallback('asc_onStartAction', _.bind(me.onLongActionBegin, me)); - me.api.asc_registerCallback('asc_onEndAction', _.bind(me.onLongActionEnd, me)); - me.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(me.onCoAuthoringDisconnect, me)); - me.api.asc_registerCallback('asc_onPrint', _.bind(me.onPrint, me)); - me.api.asc_registerCallback('asc_onConfirmAction', _.bind(me.onConfirmAction, me)); - - appHeader.setDocumentCaption(me.api.asc_getDocumentName()); - me.updateWindowTitle(true); - - value = Common.localStorage.getBool("de-settings-show-alt-hints", true); - Common.Utils.InternalSettings.set("de-settings-show-alt-hints", value); - - /** coauthoring begin **/ - me._state.fastCoauth = Common.Utils.InternalSettings.get("de-settings-coauthmode"); - me.api.asc_SetFastCollaborative(me._state.fastCoauth); + } + } + }, + + markFavorite: function (favorite) { + if (!Common.Controllers.Desktop.process("markfavorite")) { + Common.Gateway.metaChange({ + favorite: favorite, + }); + } + }, + + onSetFavorite: function (favorite) { + this.appOptions.canFavorite && appHeader.setFavorite(!!favorite); + }, + + onEditComplete: function (cmp) { + // this.getMainMenu().closeFullScaleMenu(); + var application = this.getApplication(), + toolbarController = application.getController("Toolbar"), + toolbarView = toolbarController.getView(), + rightMenu = application + .getController("RightMenu") + .getView("RightMenu"); + + if ( + this.appOptions.isEdit && + toolbarView && + (toolbarView.btnInsertShape.pressed || + toolbarView.btnInsertText.pressed) && + (!_.isObject(arguments[1]) || + arguments[1].id !== "tlbtn-insertshape") + ) { + // TODO: Event from api is needed to clear btnInsertShape state + if (this.api) this.api.StartAddShape("", false); + + toolbarView.btnInsertShape.toggle(false, false); + toolbarView.btnInsertText.toggle(false, false); + } + if ( + this.appOptions.isEdit && + toolbarView && + toolbarView.btnHighlightColor.pressed && + (!_.isObject(arguments[1]) || + arguments[1].id !== "id-toolbar-btn-highlight") + ) { + this.api.SetMarkerFormat(false); + toolbarView.btnHighlightColor.toggle(false, false); + } + if ( + this.appOptions.isEdit && + ((toolbarView && toolbarView._isEyedropperStart) || + (rightMenu && rightMenu._isEyedropperStart)) + ) { + toolbarView._isEyedropperStart + ? (toolbarView._isEyedropperStart = false) + : (rightMenu._isEyedropperStart = false); + this.api.asc_cancelEyedropper(); + } + application.getController("DocumentHolder").getView().focus(); + + if ( + this.api && + this.appOptions.isEdit && + !toolbarView._state.previewmode + ) { + var cansave = this.api.asc_isDocumentCanSave(), + forcesave = this.appOptions.forcesave, + isSyncButton = toolbarView.btnCollabChanges.rendered + ? toolbarView.btnCollabChanges.cmpEl.hasClass("notify") + : false, + isDisabled = + (!cansave && !isSyncButton && !forcesave) || + this._state.isDisconnected || + (this._state.fastCoauth && + this._state.usersCount > 1 && + !forcesave); + toolbarView.btnSave.setDisabled(isDisabled); + } + + Common.UI.HintManager.clearHints(true); + }, + + onLongActionBegin: function (type, id) { + var action = { id: id, type: type }; + this.stackLongActions.push(action); + this.setLongActionView(action); + }, + + onLongActionEnd: function (type, id) { + var action = { id: id, type: type }; + this.stackLongActions.pop(action); + + appHeader && + appHeader.setDocumentCaption(this.api.asc_getDocumentName()); + this.updateWindowTitle(true); + + action = this.stackLongActions.get({ + type: Asc.c_oAscAsyncActionType.Information, + }); + if (action) { + this.setLongActionView(action); + } else { + var me = this; + if ( + (id == Asc.c_oAscAsyncAction["Save"] || + id == Asc.c_oAscAsyncAction["ForceSaveButton"]) && + !this.appOptions.isOffline + ) { + if (this._state.fastCoauth && this._state.usersCount > 1) { + me._state.timerSave = setTimeout(function () { + me.getApplication() + .getController("Statusbar") + .setStatusCaption(me.textChangesSaved, false, 3000); + }, 500); + } else + me.getApplication() + .getController("Statusbar") + .setStatusCaption(me.textChangesSaved, false, 3000); + } else + this.getApplication() + .getController("Statusbar") + .setStatusCaption(""); + } + + action = this.stackLongActions.get({ + type: Asc.c_oAscAsyncActionType.BlockInteraction, + }); + action + ? this.setLongActionView(action) + : this.loadMask && this.loadMask.hide(); + + if ( + this.appOptions.isEdit && + (id == Asc.c_oAscAsyncAction["Save"] || + id == Asc.c_oAscAsyncAction["ForceSaveButton"]) && + (!this._state.fastCoauth || + this._state.usersCount < 2 || + this.getApplication() + .getController("Common.Controllers.ReviewChanges") + .isPreviewChangesMode()) + ) + this.synchronizeChanges(); + else if ( + this.appOptions.isEdit && + (id == Asc.c_oAscAsyncAction["Save"] || + id == Asc.c_oAscAsyncAction["ForceSaveButton"] || + id == Asc.c_oAscAsyncAction["ApplyChanges"]) && + this._state.fastCoauth + ) + this.getApplication() + .getController("Common.Controllers.ReviewChanges") + .synchronizeChanges(); + + if (id == Asc.c_oAscAsyncAction["Open"]) { + Common.Utils.InternalSettings.get("de-settings-livecomment") + ? this.api.asc_showComments( + Common.Utils.InternalSettings.get( + "de-settings-resolvedcomment" + ) + ) + : this.api.asc_hideComments(); + } + + if (id == Asc.c_oAscAsyncAction["Disconnect"]) { + this._state.timerDisconnect && + clearTimeout(this._state.timerDisconnect); + this.disableEditing(false, true); + this.getApplication() + .getController("Statusbar") + .hideDisconnectTip(); + this.getApplication() + .getController("Statusbar") + .setStatusCaption(this.textReconnect); + } + + if ( + type == Asc.c_oAscAsyncActionType.BlockInteraction && + (!this.getApplication().getController("LeftMenu").dlgSearch || + !this.getApplication() + .getController("LeftMenu") + .dlgSearch.isVisible()) && + (!this.getApplication().getController("Toolbar").dlgSymbolTable || + !this.getApplication() + .getController("Toolbar") + .dlgSymbolTable.isVisible()) && + !( + (id == Asc.c_oAscAsyncAction["LoadDocumentFonts"] || + id == Asc.c_oAscAsyncAction["ApplyChanges"] || + id == Asc.c_oAscAsyncAction["DownloadAs"]) && + (this.dontCloseDummyComment || + this.inTextareaControl || + Common.Utils.ModalWindow.isVisible() || + this.inFormControl) + ) + ) { + // this.onEditComplete(this.loadMask); //если делать фокус, то при принятии чужих изменений, заканчивается свой композитный ввод + this.api.asc_enableKeyEvents(true); + } + }, + + setLongActionView: function (action) { + var title = "", + text = "", + force = false; + var statusCallback = null; // call after showing status + + switch (action.id) { + case Asc.c_oAscAsyncAction["Open"]: + title = this.openTitleText; + text = this.openTextText; + break; + + case Asc.c_oAscAsyncAction["Save"]: + case Asc.c_oAscAsyncAction["ForceSaveButton"]: + clearTimeout(this._state.timerSave); + force = true; + title = this.saveTitleText; + text = !this.appOptions.isOffline ? this.saveTextText : ""; + break; + + case Asc.c_oAscAsyncAction["LoadDocumentFonts"]: + title = this.loadFontsTitleText; + text = this.loadFontsTextText; + break; + + case Asc.c_oAscAsyncAction["LoadDocumentImages"]: + title = this.loadImagesTitleText; + text = this.loadImagesTextText; + break; + + case Asc.c_oAscAsyncAction["LoadFont"]: + title = this.loadFontTitleText; + text = this.loadFontTextText; + break; + + case Asc.c_oAscAsyncAction["LoadImage"]: + title = this.loadImageTitleText; + text = this.loadImageTextText; + break; + + case Asc.c_oAscAsyncAction["DownloadAs"]: + title = this.downloadTitleText; + text = this.downloadTextText; + break; + + case Asc.c_oAscAsyncAction["Print"]: + title = this.printTitleText; + text = this.printTextText; + break; + + case Asc.c_oAscAsyncAction["UploadImage"]: + title = this.uploadImageTitleText; + text = this.uploadImageTextText; + break; + + case Asc.c_oAscAsyncAction["ApplyChanges"]: + title = this.applyChangesTitleText; + text = this.applyChangesTextText; + break; + + case Asc.c_oAscAsyncAction["MailMergeLoadFile"]: + title = this.mailMergeLoadFileText; + text = this.mailMergeLoadFileTitle; + break; + + case Asc.c_oAscAsyncAction["DownloadMerge"]: + title = this.downloadMergeTitle; + text = this.downloadMergeText; + break; + + case Asc.c_oAscAsyncAction["SendMailMerge"]: + title = this.sendMergeTitle; + text = this.sendMergeText; + break; + + case Asc.c_oAscAsyncAction["Waiting"]: + title = this.waitText; + text = this.waitText; + break; + + case ApplyEditRights: + title = this.txtEditingMode; + text = this.txtEditingMode; + break; + + case LoadingDocument: + title = this.loadingDocumentTitleText + " "; + text = this.loadingDocumentTextText; + break; + + case Asc.c_oAscAsyncAction["Disconnect"]: + text = this.textDisconnect; + Common.UI.Menu.Manager.hideAll(); + this.disableEditing(true, true); + var me = this; + statusCallback = function () { + me._state.timerDisconnect = setTimeout(function () { + me.getApplication() + .getController("Statusbar") + .showDisconnectTip(); + }, me._state.unloadTimer || 0); + }; + break; - value = Common.Utils.InternalSettings.get((me._state.fastCoauth) ? "de-settings-showchanges-fast" : "de-settings-showchanges-strict"); - switch(value) { - case 'all': value = Asc.c_oAscCollaborativeMarksShowType.All; break; - case 'none': value = Asc.c_oAscCollaborativeMarksShowType.None; break; - case 'last': value = Asc.c_oAscCollaborativeMarksShowType.LastChanges; break; - default: value = (me._state.fastCoauth) ? Asc.c_oAscCollaborativeMarksShowType.None : Asc.c_oAscCollaborativeMarksShowType.LastChanges; + default: + if (typeof action.id == "string") { + title = action.id; + text = action.id; } - me.api.SetCollaborativeMarksShowType(value); - me.api.asc_setAutoSaveGap(Common.Utils.InternalSettings.get("de-settings-autosave")); - me.api.asc_SetPerformContentControlActionByClick(me.appOptions.isRestrictedEdit && me.appOptions.canFillForms); - - /** coauthoring end **/ - - var application = me.getApplication(); - var toolbarController = application.getController('Toolbar'), - statusbarController = application.getController('Statusbar'), - documentHolderController = application.getController('DocumentHolder'), - fontsController = application.getController('Common.Controllers.Fonts'), - rightmenuController = application.getController('RightMenu'), - leftmenuController = application.getController('LeftMenu'), - chatController = application.getController('Common.Controllers.Chat'), - pluginsController = application.getController('Common.Controllers.Plugins'), - navigationController = application.getController('Navigation'); - - - leftmenuController.getView('LeftMenu').getMenu('file').loadDocument({doc:me.document}); - leftmenuController.createDelayedElements().setApi(me.api); - - navigationController.setMode(me.appOptions).setApi(me.api); - - chatController.setApi(this.api).setMode(this.appOptions); - application.getController('Common.Controllers.ExternalDiagramEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization}); - application.getController('Common.Controllers.ExternalMergeEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization}); - application.getController('Common.Controllers.ExternalOleEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization}); - - pluginsController.setApi(me.api); - - documentHolderController.setApi(me.api); - // documentHolderController.createDelayedElements(); - statusbarController.createDelayedElements(); - - leftmenuController.getView('LeftMenu').disableMenu('all',false); - - if (me.appOptions.canBranding) - me.getApplication().getController('LeftMenu').leftMenu.getMenu('about').setLicInfo(me.editorConfig.customization); - - documentHolderController.getView().on('editcomplete', _.bind(me.onEditComplete, me)); - - if (me.appOptions.isEdit) { - if (me.appOptions.canForcesave) {// use asc_setIsForceSaveOnUserSave only when customization->forcesave = true - me.appOptions.forcesave = Common.localStorage.getBool("de-settings-forcesave", me.appOptions.canForcesave); - Common.Utils.InternalSettings.set("de-settings-forcesave", me.appOptions.forcesave); - me.api.asc_setIsForceSaveOnUserSave(me.appOptions.forcesave); - } - - value = Common.localStorage.getItem("de-settings-paste-button"); - if (value===null) value = '1'; - Common.Utils.InternalSettings.set("de-settings-paste-button", parseInt(value)); - me.api.asc_setVisiblePasteButton(!!parseInt(value)); - - value = Common.localStorage.getBool("de-settings-smart-selection", true); - Common.Utils.InternalSettings.set("de-settings-smart-selection", value); - me.api.asc_putSmartParagraphSelection(value); - - me.loadAutoCorrectSettings(); + break; + } - if (me.needToUpdateVersion) - Common.NotificationCenter.trigger('api:disconnect'); - var timer_sl = setInterval(function(){ - if (window.styles_loaded) { - clearInterval(timer_sl); + if (action.type == Asc.c_oAscAsyncActionType["BlockInteraction"]) { + if (!this.loadMask) + this.loadMask = new Common.UI.LoadMask({ + owner: $("#viewport"), + }); - toolbarController.createDelayedElements(); + this.loadMask.setTitle(title); + + if (!this.isShowOpenDialog) + this.loadMask.show(action.id === Asc.c_oAscAsyncAction["Open"]); + } else { + this.getApplication() + .getController("Statusbar") + .setStatusCaption(text, force, 0, statusCallback); + } + }, + + onApplyEditRights: function (data) { + this.getApplication() + .getController("Statusbar") + .setStatusCaption(""); + + if (data && !data.allowed) { + Common.UI.info({ + title: this.requestEditFailedTitleText, + msg: data.message || this.requestEditFailedMessageText, + }); + } + }, + + onDocumentContentReady: function () { + if (this._isDocReady) return; + + if (this._state.openDlg) this._state.openDlg.close(); + + var me = this, + value; + + me._isDocReady = true; + Common.NotificationCenter.trigger("app:ready", this.appOptions); + + me.api.SetDrawingFreeze(false); + me.hidePreloader(); + me.onLongActionEnd( + Asc.c_oAscAsyncActionType["BlockInteraction"], + LoadingDocument + ); + + Common.Utils.InternalSettings.set( + "de-settings-datetime-default", + Common.localStorage.getItem("de-settings-datetime-default") + ); - documentHolderController.getView().createDelayedElements(); - me.setLanguages(); + /** coauthoring begin **/ + this.isLiveCommenting = Common.localStorage.getBool( + "de-settings-livecomment", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-livecomment", + this.isLiveCommenting + ); + value = Common.localStorage.getBool("de-settings-resolvedcomment"); + Common.Utils.InternalSettings.set( + "de-settings-resolvedcomment", + value + ); + this.isLiveCommenting + ? this.api.asc_showComments(value) + : this.api.asc_hideComments(); + /** coauthoring end **/ - var shapes = me.api.asc_getPropertyEditorShapes(); - if (shapes) - me.fillAutoShapes(shapes[0], shapes[1]); + value = Common.localStorage.getItem("de-settings-zoom"); + Common.Utils.InternalSettings.set("de-settings-zoom", value); + var zf = + value !== null + ? parseInt(value) + : this.appOptions.customization && + this.appOptions.customization.zoom + ? parseInt(this.appOptions.customization.zoom) + : 100; + value = Common.localStorage.getItem("de-last-zoom"); + var lastZoom = value !== null ? parseInt(value) : 0; + zf == -1 + ? this.api.zoomFitToPage() + : zf == -2 + ? this.api.zoomFitToWidth() + : this.api.zoom( + zf > 0 ? zf : zf == -3 && lastZoom > 0 ? lastZoom : 100 + ); + + value = Common.localStorage.getItem("de-show-hiddenchars"); + me.api.put_ShowParaMarks(value !== null ? eval(value) : false); + + value = Common.localStorage.getItem("de-show-tableline"); + me.api.put_ShowTableEmptyLine(value !== null ? eval(value) : true); + + // spellcheck + value = Common.UI.FeaturesManager.getInitValue("spellcheck", true); + value = + value !== undefined + ? value + : !( + this.appOptions.customization && + this.appOptions.customization.spellcheck === false + ); + if ( + this.appOptions.customization && + this.appOptions.customization.spellcheck !== undefined + ) + console.log( + "Obsolete: The 'spellcheck' parameter of the 'customization' section is deprecated. Please use 'spellcheck' parameter in the 'customization.features' section instead." + ); + if (Common.UI.FeaturesManager.canChange("spellcheck")) { + // get from local storage + value = Common.localStorage.getBool( + "de-settings-spellcheck", + value + ); + Common.Utils.InternalSettings.set( + "de-settings-spellcheck", + value + ); + } + me.api.asc_setSpellCheck(value); + Common.NotificationCenter.trigger( + "spelling:turn", + value ? "on" : "off", + true + ); // only toggle buttons + + if (Common.UI.FeaturesManager.canChange("spellcheck")) { + // get settings for spellcheck from local storage + value = Common.localStorage.getBool( + "de-spellcheck-ignore-uppercase-words", + true + ); + Common.Utils.InternalSettings.set( + "de-spellcheck-ignore-uppercase-words", + value + ); + value = Common.localStorage.getBool( + "de-spellcheck-ignore-numbers-words", + true + ); + Common.Utils.InternalSettings.set( + "de-spellcheck-ignore-numbers-words", + value + ); + value = new AscCommon.CSpellCheckSettings(); + value.put_IgnoreWordsInUppercase( + Common.Utils.InternalSettings.get( + "de-spellcheck-ignore-uppercase-words" + ) + ); + value.put_IgnoreWordsWithNumbers( + Common.Utils.InternalSettings.get( + "de-spellcheck-ignore-numbers-words" + ) + ); + this.api.asc_setSpellCheckSettings(value); + } + + value = Common.localStorage.getBool( + "de-settings-compatible", + false + ); + Common.Utils.InternalSettings.set("de-settings-compatible", value); + + Common.Utils.InternalSettings.set( + "de-settings-showsnaplines", + me.api.get_ShowSnapLines() + ); + + function checkWarns() { + if (!Common.Controllers.Desktop.isActive()) { + var tips = []; + Common.Utils.isIE9m && tips.push(me.warnBrowserIE9); + + if (tips.length) me.showTips(tips); + } + document.removeEventListener("visibilitychange", checkWarns); + } + + if (typeof document.hidden !== "undefined" && document.hidden) { + document.addEventListener("visibilitychange", checkWarns); + } else checkWarns(); + + me.api.asc_registerCallback( + "asc_onStartAction", + _.bind(me.onLongActionBegin, me) + ); + me.api.asc_registerCallback( + "asc_onEndAction", + _.bind(me.onLongActionEnd, me) + ); + me.api.asc_registerCallback( + "asc_onCoAuthoringDisconnect", + _.bind(me.onCoAuthoringDisconnect, me) + ); + me.api.asc_registerCallback("asc_onPrint", _.bind(me.onPrint, me)); + me.api.asc_registerCallback( + "asc_onConfirmAction", + _.bind(me.onConfirmAction, me) + ); + + appHeader.setDocumentCaption(me.api.asc_getDocumentName()); + me.updateWindowTitle(true); + + value = Common.localStorage.getBool( + "de-settings-show-alt-hints", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-show-alt-hints", + value + ); - rightmenuController.createDelayedElements(); + /** coauthoring begin **/ + me._state.fastCoauth = Common.Utils.InternalSettings.get( + "de-settings-coauthmode" + ); + me.api.asc_SetFastCollaborative(me._state.fastCoauth); + + value = Common.Utils.InternalSettings.get( + me._state.fastCoauth + ? "de-settings-showchanges-fast" + : "de-settings-showchanges-strict" + ); + switch (value) { + case "all": + value = Asc.c_oAscCollaborativeMarksShowType.All; + break; + case "none": + value = Asc.c_oAscCollaborativeMarksShowType.None; + break; + case "last": + value = Asc.c_oAscCollaborativeMarksShowType.LastChanges; + break; + default: + value = me._state.fastCoauth + ? Asc.c_oAscCollaborativeMarksShowType.None + : Asc.c_oAscCollaborativeMarksShowType.LastChanges; + } + me.api.SetCollaborativeMarksShowType(value); + me.api.asc_setAutoSaveGap( + Common.Utils.InternalSettings.get("de-settings-autosave") + ); + me.api.asc_SetPerformContentControlActionByClick( + me.appOptions.isRestrictedEdit && me.appOptions.canFillForms + ); - me.updateThemeColors(); - toolbarController.activateControls(); - if (me.needToUpdateVersion) - toolbarController.onApiCoAuthoringDisconnect(); - me.api.UpdateInterfaceState(); + /** coauthoring end **/ - Common.NotificationCenter.trigger('document:ready', 'main'); - me.applyLicense(); - } - }, 50); - } else { - documentHolderController.getView().createDelayedElementsViewer(); - Common.NotificationCenter.trigger('document:ready', 'main'); - me.applyLicense(); - } + var application = me.getApplication(); + var toolbarController = application.getController("Toolbar"), + statusbarController = application.getController("Statusbar"), + documentHolderController = + application.getController("DocumentHolder"), + fontsController = application.getController( + "Common.Controllers.Fonts" + ), + rightmenuController = application.getController("RightMenu"), + leftmenuController = application.getController("LeftMenu"), + chatController = application.getController( + "Common.Controllers.Chat" + ), + pluginsController = application.getController( + "Common.Controllers.Plugins" + ), + navigationController = application.getController("Navigation"); + + leftmenuController + .getView("LeftMenu") + .getMenu("file") + .loadDocument({ doc: me.document }); + leftmenuController.createDelayedElements().setApi(me.api); + + navigationController.setMode(me.appOptions).setApi(me.api); + + chatController.setApi(this.api).setMode(this.appOptions); + application + .getController("Common.Controllers.ExternalDiagramEditor") + .setApi(this.api) + .loadConfig({ + config: this.editorConfig, + customization: this.editorConfig.customization, + }); + application + .getController("Common.Controllers.ExternalMergeEditor") + .setApi(this.api) + .loadConfig({ + config: this.editorConfig, + customization: this.editorConfig.customization, + }); + application + .getController("Common.Controllers.ExternalOleEditor") + .setApi(this.api) + .loadConfig({ + config: this.editorConfig, + customization: this.editorConfig.customization, + }); + + pluginsController.setApi(me.api); + + documentHolderController.setApi(me.api); + // documentHolderController.createDelayedElements(); + statusbarController.createDelayedElements(); + + leftmenuController.getView("LeftMenu").disableMenu("all", false); + + if (me.appOptions.canBranding) + me.getApplication() + .getController("LeftMenu") + .leftMenu.getMenu("about") + .setLicInfo(me.editorConfig.customization); + + documentHolderController + .getView() + .on("editcomplete", _.bind(me.onEditComplete, me)); + + if (me.appOptions.isEdit) { + if (me.appOptions.canForcesave) { + // use asc_setIsForceSaveOnUserSave only when customization->forcesave = true + me.appOptions.forcesave = Common.localStorage.getBool( + "de-settings-forcesave", + me.appOptions.canForcesave + ); + Common.Utils.InternalSettings.set( + "de-settings-forcesave", + me.appOptions.forcesave + ); + me.api.asc_setIsForceSaveOnUserSave(me.appOptions.forcesave); + } + + value = Common.localStorage.getItem("de-settings-paste-button"); + if (value === null) value = "1"; + Common.Utils.InternalSettings.set( + "de-settings-paste-button", + parseInt(value) + ); + me.api.asc_setVisiblePasteButton(!!parseInt(value)); + + value = Common.localStorage.getBool( + "de-settings-smart-selection", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-smart-selection", + value + ); + me.api.asc_putSmartParagraphSelection(value); + + me.loadAutoCorrectSettings(); + + if (me.needToUpdateVersion) + Common.NotificationCenter.trigger("api:disconnect"); + var timer_sl = setInterval(function () { + if (window.styles_loaded) { + clearInterval(timer_sl); - // TODO bug 43960 - var dummyClass = ~~(1e6*Math.random()); - $('.toolbar').prepend(Common.Utils.String.format('
    ', dummyClass)); - setTimeout(function() { $(Common.Utils.String.format('.toolbar .lazy-{0}', dummyClass)).remove(); }, 10); - - if (this.appOptions.canAnalytics && false) - Common.component.Analytics.initialize('UA-12442749-13', 'Document Editor'); - - Common.Gateway.on('applyeditrights', _.bind(me.onApplyEditRights, me)); - Common.Gateway.on('processsaveresult', _.bind(me.onProcessSaveResult, me)); - Common.Gateway.on('processrightschange', _.bind(me.onProcessRightsChange, me)); - Common.Gateway.on('processmouse', _.bind(me.onProcessMouse, me)); - Common.Gateway.on('refreshhistory', _.bind(me.onRefreshHistory, me)); - Common.Gateway.on('downloadas', _.bind(me.onDownloadAs, me)); - Common.Gateway.on('setfavorite', _.bind(me.onSetFavorite, me)); - Common.Gateway.on('requestclose', _.bind(me.onRequestClose, me)); - - Common.Gateway.sendInfo({mode:me.appOptions.isEdit?'edit':'view'}); - - $(document).on('contextmenu', _.bind(me.onContextMenu, me)); - Common.Gateway.documentReady(); - - $('#editor-container').css('overflow', ''); - $('.doc-placeholder').remove(); - - this.appOptions.user.guest && this.appOptions.canRenameAnonymous && (Common.Utils.InternalSettings.get("guest-username")===null) && this.showRenameUserDialog(); - if (this._needToSaveAsFile) // warning received before document is ready - this.getApplication().getController('LeftMenu').leftMenu.showMenu('file:saveas'); - }, - - onLicenseChanged: function(params) { - var licType = params.asc_getLicenseType(); - if (licType !== undefined && (this.appOptions.canEdit || this.appOptions.isRestrictedEdit) && this.editorConfig.mode !== 'view' && - (licType===Asc.c_oLicenseResult.Connections || licType===Asc.c_oLicenseResult.UsersCount || licType===Asc.c_oLicenseResult.ConnectionsOS || licType===Asc.c_oLicenseResult.UsersCountOS - || licType===Asc.c_oLicenseResult.SuccessLimit && (this.appOptions.trialMode & Asc.c_oLicenseMode.Limited) !== 0)) - this._state.licenseType = licType; - - if (licType !== undefined && this.appOptions.canLiveView && (licType===Asc.c_oLicenseResult.ConnectionsLive || licType===Asc.c_oLicenseResult.ConnectionsLiveOS || - licType===Asc.c_oLicenseResult.UsersViewCount || licType===Asc.c_oLicenseResult.UsersViewCountOS)) - this._state.licenseType = licType; - - if (this._isDocReady) - this.applyLicense(); - }, - - applyLicense: function() { - if (this.editorConfig.mode === 'view') { - if (this.appOptions.canLiveView && (this._state.licenseType===Asc.c_oLicenseResult.ConnectionsLive || this._state.licenseType===Asc.c_oLicenseResult.ConnectionsLiveOS || - this._state.licenseType===Asc.c_oLicenseResult.UsersViewCount || this._state.licenseType===Asc.c_oLicenseResult.UsersViewCountOS || - !this.appOptions.isAnonymousSupport && !!this.appOptions.user.anonymous)) { - // show warning or write to log if Common.Utils.InternalSettings.get("de-settings-coauthmode") was true ??? - this.disableLiveViewing(true); - } - } else if (!this.appOptions.isAnonymousSupport && !!this.appOptions.user.anonymous) { - this.disableEditing(true); - this.api.asc_coAuthoringDisconnect(); - Common.NotificationCenter.trigger('api:disconnect'); - Common.UI.warning({ - title: this.notcriticalErrorTitle, - msg : this.warnLicenseAnonymous, - buttons: ['ok'] - }); - } else if (this._state.licenseType) { - var license = this._state.licenseType, - buttons = ['ok'], - primary = 'ok'; - if ((this.appOptions.trialMode & Asc.c_oLicenseMode.Limited) !== 0 && - (license===Asc.c_oLicenseResult.SuccessLimit || this.appOptions.permissionsLicense===Asc.c_oLicenseResult.SuccessLimit)) { - license = this.warnLicenseLimitedRenewed; - } else if (license===Asc.c_oLicenseResult.Connections || license===Asc.c_oLicenseResult.UsersCount) { - license = (license===Asc.c_oLicenseResult.Connections) ? this.warnLicenseExceeded : this.warnLicenseUsersExceeded; - } else { - license = (license===Asc.c_oLicenseResult.ConnectionsOS) ? this.warnNoLicense : this.warnNoLicenseUsers; - buttons = [{value: 'buynow', caption: this.textBuyNow}, {value: 'contact', caption: this.textContactUs}]; - primary = 'buynow'; - } + toolbarController.createDelayedElements(); - if (this._state.licenseType!==Asc.c_oLicenseResult.SuccessLimit && (this.appOptions.isEdit || this.appOptions.isRestrictedEdit)) { - this.disableEditing(true); - this.api.asc_coAuthoringDisconnect(); - Common.NotificationCenter.trigger('api:disconnect'); - } + documentHolderController.getView().createDelayedElements(); + me.setLanguages(); - var value = Common.localStorage.getItem("de-license-warning"); - value = (value!==null) ? parseInt(value) : 0; - var now = (new Date).getTime(); - if (now - value > 86400000) { - Common.UI.info({ - maxwidth: 500, - title: this.textNoLicenseTitle, - msg : license, - buttons: buttons, - primary: primary, - callback: function(btn) { - Common.localStorage.setItem("de-license-warning", now); - if (btn == 'buynow') - window.open('{{PUBLISHER_URL}}', "_blank"); - else if (btn == 'contact') - window.open('mailto:{{SALES_EMAIL}}', "_blank"); - } - }); - } - } else if (!this.appOptions.isDesktopApp && !this.appOptions.canBrandingExt && - this.editorConfig && this.editorConfig.customization && (this.editorConfig.customization.loaderName || this.editorConfig.customization.loaderLogo || - this.editorConfig.customization.font && (this.editorConfig.customization.font.size || this.editorConfig.customization.font.name))) { - Common.UI.warning({ - title: this.textPaidFeature, - msg : this.textCustomLoader, - buttons: [{value: 'contact', caption: this.textContactUs}, {value: 'close', caption: this.textClose}], - primary: 'contact', - callback: function(btn) { - if (btn == 'contact') - window.open('mailto:{{SALES_EMAIL}}', "_blank"); - } - }); - } - }, - - onOpenDocument: function(progress) { - var elem = document.getElementById('loadmask-text'); - var proc = (progress.asc_getCurrentFont() + progress.asc_getCurrentImage())/(progress.asc_getFontsCount() + progress.asc_getImagesCount()); - proc = this.textLoadingDocument + ': ' + Common.Utils.String.fixedDigits(Math.min(Math.round(proc*100), 100), 3, " ") + "%"; - elem ? elem.innerHTML = proc : this.loadMask && this.loadMask.setTitle(proc); - }, - - onEditorPermissions: function(params) { - var licType = params.asc_getLicenseType(); - if (Asc.c_oLicenseResult.Expired === licType || Asc.c_oLicenseResult.Error === licType || Asc.c_oLicenseResult.ExpiredTrial === licType || - Asc.c_oLicenseResult.NotBefore === licType || Asc.c_oLicenseResult.ExpiredLimited === licType) { - Common.UI.warning({ - title: Asc.c_oLicenseResult.NotBefore === licType ? this.titleLicenseNotActive : this.titleLicenseExp, - msg: Asc.c_oLicenseResult.NotBefore === licType ? this.warnLicenseBefore : this.warnLicenseExp, - buttons: [], - closable: false - }); - return; - } + var shapes = me.api.asc_getPropertyEditorShapes(); + if (shapes) me.fillAutoShapes(shapes[0], shapes[1]); - if ( this.onServerVersion(params.asc_getBuildVersion()) || !this.onLanguageLoaded()) return; - - var isPDFViewer = /^(?:(pdf|djvu|xps|oxps))$/.test(this.document.fileType); - - this.permissions.review = (this.permissions.review === undefined) ? (this.permissions.edit !== false) : this.permissions.review; - - if (params.asc_getRights() !== Asc.c_oRights.Edit) - this.permissions.edit = this.permissions.review = false; - - this.appOptions.permissionsLicense = licType; - this.appOptions.canAnalytics = params.asc_getIsAnalyticsEnable(); - this.appOptions.canLicense = (licType === Asc.c_oLicenseResult.Success || licType === Asc.c_oLicenseResult.SuccessLimit); - this.appOptions.isLightVersion = params.asc_getIsLight(); - /** coauthoring begin **/ - this.appOptions.canCoAuthoring = !this.appOptions.isLightVersion; - /** coauthoring end **/ - this.appOptions.isOffline = this.api.asc_isOffline(); - this.appOptions.canCreateNew = this.appOptions.canCreateNew && !(this.appOptions.isOffline && isPDFViewer); - this.appOptions.isCrypted = this.api.asc_isCrypto(); - this.appOptions.isReviewOnly = this.permissions.review === true && this.permissions.edit === false; - this.appOptions.canRequestEditRights = this.editorConfig.canRequestEditRights; - this.appOptions.canEdit = (this.permissions.edit !== false || this.permissions.review === true) && // can edit or review - (this.editorConfig.canRequestEditRights || this.editorConfig.mode !== 'view') && // if mode=="view" -> canRequestEditRights must be defined - (!this.appOptions.isReviewOnly || this.appOptions.canLicense); // if isReviewOnly==true -> canLicense must be true - this.appOptions.isEdit = this.appOptions.canLicense && this.appOptions.canEdit && this.editorConfig.mode !== 'view'; - this.appOptions.canReview = this.permissions.review === true && this.appOptions.canLicense && this.appOptions.isEdit; - this.appOptions.canViewReview = true; - this.appOptions.canUseHistory = this.appOptions.canLicense && this.editorConfig.canUseHistory && this.appOptions.canCoAuthoring && !this.appOptions.isOffline; - this.appOptions.canHistoryClose = this.editorConfig.canHistoryClose; - this.appOptions.canHistoryRestore= this.editorConfig.canHistoryRestore; - this.appOptions.canUseMailMerge= this.appOptions.canLicense && this.appOptions.canEdit && !this.appOptions.isOffline; - this.appOptions.canSendEmailAddresses = this.appOptions.canLicense && this.editorConfig.canSendEmailAddresses && this.appOptions.canEdit && this.appOptions.canCoAuthoring; - this.appOptions.canComments = this.appOptions.canLicense && (this.permissions.comment===undefined ? this.appOptions.isEdit : this.permissions.comment) && (this.editorConfig.mode !== 'view'); - this.appOptions.canComments = !isPDFViewer && this.appOptions.canComments && !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.comments===false); - this.appOptions.canViewComments = this.appOptions.canComments || !isPDFViewer && !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.comments===false); - this.appOptions.canChat = this.appOptions.canLicense && !this.appOptions.isOffline && !(this.permissions.chat===false || (this.permissions.chat===undefined) && - (typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.chat===false); - if ((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.chat!==undefined) { - console.log("Obsolete: The 'chat' parameter of the 'customization' section is deprecated. Please use 'chat' parameter in the permissions instead."); - } - this.appOptions.canEditStyles = this.appOptions.canLicense && this.appOptions.canEdit; - this.appOptions.canPrint = (this.permissions.print !== false); - this.appOptions.canPreviewPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp; - this.appOptions.canQuickPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp; - this.appOptions.canRename = this.editorConfig.canRename; - this.appOptions.buildVersion = params.asc_getBuildVersion(); - this.appOptions.canForcesave = this.appOptions.isEdit && !this.appOptions.isOffline && (typeof (this.editorConfig.customization) == 'object' && !!this.editorConfig.customization.forcesave); - this.appOptions.forcesave = this.appOptions.canForcesave; - this.appOptions.canEditComments= this.appOptions.isOffline || !this.permissions.editCommentAuthorOnly; - this.appOptions.canDeleteComments= this.appOptions.isOffline || !this.permissions.deleteCommentAuthorOnly; - if ((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.commentAuthorOnly===true) { - console.log("Obsolete: The 'commentAuthorOnly' parameter of the 'customization' section is deprecated. Please use 'editCommentAuthorOnly' and 'deleteCommentAuthorOnly' parameters in the permissions instead."); - if (this.permissions.editCommentAuthorOnly===undefined && this.permissions.deleteCommentAuthorOnly===undefined) - this.appOptions.canEditComments = this.appOptions.canDeleteComments = this.appOptions.isOffline; - } - if (typeof (this.editorConfig.customization) == 'object') { - if (this.editorConfig.customization.showReviewChanges!==undefined) - console.log("Obsolete: The 'showReviewChanges' parameter of the 'customization' section is deprecated. Please use 'showReviewChanges' parameter in the 'customization.review' section instead."); - if (this.editorConfig.customization.reviewDisplay!==undefined) - console.log("Obsolete: The 'reviewDisplay' parameter of the 'customization' section is deprecated. Please use 'reviewDisplay' parameter in the 'customization.review' section instead."); - if (this.editorConfig.customization.trackChanges!==undefined) - console.log("Obsolete: The 'trackChanges' parameter of the 'customization' section is deprecated. Please use 'trackChanges' parameter in the 'customization.review' section instead."); - } + rightmenuController.createDelayedElements(); - this.appOptions.trialMode = params.asc_getLicenseMode(); - this.appOptions.isBeta = params.asc_getIsBeta(); - this.appOptions.isSignatureSupport= this.appOptions.isEdit && this.appOptions.isDesktopApp && this.appOptions.isOffline && this.api.asc_isSignaturesSupport() && (this.permissions.protect!==false); - this.appOptions.isPasswordSupport = this.appOptions.isEdit && this.api.asc_isProtectionSupport() && (this.permissions.protect!==false); - this.appOptions.canProtect = (this.permissions.protect!==false); - this.appOptions.canEditContentControl = (this.permissions.modifyContentControl!==false); - this.appOptions.canHelp = !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.help===false); - this.appOptions.canSubmitForms = false; // this.appOptions.canLicense && (typeof (this.editorConfig.customization) == 'object') && !!this.editorConfig.customization.submitForm; - this.appOptions.canFillForms = this.appOptions.canLicense && (this.appOptions.isEdit ? true : this.permissions.fillForms) && (this.editorConfig.mode !== 'view'); - this.appOptions.isRestrictedEdit = !this.appOptions.isEdit && (this.appOptions.canComments || this.appOptions.canFillForms); - if (this.appOptions.isRestrictedEdit && this.appOptions.canComments && this.appOptions.canFillForms) // must be one restricted mode, priority for filling forms - this.appOptions.canComments = false; - - if ( this.appOptions.isLightVersion ) { - this.appOptions.canUseHistory = - this.appOptions.canReview = - this.appOptions.isReviewOnly = false; - } + me.updateThemeColors(); + toolbarController.activateControls(); + if (me.needToUpdateVersion) + toolbarController.onApiCoAuthoringDisconnect(); + me.api.UpdateInterfaceState(); - if ( !this.appOptions.canCoAuthoring ) { - this.appOptions.canChat = false; + Common.NotificationCenter.trigger("document:ready", "main"); + me.applyLicense(); } - - // var type = /^(?:(djvu))$/.exec(this.document.fileType); - this.appOptions.canDownloadOrigin = false; - this.appOptions.canDownload = this.permissions.download !== false; - this.appOptions.canUseSelectHandTools = this.appOptions.canUseThumbnails = this.appOptions.canUseViwerNavigation = isPDFViewer; - this.appOptions.canDownloadForms = this.appOptions.canLicense && this.appOptions.canDownload; - - this.appOptions.fileKey = this.document.key; - - this.appOptions.canBranding = params.asc_getCustomization(); - if (this.appOptions.canBranding) - appHeader.setBranding(this.editorConfig.customization); - - this.appOptions.canFavorite = this.document.info && (this.document.info.favorite!==undefined && this.document.info.favorite!==null) && !this.appOptions.isOffline; - this.appOptions.canFavorite && appHeader.setFavorite(this.document.info.favorite); - - this.appOptions.canUseReviewPermissions = this.appOptions.canLicense && (!!this.permissions.reviewGroups || - this.editorConfig.customization && this.editorConfig.customization.reviewPermissions && (typeof (this.editorConfig.customization.reviewPermissions) == 'object')); - this.appOptions.canUseCommentPermissions = this.appOptions.canLicense && !!this.permissions.commentGroups; - this.appOptions.canUseUserInfoPermissions = this.appOptions.canLicense && !!this.permissions.userInfoGroups; - AscCommon.UserInfoParser.setParser(true); - AscCommon.UserInfoParser.setCurrentName(this.appOptions.user.fullname); - this.appOptions.canUseReviewPermissions && AscCommon.UserInfoParser.setReviewPermissions(this.permissions.reviewGroups, this.editorConfig.customization.reviewPermissions); - this.appOptions.canUseCommentPermissions && AscCommon.UserInfoParser.setCommentPermissions(this.permissions.commentGroups); - this.appOptions.canUseUserInfoPermissions && AscCommon.UserInfoParser.setUserInfoPermissions(this.permissions.userInfoGroups); - appHeader.setUserName(AscCommon.UserInfoParser.getParsedName(AscCommon.UserInfoParser.getCurrentName())); - - this.appOptions.canRename && appHeader.setCanRename(true); - this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object' || this.editorConfig.plugins); - this.getApplication().getController('Common.Controllers.Plugins').setMode(this.appOptions, this.api); - this.editorConfig.customization && Common.UI.LayoutManager.init(this.editorConfig.customization.layout, this.appOptions.canBrandingExt); - this.editorConfig.customization && Common.UI.FeaturesManager.init(this.editorConfig.customization.features, this.appOptions.canBrandingExt); - Common.UI.ExternalUsers.init(this.appOptions.canRequestUsers); - - if (this.appOptions.canComments) - Common.NotificationCenter.on('comments:cleardummy', _.bind(this.onClearDummyComment, this)); - Common.NotificationCenter.on('comments:showdummy', _.bind(this.onShowDummyComment, this)); - - // change = true by default in editor - this.appOptions.canLiveView = !!params.asc_getLiveViewerSupport() && (this.editorConfig.mode === 'view') && !isPDFViewer; // viewer: change=false when no flag canLiveViewer (i.g. old license), change=true by default when canLiveViewer==true - this.appOptions.canChangeCoAuthoring = this.appOptions.isEdit && this.appOptions.canCoAuthoring && !(this.editorConfig.coEditing && typeof this.editorConfig.coEditing == 'object' && this.editorConfig.coEditing.change===false) || - this.appOptions.canLiveView && !(this.editorConfig.coEditing && typeof this.editorConfig.coEditing == 'object' && this.editorConfig.coEditing.change===false); - this.appOptions.isAnonymousSupport = !!this.api.asc_isAnonymousSupport(); - - this.loadCoAuthSettings(); - this.applyModeCommonElements(); - this.applyModeEditorElements(); - - if ( !this.appOptions.isEdit ) { - Common.NotificationCenter.trigger('app:face', this.appOptions); - - this.hidePreloader(); - this.onLongActionBegin(Asc.c_oAscAsyncActionType.BlockInteraction, LoadingDocument); - } - - this.api.asc_setViewMode(!this.appOptions.isEdit && !this.appOptions.isRestrictedEdit); - this.appOptions.isRestrictedEdit && this.appOptions.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); - this.appOptions.isRestrictedEdit && this.appOptions.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); - this.appOptions.isRestrictedEdit && this.appOptions.canFillForms && this.api.asc_SetHighlightRequiredFields(true); - this.api.asc_LoadDocument(); - }, - - loadCoAuthSettings: function() { - var fastCoauth = true, - autosave = 1, - value; - if (this.appOptions.isEdit && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { - if (!this.appOptions.canChangeCoAuthoring) { //can't change co-auth. mode. Use coEditing.mode or 'fast' by default - value = (this.editorConfig.coEditing && this.editorConfig.coEditing.mode!==undefined) ? (this.editorConfig.coEditing.mode==='strict' ? 0 : 1) : null; - if (value===null && this.appOptions.customization && this.appOptions.customization.autosave===false) { - value = 0; // use customization.autosave only when coEditing.mode is null - } - } else { - value = Common.localStorage.getItem("de-settings-coauthmode"); - if (value===null) { - value = (this.editorConfig.coEditing && this.editorConfig.coEditing.mode!==undefined) ? (this.editorConfig.coEditing.mode==='strict' ? 0 : 1) : null; - if (value===null && !Common.localStorage.itemExists("de-settings-autosave") && - this.appOptions.customization && this.appOptions.customization.autosave===false) { - value = 0; // use customization.autosave only when de-settings-coauthmode and de-settings-autosave are null - } - } - } - fastCoauth = (value===null || parseInt(value) == 1); - - value = Common.localStorage.getItem((fastCoauth) ? "de-settings-showchanges-fast" : "de-settings-showchanges-strict"); - if (value == null) value = fastCoauth ? 'none' : 'last'; - Common.Utils.InternalSettings.set((fastCoauth) ? "de-settings-showchanges-fast" : "de-settings-showchanges-strict", value); - } else if (!this.appOptions.isEdit && this.appOptions.isRestrictedEdit) { - fastCoauth = true; - } else if (this.appOptions.canLiveView && !this.appOptions.isOffline) { // viewer - value = Common.localStorage.getItem("de-settings-view-coauthmode"); - if (!this.appOptions.canChangeCoAuthoring || value===null) { // Use coEditing.mode or 'fast' by default - value = this.editorConfig.coEditing && this.editorConfig.coEditing.mode==='strict' ? 0 : 1; - } - fastCoauth = (parseInt(value) == 1); - - // don't show collaborative marks in live viewer - Common.Utils.InternalSettings.set("de-settings-showchanges-fast", 'none'); - Common.Utils.InternalSettings.set("de-settings-showchanges-strict", 'none'); - } else { - fastCoauth = false; - autosave = 0; - } - - if (this.appOptions.isEdit) { - value = Common.localStorage.getItem("de-settings-autosave"); - if (value === null && this.appOptions.customization && this.appOptions.customization.autosave === false) - value = 0; - autosave = (!fastCoauth && value !== null) ? parseInt(value) : (this.appOptions.canCoAuthoring ? 1 : 0); + }, 50); + } else { + documentHolderController.getView().createDelayedElementsViewer(); + Common.NotificationCenter.trigger("document:ready", "main"); + me.applyLicense(); + } + + // TODO bug 43960 + var dummyClass = ~~(1e6 * Math.random()); + $(".toolbar").prepend( + Common.Utils.String.format( + '
    ', + dummyClass + ) + ); + setTimeout(function () { + $( + Common.Utils.String.format(".toolbar .lazy-{0}", dummyClass) + ).remove(); + }, 10); + + if (this.appOptions.canAnalytics && false) + Common.component.Analytics.initialize( + "UA-12442749-13", + "Document Editor" + ); + + Common.Gateway.on( + "applyeditrights", + _.bind(me.onApplyEditRights, me) + ); + Common.Gateway.on( + "processsaveresult", + _.bind(me.onProcessSaveResult, me) + ); + Common.Gateway.on( + "processrightschange", + _.bind(me.onProcessRightsChange, me) + ); + Common.Gateway.on("processmouse", _.bind(me.onProcessMouse, me)); + Common.Gateway.on( + "refreshhistory", + _.bind(me.onRefreshHistory, me) + ); + Common.Gateway.on("downloadas", _.bind(me.onDownloadAs, me)); + Common.Gateway.on("setfavorite", _.bind(me.onSetFavorite, me)); + Common.Gateway.on("requestclose", _.bind(me.onRequestClose, me)); + + Common.Gateway.sendInfo({ + mode: me.appOptions.isEdit ? "edit" : "view", + }); + + $(document).on("contextmenu", _.bind(me.onContextMenu, me)); + Common.Gateway.documentReady(); + + $("#editor-container").css("overflow", ""); + $(".doc-placeholder").remove(); + + this.appOptions.user.guest && + this.appOptions.canRenameAnonymous && + Common.Utils.InternalSettings.get("guest-username") === null && + this.showRenameUserDialog(); + if (this._needToSaveAsFile) + // warning received before document is ready + this.getApplication() + .getController("LeftMenu") + .leftMenu.showMenu("file:saveas"); + }, + + onLicenseChanged: function (params) { + var licType = params.asc_getLicenseType(); + if ( + licType !== undefined && + (this.appOptions.canEdit || this.appOptions.isRestrictedEdit) && + this.editorConfig.mode !== "view" && + (licType === Asc.c_oLicenseResult.Connections || + licType === Asc.c_oLicenseResult.UsersCount || + licType === Asc.c_oLicenseResult.ConnectionsOS || + licType === Asc.c_oLicenseResult.UsersCountOS || + (licType === Asc.c_oLicenseResult.SuccessLimit && + (this.appOptions.trialMode & Asc.c_oLicenseMode.Limited) !== + 0)) + ) + this._state.licenseType = licType; + + if ( + licType !== undefined && + this.appOptions.canLiveView && + (licType === Asc.c_oLicenseResult.ConnectionsLive || + licType === Asc.c_oLicenseResult.ConnectionsLiveOS || + licType === Asc.c_oLicenseResult.UsersViewCount || + licType === Asc.c_oLicenseResult.UsersViewCountOS) + ) + this._state.licenseType = licType; + + if (this._isDocReady) this.applyLicense(); + }, + + applyLicense: function () { + if (this.editorConfig.mode === "view") { + if ( + this.appOptions.canLiveView && + (this._state.licenseType === + Asc.c_oLicenseResult.ConnectionsLive || + this._state.licenseType === + Asc.c_oLicenseResult.ConnectionsLiveOS || + this._state.licenseType === + Asc.c_oLicenseResult.UsersViewCount || + this._state.licenseType === + Asc.c_oLicenseResult.UsersViewCountOS || + (!this.appOptions.isAnonymousSupport && + !!this.appOptions.user.anonymous)) + ) { + // show warning or write to log if Common.Utils.InternalSettings.get("de-settings-coauthmode") was true ??? + this.disableLiveViewing(true); + } + } else if ( + !this.appOptions.isAnonymousSupport && + !!this.appOptions.user.anonymous + ) { + this.disableEditing(true); + this.api.asc_coAuthoringDisconnect(); + Common.NotificationCenter.trigger("api:disconnect"); + Common.UI.warning({ + title: this.notcriticalErrorTitle, + msg: this.warnLicenseAnonymous, + buttons: ["ok"], + }); + } else if (this._state.licenseType) { + var license = this._state.licenseType, + buttons = ["ok"], + primary = "ok"; + if ( + (this.appOptions.trialMode & Asc.c_oLicenseMode.Limited) !== + 0 && + (license === Asc.c_oLicenseResult.SuccessLimit || + this.appOptions.permissionsLicense === + Asc.c_oLicenseResult.SuccessLimit) + ) { + license = this.warnLicenseLimitedRenewed; + } else if ( + license === Asc.c_oLicenseResult.Connections || + license === Asc.c_oLicenseResult.UsersCount + ) { + license = + license === Asc.c_oLicenseResult.Connections + ? this.warnLicenseExceeded + : this.warnLicenseUsersExceeded; + } else { + license = + license === Asc.c_oLicenseResult.ConnectionsOS + ? this.warnNoLicense + : this.warnNoLicenseUsers; + buttons = [ + { value: "buynow", caption: this.textBuyNow }, + { value: "contact", caption: this.textContactUs }, + ]; + primary = "buynow"; + } + + if ( + this._state.licenseType !== Asc.c_oLicenseResult.SuccessLimit && + (this.appOptions.isEdit || this.appOptions.isRestrictedEdit) + ) { + this.disableEditing(true); + this.api.asc_coAuthoringDisconnect(); + Common.NotificationCenter.trigger("api:disconnect"); + } + + var value = Common.localStorage.getItem("de-license-warning"); + value = value !== null ? parseInt(value) : 0; + var now = new Date().getTime(); + if (now - value > 86400000) { + Common.UI.info({ + maxwidth: 500, + title: this.textNoLicenseTitle, + msg: license, + buttons: buttons, + primary: primary, + callback: function (btn) { + Common.localStorage.setItem("de-license-warning", now); + if (btn == "buynow") + window.open("{{PUBLISHER_URL}}", "_blank"); + else if (btn == "contact") + window.open("mailto:{{SALES_EMAIL}}", "_blank"); + }, + }); + } + } else if ( + !this.appOptions.isDesktopApp && + !this.appOptions.canBrandingExt && + this.editorConfig && + this.editorConfig.customization && + (this.editorConfig.customization.loaderName || + this.editorConfig.customization.loaderLogo || + (this.editorConfig.customization.font && + (this.editorConfig.customization.font.size || + this.editorConfig.customization.font.name))) + ) { + Common.UI.warning({ + title: this.textPaidFeature, + msg: this.textCustomLoader, + buttons: [ + { value: "contact", caption: this.textContactUs }, + { value: "close", caption: this.textClose }, + ], + primary: "contact", + callback: function (btn) { + if (btn == "contact") + window.open("mailto:{{SALES_EMAIL}}", "_blank"); + }, + }); + } + }, + + onOpenDocument: function (progress) { + var elem = document.getElementById("loadmask-text"); + var proc = + (progress.asc_getCurrentFont() + progress.asc_getCurrentImage()) / + (progress.asc_getFontsCount() + progress.asc_getImagesCount()); + proc = + this.textLoadingDocument + + ": " + + Common.Utils.String.fixedDigits( + Math.min(Math.round(proc * 100), 100), + 3, + " " + ) + + "%"; + elem + ? (elem.innerHTML = proc) + : this.loadMask && this.loadMask.setTitle(proc); + }, + + onEditorPermissions: function (params) { + var licType = params.asc_getLicenseType(); + if ( + Asc.c_oLicenseResult.Expired === licType || + Asc.c_oLicenseResult.Error === licType || + Asc.c_oLicenseResult.ExpiredTrial === licType || + Asc.c_oLicenseResult.NotBefore === licType || + Asc.c_oLicenseResult.ExpiredLimited === licType + ) { + Common.UI.warning({ + title: + Asc.c_oLicenseResult.NotBefore === licType + ? this.titleLicenseNotActive + : this.titleLicenseExp, + msg: + Asc.c_oLicenseResult.NotBefore === licType + ? this.warnLicenseBefore + : this.warnLicenseExp, + buttons: [], + closable: false, + }); + return; + } + + if ( + this.onServerVersion(params.asc_getBuildVersion()) || + !this.onLanguageLoaded() + ) + return; + + var isPDFViewer = /^(?:(pdf|djvu|xps|oxps))$/.test( + this.document.fileType + ); + + this.permissions.review = + this.permissions.review === undefined + ? this.permissions.edit !== false + : this.permissions.review; + + if (params.asc_getRights() !== Asc.c_oRights.Edit) + this.permissions.edit = this.permissions.review = false; + + this.appOptions.permissionsLicense = licType; + this.appOptions.canAnalytics = params.asc_getIsAnalyticsEnable(); + this.appOptions.canLicense = + licType === Asc.c_oLicenseResult.Success || + licType === Asc.c_oLicenseResult.SuccessLimit; + this.appOptions.isLightVersion = params.asc_getIsLight(); + /** coauthoring begin **/ + this.appOptions.canCoAuthoring = !this.appOptions.isLightVersion; + /** coauthoring end **/ + this.appOptions.isOffline = this.api.asc_isOffline(); + this.appOptions.canCreateNew = + this.appOptions.canCreateNew && + !(this.appOptions.isOffline && isPDFViewer); + this.appOptions.isCrypted = this.api.asc_isCrypto(); + this.appOptions.isReviewOnly = + this.permissions.review === true && + this.permissions.edit === false; + this.appOptions.canRequestEditRights = + this.editorConfig.canRequestEditRights; + this.appOptions.canEdit = + (this.permissions.edit !== false || + this.permissions.review === true) && // can edit or review + (this.editorConfig.canRequestEditRights || + this.editorConfig.mode !== "view") && // if mode=="view" -> canRequestEditRights must be defined + (!this.appOptions.isReviewOnly || this.appOptions.canLicense); // if isReviewOnly==true -> canLicense must be true + this.appOptions.isEdit = + this.appOptions.canLicense && + this.appOptions.canEdit && + this.editorConfig.mode !== "view"; + this.appOptions.canReview = + this.permissions.review === true && + this.appOptions.canLicense && + this.appOptions.isEdit; + this.appOptions.canViewReview = true; + this.appOptions.canUseHistory = + this.appOptions.canLicense && + this.editorConfig.canUseHistory && + this.appOptions.canCoAuthoring && + !this.appOptions.isOffline; + this.appOptions.canHistoryClose = this.editorConfig.canHistoryClose; + this.appOptions.canHistoryRestore = + this.editorConfig.canHistoryRestore; + this.appOptions.canUseMailMerge = + this.appOptions.canLicense && + this.appOptions.canEdit && + !this.appOptions.isOffline; + this.appOptions.canSendEmailAddresses = + this.appOptions.canLicense && + this.editorConfig.canSendEmailAddresses && + this.appOptions.canEdit && + this.appOptions.canCoAuthoring; + this.appOptions.canComments = + this.appOptions.canLicense && + (this.permissions.comment === undefined + ? this.appOptions.isEdit + : this.permissions.comment) && + this.editorConfig.mode !== "view"; + this.appOptions.canComments = + !isPDFViewer && + this.appOptions.canComments && + !( + typeof this.editorConfig.customization == "object" && + this.editorConfig.customization.comments === false + ); + this.appOptions.canViewComments = + this.appOptions.canComments || + (!isPDFViewer && + !( + typeof this.editorConfig.customization == "object" && + this.editorConfig.customization.comments === false + )); + this.appOptions.canChat = + this.appOptions.canLicense && + !this.appOptions.isOffline && + !( + this.permissions.chat === false || + (this.permissions.chat === undefined && + typeof this.editorConfig.customization == "object" && + this.editorConfig.customization.chat === false) + ); + if ( + typeof this.editorConfig.customization == "object" && + this.editorConfig.customization.chat !== undefined + ) { + console.log( + "Obsolete: The 'chat' parameter of the 'customization' section is deprecated. Please use 'chat' parameter in the permissions instead." + ); + } + this.appOptions.canEditStyles = + this.appOptions.canLicense && this.appOptions.canEdit; + this.appOptions.canPrint = this.permissions.print !== false; + this.appOptions.canPreviewPrint = + this.appOptions.canPrint && + !Common.Utils.isMac && + this.appOptions.isDesktopApp; + this.appOptions.canQuickPrint = + this.appOptions.canPrint && + !Common.Utils.isMac && + this.appOptions.isDesktopApp; + this.appOptions.canRename = this.editorConfig.canRename; + this.appOptions.buildVersion = params.asc_getBuildVersion(); + this.appOptions.canForcesave = + this.appOptions.isEdit && + !this.appOptions.isOffline && + typeof this.editorConfig.customization == "object" && + !!this.editorConfig.customization.forcesave; + this.appOptions.forcesave = this.appOptions.canForcesave; + this.appOptions.canEditComments = + this.appOptions.isOffline || + !this.permissions.editCommentAuthorOnly; + this.appOptions.canDeleteComments = + this.appOptions.isOffline || + !this.permissions.deleteCommentAuthorOnly; + if ( + typeof this.editorConfig.customization == "object" && + this.editorConfig.customization.commentAuthorOnly === true + ) { + console.log( + "Obsolete: The 'commentAuthorOnly' parameter of the 'customization' section is deprecated. Please use 'editCommentAuthorOnly' and 'deleteCommentAuthorOnly' parameters in the permissions instead." + ); + if ( + this.permissions.editCommentAuthorOnly === undefined && + this.permissions.deleteCommentAuthorOnly === undefined + ) + this.appOptions.canEditComments = + this.appOptions.canDeleteComments = this.appOptions.isOffline; + } + if (typeof this.editorConfig.customization == "object") { + if ( + this.editorConfig.customization.showReviewChanges !== undefined + ) + console.log( + "Obsolete: The 'showReviewChanges' parameter of the 'customization' section is deprecated. Please use 'showReviewChanges' parameter in the 'customization.review' section instead." + ); + if (this.editorConfig.customization.reviewDisplay !== undefined) + console.log( + "Obsolete: The 'reviewDisplay' parameter of the 'customization' section is deprecated. Please use 'reviewDisplay' parameter in the 'customization.review' section instead." + ); + if (this.editorConfig.customization.trackChanges !== undefined) + console.log( + "Obsolete: The 'trackChanges' parameter of the 'customization' section is deprecated. Please use 'trackChanges' parameter in the 'customization.review' section instead." + ); + } + + this.appOptions.trialMode = params.asc_getLicenseMode(); + this.appOptions.isBeta = params.asc_getIsBeta(); + this.appOptions.isSignatureSupport = + this.appOptions.isEdit && + this.appOptions.isDesktopApp && + this.appOptions.isOffline && + this.api.asc_isSignaturesSupport() && + this.permissions.protect !== false; + this.appOptions.isPasswordSupport = + this.appOptions.isEdit && + this.api.asc_isProtectionSupport() && + this.permissions.protect !== false; + this.appOptions.canProtect = this.permissions.protect !== false; + this.appOptions.canEditContentControl = + this.permissions.modifyContentControl !== false; + this.appOptions.canHelp = !( + typeof this.editorConfig.customization == "object" && + this.editorConfig.customization.help === false + ); + this.appOptions.canSubmitForms = false; // this.appOptions.canLicense && (typeof (this.editorConfig.customization) == 'object') && !!this.editorConfig.customization.submitForm; + this.appOptions.canFillForms = + this.appOptions.canLicense && + (this.appOptions.isEdit ? true : this.permissions.fillForms) && + this.editorConfig.mode !== "view"; + this.appOptions.isRestrictedEdit = + !this.appOptions.isEdit && + (this.appOptions.canComments || this.appOptions.canFillForms); + if ( + this.appOptions.isRestrictedEdit && + this.appOptions.canComments && + this.appOptions.canFillForms + ) + // must be one restricted mode, priority for filling forms + this.appOptions.canComments = false; + + if (this.appOptions.isLightVersion) { + this.appOptions.canUseHistory = + this.appOptions.canReview = + this.appOptions.isReviewOnly = + false; + } + + if (!this.appOptions.canCoAuthoring) { + this.appOptions.canChat = false; + } + + // var type = /^(?:(djvu))$/.exec(this.document.fileType); + this.appOptions.canDownloadOrigin = false; + this.appOptions.canDownload = this.permissions.download !== false; + this.appOptions.canUseSelectHandTools = + this.appOptions.canUseThumbnails = + this.appOptions.canUseViwerNavigation = + isPDFViewer; + this.appOptions.canDownloadForms = + this.appOptions.canLicense && this.appOptions.canDownload; + + this.appOptions.fileKey = this.document.key; + + this.appOptions.canBranding = params.asc_getCustomization(); + if (this.appOptions.canBranding) + appHeader.setBranding(this.editorConfig.customization); + + this.appOptions.canFavorite = + this.document.info && + this.document.info.favorite !== undefined && + this.document.info.favorite !== null && + !this.appOptions.isOffline; + this.appOptions.canFavorite && + appHeader.setFavorite(this.document.info.favorite); + + this.appOptions.canUseReviewPermissions = + this.appOptions.canLicense && + (!!this.permissions.reviewGroups || + (this.editorConfig.customization && + this.editorConfig.customization.reviewPermissions && + typeof this.editorConfig.customization.reviewPermissions == + "object")); + this.appOptions.canUseCommentPermissions = + this.appOptions.canLicense && !!this.permissions.commentGroups; + this.appOptions.canUseUserInfoPermissions = + this.appOptions.canLicense && !!this.permissions.userInfoGroups; + AscCommon.UserInfoParser.setParser(true); + AscCommon.UserInfoParser.setCurrentName( + this.appOptions.user.fullname + ); + this.appOptions.canUseReviewPermissions && + AscCommon.UserInfoParser.setReviewPermissions( + this.permissions.reviewGroups, + this.editorConfig.customization.reviewPermissions + ); + this.appOptions.canUseCommentPermissions && + AscCommon.UserInfoParser.setCommentPermissions( + this.permissions.commentGroups + ); + this.appOptions.canUseUserInfoPermissions && + AscCommon.UserInfoParser.setUserInfoPermissions( + this.permissions.userInfoGroups + ); + appHeader.setUserName( + AscCommon.UserInfoParser.getParsedName( + AscCommon.UserInfoParser.getCurrentName() + ) + ); + + this.appOptions.canRename && appHeader.setCanRename(true); + this.appOptions.canBrandingExt = + params.asc_getCanBranding() && + (typeof this.editorConfig.customization == "object" || + this.editorConfig.plugins); + this.getApplication() + .getController("Common.Controllers.Plugins") + .setMode(this.appOptions, this.api); + this.editorConfig.customization && + Common.UI.LayoutManager.init( + this.editorConfig.customization.layout, + this.appOptions.canBrandingExt + ); + this.editorConfig.customization && + Common.UI.FeaturesManager.init( + this.editorConfig.customization.features, + this.appOptions.canBrandingExt + ); + Common.UI.ExternalUsers.init(this.appOptions.canRequestUsers); + + if (this.appOptions.canComments) + Common.NotificationCenter.on( + "comments:cleardummy", + _.bind(this.onClearDummyComment, this) + ); + Common.NotificationCenter.on( + "comments:showdummy", + _.bind(this.onShowDummyComment, this) + ); + + // change = true by default in editor + this.appOptions.canLiveView = + !!params.asc_getLiveViewerSupport() && + this.editorConfig.mode === "view" && + !isPDFViewer; // viewer: change=false when no flag canLiveViewer (i.g. old license), change=true by default when canLiveViewer==true + this.appOptions.canChangeCoAuthoring = + (this.appOptions.isEdit && + this.appOptions.canCoAuthoring && + !( + this.editorConfig.coEditing && + typeof this.editorConfig.coEditing == "object" && + this.editorConfig.coEditing.change === false + )) || + (this.appOptions.canLiveView && + !( + this.editorConfig.coEditing && + typeof this.editorConfig.coEditing == "object" && + this.editorConfig.coEditing.change === false + )); + this.appOptions.isAnonymousSupport = + !!this.api.asc_isAnonymousSupport(); + + this.loadCoAuthSettings(); + this.applyModeCommonElements(); + this.applyModeEditorElements(); + + if (!this.appOptions.isEdit) { + Common.NotificationCenter.trigger("app:face", this.appOptions); + + this.hidePreloader(); + this.onLongActionBegin( + Asc.c_oAscAsyncActionType.BlockInteraction, + LoadingDocument + ); + } + + this.api.asc_setViewMode( + !this.appOptions.isEdit && !this.appOptions.isRestrictedEdit + ); + this.appOptions.isRestrictedEdit && + this.appOptions.canComments && + this.api.asc_setRestriction( + Asc.c_oAscRestrictionType.OnlyComments + ); + this.appOptions.isRestrictedEdit && + this.appOptions.canFillForms && + this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); + this.appOptions.isRestrictedEdit && + this.appOptions.canFillForms && + this.api.asc_SetHighlightRequiredFields(true); + this.api.asc_LoadDocument(); + }, + + loadCoAuthSettings: function () { + var fastCoauth = true, + autosave = 1, + value; + if ( + this.appOptions.isEdit && + !this.appOptions.isOffline && + this.appOptions.canCoAuthoring + ) { + if (!this.appOptions.canChangeCoAuthoring) { + //can't change co-auth. mode. Use coEditing.mode or 'fast' by default + value = + this.editorConfig.coEditing && + this.editorConfig.coEditing.mode !== undefined + ? this.editorConfig.coEditing.mode === "strict" + ? 0 + : 1 + : null; + if ( + value === null && + this.appOptions.customization && + this.appOptions.customization.autosave === false + ) { + value = 0; // use customization.autosave only when coEditing.mode is null } - - Common.Utils.InternalSettings.set("de-settings-coauthmode", fastCoauth); - Common.Utils.InternalSettings.set("de-settings-autosave", autosave); - }, - - applyModeCommonElements: function() { - window.editor_elements_prepared = true; - - var app = this.getApplication(), - viewport = app.getController('Viewport').getView('Viewport'), - statusbarView = app.getController('Statusbar').getView('Statusbar'), - documentHolder = app.getController('DocumentHolder'), - toolbarController = app.getController('Toolbar'), - leftMenu = app.getController('LeftMenu'); - - viewport && viewport.setMode(this.appOptions); - statusbarView && statusbarView.setMode(this.appOptions); - toolbarController.setMode(this.appOptions); - documentHolder.setMode(this.appOptions); - leftMenu.setMode(this.appOptions); - - viewport.applyCommonMode(); - - var printController = app.getController('Print'); - printController && this.api && printController.setApi(this.api).setMode(this.appOptions); - - this.api.asc_registerCallback('asc_onSendThemeColors', _.bind(this.onSendThemeColors, this)); - this.api.asc_registerCallback('asc_onDownloadUrl', _.bind(this.onDownloadUrl, this)); - this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onAuthParticipantsChanged, this)); - this.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(this.onAuthParticipantsChanged, this)); - this.api.asc_registerCallback('asc_onConnectionStateChanged', _.bind(this.onUserConnection, this)); - this.api.asc_registerCallback('asc_onDocumentModifiedChanged', _.bind(this.onDocumentModifiedChanged, this)); - - var value = Common.localStorage.getItem('de-settings-unit'); - value = (value!==null) ? parseInt(value) : (this.appOptions.customization && this.appOptions.customization.unit ? Common.Utils.Metric.c_MetricUnits[this.appOptions.customization.unit.toLocaleLowerCase()] : Common.Utils.Metric.getDefaultMetric()); - (value===undefined) && (value = Common.Utils.Metric.getDefaultMetric()); - Common.Utils.Metric.setCurrentMetric(value); - Common.Utils.InternalSettings.set("de-settings-unit", value); - }, - - applyModeEditorElements: function() { - /** coauthoring begin **/ - this.contComments.setMode(this.appOptions); - this.contComments.setConfig({config: this.editorConfig}, this.api); - /** coauthoring end **/ - - var me = this, - application = this.getApplication(), - reviewController = application.getController('Common.Controllers.ReviewChanges'); - reviewController.setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api).loadDocument({doc:me.document}); - - var toolbarController = application.getController('Toolbar'); - toolbarController && toolbarController.setApi(me.api); - - if (this.appOptions.isRestrictedEdit) - application.getController('DocProtection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); - else if (this.appOptions.isEdit) { - var rightmenuController = application.getController('RightMenu'), - fontsControllers = application.getController('Common.Controllers.Fonts'); - fontsControllers && fontsControllers.setApi(me.api); - rightmenuController && rightmenuController.setApi(me.api); - - application.getController('Common.Controllers.Protection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); - application.getController('DocProtection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); - - var viewport = this.getApplication().getController('Viewport').getView('Viewport'); - - viewport.applyEditorMode(); - - var rightmenuView = rightmenuController.getView('RightMenu'); - if (rightmenuView) { - rightmenuView.setApi(me.api); - rightmenuView.on('editcomplete', _.bind(me.onEditComplete, me)); - rightmenuView.setMode(me.appOptions); - } - - var toolbarView = (toolbarController) ? toolbarController.getView() : null; - if (toolbarView) { - toolbarView.setApi(me.api); - toolbarView.on('editcomplete', _.bind(me.onEditComplete, me)); - toolbarView.on('insertimage', _.bind(me.onInsertImage, me)); - toolbarView.on('inserttable', _.bind(me.onInsertTable, me)); - toolbarView.on('insertshape', _.bind(me.onInsertShape, me)); - toolbarView.on('inserttextart', _.bind(me.onInsertTextArt, me)); - toolbarView.on('insertchart', _.bind(me.onInsertChart, me)); - toolbarView.on('insertcontrol', _.bind(me.onInsertControl, me)); - } - - var value = Common.Utils.InternalSettings.get("de-settings-unit"); - me.api.asc_SetDocumentUnits((value==Common.Utils.Metric.c_MetricUnits.inch) ? Asc.c_oAscDocumentUnits.Inch : ((value==Common.Utils.Metric.c_MetricUnits.pt) ? Asc.c_oAscDocumentUnits.Point : Asc.c_oAscDocumentUnits.Millimeter)); - - value = Common.localStorage.itemExists('de-hidden-rulers') ? Common.localStorage.getBool('de-hidden-rulers') : (this.appOptions.customization && !!this.appOptions.customization.hideRulers); - Common.Utils.InternalSettings.set("de-hidden-rulers", value); - me.api.asc_SetViewRulers(!value); - - me.api.asc_registerCallback('asc_onDocumentCanSaveChanged', _.bind(me.onDocumentCanSaveChanged, me)); - /** coauthoring begin **/ - me.api.asc_registerCallback('asc_onCollaborativeChanges', _.bind(me.onCollaborativeChanges, me)); - me.api.asc_registerCallback('asc_OnTryUndoInFastCollaborative',_.bind(me.onTryUndoInFastCollaborative, me)); - me.api.asc_registerCallback('asc_onConvertEquationToMath',_.bind(me.onConvertEquationToMath, me)); - /** coauthoring end **/ - - if (me.stackLongActions.exist({id: ApplyEditRights, type: Asc.c_oAscAsyncActionType['BlockInteraction']})) { - me.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], ApplyEditRights); - } else if (!this._isDocReady) { - Common.NotificationCenter.trigger('app:face', me.appOptions); - - me.hidePreloader(); - me.onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); - } - - // Message on window close - window.onbeforeunload = _.bind(me.onBeforeUnload, me); - window.onunload = _.bind(me.onUnload, me); + } else { + value = Common.localStorage.getItem("de-settings-coauthmode"); + if (value === null) { + value = + this.editorConfig.coEditing && + this.editorConfig.coEditing.mode !== undefined + ? this.editorConfig.coEditing.mode === "strict" + ? 0 + : 1 + : null; + if ( + value === null && + !Common.localStorage.itemExists("de-settings-autosave") && + this.appOptions.customization && + this.appOptions.customization.autosave === false + ) { + value = 0; // use customization.autosave only when de-settings-coauthmode and de-settings-autosave are null + } } - }, + } + fastCoauth = value === null || parseInt(value) == 1; + + value = Common.localStorage.getItem( + fastCoauth + ? "de-settings-showchanges-fast" + : "de-settings-showchanges-strict" + ); + if (value == null) value = fastCoauth ? "none" : "last"; + Common.Utils.InternalSettings.set( + fastCoauth + ? "de-settings-showchanges-fast" + : "de-settings-showchanges-strict", + value + ); + } else if ( + !this.appOptions.isEdit && + this.appOptions.isRestrictedEdit + ) { + fastCoauth = true; + } else if ( + this.appOptions.canLiveView && + !this.appOptions.isOffline + ) { + // viewer + value = Common.localStorage.getItem( + "de-settings-view-coauthmode" + ); + if (!this.appOptions.canChangeCoAuthoring || value === null) { + // Use coEditing.mode or 'fast' by default + value = + this.editorConfig.coEditing && + this.editorConfig.coEditing.mode === "strict" + ? 0 + : 1; + } + fastCoauth = parseInt(value) == 1; + + // don't show collaborative marks in live viewer + Common.Utils.InternalSettings.set( + "de-settings-showchanges-fast", + "none" + ); + Common.Utils.InternalSettings.set( + "de-settings-showchanges-strict", + "none" + ); + } else { + fastCoauth = false; + autosave = 0; + } + + if (this.appOptions.isEdit) { + value = Common.localStorage.getItem("de-settings-autosave"); + if ( + value === null && + this.appOptions.customization && + this.appOptions.customization.autosave === false + ) + value = 0; + autosave = + !fastCoauth && value !== null + ? parseInt(value) + : this.appOptions.canCoAuthoring + ? 1 + : 0; + } + + Common.Utils.InternalSettings.set( + "de-settings-coauthmode", + fastCoauth + ); + Common.Utils.InternalSettings.set("de-settings-autosave", autosave); + }, + + applyModeCommonElements: function () { + window.editor_elements_prepared = true; + + var app = this.getApplication(), + viewport = app.getController("Viewport").getView("Viewport"), + statusbarView = app + .getController("Statusbar") + .getView("Statusbar"), + documentHolder = app.getController("DocumentHolder"), + toolbarController = app.getController("Toolbar"), + leftMenu = app.getController("LeftMenu"); + + viewport && viewport.setMode(this.appOptions); + statusbarView && statusbarView.setMode(this.appOptions); + toolbarController.setMode(this.appOptions); + documentHolder.setMode(this.appOptions); + leftMenu.setMode(this.appOptions); + + viewport.applyCommonMode(); + + var printController = app.getController("Print"); + printController && + this.api && + printController.setApi(this.api).setMode(this.appOptions); + + this.api.asc_registerCallback( + "asc_onSendThemeColors", + _.bind(this.onSendThemeColors, this) + ); + this.api.asc_registerCallback( + "asc_onDownloadUrl", + _.bind(this.onDownloadUrl, this) + ); + this.api.asc_registerCallback( + "asc_onAuthParticipantsChanged", + _.bind(this.onAuthParticipantsChanged, this) + ); + this.api.asc_registerCallback( + "asc_onParticipantsChanged", + _.bind(this.onAuthParticipantsChanged, this) + ); + this.api.asc_registerCallback( + "asc_onConnectionStateChanged", + _.bind(this.onUserConnection, this) + ); + this.api.asc_registerCallback( + "asc_onDocumentModifiedChanged", + _.bind(this.onDocumentModifiedChanged, this) + ); + + var value = Common.localStorage.getItem("de-settings-unit"); + value = + value !== null + ? parseInt(value) + : this.appOptions.customization && + this.appOptions.customization.unit + ? Common.Utils.Metric.c_MetricUnits[ + this.appOptions.customization.unit.toLocaleLowerCase() + ] + : Common.Utils.Metric.getDefaultMetric(); + value === undefined && + (value = Common.Utils.Metric.getDefaultMetric()); + Common.Utils.Metric.setCurrentMetric(value); + Common.Utils.InternalSettings.set("de-settings-unit", value); + }, + + applyModeEditorElements: function () { + /** coauthoring begin **/ + this.contComments.setMode(this.appOptions); + this.contComments.setConfig( + { config: this.editorConfig }, + this.api + ); + /** coauthoring end **/ - onExternalMessage: function(msg, options) { - if (msg && msg.msg) { - msg.msg = (msg.msg).toString(); - this.showTips([msg.msg.charAt(0).toUpperCase() + msg.msg.substring(1)], options); + var me = this, + application = this.getApplication(), + reviewController = application.getController( + "Common.Controllers.ReviewChanges" + ); + reviewController + .setMode(me.appOptions) + .setConfig({ config: me.editorConfig }, me.api) + .loadDocument({ doc: me.document }); + + var toolbarController = application.getController("Toolbar"); + toolbarController && toolbarController.setApi(me.api); + + if (this.appOptions.isRestrictedEdit) + application + .getController("DocProtection") + .setMode(me.appOptions) + .setConfig({ config: me.editorConfig }, me.api); + else if (this.appOptions.isEdit) { + var rightmenuController = application.getController("RightMenu"), + fontsControllers = application.getController( + "Common.Controllers.Fonts" + ); + fontsControllers && fontsControllers.setApi(me.api); + rightmenuController && rightmenuController.setApi(me.api); + + application + .getController("Common.Controllers.Protection") + .setMode(me.appOptions) + .setConfig({ config: me.editorConfig }, me.api); + application + .getController("DocProtection") + .setMode(me.appOptions) + .setConfig({ config: me.editorConfig }, me.api); + + var viewport = this.getApplication() + .getController("Viewport") + .getView("Viewport"); + + viewport.applyEditorMode(); + + var rightmenuView = rightmenuController.getView("RightMenu"); + if (rightmenuView) { + rightmenuView.setApi(me.api); + rightmenuView.on("editcomplete", _.bind(me.onEditComplete, me)); + rightmenuView.setMode(me.appOptions); + } + + var toolbarView = toolbarController + ? toolbarController.getView() + : null; + if (toolbarView) { + toolbarView.setApi(me.api); + toolbarView.on("editcomplete", _.bind(me.onEditComplete, me)); + toolbarView.on("insertimage", _.bind(me.onInsertImage, me)); + toolbarView.on("inserttable", _.bind(me.onInsertTable, me)); + toolbarView.on("insertshape", _.bind(me.onInsertShape, me)); + toolbarView.on("inserttextart", _.bind(me.onInsertTextArt, me)); + toolbarView.on("insertchart", _.bind(me.onInsertChart, me)); + toolbarView.on("insertcontrol", _.bind(me.onInsertControl, me)); + } + + var value = Common.Utils.InternalSettings.get("de-settings-unit"); + me.api.asc_SetDocumentUnits( + value == Common.Utils.Metric.c_MetricUnits.inch + ? Asc.c_oAscDocumentUnits.Inch + : value == Common.Utils.Metric.c_MetricUnits.pt + ? Asc.c_oAscDocumentUnits.Point + : Asc.c_oAscDocumentUnits.Millimeter + ); + + value = Common.localStorage.itemExists("de-hidden-rulers") + ? Common.localStorage.getBool("de-hidden-rulers") + : this.appOptions.customization && + !!this.appOptions.customization.hideRulers; + Common.Utils.InternalSettings.set("de-hidden-rulers", value); + me.api.asc_SetViewRulers(!value); + + me.api.asc_registerCallback( + "asc_onDocumentCanSaveChanged", + _.bind(me.onDocumentCanSaveChanged, me) + ); + /** coauthoring begin **/ + me.api.asc_registerCallback( + "asc_onCollaborativeChanges", + _.bind(me.onCollaborativeChanges, me) + ); + me.api.asc_registerCallback( + "asc_OnTryUndoInFastCollaborative", + _.bind(me.onTryUndoInFastCollaborative, me) + ); + me.api.asc_registerCallback( + "asc_onConvertEquationToMath", + _.bind(me.onConvertEquationToMath, me) + ); + /** coauthoring end **/ + + if ( + me.stackLongActions.exist({ + id: ApplyEditRights, + type: Asc.c_oAscAsyncActionType["BlockInteraction"], + }) + ) { + me.onLongActionEnd( + Asc.c_oAscAsyncActionType["BlockInteraction"], + ApplyEditRights + ); + } else if (!this._isDocReady) { + Common.NotificationCenter.trigger("app:face", me.appOptions); - Common.component.Analytics.trackEvent('External Error'); - } - }, - - onError: function(id, level, errData) { - if (id == Asc.c_oAscError.ID.LoadingScriptError) { - this.showTips([this.scriptLoadError]); - this.tooltip && this.tooltip.getBSTip().$tip.css('z-index', 10000); - return; - } else if (id == Asc.c_oAscError.ID.CanNotPasteImage) { - this.showTips([this.errorCannotPasteImg], {timeout: 7000, hideCloseTip: true}); - return; + me.hidePreloader(); + me.onLongActionBegin( + Asc.c_oAscAsyncActionType["BlockInteraction"], + LoadingDocument + ); + } + + // Message on window close + window.onbeforeunload = _.bind(me.onBeforeUnload, me); + window.onunload = _.bind(me.onUnload, me); + } + }, + + onExternalMessage: function (msg, options) { + if (msg && msg.msg) { + msg.msg = msg.msg.toString(); + this.showTips( + [msg.msg.charAt(0).toUpperCase() + msg.msg.substring(1)], + options + ); + + Common.component.Analytics.trackEvent("External Error"); + } + }, + + onError: function (id, level, errData) { + if (id == Asc.c_oAscError.ID.LoadingScriptError) { + this.showTips([this.scriptLoadError]); + this.tooltip && + this.tooltip.getBSTip().$tip.css("z-index", 10000); + return; + } else if (id == Asc.c_oAscError.ID.CanNotPasteImage) { + this.showTips([this.errorCannotPasteImg], { + timeout: 7000, + hideCloseTip: true, + }); + return; + } + + this.hidePreloader(); + this.onLongActionEnd( + Asc.c_oAscAsyncActionType["BlockInteraction"], + LoadingDocument + ); + + var config = { + closable: true, + }; + + switch (id) { + case Asc.c_oAscError.ID.Unknown: + config.msg = this.unknownErrorText; + break; + + case Asc.c_oAscError.ID.ConvertationTimeout: + config.msg = this.convertationTimeoutText; + break; + + case Asc.c_oAscError.ID.ConvertationOpenError: + config.msg = this.openErrorText; + break; + + case Asc.c_oAscError.ID.ConvertationSaveError: + config.msg = + this.appOptions.isDesktopApp && this.appOptions.isOffline + ? this.saveErrorTextDesktop + : this.saveErrorText; + break; + + case Asc.c_oAscError.ID.DownloadError: + config.msg = this.downloadErrorText; + break; + + case Asc.c_oAscError.ID.UplImageSize: + config.msg = this.uploadImageSizeMessage; + break; + + case Asc.c_oAscError.ID.UplImageExt: + config.msg = this.uploadImageExtMessage; + break; + + case Asc.c_oAscError.ID.UplImageFileCount: + config.msg = this.uploadImageFileCountMessage; + break; + + case Asc.c_oAscError.ID.UplDocumentSize: + config.msg = this.uploadDocSizeMessage; + break; + + case Asc.c_oAscError.ID.UplDocumentExt: + config.msg = this.uploadDocExtMessage; + break; + + case Asc.c_oAscError.ID.UplDocumentFileCount: + config.msg = this.uploadDocFileCountMessage; + break; + + case Asc.c_oAscError.ID.SplitCellMaxRows: + config.msg = this.splitMaxRowsErrorText.replace( + "%1", + errData.get_Value() + ); + break; + + case Asc.c_oAscError.ID.SplitCellMaxCols: + config.msg = this.splitMaxColsErrorText.replace( + "%1", + errData.get_Value() + ); + break; + + case Asc.c_oAscError.ID.SplitCellRowsDivider: + config.msg = this.splitDividerErrorText.replace( + "%1", + errData.get_Value() + ); + break; + + case Asc.c_oAscError.ID.VKeyEncrypt: + config.msg = this.errorToken; + break; + + case Asc.c_oAscError.ID.KeyExpire: + config.msg = this.errorTokenExpire; + break; + + case Asc.c_oAscError.ID.UserCountExceed: + config.msg = this.errorUsersExceed; + break; + + case Asc.c_oAscError.ID.CoAuthoringDisconnect: + config.msg = this.errorViewerDisconnect; + break; + + case Asc.c_oAscError.ID.ConvertationPassword: + config.msg = this.errorFilePassProtect; + break; + + case Asc.c_oAscError.ID.StockChartError: + config.msg = this.errorStockChart; + break; + + case Asc.c_oAscError.ID.DataRangeError: + config.msg = this.errorDataRange; + break; + + case Asc.c_oAscError.ID.Database: + config.msg = this.errorDatabaseConnection; + break; + + case Asc.c_oAscError.ID.UserDrop: + if (this._state.lostEditingRights) { + this._state.lostEditingRights = false; + return; } - - this.hidePreloader(); - this.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); - - var config = { - closable: true + this._state.lostEditingRights = true; + config.msg = this.errorUserDrop; + Common.NotificationCenter.trigger("collaboration:sharingdeny"); + break; + + case Asc.c_oAscError.ID.MailMergeLoadFile: + config.msg = this.errorMailMergeLoadFile; + break; + + case Asc.c_oAscError.ID.MailMergeSaveFile: + config.msg = this.errorMailMergeSaveFile; + break; + + case Asc.c_oAscError.ID.Warning: + config.msg = this.errorConnectToServer; + config.closable = false; + break; + + case Asc.c_oAscError.ID.SessionAbsolute: + config.msg = this.errorSessionAbsolute; + break; + + case Asc.c_oAscError.ID.SessionIdle: + config.msg = this.errorSessionIdle; + break; + + case Asc.c_oAscError.ID.SessionToken: + config.msg = this.errorSessionToken; + break; + + case Asc.c_oAscError.ID.AccessDeny: + config.msg = this.errorAccessDeny; + break; + + case Asc.c_oAscError.ID.UplImageUrl: + config.msg = this.errorBadImageUrl; + break; + + case Asc.c_oAscError.ID.ForceSaveButton: + case Asc.c_oAscError.ID.ForceSaveTimeout: + config.msg = this.errorForceSave; + config.maxwidth = 600; + break; + + case Asc.c_oAscError.ID.DataEncrypted: + config.msg = this.errorDataEncrypted; + break; + + case Asc.c_oAscError.ID.EditingError: + config.msg = + this.appOptions.isDesktopApp && this.appOptions.isOffline + ? this.errorEditingSaveas + : this.errorEditingDownloadas; + break; + + case Asc.c_oAscError.ID.MailToClientMissing: + config.msg = this.errorEmailClient; + break; + + case Asc.c_oAscError.ID.ConvertationOpenLimitError: + config.msg = this.errorFileSizeExceed; + break; + + case Asc.c_oAscError.ID.UpdateVersion: + config.msg = this.errorUpdateVersionOnDisconnect; + config.maxwidth = 600; + break; + + case Asc.c_oAscError.ID.DirectUrl: + config.msg = this.errorDirectUrl; + break; + + case Asc.c_oAscError.ID.CannotCompareInCoEditing: + config.msg = this.errorCompare; + break; + + case Asc.c_oAscError.ID.ComboSeriesError: + config.msg = this.errorComboSeries; + break; + + case Asc.c_oAscError.ID.Password: + config.msg = this.errorSetPassword; + break; + + case Asc.c_oAscError.ID.Submit: + config.msg = this.errorSubmit; + break; + + case Asc.c_oAscError.ID.LoadingFontError: + config.msg = this.errorLoadingFont; + break; + + case Asc.c_oAscError.ID.ComplexFieldEmptyTOC: + config.maxwidth = 600; + config.msg = this.errorEmptyTOC; + break; + + case Asc.c_oAscError.ID.ComplexFieldNoTOC: + config.msg = this.errorNoTOC; + break; + + case Asc.c_oAscError.ID.TextFormWrongFormat: + config.msg = this.errorTextFormWrongFormat; + break; + + case Asc.c_oAscError.ID.PasswordIsNotCorrect: + config.msg = this.errorPasswordIsNotCorrect; + break; + + case Asc.c_oAscError.ID.ConvertationOpenFormat: + config.maxwidth = 600; + if (errData === "pdf") + config.msg = this.errorInconsistentExtPdf.replace( + "%1", + this.document.fileType || "" + ); + else if (errData === "docx") + config.msg = this.errorInconsistentExtDocx.replace( + "%1", + this.document.fileType || "" + ); + else if (errData === "xlsx") + config.msg = this.errorInconsistentExtXlsx.replace( + "%1", + this.document.fileType || "" + ); + else if (errData === "pptx") + config.msg = this.errorInconsistentExtPptx.replace( + "%1", + this.document.fileType || "" + ); + else config.msg = this.errorInconsistentExt; + break; + + default: + config.msg = + typeof id == "string" + ? id + : this.errorDefaultMessage.replace("%1", id); + break; + } + + if (level == Asc.c_oAscError.Level.Critical) { + // report only critical errors + Common.Gateway.reportError(id, config.msg); + + config.title = this.criticalErrorTitle; + config.iconCls = "error"; + config.closable = false; + + if ( + this.appOptions.canBackToFolder && + !this.appOptions.isDesktopApp && + typeof id !== "string" + ) { + config.msg += "

    " + this.criticalErrorExtText; + config.callback = function (btn) { + if (btn == "ok") + Common.NotificationCenter.trigger("goback", true); }; - - switch (id) - { - case Asc.c_oAscError.ID.Unknown: - config.msg = this.unknownErrorText; - break; - - case Asc.c_oAscError.ID.ConvertationTimeout: - config.msg = this.convertationTimeoutText; - break; - - case Asc.c_oAscError.ID.ConvertationOpenError: - config.msg = this.openErrorText; - break; - - case Asc.c_oAscError.ID.ConvertationSaveError: - config.msg = (this.appOptions.isDesktopApp && this.appOptions.isOffline) ? this.saveErrorTextDesktop : this.saveErrorText; - break; - - case Asc.c_oAscError.ID.DownloadError: - config.msg = this.downloadErrorText; - break; - - case Asc.c_oAscError.ID.UplImageSize: - config.msg = this.uploadImageSizeMessage; - break; - - case Asc.c_oAscError.ID.UplImageExt: - config.msg = this.uploadImageExtMessage; - break; - - case Asc.c_oAscError.ID.UplImageFileCount: - config.msg = this.uploadImageFileCountMessage; - break; - - case Asc.c_oAscError.ID.UplDocumentSize: - config.msg = this.uploadDocSizeMessage; - break; - - case Asc.c_oAscError.ID.UplDocumentExt: - config.msg = this.uploadDocExtMessage; - break; - - case Asc.c_oAscError.ID.UplDocumentFileCount: - config.msg = this.uploadDocFileCountMessage; - break; - - case Asc.c_oAscError.ID.SplitCellMaxRows: - config.msg = this.splitMaxRowsErrorText.replace('%1', errData.get_Value()); - break; - - case Asc.c_oAscError.ID.SplitCellMaxCols: - config.msg = this.splitMaxColsErrorText.replace('%1', errData.get_Value()); - break; - - case Asc.c_oAscError.ID.SplitCellRowsDivider: - config.msg = this.splitDividerErrorText.replace('%1', errData.get_Value()); - break; - - case Asc.c_oAscError.ID.VKeyEncrypt: - config.msg = this.errorToken; - break; - - case Asc.c_oAscError.ID.KeyExpire: - config.msg = this.errorTokenExpire; - break; - - case Asc.c_oAscError.ID.UserCountExceed: - config.msg = this.errorUsersExceed; - break; - - case Asc.c_oAscError.ID.CoAuthoringDisconnect: - config.msg = this.errorViewerDisconnect; - break; - - case Asc.c_oAscError.ID.ConvertationPassword: - config.msg = this.errorFilePassProtect; - break; - - case Asc.c_oAscError.ID.StockChartError: - config.msg = this.errorStockChart; - break; - - case Asc.c_oAscError.ID.DataRangeError: - config.msg = this.errorDataRange; - break; - - case Asc.c_oAscError.ID.Database: - config.msg = this.errorDatabaseConnection; - break; - - case Asc.c_oAscError.ID.UserDrop: - if (this._state.lostEditingRights) { - this._state.lostEditingRights = false; - return; - } - this._state.lostEditingRights = true; - config.msg = this.errorUserDrop; - Common.NotificationCenter.trigger('collaboration:sharingdeny'); - break; - - case Asc.c_oAscError.ID.MailMergeLoadFile: - config.msg = this.errorMailMergeLoadFile; - break; - - case Asc.c_oAscError.ID.MailMergeSaveFile: - config.msg = this.errorMailMergeSaveFile; - break; - - case Asc.c_oAscError.ID.Warning: - config.msg = this.errorConnectToServer; - config.closable = false; - break; - - case Asc.c_oAscError.ID.SessionAbsolute: - config.msg = this.errorSessionAbsolute; - break; - - case Asc.c_oAscError.ID.SessionIdle: - config.msg = this.errorSessionIdle; - break; - - case Asc.c_oAscError.ID.SessionToken: - config.msg = this.errorSessionToken; - break; - - case Asc.c_oAscError.ID.AccessDeny: - config.msg = this.errorAccessDeny; - break; - - case Asc.c_oAscError.ID.UplImageUrl: - config.msg = this.errorBadImageUrl; - break; - - case Asc.c_oAscError.ID.ForceSaveButton: - case Asc.c_oAscError.ID.ForceSaveTimeout: - config.msg = this.errorForceSave; - config.maxwidth = 600; - break; - - case Asc.c_oAscError.ID.DataEncrypted: - config.msg = this.errorDataEncrypted; - break; - - case Asc.c_oAscError.ID.EditingError: - config.msg = (this.appOptions.isDesktopApp && this.appOptions.isOffline) ? this.errorEditingSaveas : this.errorEditingDownloadas; - break; - - case Asc.c_oAscError.ID.MailToClientMissing: - config.msg = this.errorEmailClient; - break; - - case Asc.c_oAscError.ID.ConvertationOpenLimitError: - config.msg = this.errorFileSizeExceed; - break; - - case Asc.c_oAscError.ID.UpdateVersion: - config.msg = this.errorUpdateVersionOnDisconnect; - config.maxwidth = 600; - break; - - case Asc.c_oAscError.ID.DirectUrl: - config.msg = this.errorDirectUrl; - break; - - case Asc.c_oAscError.ID.CannotCompareInCoEditing: - config.msg = this.errorCompare; - break; - - case Asc.c_oAscError.ID.ComboSeriesError: - config.msg = this.errorComboSeries; - break; - - case Asc.c_oAscError.ID.Password: - config.msg = this.errorSetPassword; - break; - - case Asc.c_oAscError.ID.Submit: - config.msg = this.errorSubmit; - break; - - case Asc.c_oAscError.ID.LoadingFontError: - config.msg = this.errorLoadingFont; - break; - - case Asc.c_oAscError.ID.ComplexFieldEmptyTOC: - config.maxwidth = 600; - config.msg = this.errorEmptyTOC; - break; - - case Asc.c_oAscError.ID.ComplexFieldNoTOC: - config.msg = this.errorNoTOC; - break; - - case Asc.c_oAscError.ID.TextFormWrongFormat: - config.msg = this.errorTextFormWrongFormat; - break; - - case Asc.c_oAscError.ID.PasswordIsNotCorrect: - config.msg = this.errorPasswordIsNotCorrect; - break; - - case Asc.c_oAscError.ID.ConvertationOpenFormat: - config.maxwidth = 600; - if (errData === 'pdf') - config.msg = this.errorInconsistentExtPdf.replace('%1', this.document.fileType || ''); - else if (errData === 'docx') - config.msg = this.errorInconsistentExtDocx.replace('%1', this.document.fileType || ''); - else if (errData === 'xlsx') - config.msg = this.errorInconsistentExtXlsx.replace('%1', this.document.fileType || ''); - else if (errData === 'pptx') - config.msg = this.errorInconsistentExtPptx.replace('%1', this.document.fileType || ''); - else - config.msg = this.errorInconsistentExt; - break; - - default: - config.msg = (typeof id == 'string') ? id : this.errorDefaultMessage.replace('%1', id); - break; - } - - if (level == Asc.c_oAscError.Level.Critical) { - - // report only critical errors - Common.Gateway.reportError(id, config.msg); - - config.title = this.criticalErrorTitle; - config.iconCls = 'error'; - config.closable = false; - - if (this.appOptions.canBackToFolder && !this.appOptions.isDesktopApp && typeof id !== 'string') { - config.msg += '

    ' + this.criticalErrorExtText; - config.callback = function(btn) { - if (btn == 'ok') - Common.NotificationCenter.trigger('goback', true); - } - } - if (id == Asc.c_oAscError.ID.DataEncrypted || id == Asc.c_oAscError.ID.ConvertationOpenLimitError) { - this.api.asc_coAuthoringDisconnect(); - Common.NotificationCenter.trigger('api:disconnect'); - } - } - else { - Common.Gateway.reportWarning(id, config.msg); - - config.title = this.notcriticalErrorTitle; - config.iconCls = 'warn'; - config.buttons = ['ok']; - config.callback = _.bind(function(btn){ - if (id == Asc.c_oAscError.ID.Warning && btn == 'ok' && (this.appOptions.canDownload || this.appOptions.canDownloadOrigin)) { - Common.UI.Menu.Manager.hideAll(); - if (this.appOptions.isDesktopApp && this.appOptions.isOffline) - this.api.asc_DownloadAs(); - else { - if (this.appOptions.canDownload) { - this._isDocReady ? this.getApplication().getController('LeftMenu').leftMenu.showMenu('file:saveas') : (this._needToSaveAsFile = true); - } else - this.api.asc_DownloadOrigin(); - } - } else if (id == Asc.c_oAscError.ID.SplitCellMaxRows || id == Asc.c_oAscError.ID.SplitCellMaxCols || id == Asc.c_oAscError.ID.SplitCellRowsDivider) { - var me = this; - setTimeout(function(){ - (new Common.Views.InsertTableDialog({ - split: true, - handler: function(result, value) { - if (result == 'ok') { - if (me.api) - me.api.SplitCell(value.columns, value.rows); - } - me.onEditComplete(); - } - })).show(); - },10); - } else if (id == Asc.c_oAscError.ID.EditingError) { - this.disableEditing(true); - Common.NotificationCenter.trigger('api:disconnect', true); // enable download and print - } - this._state.lostEditingRights = false; - this.onEditComplete(); - }, this); - } - - if (!Common.Utils.ModalWindow.isVisible() || $('.asc-window.modal.alert[data-value=' + id + ']').length<1) - Common.UI.alert(config).$window.attr('data-value', id); - - (id!==undefined) && Common.component.Analytics.trackEvent('Internal Error', id.toString()); - }, - - onCoAuthoringDisconnect: function() { - this.getApplication().getController('Viewport').getView('Viewport').setMode({isDisconnected:true}); - appHeader.setCanRename(false); - this.appOptions.canRename = false; - this._state.isDisconnected = true; - }, - - showTips: function(strings, options) { - var me = this; - if (!strings.length) return; - if (typeof(strings)!='object') strings = [strings]; - - function closeTip(cmp){ - me.tipTimeout && clearTimeout(me.tipTimeout); - setTimeout(showNextTip, 300); - } - - function showNextTip() { - var str_tip = strings.shift(); - if (str_tip) { - if (!(options && options.hideCloseTip)) - str_tip += '\n' + me.textCloseTip; - me.tooltip.setTitle(str_tip); - me.tooltip.show(); - me.tipTimeout && clearTimeout(me.tipTimeout); - if (options && options.timeout) { - me.tipTimeout = setTimeout(function () { - me.tooltip.hide(); - closeTip(); - }, options.timeout); + } + if ( + id == Asc.c_oAscError.ID.DataEncrypted || + id == Asc.c_oAscError.ID.ConvertationOpenLimitError + ) { + this.api.asc_coAuthoringDisconnect(); + Common.NotificationCenter.trigger("api:disconnect"); + } + } else { + Common.Gateway.reportWarning(id, config.msg); + + config.title = this.notcriticalErrorTitle; + config.iconCls = "warn"; + config.buttons = ["ok"]; + config.callback = _.bind(function (btn) { + if ( + id == Asc.c_oAscError.ID.Warning && + btn == "ok" && + (this.appOptions.canDownload || + this.appOptions.canDownloadOrigin) + ) { + Common.UI.Menu.Manager.hideAll(); + if (this.appOptions.isDesktopApp && this.appOptions.isOffline) + this.api.asc_DownloadAs(); + else { + if (this.appOptions.canDownload) { + this._isDocReady + ? this.getApplication() + .getController("LeftMenu") + .leftMenu.showMenu("file:saveas") + : (this._needToSaveAsFile = true); + } else this.api.asc_DownloadOrigin(); + } + } else if ( + id == Asc.c_oAscError.ID.SplitCellMaxRows || + id == Asc.c_oAscError.ID.SplitCellMaxCols || + id == Asc.c_oAscError.ID.SplitCellRowsDivider + ) { + var me = this; + setTimeout(function () { + new Common.Views.InsertTableDialog({ + split: true, + handler: function (result, value) { + if (result == "ok") { + if (me.api) + me.api.SplitCell(value.columns, value.rows); } - } - } - - if (!this.tooltip) { - this.tooltip = new Common.UI.Tooltip({ - owner: this.getApplication().getController('Toolbar').getView(), - hideonclick: true, - placement: 'bottom', - cls: 'main-info', - offset: 30 - }); - this.tooltip.on('tooltip:hideonclick',closeTip); - } - - showNextTip(); - }, - - updateWindowTitle: function(force) { - var isModified = this.api.isDocumentModified(); - if (this._state.isDocModified !== isModified || force) { - var title = this.defaultTitleText; - - if (appHeader && !_.isEmpty(appHeader.getDocumentCaption())) - title = appHeader.getDocumentCaption() + ' - ' + title; - - if (isModified) { - clearTimeout(this._state.timerCaption); - if (!_.isUndefined(title)) { - title = '* ' + title; - } - } - - if (window.document.title != title) - window.document.title = title; - - this._isDocReady && (this._state.isDocModified !== isModified) && Common.Gateway.setDocumentModified(isModified); - if (isModified && (!this._state.fastCoauth || this._state.usersCount<2)) - this.getApplication().getController('Statusbar').setStatusCaption('', true); - - this._state.isDocModified = isModified; - } - }, - - onDocumentModifiedChanged: function() { - var isModified = this.api.asc_isDocumentCanSave(); - if (this._state.isDocModified !== isModified) { - this._isDocReady && Common.Gateway.setDocumentModified(this.api.isDocumentModified()); - } - - this.updateWindowTitle(); - - var toolbarView = this.getApplication().getController('Toolbar').getView(); - if (toolbarView && toolbarView.btnCollabChanges && !toolbarView._state.previewmode) { - var isSyncButton = toolbarView.btnCollabChanges.cmpEl.hasClass('notify'), - forcesave = this.appOptions.forcesave, - isDisabled = !isModified && !isSyncButton && !forcesave || this._state.isDisconnected || this._state.fastCoauth && this._state.usersCount>1 && !forcesave; - toolbarView.btnSave.setDisabled(isDisabled); + me.onEditComplete(); + }, + }).show(); + }, 10); + } else if (id == Asc.c_oAscError.ID.EditingError) { + this.disableEditing(true); + Common.NotificationCenter.trigger("api:disconnect", true); // enable download and print } - - /** coauthoring begin **/ - if (this.contComments.isDummyComment && !this.dontCloseDummyComment && !this.beforeShowDummyComment) { - this.contComments.clearDummyComment(); - } - /** coauthoring end **/ - }, - - onDocumentCanSaveChanged: function (isCanSave) { - var toolbarView = this.getApplication().getController('Toolbar').getView(); - - if (toolbarView && this.api && !toolbarView._state.previewmode) { - var isSyncButton = toolbarView.btnCollabChanges.cmpEl.hasClass('notify'), - forcesave = this.appOptions.forcesave, - isDisabled = !isCanSave && !isSyncButton && !forcesave || this._state.isDisconnected || this._state.fastCoauth && this._state.usersCount>1 && !forcesave; - toolbarView.btnSave.setDisabled(isDisabled); + this._state.lostEditingRights = false; + this.onEditComplete(); + }, this); + } + + if ( + !Common.Utils.ModalWindow.isVisible() || + $(".asc-window.modal.alert[data-value=" + id + "]").length < 1 + ) + Common.UI.alert(config).$window.attr("data-value", id); + + id !== undefined && + Common.component.Analytics.trackEvent( + "Internal Error", + id.toString() + ); + }, + + onCoAuthoringDisconnect: function () { + this.getApplication() + .getController("Viewport") + .getView("Viewport") + .setMode({ isDisconnected: true }); + appHeader.setCanRename(false); + this.appOptions.canRename = false; + this._state.isDisconnected = true; + }, + + showTips: function (strings, options) { + var me = this; + if (!strings.length) return; + if (typeof strings != "object") strings = [strings]; + + function closeTip(cmp) { + me.tipTimeout && clearTimeout(me.tipTimeout); + setTimeout(showNextTip, 300); + } + + function showNextTip() { + var str_tip = strings.shift(); + if (str_tip) { + if (!(options && options.hideCloseTip)) + str_tip += "\n" + me.textCloseTip; + me.tooltip.setTitle(str_tip); + me.tooltip.show(); + me.tipTimeout && clearTimeout(me.tipTimeout); + if (options && options.timeout) { + me.tipTimeout = setTimeout(function () { + me.tooltip.hide(); + closeTip(); + }, options.timeout); } - }, - - onContextMenu: function(event){ - var canCopyAttr = event.target.getAttribute('data-can-copy'), - isInputEl = (event.target instanceof HTMLInputElement) || (event.target instanceof HTMLTextAreaElement); - - if ((isInputEl && canCopyAttr === 'false') || - (!isInputEl && canCopyAttr !== 'true')) { - event.stopPropagation(); - event.preventDefault(); - return false; + } + } + + if (!this.tooltip) { + this.tooltip = new Common.UI.Tooltip({ + owner: this.getApplication().getController("Toolbar").getView(), + hideonclick: true, + placement: "bottom", + cls: "main-info", + offset: 30, + }); + this.tooltip.on("tooltip:hideonclick", closeTip); + } + + showNextTip(); + }, + + updateWindowTitle: function (force) { + var isModified = this.api.isDocumentModified(); + if (this._state.isDocModified !== isModified || force) { + var title = this.defaultTitleText; + + if (appHeader && !_.isEmpty(appHeader.getDocumentCaption())) + title = appHeader.getDocumentCaption() + " - " + title; + + if (isModified) { + clearTimeout(this._state.timerCaption); + if (!_.isUndefined(title)) { + title = "* " + title; } - }, - - onBeforeUnload: function() { - Common.localStorage.save(); + } + + if (window.document.title != title) window.document.title = title; + + this._isDocReady && + this._state.isDocModified !== isModified && + Common.Gateway.setDocumentModified(isModified); + if ( + isModified && + (!this._state.fastCoauth || this._state.usersCount < 2) + ) + this.getApplication() + .getController("Statusbar") + .setStatusCaption("", true); + + this._state.isDocModified = isModified; + } + }, + + onDocumentModifiedChanged: function () { + var isModified = this.api.asc_isDocumentCanSave(); + if (this._state.isDocModified !== isModified) { + this._isDocReady && + Common.Gateway.setDocumentModified( + this.api.isDocumentModified() + ); + } + + this.updateWindowTitle(); + + var toolbarView = this.getApplication() + .getController("Toolbar") + .getView(); + if ( + toolbarView && + toolbarView.btnCollabChanges && + !toolbarView._state.previewmode + ) { + var isSyncButton = + toolbarView.btnCollabChanges.cmpEl.hasClass("notify"), + forcesave = this.appOptions.forcesave, + isDisabled = + (!isModified && !isSyncButton && !forcesave) || + this._state.isDisconnected || + (this._state.fastCoauth && + this._state.usersCount > 1 && + !forcesave); + toolbarView.btnSave.setDisabled(isDisabled); + } - if (this.api.isDocumentModified()) { - var me = this; - this.api.asc_stopSaving(); - this._state.unloadTimer = 1000; - this.continueSavingTimer = window.setTimeout(function() { - me.api.asc_continueSaving(); - me._state.unloadTimer = 0; - }, 500); - - return this.leavePageText; - } else - this._state.unloadTimer = 10000; - }, - - onUnload: function() { - if (this.continueSavingTimer) clearTimeout(this.continueSavingTimer); - }, - - hidePreloader: function() { - var promise; - if (!this._state.customizationDone) { - this._state.customizationDone = true; - if (this.appOptions.customization) { - if (this.appOptions.isDesktopApp) - this.appOptions.customization.about = false; - else if (!this.appOptions.canBrandingExt) - this.appOptions.customization.about = true; - } - Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationElements); - if (this.appOptions.canBrandingExt) { - Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationExtElements); - Common.UI.LayoutManager.applyCustomization(); - if (this.appOptions.customization && (typeof (this.appOptions.customization) == 'object')) { - if (this.appOptions.customization.leftMenu!==undefined) - console.log("Obsolete: The 'leftMenu' parameter of the 'customization' section is deprecated. Please use 'leftMenu' parameter in the 'customization.layout' section instead."); - if (this.appOptions.customization.rightMenu!==undefined) - console.log("Obsolete: The 'rightMenu' parameter of the 'customization' section is deprecated. Please use 'rightMenu' parameter in the 'customization.layout' section instead."); - if (this.appOptions.customization.statusBar!==undefined) - console.log("Obsolete: The 'statusBar' parameter of the 'customization' section is deprecated. Please use 'statusBar' parameter in the 'customization.layout' section instead."); - if (this.appOptions.customization.toolbar!==undefined) - console.log("Obsolete: The 'toolbar' parameter of the 'customization' section is deprecated. Please use 'toolbar' parameter in the 'customization.layout' section instead."); - } - promise = this.getApplication().getController('Common.Controllers.Plugins').applyUICustomization(); - } - } - Common.NotificationCenter.trigger('layout:changed', 'main'); - - (promise || (new Promise(function(resolve, reject) { - resolve(); - }))).then(function() { - $('#loading-mask').hide().remove(); - Common.Controllers.Desktop.process('preloader:hide'); - }); - }, - - onDownloadUrl: function(url, fileType) { - if (this._state.isFromGatewayDownloadAs) { - Common.Gateway.downloadAs(url, fileType); + /** coauthoring begin **/ + if ( + this.contComments.isDummyComment && + !this.dontCloseDummyComment && + !this.beforeShowDummyComment + ) { + this.contComments.clearDummyComment(); + } + /** coauthoring end **/ + }, + + onDocumentCanSaveChanged: function (isCanSave) { + var toolbarView = this.getApplication() + .getController("Toolbar") + .getView(); + + if (toolbarView && this.api && !toolbarView._state.previewmode) { + var isSyncButton = + toolbarView.btnCollabChanges.cmpEl.hasClass("notify"), + forcesave = this.appOptions.forcesave, + isDisabled = + (!isCanSave && !isSyncButton && !forcesave) || + this._state.isDisconnected || + (this._state.fastCoauth && + this._state.usersCount > 1 && + !forcesave); + toolbarView.btnSave.setDisabled(isDisabled); + } + }, + + onContextMenu: function (event) { + var canCopyAttr = event.target.getAttribute("data-can-copy"), + isInputEl = + event.target instanceof HTMLInputElement || + event.target instanceof HTMLTextAreaElement; + + if ( + (isInputEl && canCopyAttr === "false") || + (!isInputEl && canCopyAttr !== "true") + ) { + event.stopPropagation(); + event.preventDefault(); + return false; + } + }, + + onBeforeUnload: function () { + Common.localStorage.save(); + + if (this.api.isDocumentModified()) { + var me = this; + this.api.asc_stopSaving(); + this._state.unloadTimer = 1000; + this.continueSavingTimer = window.setTimeout(function () { + me.api.asc_continueSaving(); + me._state.unloadTimer = 0; + }, 500); + + return this.leavePageText; + } else this._state.unloadTimer = 10000; + }, + + onUnload: function () { + if (this.continueSavingTimer) + clearTimeout(this.continueSavingTimer); + }, + + hidePreloader: function () { + var promise; + if (!this._state.customizationDone) { + this._state.customizationDone = true; + if (this.appOptions.customization) { + if (this.appOptions.isDesktopApp) + this.appOptions.customization.about = false; + else if (!this.appOptions.canBrandingExt) + this.appOptions.customization.about = true; + } + Common.Utils.applyCustomization( + this.appOptions.customization, + mapCustomizationElements + ); + if (this.appOptions.canBrandingExt) { + Common.Utils.applyCustomization( + this.appOptions.customization, + mapCustomizationExtElements + ); + Common.UI.LayoutManager.applyCustomization(); + if ( + this.appOptions.customization && + typeof this.appOptions.customization == "object" + ) { + if (this.appOptions.customization.leftMenu !== undefined) + console.log( + "Obsolete: The 'leftMenu' parameter of the 'customization' section is deprecated. Please use 'leftMenu' parameter in the 'customization.layout' section instead." + ); + if (this.appOptions.customization.rightMenu !== undefined) + console.log( + "Obsolete: The 'rightMenu' parameter of the 'customization' section is deprecated. Please use 'rightMenu' parameter in the 'customization.layout' section instead." + ); + if (this.appOptions.customization.statusBar !== undefined) + console.log( + "Obsolete: The 'statusBar' parameter of the 'customization' section is deprecated. Please use 'statusBar' parameter in the 'customization.layout' section instead." + ); + if (this.appOptions.customization.toolbar !== undefined) + console.log( + "Obsolete: The 'toolbar' parameter of the 'customization' section is deprecated. Please use 'toolbar' parameter in the 'customization.layout' section instead." + ); } - this._state.isFromGatewayDownloadAs = false; - }, - - onUpdateVersion: function(callback) { - var me = this; - me.needToUpdateVersion = true; - me.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); - Common.UI.warning({ - title: me.titleUpdateVersion, - msg: this.errorUpdateVersion, - callback: function() { - _.defer(function() { - Common.Gateway.updateVersion(); - if (callback) callback.call(me); - me.onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); - }) - } + promise = this.getApplication() + .getController("Common.Controllers.Plugins") + .applyUICustomization(); + } + } + Common.NotificationCenter.trigger("layout:changed", "main"); + + ( + promise || + new Promise(function (resolve, reject) { + resolve(); + }) + ).then(function () { + $("#loading-mask").hide().remove(); + Common.Controllers.Desktop.process("preloader:hide"); + }); + }, + + onDownloadUrl: function (url, fileType) { + if (this._state.isFromGatewayDownloadAs) { + Common.Gateway.downloadAs(url, fileType); + } + this._state.isFromGatewayDownloadAs = false; + }, + + onUpdateVersion: function (callback) { + var me = this; + me.needToUpdateVersion = true; + me.onLongActionEnd( + Asc.c_oAscAsyncActionType["BlockInteraction"], + LoadingDocument + ); + Common.UI.warning({ + title: me.titleUpdateVersion, + msg: this.errorUpdateVersion, + callback: function () { + _.defer(function () { + Common.Gateway.updateVersion(); + if (callback) callback.call(me); + me.onLongActionBegin( + Asc.c_oAscAsyncActionType["BlockInteraction"], + LoadingDocument + ); }); - }, - - onServerVersion: function(buildVersion) { - if (this.changeServerVersion) return true; - - const cur_version = this.getApplication().getController('LeftMenu').leftMenu.getMenu('about').txtVersionNum; - const cropped_version = cur_version.match(/^(\d+.\d+.\d+)/); - if (!window.compareVersions && (!cropped_version || cropped_version[1] !== buildVersion)) { - this.changeServerVersion = true; - Common.UI.warning({ - title: this.titleServerVersion, - msg: this.errorServerVersion, - callback: function() { - _.defer(function() { - Common.Gateway.updateVersion(); - }) - } - }); - return true; - } - return false; - }, - + }, + }); + }, + + onServerVersion: function (buildVersion) { + if (this.changeServerVersion) return true; + + const cur_version = this.getApplication() + .getController("LeftMenu") + .leftMenu.getMenu("about").txtVersionNum; + const cropped_version = cur_version.match(/^(\d+.\d+.\d+)/); + if ( + !window.compareVersions && + (!cropped_version || cropped_version[1] !== buildVersion) + ) { + this.changeServerVersion = true; + Common.UI.warning({ + title: this.titleServerVersion, + msg: this.errorServerVersion, + callback: function () { + _.defer(function () { + Common.Gateway.updateVersion(); + }); + }, + }); + return true; + } + return false; + }, + + /** coauthoring begin **/ + // fillUserStore: function(users){ + // if (!_.isEmpty(users)){ + // var userStore = this.getCommonStoreUsersStore(); + // + // if (userStore) + // userStore.add(users); + // } + // }, + + onCollaborativeChanges: function () { + if (this._state.hasCollaborativeChanges) return; + this._state.hasCollaborativeChanges = true; + if (this.appOptions.isEdit) + this.getApplication() + .getController("Statusbar") + .setStatusCaption(this.txtNeedSynchronize, true); + }, + /** coauthoring end **/ + + synchronizeChanges: function () { + this.getApplication() + .getController("Statusbar") + .synchronizeChanges(); + this.getApplication() + .getController("Common.Controllers.ReviewChanges") + .synchronizeChanges(); + this.getApplication().getController("DocumentHolder").hideTips(); /** coauthoring begin **/ -// fillUserStore: function(users){ -// if (!_.isEmpty(users)){ -// var userStore = this.getCommonStoreUsersStore(); -// -// if (userStore) -// userStore.add(users); -// } -// }, - - onCollaborativeChanges: function() { - if (this._state.hasCollaborativeChanges) return; - this._state.hasCollaborativeChanges = true; - if (this.appOptions.isEdit) - this.getApplication().getController('Statusbar').setStatusCaption(this.txtNeedSynchronize, true); - }, + this.getApplication() + .getController("Toolbar") + .getView() + .synchronizeChanges(); /** coauthoring end **/ - - synchronizeChanges: function() { - this.getApplication().getController('Statusbar').synchronizeChanges(); - this.getApplication().getController('Common.Controllers.ReviewChanges').synchronizeChanges(); - this.getApplication().getController('DocumentHolder').hideTips(); - /** coauthoring begin **/ - this.getApplication().getController('Toolbar').getView().synchronizeChanges(); - /** coauthoring end **/ - this._state.hasCollaborativeChanges = false; - }, - - initNames: function() { - this.shapeGroupNames = [ - this.txtBasicShapes, - this.txtFiguredArrows, - this.txtMath, - this.txtCharts, - this.txtStarsRibbons, - this.txtCallouts, - this.txtButtons, - this.txtRectangles, - this.txtLines - ]; - }, - - fillAutoShapes: function(groupNames, shapes){ - if (_.isEmpty(shapes) || _.isEmpty(groupNames) || shapes.length != groupNames.length) - return; - - var me = this, - shapegrouparray = [], - shapeStore = this.getCollection('ShapeGroups'), - name_arr = {}; - - shapeStore.reset(); - - _.each(groupNames, function(groupName, index){ - var store = new Backbone.Collection([], { - model: DE.Models.ShapeModel - }), - arr = []; - - var cols = (shapes[index].length) > 18 ? 7 : 6, - height = Math.ceil(shapes[index].length/cols) * 35 + 3, - width = 30 * cols; - - _.each(shapes[index], function(shape, idx){ - var name = me['txtShape_' + shape.Type]; - arr.push({ - data : {shapeType: shape.Type}, - tip : name || (me.textShape + ' ' + (idx+1)), - allowSelected : true, - selected: false - }); - if (name) - name_arr[shape.Type] = name; - }); - store.add(arr); - shapegrouparray.push({ - groupName : me.shapeGroupNames[index], - groupStore : store, - groupWidth : width, - groupHeight : height - }); - }); - - shapeStore.add(shapegrouparray); - setTimeout(function(){ - me.getApplication().getController('Toolbar').onApiAutoShapes(); - }, 50); - this.api.asc_setShapeNames(name_arr); - }, - - fillTextArt: function(shapes){ - var arr = [], - artStore = this.getCollection('Common.Collections.TextArt'); - - if (!shapes && artStore.length>0) {// shapes == undefined when update textart collection (from asc_onSendThemeColors) - shapes = this.api.asc_getTextArtPreviews(); - } - if (_.isEmpty(shapes)) return; - - _.each(shapes, function(shape, index){ - arr.push({ - imageUrl : shape, - data : index, - allowSelected : true, - selected: false - }); + this._state.hasCollaborativeChanges = false; + }, + + initNames: function () { + this.shapeGroupNames = [ + this.txtBasicShapes, + this.txtFiguredArrows, + this.txtMath, + this.txtCharts, + this.txtStarsRibbons, + this.txtCallouts, + this.txtButtons, + this.txtRectangles, + this.txtLines, + ]; + }, + + fillAutoShapes: function (groupNames, shapes) { + if ( + _.isEmpty(shapes) || + _.isEmpty(groupNames) || + shapes.length != groupNames.length + ) + return; + + var me = this, + shapegrouparray = [], + shapeStore = this.getCollection("ShapeGroups"), + name_arr = {}; + + shapeStore.reset(); + + _.each(groupNames, function (groupName, index) { + var store = new Backbone.Collection([], { + model: DE.Models.ShapeModel, + }), + arr = []; + + var cols = shapes[index].length > 18 ? 7 : 6, + height = Math.ceil(shapes[index].length / cols) * 35 + 3, + width = 30 * cols; + + _.each(shapes[index], function (shape, idx) { + var name = me["txtShape_" + shape.Type]; + arr.push({ + data: { shapeType: shape.Type }, + tip: name || me.textShape + " " + (idx + 1), + allowSelected: true, + selected: false, }); - artStore.reset(arr); - }, - - updateThemeColors: function() { - var me = this; - setTimeout(function(){ - me.getApplication().getController('RightMenu').UpdateThemeColors(); - }, 50); - setTimeout(function(){ - me.getApplication().getController('Toolbar').updateThemeColors(); - }, 50); - }, - - onSendThemeColors: function(colors, standart_colors) { - Common.Utils.ThemeColor.setColors(colors, standart_colors); - if (window.styles_loaded) { - this.updateThemeColors(); - var me = this; - setTimeout(function(){ - me.fillTextArt(); - }, 1); - } - }, - - loadLanguages: function(apiLangs) { - var langs = [], info, - allLangs = Common.util.LanguageInfo.getLanguages(); - for (var code in allLangs) { - if (allLangs.hasOwnProperty(code)) { - info = allLangs[code]; - info[2] && langs.push({ - displayValue: info[1], - value: info[0], - code: parseInt(code), - spellcheck: _.indexOf(apiLangs, code)>-1 - }); + if (name) name_arr[shape.Type] = name; + }); + store.add(arr); + shapegrouparray.push({ + groupName: me.shapeGroupNames[index], + groupStore: store, + groupWidth: width, + groupHeight: height, + }); + }); + + shapeStore.add(shapegrouparray); + setTimeout(function () { + me.getApplication().getController("Toolbar").onApiAutoShapes(); + }, 50); + this.api.asc_setShapeNames(name_arr); + }, + + fillTextArt: function (shapes) { + var arr = [], + artStore = this.getCollection("Common.Collections.TextArt"); + + if (!shapes && artStore.length > 0) { + // shapes == undefined when update textart collection (from asc_onSendThemeColors) + shapes = this.api.asc_getTextArtPreviews(); + } + if (_.isEmpty(shapes)) return; + + _.each(shapes, function (shape, index) { + arr.push({ + imageUrl: shape, + data: index, + allowSelected: true, + selected: false, + }); + }); + artStore.reset(arr); + }, + + updateThemeColors: function () { + var me = this; + setTimeout(function () { + me.getApplication() + .getController("RightMenu") + .UpdateThemeColors(); + }, 50); + setTimeout(function () { + me.getApplication().getController("Toolbar").updateThemeColors(); + }, 50); + }, + + onSendThemeColors: function (colors, standart_colors) { + Common.Utils.ThemeColor.setColors(colors, standart_colors); + if (window.styles_loaded) { + this.updateThemeColors(); + var me = this; + setTimeout(function () { + me.fillTextArt(); + }, 1); + } + }, + + loadLanguages: function (apiLangs) { + var langs = [], + info, + allLangs = Common.util.LanguageInfo.getLanguages(); + for (var code in allLangs) { + if (allLangs.hasOwnProperty(code)) { + info = allLangs[code]; + info[2] && + langs.push({ + displayValue: info[1], + value: info[0], + code: parseInt(code), + spellcheck: _.indexOf(apiLangs, code) > -1, + }); + } + } + + langs.sort(function (a, b) { + if (a.value < b.value) return -1; + if (a.value > b.value) return 1; + return 0; + }); + + this.languages = langs; + window.styles_loaded && this.setLanguages(); + }, + + setLanguages: function () { + if (!this.languages || this.languages.length < 1) { + this.loadLanguages([]); + } + if (this.languages && this.languages.length > 0) { + this.getApplication() + .getController("DocumentHolder") + .getView() + .setLanguages(this.languages); + this.getApplication() + .getController("Statusbar") + .setLanguages(this.languages); + this.getApplication() + .getController("Common.Controllers.ReviewChanges") + .setLanguages(this.languages); + } + }, + + onInsertTable: function () { + this.getApplication().getController("RightMenu").onInsertTable(); + }, + + onInsertImage: function () { + this.getApplication().getController("RightMenu").onInsertImage(); + }, + + onInsertChart: function () { + this.getApplication().getController("RightMenu").onInsertChart(); + }, + + onInsertShape: function () { + this.getApplication().getController("RightMenu").onInsertShape(); + }, + + onInsertTextArt: function () { + this.getApplication().getController("RightMenu").onInsertTextArt(); + }, + + onInsertControl: function () { + this.getApplication().getController("RightMenu").onInsertControl(); + }, + + unitsChanged: function (m) { + var value = Common.localStorage.getItem("de-settings-unit"); + value = + value !== null + ? parseInt(value) + : Common.Utils.Metric.getDefaultMetric(); + Common.Utils.Metric.setCurrentMetric(value); + Common.Utils.InternalSettings.set("de-settings-unit", value); + this.api.asc_SetDocumentUnits( + value == Common.Utils.Metric.c_MetricUnits.inch + ? Asc.c_oAscDocumentUnits.Inch + : value == Common.Utils.Metric.c_MetricUnits.pt + ? Asc.c_oAscDocumentUnits.Point + : Asc.c_oAscDocumentUnits.Millimeter + ); + this.getApplication().getController("RightMenu").updateMetricUnit(); + this.getApplication() + .getController("Toolbar") + .getView() + .updateMetricUnit(); + this.appOptions.canPreviewPrint && + this.getApplication() + .getController("Print") + .getView("PrintWithPreview") + .updateMetricUnit(); + }, + + onAdvancedOptions: function (type, advOptions, mode, formatOptions) { + if (this._state.openDlg) return; + + var me = this; + if (type == Asc.c_oAscAdvancedOptionsID.TXT) { + me._state.openDlg = new Common.Views.OpenDialog({ + title: Common.Views.OpenDialog.prototype.txtTitle.replace( + "%1", + "TXT" + ), + closable: mode == 2, // if save settings + type: Common.Utils.importTextType.TXT, + preview: advOptions.asc_getData(), + codepages: advOptions.asc_getCodePages(), + settings: advOptions.asc_getRecommendedSettings(), + api: me.api, + handler: function (result, settings) { + me.isShowOpenDialog = false; + if (result == "ok") { + if (me && me.api) { + if (mode == 2) { + formatOptions && + formatOptions.asc_setAdvancedOptions( + settings.textOptions + ); + me.api.asc_DownloadAs(formatOptions); + } else + me.api.asc_setAdvancedOptions( + type, + settings.textOptions + ); + me.loadMask && me.loadMask.show(); } - } - - langs.sort(function(a, b){ - if (a.value < b.value) return -1; - if (a.value > b.value) return 1; - return 0; - }); - - this.languages = langs; - window.styles_loaded && this.setLanguages(); - }, - - setLanguages: function() { - if (!this.languages || this.languages.length<1) { - this.loadLanguages([]); - } - if (this.languages && this.languages.length>0) { - this.getApplication().getController('DocumentHolder').getView().setLanguages(this.languages); - this.getApplication().getController('Statusbar').setLanguages(this.languages); - this.getApplication().getController('Common.Controllers.ReviewChanges').setLanguages(this.languages); - } - }, - - onInsertTable: function() { - this.getApplication().getController('RightMenu').onInsertTable(); - }, - - onInsertImage: function() { - this.getApplication().getController('RightMenu').onInsertImage(); - }, - - onInsertChart: function() { - this.getApplication().getController('RightMenu').onInsertChart(); - }, - - onInsertShape: function() { - this.getApplication().getController('RightMenu').onInsertShape(); - }, - - onInsertTextArt: function() { - this.getApplication().getController('RightMenu').onInsertTextArt(); - }, - - onInsertControl: function() { - this.getApplication().getController('RightMenu').onInsertControl(); - }, - - unitsChanged: function(m) { - var value = Common.localStorage.getItem("de-settings-unit"); - value = (value!==null) ? parseInt(value) : Common.Utils.Metric.getDefaultMetric(); - Common.Utils.Metric.setCurrentMetric(value); - Common.Utils.InternalSettings.set("de-settings-unit", value); - this.api.asc_SetDocumentUnits((value==Common.Utils.Metric.c_MetricUnits.inch) ? Asc.c_oAscDocumentUnits.Inch : ((value==Common.Utils.Metric.c_MetricUnits.pt) ? Asc.c_oAscDocumentUnits.Point : Asc.c_oAscDocumentUnits.Millimeter)); - this.getApplication().getController('RightMenu').updateMetricUnit(); - this.getApplication().getController('Toolbar').getView().updateMetricUnit(); - this.appOptions.canPreviewPrint && this.getApplication().getController('Print').getView('PrintWithPreview').updateMetricUnit(); - }, - - onAdvancedOptions: function(type, advOptions, mode, formatOptions) { - if (this._state.openDlg) return; - - var me = this; - if (type == Asc.c_oAscAdvancedOptionsID.TXT) { - me._state.openDlg = new Common.Views.OpenDialog({ - title: Common.Views.OpenDialog.prototype.txtTitle.replace('%1', 'TXT'), - closable: (mode==2), // if save settings - type: Common.Utils.importTextType.TXT, - preview: advOptions.asc_getData(), - codepages: advOptions.asc_getCodePages(), - settings: advOptions.asc_getRecommendedSettings(), - api: me.api, - handler: function (result, settings) { - me.isShowOpenDialog = false; - if (result == 'ok') { - if (me && me.api) { - if (mode==2) { - formatOptions && formatOptions.asc_setAdvancedOptions(settings.textOptions); - me.api.asc_DownloadAs(formatOptions); - } else - me.api.asc_setAdvancedOptions(type, settings.textOptions); - me.loadMask && me.loadMask.show(); - } - } - me._state.openDlg = null; - } - }); - } else if (type == Asc.c_oAscAdvancedOptionsID.DRM) { - me._state.openDlg = new Common.Views.OpenDialog({ - title: Common.Views.OpenDialog.prototype.txtTitleProtected, - closeFile: me.appOptions.canRequestClose, - type: Common.Utils.importTextType.DRM, - warning: !(me.appOptions.isDesktopApp && me.appOptions.isOffline) && (typeof advOptions == 'string'), - warningMsg: advOptions, - validatePwd: !!me._state.isDRM, - handler: function (result, value) { - me.isShowOpenDialog = false; - if (result == 'ok') { - if (me.api) { - me.api.asc_setAdvancedOptions(type, value.drmOptions); - me.loadMask && me.loadMask.show(); - } - } else { - Common.Gateway.requestClose(); - Common.Controllers.Desktop.requestClose(); - } - me._state.openDlg = null; - } - }); - me._state.isDRM = true; - } - if (me._state.openDlg) { - this.isShowOpenDialog = true; - this.loadMask && this.loadMask.hide(); - this.onLongActionEnd(Asc.c_oAscAsyncActionType.BlockInteraction, LoadingDocument); - me._state.openDlg.show(); - } - }, - - onTryUndoInFastCollaborative: function() { - if (!Common.localStorage.getBool("de-hide-try-undoredo")) - Common.UI.info({ - width: 500, - msg: this.appOptions.canChangeCoAuthoring ? this.textTryUndoRedo : this.textTryUndoRedoWarn, - iconCls: 'info', - buttons: this.appOptions.canChangeCoAuthoring ? ['custom', 'cancel'] : ['ok'], - primary: this.appOptions.canChangeCoAuthoring ? 'custom' : 'ok', - customButtonText: this.textStrict, - dontshow: true, - callback: _.bind(function(btn, dontshow){ - if (dontshow) Common.localStorage.setItem("de-hide-try-undoredo", 1); - if (btn == 'custom') { - Common.localStorage.setItem("de-settings-coauthmode", 0); - Common.Utils.InternalSettings.set("de-settings-coauthmode", false); - this.api.asc_SetFastCollaborative(false); - this._state.fastCoauth = false; - Common.localStorage.setItem("de-settings-showchanges-strict", 'last'); - this.api.SetCollaborativeMarksShowType(Asc.c_oAscCollaborativeMarksShowType.LastChanges); - this.getApplication().getController('Common.Controllers.ReviewChanges').applySettings(); - } - this.onEditComplete(); - }, this) - }); - }, - - onAuthParticipantsChanged: function(users) { - var length = 0; - _.each(users, function(item){ - if (!item.asc_getView()) - length++; - }); - this._state.usersCount = length; - }, - - onUserConnection: function(change){ - if (change && this.appOptions.user.guest && this.appOptions.canRenameAnonymous && (change.asc_getIdOriginal() == this.appOptions.user.id)) { // change name of the current user - var name = change.asc_getUserName(); - if (name && name !== AscCommon.UserInfoParser.getCurrentName() ) { - this._renameDialog && this._renameDialog.close(); - AscCommon.UserInfoParser.setCurrentName(name); - appHeader.setUserName(AscCommon.UserInfoParser.getParsedName(name)); - - var idx1 = name.lastIndexOf('('), - idx2 = name.lastIndexOf(')'), - str = (idx1>0) && (idx1 0 && idx1 < idx2 ? name.substring(0, idx1 - 1) : ""; + if (Common.localStorage.getItem("guest-username") !== null) { + Common.localStorage.setItem("guest-username", str); } - }, - - applySettings: function() { - if (this.appOptions.isEdit && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { - var oldval = this._state.fastCoauth; - this._state.fastCoauth = Common.localStorage.getBool("de-settings-coauthmode", true); - if (this._state.fastCoauth && !oldval) - this.synchronizeChanges(); - } - if (this.appOptions.canForcesave) { - this.appOptions.forcesave = Common.localStorage.getBool("de-settings-forcesave", this.appOptions.canForcesave); - Common.Utils.InternalSettings.set("de-settings-forcesave", this.appOptions.forcesave); - this.api.asc_setIsForceSaveOnUserSave(this.appOptions.forcesave); - } - }, - - onDocumentName: function(name) { - appHeader.setDocumentCaption(name); - this.updateWindowTitle(true); - }, - - onMeta: function(meta) { - appHeader.setDocumentCaption(meta.title); - this.updateWindowTitle(true); - this.document.title = meta.title; - - var filemenu = this.getApplication().getController('LeftMenu').getView('LeftMenu').getMenu('file'); - filemenu.loadDocument({doc:this.document}); - filemenu.panels && filemenu.panels['info'] && filemenu.panels['info'].updateInfo(this.document); - this.getApplication().getController('Common.Controllers.ReviewChanges').loadDocument({doc:this.document}); - Common.Gateway.metaChange(meta); - - if (this.appOptions.wopi) { - var idx = meta.title.lastIndexOf('.'); - Common.Gateway.requestRename(idx>0 ? meta.title.substring(0, idx) : meta.title); - } - }, - - onPrint: function() { - if (!this.appOptions.canPrint || Common.Utils.ModalWindow.isVisible()) return; - Common.NotificationCenter.trigger('file:print'); - Common.component.Analytics.trackEvent('Print'); - }, - - onPrintUrl: function(url) { - if (this.iframePrint) { - this.iframePrint.parentNode.removeChild(this.iframePrint); - this.iframePrint = null; - } - if (!this.iframePrint) { - var me = this; - this.iframePrint = document.createElement("iframe"); - this.iframePrint.id = "id-print-frame"; - this.iframePrint.style.display = 'none'; - this.iframePrint.style.visibility = "hidden"; - this.iframePrint.style.position = "fixed"; - this.iframePrint.style.right = "0"; - this.iframePrint.style.bottom = "0"; - document.body.appendChild(this.iframePrint); - this.iframePrint.onload = function() { - try { - me.iframePrint.contentWindow.focus(); - me.iframePrint.contentWindow.print(); - me.iframePrint.contentWindow.blur(); - window.focus(); - } catch (e) { - me.api.asc_DownloadAs(new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.PDF)); - } - }; - } - if (url) this.iframePrint.src = url; - }, - - onPrintQuick: function() { - if (!this.appOptions.canQuickPrint) return; - - var value = Common.localStorage.getBool("de-hide-quick-print-warning"), - me = this, - handler = function () { - var printopt = new Asc.asc_CAdjustPrint(); - printopt.asc_setNativeOptions({quickPrint: true}); - var opts = new Asc.asc_CDownloadOptions(); - opts.asc_setAdvancedOptions(printopt); - me.api.asc_Print(opts); - Common.component.Analytics.trackEvent('Print'); - }; - - if (value) { - handler.call(this); - } else { - Common.UI.warning({ - msg: this.textTryQuickPrint, - buttons: ['yes', 'no'], - primary: 'yes', - dontshow: true, - maxwidth: 500, - callback: function(btn, dontshow){ - dontshow && Common.localStorage.setBool("de-hide-quick-print-warning", true); - if (btn === 'yes') { - setTimeout(handler, 1); - } - } - }); + Common.Utils.InternalSettings.set("guest-username", str); + } + } + }, + + applySettings: function () { + if ( + this.appOptions.isEdit && + !this.appOptions.isOffline && + this.appOptions.canCoAuthoring + ) { + var oldval = this._state.fastCoauth; + this._state.fastCoauth = Common.localStorage.getBool( + "de-settings-coauthmode", + true + ); + if (this._state.fastCoauth && !oldval) this.synchronizeChanges(); + } + if (this.appOptions.canForcesave) { + this.appOptions.forcesave = Common.localStorage.getBool( + "de-settings-forcesave", + this.appOptions.canForcesave + ); + Common.Utils.InternalSettings.set( + "de-settings-forcesave", + this.appOptions.forcesave + ); + this.api.asc_setIsForceSaveOnUserSave(this.appOptions.forcesave); + } + }, + + onDocumentName: function (name) { + appHeader.setDocumentCaption(name); + this.updateWindowTitle(true); + }, + + onMeta: function (meta) { + appHeader.setDocumentCaption(meta.title); + this.updateWindowTitle(true); + this.document.title = meta.title; + + var filemenu = this.getApplication() + .getController("LeftMenu") + .getView("LeftMenu") + .getMenu("file"); + filemenu.loadDocument({ doc: this.document }); + filemenu.panels && + filemenu.panels["info"] && + filemenu.panels["info"].updateInfo(this.document); + this.getApplication() + .getController("Common.Controllers.ReviewChanges") + .loadDocument({ doc: this.document }); + Common.Gateway.metaChange(meta); + + if (this.appOptions.wopi) { + var idx = meta.title.lastIndexOf("."); + Common.Gateway.requestRename( + idx > 0 ? meta.title.substring(0, idx) : meta.title + ); + } + }, + + onPrint: function () { + if ( + !this.appOptions.canPrint || + Common.Utils.ModalWindow.isVisible() + ) + return; + Common.NotificationCenter.trigger("file:print"); + Common.component.Analytics.trackEvent("Print"); + }, + + onPrintUrl: function (url) { + if (this.iframePrint) { + this.iframePrint.parentNode.removeChild(this.iframePrint); + this.iframePrint = null; + } + if (!this.iframePrint) { + var me = this; + this.iframePrint = document.createElement("iframe"); + this.iframePrint.id = "id-print-frame"; + this.iframePrint.style.display = "none"; + this.iframePrint.style.visibility = "hidden"; + this.iframePrint.style.position = "fixed"; + this.iframePrint.style.right = "0"; + this.iframePrint.style.bottom = "0"; + document.body.appendChild(this.iframePrint); + this.iframePrint.onload = function () { + try { + me.iframePrint.contentWindow.focus(); + me.iframePrint.contentWindow.print(); + me.iframePrint.contentWindow.blur(); + window.focus(); + } catch (e) { + me.api.asc_DownloadAs( + new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.PDF) + ); } - }, - - onClearDummyComment: function() { - this.dontCloseDummyComment = false; - }, - - onShowDummyComment: function() { - this.beforeShowDummyComment = true; - }, - - DisableMailMerge: function() { - this.appOptions.mergeFolderUrl = ""; - var toolbarController = this.getApplication().getController('Toolbar'); - toolbarController && toolbarController.DisableMailMerge(); - }, - - DisableVersionHistory: function() { - this.editorConfig.canUseHistory = false; - this.appOptions.canUseHistory = false; - }, - - onConvertEquationToMath: function(equation) { - var me = this, - win; - var msg = this.textConvertEquation + '

    ' + this.textLearnMore + ''; - win = Common.UI.warning({ - width: 500, - msg: msg, - buttons: ['yes', 'cancel'], - primary: 'yes', - dontshow: true, - textDontShow: this.textApplyAll, - callback: _.bind(function(btn, dontshow){ - if (btn == 'yes') { - this.api.asc_ConvertEquationToMath(equation, dontshow); - } - this.onEditComplete(); - }, this) - }); - win.$window.find('#id-equation-convert-help').on('click', function (e) { - win && win.close(); - me.getApplication().getController('LeftMenu').getView('LeftMenu').showMenu('file:help', 'UsageInstructions\/InsertEquation.htm#convertequation'); - }) - }, - - warningDocumentIsLocked: function() { - var me = this; - var _disable_ui = function (disable) { - me.disableEditing(disable, true); - }; - - Common.Utils.warningDocumentIsLocked({disablefunc: _disable_ui}); - }, - - onRunAutostartMacroses: function() { - var me = this, - enable = !this.editorConfig.customization || (this.editorConfig.customization.macros!==false); - if (enable) { - var value = Common.Utils.InternalSettings.get("de-macros-mode"); - if (value==1) - this.api.asc_runAutostartMacroses(); - else if (value === 0) { - Common.UI.warning({ - msg: this.textHasMacros + '
    ', - buttons: ['yes', 'no'], - primary: 'yes', - dontshow: true, - textDontShow: this.textRemember, - callback: function(btn, dontshow){ - if (dontshow) { - Common.Utils.InternalSettings.set("de-macros-mode", (btn == 'yes') ? 1 : 2); - Common.localStorage.setItem("de-macros-mode", (btn == 'yes') ? 1 : 2); - } - if (btn == 'yes') { - setTimeout(function() { - me.api.asc_runAutostartMacroses(); - }, 1); - } - } - }); - } + }; + } + if (url) this.iframePrint.src = url; + }, + + onPrintQuick: function () { + if (!this.appOptions.canQuickPrint) return; + + var value = Common.localStorage.getBool( + "de-hide-quick-print-warning" + ), + me = this, + handler = function () { + var printopt = new Asc.asc_CAdjustPrint(); + printopt.asc_setNativeOptions({ quickPrint: true }); + var opts = new Asc.asc_CDownloadOptions(); + opts.asc_setAdvancedOptions(printopt); + me.api.asc_Print(opts); + Common.component.Analytics.trackEvent("Print"); + }; + + if (value) { + handler.call(this); + } else { + Common.UI.warning({ + msg: this.textTryQuickPrint, + buttons: ["yes", "no"], + primary: "yes", + dontshow: true, + maxwidth: 500, + callback: function (btn, dontshow) { + dontshow && + Common.localStorage.setBool( + "de-hide-quick-print-warning", + true + ); + if (btn === "yes") { + setTimeout(handler, 1); + } + }, + }); + } + }, + + onClearDummyComment: function () { + this.dontCloseDummyComment = false; + }, + + onShowDummyComment: function () { + this.beforeShowDummyComment = true; + }, + + DisableMailMerge: function () { + this.appOptions.mergeFolderUrl = ""; + var toolbarController = + this.getApplication().getController("Toolbar"); + toolbarController && toolbarController.DisableMailMerge(); + }, + + DisableVersionHistory: function () { + this.editorConfig.canUseHistory = false; + this.appOptions.canUseHistory = false; + }, + + onConvertEquationToMath: function (equation) { + var me = this, + win; + var msg = + this.textConvertEquation + + '

    ' + + this.textLearnMore + + ""; + win = Common.UI.warning({ + width: 500, + msg: msg, + buttons: ["yes", "cancel"], + primary: "yes", + dontshow: true, + textDontShow: this.textApplyAll, + callback: _.bind(function (btn, dontshow) { + if (btn == "yes") { + this.api.asc_ConvertEquationToMath(equation, dontshow); } - }, - - onMacrosPermissionRequest: function(url, callback) { - if (url && callback) { - this.stackMacrosRequests.push({url: url, callback: callback}); - if (this.stackMacrosRequests.length>1) { - return; + this.onEditComplete(); + }, this), + }); + win.$window + .find("#id-equation-convert-help") + .on("click", function (e) { + win && win.close(); + me.getApplication() + .getController("LeftMenu") + .getView("LeftMenu") + .showMenu( + "file:help", + "UsageInstructions/InsertEquation.htm#convertequation" + ); + }); + }, + + warningDocumentIsLocked: function () { + var me = this; + var _disable_ui = function (disable) { + me.disableEditing(disable, true); + }; + + Common.Utils.warningDocumentIsLocked({ disablefunc: _disable_ui }); + }, + + onRunAutostartMacroses: function () { + var me = this, + enable = + !this.editorConfig.customization || + this.editorConfig.customization.macros !== false; + if (enable) { + var value = Common.Utils.InternalSettings.get("de-macros-mode"); + if (value == 1) this.api.asc_runAutostartMacroses(); + else if (value === 0) { + Common.UI.warning({ + msg: this.textHasMacros + "
    ", + buttons: ["yes", "no"], + primary: "yes", + dontshow: true, + textDontShow: this.textRemember, + callback: function (btn, dontshow) { + if (dontshow) { + Common.Utils.InternalSettings.set( + "de-macros-mode", + btn == "yes" ? 1 : 2 + ); + Common.localStorage.setItem( + "de-macros-mode", + btn == "yes" ? 1 : 2 + ); } - } else if (this.stackMacrosRequests.length>0) { - url = this.stackMacrosRequests[0].url; - callback = this.stackMacrosRequests[0].callback; - } else - return; - - var me = this; - var value = Common.Utils.InternalSettings.get("de-allow-macros-request"); - if (value>0) { - callback && callback(value === 1); - this.stackMacrosRequests.shift(); - this.onMacrosPermissionRequest(); - } else { - Common.UI.warning({ - msg: this.textRequestMacros.replace('%1', url), - buttons: ['yes', 'no'], - primary: 'yes', - dontshow: true, - textDontShow: this.textRememberMacros, - maxwidth: 600, - callback: function(btn, dontshow){ - if (dontshow) { - Common.Utils.InternalSettings.set("de-allow-macros-request", (btn == 'yes') ? 1 : 2); - Common.localStorage.setItem("de-allow-macros-request", (btn == 'yes') ? 1 : 2); - } - setTimeout(function() { - if (callback) callback(btn == 'yes'); - me.stackMacrosRequests.shift(); - me.onMacrosPermissionRequest(); - }, 1); - } - }); - } - }, - - loadAutoCorrectSettings: function() { - // autocorrection - var me = this; - var value = Common.localStorage.getItem("de-settings-math-correct-add"); - Common.Utils.InternalSettings.set("de-settings-math-correct-add", value); - var arrAdd = value ? JSON.parse(value) : []; - value = Common.localStorage.getItem("de-settings-math-correct-rem"); - Common.Utils.InternalSettings.set("de-settings-math-correct-rem", value); - var arrRem = value ? JSON.parse(value) : []; - value = Common.localStorage.getBool("de-settings-math-correct-replace-type", true); // replace on type - Common.Utils.InternalSettings.set("de-settings-math-correct-replace-type", value); - me.api.asc_refreshOnStartAutoCorrectMathSymbols(arrRem, arrAdd, value); - - value = Common.localStorage.getItem("de-settings-rec-functions-add"); - Common.Utils.InternalSettings.set("de-settings-rec-functions-add", value); - arrAdd = value ? JSON.parse(value) : []; - value = Common.localStorage.getItem("de-settings-rec-functions-rem"); - Common.Utils.InternalSettings.set("de-settings-rec-functions-rem", value); - arrRem = value ? JSON.parse(value) : []; - me.api.asc_refreshOnStartAutoCorrectMathFunctions(arrRem, arrAdd); - - value = Common.localStorage.getBool("de-settings-autoformat-bulleted", true); - Common.Utils.InternalSettings.set("de-settings-autoformat-bulleted", value); - me.api.asc_SetAutomaticBulletedLists(value); - - value = Common.localStorage.getBool("de-settings-autoformat-numbered", true); - Common.Utils.InternalSettings.set("de-settings-autoformat-numbered", value); - me.api.asc_SetAutomaticNumberedLists(value); - - value = Common.localStorage.getBool("de-settings-autoformat-smart-quotes", true); - Common.Utils.InternalSettings.set("de-settings-autoformat-smart-quotes", value); - me.api.asc_SetAutoCorrectSmartQuotes(value); - - value = Common.localStorage.getBool("de-settings-autoformat-hyphens", true); - Common.Utils.InternalSettings.set("de-settings-autoformat-hyphens", value); - me.api.asc_SetAutoCorrectHyphensWithDash(value); - - value = Common.localStorage.getItem("de-settings-letter-exception-sentence"); - value = value !== null ? parseInt(value) != 0 : Common.localStorage.getBool("de-settings-autoformat-fl-sentence", true); - Common.Utils.InternalSettings.set("de-settings-letter-exception-sentence", value); - me.api.asc_SetAutoCorrectFirstLetterOfSentences(value); - - value = Common.localStorage.getItem("de-settings-letter-exception-cells"); - value = value !== null ? parseInt(value) != 0 : Common.localStorage.getBool("de-settings-autoformat-fl-cells", true); - Common.Utils.InternalSettings.set("de-settings-letter-exception-cells", value); - me.api.asc_SetAutoCorrectFirstLetterOfCells(value); - - [0x0409, 0x0419].forEach(function(lang) { - var apiFlManager = me.api.asc_GetAutoCorrectSettings().get_FirstLetterExceptionManager(); - - value = Common.localStorage.getItem("de-settings-letter-exception-add-" + lang); - Common.Utils.InternalSettings.set("de-settings-letter-exception-add-" + lang, value); - arrAdd = value ? JSON.parse(value) : []; - - value = Common.localStorage.getItem("de-settings-letter-exception-rem-" + lang); - Common.Utils.InternalSettings.set("de-settings-letter-exception-rem-" + lang, value); - arrRem = value ? JSON.parse(value) : []; - - var arrRes = _.union(apiFlManager.get_Exceptions(lang), arrAdd); - arrRes = _.difference(arrRes, arrRem); - arrRes.sort(); - apiFlManager.put_Exceptions(arrRes, lang); - }); - - value = Common.localStorage.getBool("de-settings-autoformat-hyperlink", true); - Common.Utils.InternalSettings.set("de-settings-autoformat-hyperlink", value); - me.api.asc_SetAutoCorrectHyperlinks(value); - - value = Common.localStorage.getBool("de-settings-autoformat-double-space", Common.Utils.isMac); // add period with double-space in MacOs by default - Common.Utils.InternalSettings.set("de-settings-autoformat-double-space", value); - me.api.asc_SetAutoCorrectDoubleSpaceWithPeriod(value); - }, - - showRenameUserDialog: function() { - if (this._renameDialog) return; - - var me = this; - this._renameDialog = new Common.Views.UserNameDialog({ - label: this.textRenameLabel, - error: this.textRenameError, - value: Common.Utils.InternalSettings.get("guest-username") || '', - check: Common.Utils.InternalSettings.get("save-guest-username") || false, - validation: function(value) { - return value.length<128 ? true : me.textLongName; - }, - handler: function(result, settings) { - if (result == 'ok') { - var name = settings.input ? settings.input + ' (' + me.appOptions.guestName + ')' : me.textAnonymous; - var _user = new Asc.asc_CUserInfo(); - _user.put_FullName(name); - - var docInfo = new Asc.asc_CDocInfo(); - docInfo.put_UserInfo(_user); - me.api.asc_changeDocInfo(docInfo); - - settings.checkbox ? Common.localStorage.setItem("guest-username", settings.input) : Common.localStorage.removeItem("guest-username"); - Common.Utils.InternalSettings.set("guest-username", settings.input); - Common.Utils.InternalSettings.set("save-guest-username", settings.checkbox); - } + if (btn == "yes") { + setTimeout(function () { + me.api.asc_runAutostartMacroses(); + }, 1); } + }, }); - this._renameDialog.on('close', function() { - me._renameDialog = undefined; - }); - this._renameDialog.show(Common.Utils.innerWidth() - this._renameDialog.options.width - 15, 30); - }, - - onGrabFocus: function() { - this.getApplication().getController('DocumentHolder').getView().focus(); - }, - - onLanguageLoaded: function() { - if (!Common.Locale.getCurrentLanguage()) { - Common.UI.warning({ - msg: this.errorLang, - buttons: [], - closable: false - }); - return false; + } + } + }, + + onMacrosPermissionRequest: function (url, callback) { + if (url && callback) { + this.stackMacrosRequests.push({ url: url, callback: callback }); + if (this.stackMacrosRequests.length > 1) { + return; + } + } else if (this.stackMacrosRequests.length > 0) { + url = this.stackMacrosRequests[0].url; + callback = this.stackMacrosRequests[0].callback; + } else return; + + var me = this; + var value = Common.Utils.InternalSettings.get( + "de-allow-macros-request" + ); + if (value > 0) { + callback && callback(value === 1); + this.stackMacrosRequests.shift(); + this.onMacrosPermissionRequest(); + } else { + Common.UI.warning({ + msg: this.textRequestMacros.replace("%1", url), + buttons: ["yes", "no"], + primary: "yes", + dontshow: true, + textDontShow: this.textRememberMacros, + maxwidth: 600, + callback: function (btn, dontshow) { + if (dontshow) { + Common.Utils.InternalSettings.set( + "de-allow-macros-request", + btn == "yes" ? 1 : 2 + ); + Common.localStorage.setItem( + "de-allow-macros-request", + btn == "yes" ? 1 : 2 + ); + } + setTimeout(function () { + if (callback) callback(btn == "yes"); + me.stackMacrosRequests.shift(); + me.onMacrosPermissionRequest(); + }, 1); + }, + }); + } + }, + + loadAutoCorrectSettings: function () { + // autocorrection + var me = this; + var value = Common.localStorage.getItem( + "de-settings-math-correct-add" + ); + Common.Utils.InternalSettings.set( + "de-settings-math-correct-add", + value + ); + var arrAdd = value ? JSON.parse(value) : []; + value = Common.localStorage.getItem("de-settings-math-correct-rem"); + Common.Utils.InternalSettings.set( + "de-settings-math-correct-rem", + value + ); + var arrRem = value ? JSON.parse(value) : []; + value = Common.localStorage.getBool( + "de-settings-math-correct-replace-type", + true + ); // replace on type + Common.Utils.InternalSettings.set( + "de-settings-math-correct-replace-type", + value + ); + me.api.asc_refreshOnStartAutoCorrectMathSymbols( + arrRem, + arrAdd, + value + ); + + value = Common.localStorage.getItem( + "de-settings-rec-functions-add" + ); + Common.Utils.InternalSettings.set( + "de-settings-rec-functions-add", + value + ); + arrAdd = value ? JSON.parse(value) : []; + value = Common.localStorage.getItem( + "de-settings-rec-functions-rem" + ); + Common.Utils.InternalSettings.set( + "de-settings-rec-functions-rem", + value + ); + arrRem = value ? JSON.parse(value) : []; + me.api.asc_refreshOnStartAutoCorrectMathFunctions(arrRem, arrAdd); + + value = Common.localStorage.getBool( + "de-settings-autoformat-bulleted", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-autoformat-bulleted", + value + ); + me.api.asc_SetAutomaticBulletedLists(value); + + value = Common.localStorage.getBool( + "de-settings-autoformat-numbered", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-autoformat-numbered", + value + ); + me.api.asc_SetAutomaticNumberedLists(value); + + value = Common.localStorage.getBool( + "de-settings-autoformat-smart-quotes", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-autoformat-smart-quotes", + value + ); + me.api.asc_SetAutoCorrectSmartQuotes(value); + + value = Common.localStorage.getBool( + "de-settings-autoformat-hyphens", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-autoformat-hyphens", + value + ); + me.api.asc_SetAutoCorrectHyphensWithDash(value); + + value = Common.localStorage.getItem( + "de-settings-letter-exception-sentence" + ); + value = + value !== null + ? parseInt(value) != 0 + : Common.localStorage.getBool( + "de-settings-autoformat-fl-sentence", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-letter-exception-sentence", + value + ); + me.api.asc_SetAutoCorrectFirstLetterOfSentences(value); + + value = Common.localStorage.getItem( + "de-settings-letter-exception-cells" + ); + value = + value !== null + ? parseInt(value) != 0 + : Common.localStorage.getBool( + "de-settings-autoformat-fl-cells", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-letter-exception-cells", + value + ); + me.api.asc_SetAutoCorrectFirstLetterOfCells(value); + + [0x0409, 0x0419].forEach(function (lang) { + var apiFlManager = me.api + .asc_GetAutoCorrectSettings() + .get_FirstLetterExceptionManager(); + + value = Common.localStorage.getItem( + "de-settings-letter-exception-add-" + lang + ); + Common.Utils.InternalSettings.set( + "de-settings-letter-exception-add-" + lang, + value + ); + arrAdd = value ? JSON.parse(value) : []; + + value = Common.localStorage.getItem( + "de-settings-letter-exception-rem-" + lang + ); + Common.Utils.InternalSettings.set( + "de-settings-letter-exception-rem-" + lang, + value + ); + arrRem = value ? JSON.parse(value) : []; + + var arrRes = _.union(apiFlManager.get_Exceptions(lang), arrAdd); + arrRes = _.difference(arrRes, arrRem); + arrRes.sort(); + apiFlManager.put_Exceptions(arrRes, lang); + }); + + value = Common.localStorage.getBool( + "de-settings-autoformat-hyperlink", + true + ); + Common.Utils.InternalSettings.set( + "de-settings-autoformat-hyperlink", + value + ); + me.api.asc_SetAutoCorrectHyperlinks(value); + + value = Common.localStorage.getBool( + "de-settings-autoformat-double-space", + Common.Utils.isMac + ); // add period with double-space in MacOs by default + Common.Utils.InternalSettings.set( + "de-settings-autoformat-double-space", + value + ); + me.api.asc_SetAutoCorrectDoubleSpaceWithPeriod(value); + }, + + showRenameUserDialog: function () { + if (this._renameDialog) return; + + var me = this; + this._renameDialog = new Common.Views.UserNameDialog({ + label: this.textRenameLabel, + error: this.textRenameError, + value: Common.Utils.InternalSettings.get("guest-username") || "", + check: + Common.Utils.InternalSettings.get("save-guest-username") || + false, + validation: function (value) { + return value.length < 128 ? true : me.textLongName; + }, + handler: function (result, settings) { + if (result == "ok") { + var name = settings.input + ? settings.input + " (" + me.appOptions.guestName + ")" + : me.textAnonymous; + var _user = new Asc.asc_CUserInfo(); + _user.put_FullName(name); + + var docInfo = new Asc.asc_CDocInfo(); + docInfo.put_UserInfo(_user); + me.api.asc_changeDocInfo(docInfo); + + settings.checkbox + ? Common.localStorage.setItem( + "guest-username", + settings.input + ) + : Common.localStorage.removeItem("guest-username"); + Common.Utils.InternalSettings.set( + "guest-username", + settings.input + ); + Common.Utils.InternalSettings.set( + "save-guest-username", + settings.checkbox + ); } - return true; - }, - - onConfirmAction: function(id, apiCallback, data) { - var me = this; - if (id == Asc.c_oAscConfirm.ConfirmMaxChangesSize) { - Common.UI.warning({ - title: this.notcriticalErrorTitle, - msg: this.confirmMaxChangesSize, - buttons: [{value: 'ok', caption: this.textUndo, primary: true}, {value: 'cancel', caption: this.textContinue}], - maxwidth: 600, - callback: _.bind(function(btn) { - if (apiCallback) { - apiCallback(btn === 'ok'); - } - me.onEditComplete(); - }, this) - }); - } - }, - - leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', - criticalErrorTitle: 'Error', - notcriticalErrorTitle: 'Warning', - errorDefaultMessage: 'Error code: %1', - criticalErrorExtText: 'Press "OK" to back to document list.', - openTitleText: 'Opening Document', - openTextText: 'Opening document...', - loadFontsTitleText: 'Loading Data', - loadFontsTextText: 'Loading data...', - loadImagesTitleText: 'Loading Images', - loadImagesTextText: 'Loading images...', - loadFontTitleText: 'Loading Data', - loadFontTextText: 'Loading data...', - loadImageTitleText: 'Loading Image', - loadImageTextText: 'Loading image...', - downloadTitleText: 'Downloading Document', - downloadTextText: 'Downloading document...', - printTitleText: 'Printing Document', - printTextText: 'Printing document...', - uploadImageTitleText: 'Uploading Image', - uploadImageTextText: 'Uploading image...', - uploadImageSizeMessage: 'Maximum image size limit exceeded.', - uploadImageExtMessage: 'Unknown image format.', - uploadImageFileCountMessage: 'No images uploaded.', - reloadButtonText: 'Reload Page', - unknownErrorText: 'Unknown error.', - convertationTimeoutText: 'Convertation timeout exceeded.', - downloadErrorText: 'Download failed.', - unsupportedBrowserErrorText: 'Your browser is not supported.', - splitMaxRowsErrorText: 'The number of rows must be less than %1', - splitMaxColsErrorText: 'The number of columns must be less than %1', - splitDividerErrorText: 'The number of rows must be a divisor of %1', - requestEditFailedTitleText: 'Access denied', - requestEditFailedMessageText: 'Someone is editing this document right now. Please try again later.', - txtNeedSynchronize: 'You have an updates', - textLoadingDocument: 'Loading document', - warnBrowserZoom: 'Your browser\'s current zoom setting is not fully supported. Please reset to the default zoom by pressing Ctrl+0.', - warnBrowserIE9: 'The application has low capabilities on IE9. Use IE10 or higher', - applyChangesTitleText: 'Loading Data', - applyChangesTextText: 'Loading data...', - errorKeyEncrypt: 'Unknown key descriptor', - errorKeyExpire: 'Key descriptor expired', - errorUsersExceed: 'Count of users was exceed', - errorCoAuthoringDisconnect: 'Server connection lost. You can\'t edit anymore.', - errorFilePassProtect: 'The file is password protected and cannot be opened.', - txtBasicShapes: 'Basic Shapes', - txtFiguredArrows: 'Figured Arrows', - txtMath: 'Math', - txtCharts: 'Charts', - txtStarsRibbons: 'Stars & Ribbons', - txtCallouts: 'Callouts', - txtButtons: 'Buttons', - txtRectangles: 'Rectangles', - txtLines: 'Lines', - txtEditingMode: 'Set editing mode...', - textAnonymous: 'Anonymous', - loadingDocumentTitleText: 'Loading document', - loadingDocumentTextText: 'Loading document...', - warnProcessRightsChange: 'You have been denied the right to edit the file.', - errorProcessSaveResult: 'Saving is failed.', - textCloseTip: 'Click to close the tip.', - textShape: 'Shape', - errorStockChart: 'Incorrect row order. To build a stock chart place the data on the sheet in the following order:
    opening price, max price, min price, closing price.', - errorDataRange: 'Incorrect data range.', - errorDatabaseConnection: 'External error.
    Database connection error. Please, contact support.', - titleUpdateVersion: 'Version changed', - errorUpdateVersion: 'The file version has been changed. The page will be reloaded.', - errorUserDrop: 'The file cannot be accessed right now.', - txtDiagramTitle: 'Chart Title', - txtXAxis: 'X Axis', - txtYAxis: 'Y Axis', - txtSeries: 'Seria', - errorMailMergeLoadFile: 'Loading the document failed. Please select a different file.', - mailMergeLoadFileText: 'Loading Data Source...', - mailMergeLoadFileTitle: 'Loading Data Source', - errorMailMergeSaveFile: 'Merge failed.', - downloadMergeText: 'Downloading...', - downloadMergeTitle: 'Downloading', - sendMergeTitle: 'Sending Merge', - sendMergeText: 'Sending Merge...', - txtArt: 'Your text here', - errorConnectToServer: 'The document could not be saved. Please check connection settings or contact your administrator.
    When you click the \'OK\' button, you will be prompted to download the document.', - textTryUndoRedo: 'The Undo/Redo functions are disabled for the Fast co-editing mode.
    Click the \'Strict mode\' button to switch to the Strict co-editing mode to edit the file without other users interference and send your changes only after you save them. You can switch between the co-editing modes using the editor Advanced settings.', - textStrict: 'Strict mode', - txtErrorLoadHistory: 'Loading history failed', - textBuyNow: 'Visit website', - textNoLicenseTitle: 'License limit reached', - textContactUs: 'Contact sales', - errorViewerDisconnect: 'Connection is lost. You can still view the document,
    but will not be able to download or print until the connection is restored and page is reloaded.', - warnLicenseExp: 'Your license has expired.
    Please update your license and refresh the page.', - titleLicenseExp: 'License expired', - openErrorText: 'An error has occurred while opening the file', - saveErrorText: 'An error has occurred while saving the file', - errorToken: 'The document security token is not correctly formed.
    Please contact your Document Server administrator.', - errorTokenExpire: 'The document security token has expired.
    Please contact your Document Server administrator.', - errorSessionAbsolute: 'The document editing session has expired. Please reload the page.', - errorSessionIdle: 'The document has not been edited for quite a long time. Please reload the page.', - errorSessionToken: 'The connection to the server has been interrupted. Please reload the page.', - errorAccessDeny: 'You are trying to perform an action you do not have rights for.
    Please contact your Document Server administrator.', - titleServerVersion: 'Editor updated', - errorServerVersion: 'The editor version has been updated. The page will be reloaded to apply the changes.', - textChangesSaved: 'All changes saved', - errorBadImageUrl: 'Image url is incorrect', - txtStyle_Normal: 'Normal', - txtStyle_No_Spacing: 'No Spacing', - txtStyle_Heading_1: 'Heading 1', - txtStyle_Heading_2: 'Heading 2', - txtStyle_Heading_3: 'Heading 3', - txtStyle_Heading_4: 'Heading 4', - txtStyle_Heading_5: 'Heading 5', - txtStyle_Heading_6: 'Heading 6', - txtStyle_Heading_7: 'Heading 7', - txtStyle_Heading_8: 'Heading 8', - txtStyle_Heading_9: 'Heading 9', - txtStyle_Title: 'Title', - txtStyle_Subtitle: 'Subtitle', - txtStyle_Quote: 'Quote', - txtStyle_Intense_Quote: 'Intense Quote', - txtStyle_List_Paragraph: 'List Paragraph', - txtStyle_footnote_text: 'Footnote Text', - saveTextText: 'Saving document...', - saveTitleText: 'Saving Document', - txtBookmarkError: "Error! Bookmark not defined.", - txtAbove: "above", - txtBelow: "below", - txtOnPage: "on page", - txtHeader: "Header", - txtFooter: "Footer", - txtSection: "-Section", - txtFirstPage: "First Page", - txtEvenPage: "Even Page", - txtOddPage: "Odd Page", - txtSameAsPrev: "Same as Previous", - txtCurrentDocument: "Current Document", - txtNoTableOfContents: "There are no headings in the document. Apply a heading style to the text so that it appears in the table of contents.", - txtTableOfContents: "Table of Contents", - errorForceSave: "An error occurred while saving the file. Please use the 'Download as' option to save the file to your computer hard drive or try again later.", - warnNoLicense: "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", - warnNoLicenseUsers: "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", - warnLicenseExceeded: "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact your administrator to learn more.", - warnLicenseUsersExceeded: "You've reached the user limit for %1 editors. Contact your administrator to learn more.", - errorDataEncrypted: 'Encrypted changes have been received, they cannot be deciphered.', - textClose: 'Close', - textPaidFeature: 'Paid feature', - scriptLoadError: 'The connection is too slow, some of the components could not be loaded. Please reload the page.', - errorEditingSaveas: 'An error occurred during the work with the document.
    Use the \'Save as...\' option to save the file backup copy to your computer hard drive.', - errorEditingDownloadas: 'An error occurred during the work with the document.
    Use the \'Download as...\' option to save the file backup copy to your computer hard drive.', - txtShape_textRect: 'Text Box', - txtShape_rect: 'Rectangle', - txtShape_ellipse: 'Ellipse', - txtShape_triangle: 'Triangle', - txtShape_rtTriangle: 'Right Triangle', - txtShape_parallelogram: 'Parallelogram', - txtShape_trapezoid: 'Trapezoid', - txtShape_diamond: 'Diamond', - txtShape_pentagon: 'Pentagon', - txtShape_hexagon: 'Hexagon', - txtShape_heptagon: 'Heptagon', - txtShape_octagon: 'Octagon', - txtShape_decagon: 'Decagon', - txtShape_dodecagon: 'Dodecagon', - txtShape_pie: 'Pie', - txtShape_chord: 'Chord', - txtShape_teardrop: 'Teardrop', - txtShape_frame: 'Frame', - txtShape_halfFrame: 'Half Frame', - txtShape_corner: 'Corner', - txtShape_diagStripe: 'Diagonal Stripe', - txtShape_plus: 'Plus', - txtShape_plaque: 'Sign', - txtShape_can: 'Can', - txtShape_cube: 'Cube', - txtShape_bevel: 'Bevel', - txtShape_donut: 'Donut', - txtShape_noSmoking: '"No" Symbol', - txtShape_blockArc: 'Block Arc', - txtShape_foldedCorner: 'Folded Corner', - txtShape_smileyFace: 'Smiley Face', - txtShape_heart: 'Heart', - txtShape_lightningBolt: 'Lightning Bolt', - txtShape_sun: 'Sun', - txtShape_moon: 'Moon', - txtShape_cloud: 'Cloud', - txtShape_arc: 'Arc', - txtShape_bracePair: 'Double Brace', - txtShape_leftBracket: 'Left Bracket', - txtShape_rightBracket: 'Right Bracket', - txtShape_leftBrace: 'Left Brace', - txtShape_rightBrace: 'Right Brace', - txtShape_rightArrow: 'Right Arrow', - txtShape_leftArrow: 'Left Arrow', - txtShape_upArrow: 'Up Arrow', - txtShape_downArrow: 'Down Arrow', - txtShape_leftRightArrow: 'Left Right Arrow', - txtShape_upDownArrow: 'Up Down Arrow', - txtShape_quadArrow: 'Quad Arrow', - txtShape_leftRightUpArrow: 'Left Right Up Arrow', - txtShape_bentArrow: 'Bent Arrow', - txtShape_uturnArrow: 'U-Turn Arrow', - txtShape_leftUpArrow: 'Left Up Arrow', - txtShape_bentUpArrow: 'Bent Up Arrow', - txtShape_curvedRightArrow: 'Curved Right Arrow', - txtShape_curvedLeftArrow: 'Curved Left Arrow', - txtShape_curvedUpArrow: 'Curved Up Arrow', - txtShape_curvedDownArrow: 'Curved Down Arrow', - txtShape_stripedRightArrow: 'Striped Right Arrow', - txtShape_notchedRightArrow: 'Notched Right Arrow', - txtShape_homePlate: 'Pentagon', - txtShape_chevron: 'Chevron', - txtShape_rightArrowCallout: 'Right Arrow Callout', - txtShape_downArrowCallout: 'Down Arrow Callout', - txtShape_leftArrowCallout: 'Left Arrow Callout', - txtShape_upArrowCallout: 'Up Arrow Callout', - txtShape_leftRightArrowCallout: 'Left Right Arrow Callout', - txtShape_quadArrowCallout: 'Quad Arrow Callout', - txtShape_circularArrow: 'Circular Arrow', - txtShape_mathPlus: 'Plus', - txtShape_mathMinus: 'Minus', - txtShape_mathMultiply: 'Multiply', - txtShape_mathDivide: 'Division', - txtShape_mathEqual: 'Equal', - txtShape_mathNotEqual: 'Not Equal', - txtShape_flowChartProcess: 'Flowchart: Process', - txtShape_flowChartAlternateProcess: 'Flowchart: Alternate Process', - txtShape_flowChartDecision: 'Flowchart: Decision', - txtShape_flowChartInputOutput: 'Flowchart: Data', - txtShape_flowChartPredefinedProcess: 'Flowchart: Predefined Process', - txtShape_flowChartInternalStorage: 'Flowchart: Internal Storage', - txtShape_flowChartDocument: 'Flowchart: Document', - txtShape_flowChartMultidocument: 'Flowchart: Multidocument ', - txtShape_flowChartTerminator: 'Flowchart: Terminator', - txtShape_flowChartPreparation: 'Flowchart: Preparation', - txtShape_flowChartManualInput: 'Flowchart: Manual Input', - txtShape_flowChartManualOperation: 'Flowchart: Manual Operation', - txtShape_flowChartConnector: 'Flowchart: Connector', - txtShape_flowChartOffpageConnector: 'Flowchart: Off-page Connector', - txtShape_flowChartPunchedCard: 'Flowchart: Card', - txtShape_flowChartPunchedTape: 'Flowchart: Punched Tape', - txtShape_flowChartSummingJunction: 'Flowchart: Summing Junction', - txtShape_flowChartOr: 'Flowchart: Or', - txtShape_flowChartCollate: 'Flowchart: Collate', - txtShape_flowChartSort: 'Flowchart: Sort', - txtShape_flowChartExtract: 'Flowchart: Extract', - txtShape_flowChartMerge: 'Flowchart: Merge', - txtShape_flowChartOnlineStorage: 'Flowchart: Stored Data', - txtShape_flowChartDelay: 'Flowchart: Delay', - txtShape_flowChartMagneticTape: 'Flowchart: Sequential Access Storage', - txtShape_flowChartMagneticDisk: 'Flowchart: Magnetic Disk', - txtShape_flowChartMagneticDrum: 'Flowchart: Direct Access Storage', - txtShape_flowChartDisplay: 'Flowchart: Display', - txtShape_irregularSeal1: 'Explosion 1', - txtShape_irregularSeal2: 'Explosion 2', - txtShape_star4: '4-Point Star', - txtShape_star5: '5-Point Star', - txtShape_star6: '6-Point Star', - txtShape_star7: '7-Point Star', - txtShape_star8: '8-Point Star', - txtShape_star10: '10-Point Star', - txtShape_star12: '12-Point Star', - txtShape_star16: '16-Point Star', - txtShape_star24: '24-Point Star', - txtShape_star32: '32-Point Star', - txtShape_ribbon2: 'Up Ribbon', - txtShape_ribbon: 'Down Ribbon', - txtShape_ellipseRibbon2: 'Curved Up Ribbon', - txtShape_ellipseRibbon: 'Curved Down Ribbon', - txtShape_verticalScroll: 'Vertical Scroll', - txtShape_horizontalScroll: 'Horizontal Scroll', - txtShape_wave: 'Wave', - txtShape_doubleWave: 'Double Wave', - txtShape_wedgeRectCallout: 'Rectangular Callout', - txtShape_wedgeRoundRectCallout: 'Rounded Rectangular Callout', - txtShape_wedgeEllipseCallout: 'Oval Callout', - txtShape_cloudCallout: 'Cloud Callout', - txtShape_borderCallout1: 'Line Callout 1', - txtShape_borderCallout2: 'Line Callout 2', - txtShape_borderCallout3: 'Line Callout 3', - txtShape_accentCallout1: 'Line Callout 1 (Accent Bar)', - txtShape_accentCallout2: 'Line Callout 2 (Accent Bar)', - txtShape_accentCallout3: 'Line Callout 3 (Accent Bar)', - txtShape_callout1: 'Line Callout 1 (No Border)', - txtShape_callout2: 'Line Callout 2 (No Border)', - txtShape_callout3: 'Line Callout 3 (No Border)', - txtShape_accentBorderCallout1: 'Line Callout 1 (Border and Accent Bar)', - txtShape_accentBorderCallout2: 'Line Callout 2 (Border and Accent Bar)', - txtShape_accentBorderCallout3: 'Line Callout 3 (Border and Accent Bar)', - txtShape_actionButtonBackPrevious: 'Back or Previous Button', - txtShape_actionButtonForwardNext: 'Forward or Next Button', - txtShape_actionButtonBeginning: 'Beginning Button', - txtShape_actionButtonEnd: 'End Button', - txtShape_actionButtonHome: 'Home Button', - txtShape_actionButtonInformation: 'Information Button', - txtShape_actionButtonReturn: 'Return Button', - txtShape_actionButtonMovie: 'Movie Button', - txtShape_actionButtonDocument: 'Document Button', - txtShape_actionButtonSound: 'Sound Button', - txtShape_actionButtonHelp: 'Help Button', - txtShape_actionButtonBlank: 'Blank Button', - txtShape_roundRect: 'Round Corner Rectangle', - txtShape_snip1Rect: 'Snip Single Corner Rectangle', - txtShape_snip2SameRect: 'Snip Same Side Corner Rectangle', - txtShape_snip2DiagRect: 'Snip Diagonal Corner Rectangle', - txtShape_snipRoundRect: 'Snip and Round Single Corner Rectangle', - txtShape_round1Rect: 'Round Single Corner Rectangle', - txtShape_round2SameRect: 'Round Same Side Corner Rectangle', - txtShape_round2DiagRect: 'Round Diagonal Corner Rectangle', - txtShape_line: 'Line', - txtShape_lineWithArrow: 'Arrow', - txtShape_lineWithTwoArrows: 'Double Arrow', - txtShape_bentConnector5: 'Elbow Connector', - txtShape_bentConnector5WithArrow: 'Elbow Arrow Connector', - txtShape_bentConnector5WithTwoArrows: 'Elbow Double-Arrow Connector', - txtShape_curvedConnector3: 'Curved Connector', - txtShape_curvedConnector3WithArrow: 'Curved Arrow Connector', - txtShape_curvedConnector3WithTwoArrows: 'Curved Double-Arrow Connector', - txtShape_spline: 'Curve', - txtShape_polyline1: 'Scribble', - txtShape_polyline2: 'Freeform', - txtSyntaxError: 'Syntax Error', - txtMissOperator: 'Missing Operator', - txtMissArg: 'Missing Argument', - txtTooLarge: 'Number Too Large To Format', - txtZeroDivide: 'Zero Divide', - txtNotInTable: 'Is Not In Table', - txtIndTooLarge: 'Index Too Large', - txtFormulaNotInTable: 'The Formula Not In Table', - txtTableInd: 'Table Index Cannot be Zero', - txtUndefBookmark: 'Undefined Bookmark', - txtEndOfFormula: 'Unexpected End of Formula', - errorEmailClient: 'No email client could be found', - textCustomLoader: 'Please note that according to the terms of the license you are not entitled to change the loader.
    Please contact our Sales Department to get a quote.', - txtHyperlink: 'Hyperlink', - waitText: 'Please, wait...', - errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
    Please contact your Document Server administrator for details.', - txtMainDocOnly: 'Error! Main Document Only.', - txtNotValidBookmark: 'Error! Not a valid bookmark self-reference.', - txtNoText: 'Error! No text of specified style in document.', - uploadDocSizeMessage: 'Maximum document size limit exceeded.', - uploadDocExtMessage: 'Unknown document format.', - uploadDocFileCountMessage: 'No documents uploaded.', - errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
    Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.', - txtChoose: 'Choose an item', - errorDirectUrl: 'Please verify the link to the document.
    This link must be a direct link to the file for downloading.', - txtStyle_Caption: 'Caption', - errorCompare: 'The Compare documents feature is not available in the co-editing mode.', - textConvertEquation: 'This equation was created with an old version of equation editor which is no longer supported. Converting this equation to Office Math ML format will make it editable.
    Do you want to convert this equation?', - textApplyAll: 'Apply to all equations', - textLearnMore: 'Learn More', - txtEnterDate: 'Enter a date', - txtTypeEquation: 'Type equation here', - textHasMacros: 'The file contains automatic macros.
    Do you want to run macros?', - textRemember: 'Remember my choice for all files', - warnLicenseLimitedRenewed: 'License needs to be renewed.
    You have a limited access to document editing functionality.
    Please contact your administrator to get full access', - warnLicenseLimitedNoAccess: 'License expired.
    You have no access to document editing functionality.
    Please contact your administrator.', - saveErrorTextDesktop: 'This file cannot be saved or created.
    Possible reasons are:
    1. The file is read-only.
    2. The file is being edited by other users.
    3. The disk is full or corrupted.', - errorComboSeries: 'To create a combination chart, select at least two series of data.', - errorSetPassword: 'Password could not be set.', - textRenameLabel: 'Enter a name to be used for collaboration', - textRenameError: 'User name must not be empty.', - textLongName: 'Enter a name that is less than 128 characters.', - textGuest: 'Guest', - errorSubmit: 'Submit failed.', - txtClickToLoad: 'Click to load image', - leavePageTextOnClose: 'All unsaved changes in this document will be lost.
    Click \'Cancel\' then \'Save\' to save them. Click \'OK\' to discard all the unsaved changes.', - textTryUndoRedoWarn: 'The Undo/Redo functions are disabled for the Fast co-editing mode.', - txtNone: 'None', - txtNoTableOfFigures: "No table of figures entries found.", - txtTableOfFigures: 'Table of figures', - txtStyle_endnote_text: 'Endnote Text', - txtTOCHeading: 'TOC Heading', - textDisconnect: 'Connection is lost', - textReconnect: 'Connection is restored', - errorLang: 'The interface language is not loaded.
    Please contact your Document Server administrator.', - errorLoadingFont: 'Fonts are not loaded.
    Please contact your Document Server administrator.', - errorEmptyTOC: 'Start creating a table of contents by applying a heading style from the Styles gallery to the selected text.', - errorNoTOC: 'There\'s no table of contents to update. You can insert one from the References tab.', - textRequestMacros: 'A macro makes a request to URL. Do you want to allow the request to the %1?', - textRememberMacros: 'Remember my choice for all macros', - errorTextFormWrongFormat: 'The value entered does not match the format of the field.', - errorPasswordIsNotCorrect: 'The password you supplied is not correct.
    Verify that the CAPS LOCK key is off and be sure to use the correct capitalization.', - confirmMaxChangesSize: 'The size of actions exceeds the limitation set for your server.
    Press "Undo" to cancel your last action or press "Continue" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).', - textUndo: 'Undo', - textContinue: 'Continue', - errorInconsistentExtDocx: 'An error has occurred while opening the file.
    The file content corresponds to text documents (e.g. docx), but the file has the inconsistent extension: %1.', - errorInconsistentExtXlsx: 'An error has occurred while opening the file.
    The file content corresponds to spreadsheets (e.g. xlsx), but the file has the inconsistent extension: %1.', - errorInconsistentExtPptx: 'An error has occurred while opening the file.
    The file content corresponds to presentations (e.g. pptx), but the file has the inconsistent extension: %1.', - errorInconsistentExtPdf: 'An error has occurred while opening the file.
    The file content corresponds to one of the following formats: pdf/djvu/xps/oxps, but the file has the inconsistent extension: %1.', - errorInconsistentExt: 'An error has occurred while opening the file.
    The file content does not match the file extension.', - errorCannotPasteImg: 'We can\'t paste this image from the Clipboard, but you can save it to your device and \ninsert it from there, or you can copy the image without text and paste it into the document.', - textTryQuickPrint: 'You have selected Quick print: the entire document will be printed on the last selected or default printer.
    Do you want to continue?', - textAnyone: 'Anyone', - textText: 'Text', - warnLicenseBefore: 'License not active.
    Please contact your administrator.', - titleLicenseNotActive: 'License not active', - warnLicenseAnonymous: 'Access denied for anonymous users. This document will be opened for viewing only.' - } - })(), DE.Controllers.Main || {})) -}); \ No newline at end of file + }, + }); + this._renameDialog.on("close", function () { + me._renameDialog = undefined; + }); + this._renameDialog.show( + Common.Utils.innerWidth() - this._renameDialog.options.width - 15, + 30 + ); + }, + + onGrabFocus: function () { + this.getApplication() + .getController("DocumentHolder") + .getView() + .focus(); + }, + + onLanguageLoaded: function () { + if (!Common.Locale.getCurrentLanguage()) { + Common.UI.warning({ + msg: this.errorLang, + buttons: [], + closable: false, + }); + return false; + } + return true; + }, + + onConfirmAction: function (id, apiCallback, data) { + var me = this; + if (id == Asc.c_oAscConfirm.ConfirmMaxChangesSize) { + Common.UI.warning({ + title: this.notcriticalErrorTitle, + msg: this.confirmMaxChangesSize, + buttons: [ + { value: "ok", caption: this.textUndo, primary: true }, + { value: "cancel", caption: this.textContinue }, + ], + maxwidth: 600, + callback: _.bind(function (btn) { + if (apiCallback) { + apiCallback(btn === "ok"); + } + me.onEditComplete(); + }, this), + }); + } + }, + + leavePageText: + "You have unsaved changes in this document. Click 'Stay on this Page' then 'Save' to save them. Click 'Leave this Page' to discard all the unsaved changes.", + criticalErrorTitle: "Error", + notcriticalErrorTitle: "Warning", + errorDefaultMessage: "Error code: %1", + criticalErrorExtText: 'Press "OK" to back to document list.', + openTitleText: "Opening Document", + openTextText: "Opening document...", + loadFontsTitleText: "Loading Data", + loadFontsTextText: "Loading data...", + loadImagesTitleText: "Loading Images", + loadImagesTextText: "Loading images...", + loadFontTitleText: "Loading Data", + loadFontTextText: "Loading data...", + loadImageTitleText: "Loading Image", + loadImageTextText: "Loading image...", + downloadTitleText: "Downloading Document", + downloadTextText: "Downloading document...", + printTitleText: "Printing Document", + printTextText: "Printing document...", + uploadImageTitleText: "Uploading Image", + uploadImageTextText: "Uploading image...", + uploadImageSizeMessage: "Maximum image size limit exceeded.", + uploadImageExtMessage: "Unknown image format.", + uploadImageFileCountMessage: "No images uploaded.", + reloadButtonText: "Reload Page", + unknownErrorText: "Unknown error.", + convertationTimeoutText: "Convertation timeout exceeded.", + downloadErrorText: "Download failed.", + unsupportedBrowserErrorText: "Your browser is not supported.", + splitMaxRowsErrorText: "The number of rows must be less than %1", + splitMaxColsErrorText: "The number of columns must be less than %1", + splitDividerErrorText: "The number of rows must be a divisor of %1", + requestEditFailedTitleText: "Access denied", + requestEditFailedMessageText: + "Someone is editing this document right now. Please try again later.", + txtNeedSynchronize: "You have an updates", + textLoadingDocument: "Loading document", + warnBrowserZoom: + "Your browser's current zoom setting is not fully supported. Please reset to the default zoom by pressing Ctrl+0.", + warnBrowserIE9: + "The application has low capabilities on IE9. Use IE10 or higher", + applyChangesTitleText: "Loading Data", + applyChangesTextText: "Loading data...", + errorKeyEncrypt: "Unknown key descriptor", + errorKeyExpire: "Key descriptor expired", + errorUsersExceed: "Count of users was exceed", + errorCoAuthoringDisconnect: + "Server connection lost. You can't edit anymore.", + errorFilePassProtect: + "The file is password protected and cannot be opened.", + txtBasicShapes: "Basic Shapes", + txtFiguredArrows: "Figured Arrows", + txtMath: "Math", + txtCharts: "Charts", + txtStarsRibbons: "Stars & Ribbons", + txtCallouts: "Callouts", + txtButtons: "Buttons", + txtRectangles: "Rectangles", + txtLines: "Lines", + txtEditingMode: "Set editing mode...", + textAnonymous: "Anonymous", + loadingDocumentTitleText: "Loading document", + loadingDocumentTextText: "Loading document...", + warnProcessRightsChange: + "You have been denied the right to edit the file.", + errorProcessSaveResult: "Saving is failed.", + textCloseTip: "Click to close the tip.", + textShape: "Shape", + errorStockChart: + "Incorrect row order. To build a stock chart place the data on the sheet in the following order:
    opening price, max price, min price, closing price.", + errorDataRange: "Incorrect data range.", + errorDatabaseConnection: + "External error.
    Database connection error. Please, contact support.", + titleUpdateVersion: "Version changed", + errorUpdateVersion: + "The file version has been changed. The page will be reloaded.", + errorUserDrop: "The file cannot be accessed right now.", + txtDiagramTitle: "Chart Title", + txtXAxis: "X Axis", + txtYAxis: "Y Axis", + txtSeries: "Seria", + errorMailMergeLoadFile: + "Loading the document failed. Please select a different file.", + mailMergeLoadFileText: "Loading Data Source...", + mailMergeLoadFileTitle: "Loading Data Source", + errorMailMergeSaveFile: "Merge failed.", + downloadMergeText: "Downloading...", + downloadMergeTitle: "Downloading", + sendMergeTitle: "Sending Merge", + sendMergeText: "Sending Merge...", + txtArt: "Your text here", + errorConnectToServer: + "The document could not be saved. Please check connection settings or contact your administrator.
    When you click the 'OK' button, you will be prompted to download the document.", + textTryUndoRedo: + "The Undo/Redo functions are disabled for the Fast co-editing mode.
    Click the 'Strict mode' button to switch to the Strict co-editing mode to edit the file without other users interference and send your changes only after you save them. You can switch between the co-editing modes using the editor Advanced settings.", + textStrict: "Strict mode", + txtErrorLoadHistory: "Loading history failed", + textBuyNow: "Visit website", + textNoLicenseTitle: "License limit reached", + textContactUs: "Contact sales", + errorViewerDisconnect: + "Connection is lost. You can still view the document,
    but will not be able to download or print until the connection is restored and page is reloaded.", + warnLicenseExp: + "Your license has expired.
    Please update your license and refresh the page.", + titleLicenseExp: "License expired", + openErrorText: "An error has occurred while opening the file", + saveErrorText: "An error has occurred while saving the file", + errorToken: + "The document security token is not correctly formed.
    Please contact your Document Server administrator.", + errorTokenExpire: + "The document security token has expired.
    Please contact your Document Server administrator.", + errorSessionAbsolute: + "The document editing session has expired. Please reload the page.", + errorSessionIdle: + "The document has not been edited for quite a long time. Please reload the page.", + errorSessionToken: + "The connection to the server has been interrupted. Please reload the page.", + errorAccessDeny: + "You are trying to perform an action you do not have rights for.
    Please contact your Document Server administrator.", + titleServerVersion: "Editor updated", + errorServerVersion: + "The editor version has been updated. The page will be reloaded to apply the changes.", + textChangesSaved: "All changes saved", + errorBadImageUrl: "Image url is incorrect", + txtStyle_Normal: "Normal", + txtStyle_No_Spacing: "No Spacing", + txtStyle_Heading_1: "Heading 1", + txtStyle_Heading_2: "Heading 2", + txtStyle_Heading_3: "Heading 3", + txtStyle_Heading_4: "Heading 4", + txtStyle_Heading_5: "Heading 5", + txtStyle_Heading_6: "Heading 6", + txtStyle_Heading_7: "Heading 7", + txtStyle_Heading_8: "Heading 8", + txtStyle_Heading_9: "Heading 9", + txtStyle_Title: "Title", + txtStyle_Subtitle: "Subtitle", + txtStyle_Quote: "Quote", + txtStyle_Intense_Quote: "Intense Quote", + txtStyle_List_Paragraph: "List Paragraph", + txtStyle_footnote_text: "Footnote Text", + saveTextText: "Saving document...", + saveTitleText: "Saving Document", + txtBookmarkError: "Error! Bookmark not defined.", + txtAbove: "above", + txtBelow: "below", + txtOnPage: "on page", + txtHeader: "Header", + txtFooter: "Footer", + txtSection: "-Section", + txtFirstPage: "First Page", + txtEvenPage: "Even Page", + txtOddPage: "Odd Page", + txtSameAsPrev: "Same as Previous", + txtCurrentDocument: "Current Document", + txtNoTableOfContents: + "There are no headings in the document. Apply a heading style to the text so that it appears in the table of contents.", + txtTableOfContents: "Table of Contents", + errorForceSave: + "An error occurred while saving the file. Please use the 'Download as' option to save the file to your computer hard drive or try again later.", + warnNoLicense: + "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact %1 sales team for personal upgrade terms.", + warnNoLicenseUsers: + "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", + warnLicenseExceeded: + "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.
    Contact your administrator to learn more.", + warnLicenseUsersExceeded: + "You've reached the user limit for %1 editors. Contact your administrator to learn more.", + errorDataEncrypted: + "Encrypted changes have been received, they cannot be deciphered.", + textClose: "Close", + textPaidFeature: "Paid feature", + scriptLoadError: + "The connection is too slow, some of the components could not be loaded. Please reload the page.", + errorEditingSaveas: + "An error occurred during the work with the document.
    Use the 'Save as...' option to save the file backup copy to your computer hard drive.", + errorEditingDownloadas: + "An error occurred during the work with the document.
    Use the 'Download as...' option to save the file backup copy to your computer hard drive.", + txtShape_textRect: "Text Box", + txtShape_rect: "Rectangle", + txtShape_ellipse: "Ellipse", + txtShape_triangle: "Triangle", + txtShape_rtTriangle: "Right Triangle", + txtShape_parallelogram: "Parallelogram", + txtShape_trapezoid: "Trapezoid", + txtShape_diamond: "Diamond", + txtShape_pentagon: "Pentagon", + txtShape_hexagon: "Hexagon", + txtShape_heptagon: "Heptagon", + txtShape_octagon: "Octagon", + txtShape_decagon: "Decagon", + txtShape_dodecagon: "Dodecagon", + txtShape_pie: "Pie", + txtShape_chord: "Chord", + txtShape_teardrop: "Teardrop", + txtShape_frame: "Frame", + txtShape_halfFrame: "Half Frame", + txtShape_corner: "Corner", + txtShape_diagStripe: "Diagonal Stripe", + txtShape_plus: "Plus", + txtShape_plaque: "Sign", + txtShape_can: "Can", + txtShape_cube: "Cube", + txtShape_bevel: "Bevel", + txtShape_donut: "Donut", + txtShape_noSmoking: '"No" Symbol', + txtShape_blockArc: "Block Arc", + txtShape_foldedCorner: "Folded Corner", + txtShape_smileyFace: "Smiley Face", + txtShape_heart: "Heart", + txtShape_lightningBolt: "Lightning Bolt", + txtShape_sun: "Sun", + txtShape_moon: "Moon", + txtShape_cloud: "Cloud", + txtShape_arc: "Arc", + txtShape_bracePair: "Double Brace", + txtShape_leftBracket: "Left Bracket", + txtShape_rightBracket: "Right Bracket", + txtShape_leftBrace: "Left Brace", + txtShape_rightBrace: "Right Brace", + txtShape_rightArrow: "Right Arrow", + txtShape_leftArrow: "Left Arrow", + txtShape_upArrow: "Up Arrow", + txtShape_downArrow: "Down Arrow", + txtShape_leftRightArrow: "Left Right Arrow", + txtShape_upDownArrow: "Up Down Arrow", + txtShape_quadArrow: "Quad Arrow", + txtShape_leftRightUpArrow: "Left Right Up Arrow", + txtShape_bentArrow: "Bent Arrow", + txtShape_uturnArrow: "U-Turn Arrow", + txtShape_leftUpArrow: "Left Up Arrow", + txtShape_bentUpArrow: "Bent Up Arrow", + txtShape_curvedRightArrow: "Curved Right Arrow", + txtShape_curvedLeftArrow: "Curved Left Arrow", + txtShape_curvedUpArrow: "Curved Up Arrow", + txtShape_curvedDownArrow: "Curved Down Arrow", + txtShape_stripedRightArrow: "Striped Right Arrow", + txtShape_notchedRightArrow: "Notched Right Arrow", + txtShape_homePlate: "Pentagon", + txtShape_chevron: "Chevron", + txtShape_rightArrowCallout: "Right Arrow Callout", + txtShape_downArrowCallout: "Down Arrow Callout", + txtShape_leftArrowCallout: "Left Arrow Callout", + txtShape_upArrowCallout: "Up Arrow Callout", + txtShape_leftRightArrowCallout: "Left Right Arrow Callout", + txtShape_quadArrowCallout: "Quad Arrow Callout", + txtShape_circularArrow: "Circular Arrow", + txtShape_mathPlus: "Plus", + txtShape_mathMinus: "Minus", + txtShape_mathMultiply: "Multiply", + txtShape_mathDivide: "Division", + txtShape_mathEqual: "Equal", + txtShape_mathNotEqual: "Not Equal", + txtShape_flowChartProcess: "Flowchart: Process", + txtShape_flowChartAlternateProcess: "Flowchart: Alternate Process", + txtShape_flowChartDecision: "Flowchart: Decision", + txtShape_flowChartInputOutput: "Flowchart: Data", + txtShape_flowChartPredefinedProcess: "Flowchart: Predefined Process", + txtShape_flowChartInternalStorage: "Flowchart: Internal Storage", + txtShape_flowChartDocument: "Flowchart: Document", + txtShape_flowChartMultidocument: "Flowchart: Multidocument ", + txtShape_flowChartTerminator: "Flowchart: Terminator", + txtShape_flowChartPreparation: "Flowchart: Preparation", + txtShape_flowChartManualInput: "Flowchart: Manual Input", + txtShape_flowChartManualOperation: "Flowchart: Manual Operation", + txtShape_flowChartConnector: "Flowchart: Connector", + txtShape_flowChartOffpageConnector: "Flowchart: Off-page Connector", + txtShape_flowChartPunchedCard: "Flowchart: Card", + txtShape_flowChartPunchedTape: "Flowchart: Punched Tape", + txtShape_flowChartSummingJunction: "Flowchart: Summing Junction", + txtShape_flowChartOr: "Flowchart: Or", + txtShape_flowChartCollate: "Flowchart: Collate", + txtShape_flowChartSort: "Flowchart: Sort", + txtShape_flowChartExtract: "Flowchart: Extract", + txtShape_flowChartMerge: "Flowchart: Merge", + txtShape_flowChartOnlineStorage: "Flowchart: Stored Data", + txtShape_flowChartDelay: "Flowchart: Delay", + txtShape_flowChartMagneticTape: + "Flowchart: Sequential Access Storage", + txtShape_flowChartMagneticDisk: "Flowchart: Magnetic Disk", + txtShape_flowChartMagneticDrum: "Flowchart: Direct Access Storage", + txtShape_flowChartDisplay: "Flowchart: Display", + txtShape_irregularSeal1: "Explosion 1", + txtShape_irregularSeal2: "Explosion 2", + txtShape_star4: "4-Point Star", + txtShape_star5: "5-Point Star", + txtShape_star6: "6-Point Star", + txtShape_star7: "7-Point Star", + txtShape_star8: "8-Point Star", + txtShape_star10: "10-Point Star", + txtShape_star12: "12-Point Star", + txtShape_star16: "16-Point Star", + txtShape_star24: "24-Point Star", + txtShape_star32: "32-Point Star", + txtShape_ribbon2: "Up Ribbon", + txtShape_ribbon: "Down Ribbon", + txtShape_ellipseRibbon2: "Curved Up Ribbon", + txtShape_ellipseRibbon: "Curved Down Ribbon", + txtShape_verticalScroll: "Vertical Scroll", + txtShape_horizontalScroll: "Horizontal Scroll", + txtShape_wave: "Wave", + txtShape_doubleWave: "Double Wave", + txtShape_wedgeRectCallout: "Rectangular Callout", + txtShape_wedgeRoundRectCallout: "Rounded Rectangular Callout", + txtShape_wedgeEllipseCallout: "Oval Callout", + txtShape_cloudCallout: "Cloud Callout", + txtShape_borderCallout1: "Line Callout 1", + txtShape_borderCallout2: "Line Callout 2", + txtShape_borderCallout3: "Line Callout 3", + txtShape_accentCallout1: "Line Callout 1 (Accent Bar)", + txtShape_accentCallout2: "Line Callout 2 (Accent Bar)", + txtShape_accentCallout3: "Line Callout 3 (Accent Bar)", + txtShape_callout1: "Line Callout 1 (No Border)", + txtShape_callout2: "Line Callout 2 (No Border)", + txtShape_callout3: "Line Callout 3 (No Border)", + txtShape_accentBorderCallout1: + "Line Callout 1 (Border and Accent Bar)", + txtShape_accentBorderCallout2: + "Line Callout 2 (Border and Accent Bar)", + txtShape_accentBorderCallout3: + "Line Callout 3 (Border and Accent Bar)", + txtShape_actionButtonBackPrevious: "Back or Previous Button", + txtShape_actionButtonForwardNext: "Forward or Next Button", + txtShape_actionButtonBeginning: "Beginning Button", + txtShape_actionButtonEnd: "End Button", + txtShape_actionButtonHome: "Home Button", + txtShape_actionButtonInformation: "Information Button", + txtShape_actionButtonReturn: "Return Button", + txtShape_actionButtonMovie: "Movie Button", + txtShape_actionButtonDocument: "Document Button", + txtShape_actionButtonSound: "Sound Button", + txtShape_actionButtonHelp: "Help Button", + txtShape_actionButtonBlank: "Blank Button", + txtShape_roundRect: "Round Corner Rectangle", + txtShape_snip1Rect: "Snip Single Corner Rectangle", + txtShape_snip2SameRect: "Snip Same Side Corner Rectangle", + txtShape_snip2DiagRect: "Snip Diagonal Corner Rectangle", + txtShape_snipRoundRect: "Snip and Round Single Corner Rectangle", + txtShape_round1Rect: "Round Single Corner Rectangle", + txtShape_round2SameRect: "Round Same Side Corner Rectangle", + txtShape_round2DiagRect: "Round Diagonal Corner Rectangle", + txtShape_line: "Line", + txtShape_lineWithArrow: "Arrow", + txtShape_lineWithTwoArrows: "Double Arrow", + txtShape_bentConnector5: "Elbow Connector", + txtShape_bentConnector5WithArrow: "Elbow Arrow Connector", + txtShape_bentConnector5WithTwoArrows: "Elbow Double-Arrow Connector", + txtShape_curvedConnector3: "Curved Connector", + txtShape_curvedConnector3WithArrow: "Curved Arrow Connector", + txtShape_curvedConnector3WithTwoArrows: + "Curved Double-Arrow Connector", + txtShape_spline: "Curve", + txtShape_polyline1: "Scribble", + txtShape_polyline2: "Freeform", + txtSyntaxError: "Syntax Error", + txtMissOperator: "Missing Operator", + txtMissArg: "Missing Argument", + txtTooLarge: "Number Too Large To Format", + txtZeroDivide: "Zero Divide", + txtNotInTable: "Is Not In Table", + txtIndTooLarge: "Index Too Large", + txtFormulaNotInTable: "The Formula Not In Table", + txtTableInd: "Table Index Cannot be Zero", + txtUndefBookmark: "Undefined Bookmark", + txtEndOfFormula: "Unexpected End of Formula", + errorEmailClient: "No email client could be found", + textCustomLoader: + "Please note that according to the terms of the license you are not entitled to change the loader.
    Please contact our Sales Department to get a quote.", + txtHyperlink: "Hyperlink", + waitText: "Please, wait...", + errorFileSizeExceed: + "The file size exceeds the limitation set for your server.
    Please contact your Document Server administrator for details.", + txtMainDocOnly: "Error! Main Document Only.", + txtNotValidBookmark: "Error! Not a valid bookmark self-reference.", + txtNoText: "Error! No text of specified style in document.", + uploadDocSizeMessage: "Maximum document size limit exceeded.", + uploadDocExtMessage: "Unknown document format.", + uploadDocFileCountMessage: "No documents uploaded.", + errorUpdateVersionOnDisconnect: + "Internet connection has been restored, and the file version has been changed.
    Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.", + txtChoose: "Choose an item", + errorDirectUrl: + "Please verify the link to the document.
    This link must be a direct link to the file for downloading.", + txtStyle_Caption: "Caption", + errorCompare: + "The Compare documents feature is not available in the co-editing mode.", + textConvertEquation: + "This equation was created with an old version of equation editor which is no longer supported. Converting this equation to Office Math ML format will make it editable.
    Do you want to convert this equation?", + textApplyAll: "Apply to all equations", + textLearnMore: "Learn More", + txtEnterDate: "Enter a date", + txtTypeEquation: "Type equation here", + textHasMacros: + "The file contains automatic macros.
    Do you want to run macros?", + textRemember: "Remember my choice for all files", + warnLicenseLimitedRenewed: + "License needs to be renewed.
    You have a limited access to document editing functionality.
    Please contact your administrator to get full access", + warnLicenseLimitedNoAccess: + "License expired.
    You have no access to document editing functionality.
    Please contact your administrator.", + saveErrorTextDesktop: + "This file cannot be saved or created.
    Possible reasons are:
    1. The file is read-only.
    2. The file is being edited by other users.
    3. The disk is full or corrupted.", + errorComboSeries: + "To create a combination chart, select at least two series of data.", + errorSetPassword: "Password could not be set.", + textRenameLabel: "Enter a name to be used for collaboration", + textRenameError: "User name must not be empty.", + textLongName: "Enter a name that is less than 128 characters.", + textGuest: "Guest", + errorSubmit: "Submit failed.", + txtClickToLoad: "Click to load image", + leavePageTextOnClose: + "All unsaved changes in this document will be lost.
    Click 'Cancel' then 'Save' to save them. Click 'OK' to discard all the unsaved changes.", + textTryUndoRedoWarn: + "The Undo/Redo functions are disabled for the Fast co-editing mode.", + txtNone: "None", + txtNoTableOfFigures: "No table of figures entries found.", + txtTableOfFigures: "Table of figures", + txtStyle_endnote_text: "Endnote Text", + txtTOCHeading: "TOC Heading", + textDisconnect: "Connection is lost", + textReconnect: "Connection is restored", + errorLang: + "The interface language is not loaded.
    Please contact your Document Server administrator.", + errorLoadingFont: + "Fonts are not loaded.
    Please contact your Document Server administrator.", + errorEmptyTOC: + "Start creating a table of contents by applying a heading style from the Styles gallery to the selected text.", + errorNoTOC: + "There's no table of contents to update. You can insert one from the References tab.", + textRequestMacros: + "A macro makes a request to URL. Do you want to allow the request to the %1?", + textRememberMacros: "Remember my choice for all macros", + errorTextFormWrongFormat: + "The value entered does not match the format of the field.", + errorPasswordIsNotCorrect: + "The password you supplied is not correct.
    Verify that the CAPS LOCK key is off and be sure to use the correct capitalization.", + confirmMaxChangesSize: + 'The size of actions exceeds the limitation set for your server.
    Press "Undo" to cancel your last action or press "Continue" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).', + textUndo: "Undo", + textContinue: "Continue", + errorInconsistentExtDocx: + "An error has occurred while opening the file.
    The file content corresponds to text documents (e.g. docx), but the file has the inconsistent extension: %1.", + errorInconsistentExtXlsx: + "An error has occurred while opening the file.
    The file content corresponds to spreadsheets (e.g. xlsx), but the file has the inconsistent extension: %1.", + errorInconsistentExtPptx: + "An error has occurred while opening the file.
    The file content corresponds to presentations (e.g. pptx), but the file has the inconsistent extension: %1.", + errorInconsistentExtPdf: + "An error has occurred while opening the file.
    The file content corresponds to one of the following formats: pdf/djvu/xps/oxps, but the file has the inconsistent extension: %1.", + errorInconsistentExt: + "An error has occurred while opening the file.
    The file content does not match the file extension.", + errorCannotPasteImg: + "We can't paste this image from the Clipboard, but you can save it to your device and \ninsert it from there, or you can copy the image without text and paste it into the document.", + textTryQuickPrint: + "You have selected Quick print: the entire document will be printed on the last selected or default printer.
    Do you want to continue?", + textAnyone: "Anyone", + textText: "Text", + warnLicenseBefore: + "License not active.
    Please contact your administrator.", + titleLicenseNotActive: "License not active", + warnLicenseAnonymous: + "Access denied for anonymous users. This document will be opened for viewing only.", + }; + })(), + DE.Controllers.Main || {} + ) + ); +}); diff --git a/apps/documenteditor/main/app/view/HyperlinkSettingsDialog.js b/apps/documenteditor/main/app/view/HyperlinkSettingsDialog.js index 30d8283f3e..e656312cf7 100644 --- a/apps/documenteditor/main/app/view/HyperlinkSettingsDialog.js +++ b/apps/documenteditor/main/app/view/HyperlinkSettingsDialog.js @@ -37,428 +37,857 @@ * */ - -if (Common === undefined) - var Common = {}; +if (Common === undefined) var Common = {}; var c_oHyperlinkType = { - InternalLink:0, - WebLink: 1 + InternalLink: 0, + WebLink: 1, }; +var linkId; define([ - 'common/main/lib/util/utils', - 'common/main/lib/component/InputField', - 'common/main/lib/component/Window' -], function () { 'use strict'; - - DE.Views.HyperlinkSettingsDialog = Common.UI.Window.extend(_.extend({ + "common/main/lib/util/utils", + "common/main/lib/component/InputField", + "common/main/lib/component/Window", +], function () { + "use strict"; + + DE.Views.HyperlinkSettingsDialog = Common.UI.Window.extend( + _.extend( + { options: { - width: 350, - style: 'min-width: 230px;', - cls: 'modal-dlg', - id: 'window-hyperlink', - buttons: ['ok', 'cancel'] + width: 350, + style: "min-width: 230px;", + cls: "modal-dlg", + id: "window-hyperlink", + buttons: ["ok", "cancel"], }, - initialize : function(options) { - _.extend(this.options, { - title: this.textTitle - }, options || {}); - - this.template = [ - '
    ', - '
    ', - '', - '', - '
    ', - '', - '', - '
    ', - '', - '
    ', - '', - '
    ', - '', - '
    ', - '', - '
    ' - ].join(''); - - this.options.tpl = _.template(this.template)(this.options); - this.api = this.options.api; - this._originalProps = null; - this.urlType = AscCommon.c_oAscUrlType.Invalid; - - Common.UI.Window.prototype.initialize.call(this, this.options); + initialize: function (options) { + _.extend( + this.options, + { + title: this.textTitle, + }, + options || {} + ); + + this.template = [ + '
    ', + + '
    ', + '", + '", + "
    ", + + '", + + '", + + '
    ', + "", + "
    ", + '', + + '
    ', + "", + "
    ", + '', + "
    ", + ].join(""); + + this.options.tpl = _.template(this.template)(this.options); + this.api = this.options.api; + this._originalProps = null; + this.urlType = AscCommon.c_oAscUrlType.Invalid; + + Common.UI.Window.prototype.initialize.call(this, this.options); }, - render: function() { - Common.UI.Window.prototype.render.call(this); - - var me = this, - $window = this.getChild(); + render: function () { + Common.UI.Window.prototype.render.call(this); + + var me = this, + $window = this.getChild(); + + me.btnExternal = new Common.UI.Button({ + el: $("#id-dlg-hyperlink-external"), + enableToggle: true, + toggleGroup: "hyperlink-type", + allowDepress: false, + pressed: true, + }); + me.btnExternal.on( + "click", + _.bind(me.onLinkTypeClick, me, c_oHyperlinkType.WebLink) + ); + + me.btnInternal = new Common.UI.Button({ + el: $("#id-dlg-hyperlink-internal"), + enableToggle: true, + toggleGroup: "hyperlink-type", + allowDepress: false, + }); + me.btnInternal.on( + "click", + _.bind(me.onLinkTypeClick, me, c_oHyperlinkType.InternalLink) + ); + me.documentLinkTo = new Common.UI.ComboBox({ + el: $("#id-dlg-hyperlink-document"), + cls: "input-group-nr", + menuStyle: "min-width: 85px;", + editable: false, + data: [], + placeHolder: "- Select Specific Document -", + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "big", + }); + + me.documentLinkTo.on("selected", async function (combo, record) { + var val = record.value; + try { + if (val === "Document") { + await me.companyDocuments(); + me.connectedDocumentList.setDisabled(false); + } else if (val === "Layout") { + await me.companyLayouts(); + me.connectedDocumentList.setDisabled(false); + } else if (val === "Case") { + await me.companyErrands(); + me.connectedDocumentList.setDisabled(false); + } else if (val === "New Layout") { + me.connectedDocumentList.setData([]); + me.connectedDocumentList.setValue(""); + me.connectedDocumentList.setDisabled(true); + } else if (val === "New Case") { + me.connectedDocumentList.setData([]); + me.connectedDocumentList.setValue(""); + me.connectedDocumentList.setDisabled(true); + } else { + me.connectedDocumentList.setData([]); + me.connectedDocumentList.setDisabled(false); + } + me.btnOk.setDisabled(false); + } catch (error) { + console.error("Error:", error); + } + }); + + me.documentLinkAction = new Common.UI.ComboBox({ + el: $("#id-dlg-hyperlink-action"), + cls: "input-group-nr", + menuStyle: "min-width: 85px;", + placeHolder: "- Select Document Action -", + editable: false, + data: [], + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "big", + }); + + me.connectedDocumentList = new Common.UI.ComboBox({ + el: $("#id-dlg-hyperlink-url"), + cls: "input-group-nr", + menuStyle: "min-width: 85px;", + placeHolder: "- Select -", + editable: false, + data: [], + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "big", + }); + + me.connectedDocumentList.on("selected", function (combo, record) { + me.isInputFirstChange && me.connectedDocumentList.showError(); + me.isInputFirstChange = false; + var val = record.displayValue; + Common.localStorage.setItem("editorUrl-val", JSON.stringify(val)); + if (me.isAutoUpdate) { + me.inputDisplay.setValue(val); + me.isTextChanged = true; + } + }); + + me.inputDisplay = new Common.UI.InputField({ + el: $("#id-dlg-hyperlink-display"), + allowBlank: true, + validateOnBlur: false, + style: "width: 100%;", + }).on("changed:after", function () { + me.isTextChanged = true; + }); + me.inputDisplay._input.on("input", function (e) { + me.isAutoUpdate = $(e.target).val() == ""; + }); + + me.inputTip = new Common.UI.InputField({ + el: $("#id-dlg-hyperlink-tip"), + style: "width: 100%;", + maxLength: Asc.c_oAscMaxTooltipLength, + }); + + me.internalList = new Common.UI.TreeView({ + el: $("#id-dlg-hyperlink-list"), + store: new Common.UI.TreeViewStore(), + enableKeyEvents: true, + tabindex: 1, + }); + me.internalList.on("item:select", _.bind(this.onSelectItem, this)); + + me.btnOk = new Common.UI.Button({ + el: $window.find(".primary"), + }); + + $window.find(".dlg-btn").on("click", _.bind(this.onBtnClick, this)); + me.internalList.on("entervalue", _.bind(me.onPrimary, me)); + me.externalPanel = $window.find("#id-external-link"); + me.internalPanel = $window.find("#id-internal-link"); + }, - me.btnExternal = new Common.UI.Button({ - el: $('#id-dlg-hyperlink-external'), - enableToggle: true, - toggleGroup: 'hyperlink-type', - allowDepress: false, - pressed: true - }); - me.btnExternal.on('click', _.bind(me.onLinkTypeClick, me, c_oHyperlinkType.WebLink)); + getFocusedComponents: function () { + return [ + this.connectedDocumentList, + this.documentLinkTo, + this.documentLinkAction, + this.internalList, + this.inputDisplay, + this.inputTip, + ]; + }, - me.btnInternal = new Common.UI.Button({ - el: $('#id-dlg-hyperlink-internal'), - enableToggle: true, - toggleGroup: 'hyperlink-type', - allowDepress: false - }); - me.btnInternal.on('click', _.bind(me.onLinkTypeClick, me, c_oHyperlinkType.InternalLink)); - - me.inputUrl = new Common.UI.InputField({ - el : $('#id-dlg-hyperlink-url'), - allowBlank : false, - blankError : me.txtEmpty, - style : 'width: 100%;', - validateOnBlur: false, - validation : function(value) { - var trimmed = $.trim(value); - if (trimmed.length>2083) return me.txtSizeLimit; - - me.urlType = me.api.asc_getUrlType(trimmed); - return (me.urlType!==AscCommon.c_oAscUrlType.Invalid) ? true : me.txtNotUrl; + ShowHideElem: function (value) { + this.externalPanel.toggleClass( + "hidden", + value !== c_oHyperlinkType.WebLink + ); + this.internalPanel.toggleClass( + "hidden", + value !== c_oHyperlinkType.InternalLink + ); + var store = this.internalList.store; + if (value == c_oHyperlinkType.InternalLink) { + if (store.length < 1) { + var anchors = this.api.asc_GetHyperlinkAnchors(), + count = anchors.length, + prev_level = 0, + header_level = 0, + arr = []; + arr.push( + new Common.UI.TreeViewModel({ + name: this.txtBeginning, + level: 0, + index: 0, + hasParent: false, + isEmptyItem: false, + isNotHeader: true, + hasSubItems: false, + }) + ); + arr.push( + new Common.UI.TreeViewModel({ + name: this.txtHeadings, + level: 0, + index: 1, + hasParent: false, + isEmptyItem: false, + isNotHeader: false, + type: Asc.c_oAscHyperlinkAnchor.Heading, + hasSubItems: false, + }) + ); + + for (var i = 0; i < count; i++) { + var anchor = anchors[i], + level = anchors[i].asc_GetHeadingLevel() + 1, + hasParent = true; + if (anchor.asc_GetType() == Asc.c_oAscHyperlinkAnchor.Heading) { + if (level > prev_level) + arr[arr.length - 1].set("hasSubItems", true); + if (level <= header_level) { + header_level = level; + hasParent = false; + } + arr.push( + new Common.UI.TreeViewModel({ + name: anchor.asc_GetHeadingText(), + level: level, + index: i + 2, + hasParent: hasParent, + type: Asc.c_oAscHyperlinkAnchor.Heading, + headingParagraph: anchor.asc_GetHeadingParagraph(), + }) + ); + prev_level = level; } - }); - me.inputUrl._input.on('input', function (e) { - me.isInputFirstChange && me.inputUrl.showError(); - me.isInputFirstChange = false; - var val = $(e.target).val(); - if (me.isAutoUpdate) { - me.inputDisplay.setValue(val); - me.isTextChanged = true; + } + arr.push( + new Common.UI.TreeViewModel({ + name: this.txtBookmarks, + level: 0, + index: arr.length, + hasParent: false, + isEmptyItem: false, + isNotHeader: false, + type: Asc.c_oAscHyperlinkAnchor.Bookmark, + hasSubItems: false, + }) + ); + + prev_level = 0; + for (var i = 0; i < count; i++) { + var anchor = anchors[i], + hasParent = true; + if ( + anchor.asc_GetType() == Asc.c_oAscHyperlinkAnchor.Bookmark + ) { + if (prev_level < 1) + arr[arr.length - 1].set("hasSubItems", true); + arr.push( + new Common.UI.TreeViewModel({ + name: anchor.asc_GetBookmarkName(), + level: 1, + index: arr.length, + hasParent: false, + type: Asc.c_oAscHyperlinkAnchor.Bookmark, + }) + ); + prev_level = 1; } - me.btnOk.setDisabled($.trim(val)==''); - }); - - me.inputDisplay = new Common.UI.InputField({ - el : $('#id-dlg-hyperlink-display'), - allowBlank : true, - validateOnBlur: false, - style : 'width: 100%;' - }).on('changed:after', function() { - me.isTextChanged = true; - }); - me.inputDisplay._input.on('input', function (e) { - me.isAutoUpdate = ($(e.target).val()==''); - }); + } + store.reset(arr); + this.internalList.collapseAll(); + } + var rec = this.internalList.getSelectedRec(); + + this.btnOk.setDisabled(false); + var me = this; + _.delay(function () { + me.inputDisplay.focus(); + }, 50); + } else { + this.btnOk.setDisabled(false); + var me = this; + _.delay(function () { + me.connectedDocumentList.focus(); + }, 50); + } + }, - me.inputTip = new Common.UI.InputField({ - el : $('#id-dlg-hyperlink-tip'), - style : 'width: 100%;', - maxLength : Asc.c_oAscMaxTooltipLength - }); + documentLinkToTypes: async function () { + var me = this; + this.token = Common.localStorage.getItem("token"); + this.getDocumentLinkToTypes = Common.localStorage.getItem( + "getDocumentLinkToTypes" + ); + + // Fetch data from the server + const response = await fetch(this.getDocumentLinkToTypes, { + method: "GET", + headers: { + Authorization: `Bearer ${this.token}`, + }, + }); + if (!response.ok) { + throw new Error("Failed to fetch data"); + } + const finalDocumentLinkToType = await response.json(); + // Set the data for me.inputUrl + me.documentLinkTo.setData(finalDocumentLinkToType); + }, - me.internalList = new Common.UI.TreeView({ - el: $('#id-dlg-hyperlink-list'), - store: new Common.UI.TreeViewStore(), - enableKeyEvents: true, - tabindex: 1 - }); - me.internalList.on('item:select', _.bind(this.onSelectItem, this)); + documentActionTypes: async function () { + var me = this; + this.token = Common.localStorage.getItem("token"); + this.getDocumentActionTypes = Common.localStorage.getItem( + "getDocumentActionTypes" + ); + // Fetch data from the server + const response = await fetch(this.getDocumentActionTypes, { + method: "GET", + headers: { + Authorization: `Bearer ${this.token}`, + }, + }); + if (!response.ok) { + throw new Error("Failed to fetch data"); + } + const documentActionTypes = await response.json(); + // Set the data for me.inputUrl + me.documentLinkAction.setData(documentActionTypes); + }, - me.btnOk = new Common.UI.Button({ - el: $window.find('.primary') - }); + companyLayouts: async function () { + var me = this; + this.token = Common.localStorage.getItem("token"); + this.getLayoutUrl = Common.localStorage.getItem("getLayoutUrl"); + // Fetch data from the server + const response = await fetch(this.getLayoutUrl, { + method: "GET", + headers: { + Authorization: `Bearer ${this.token}`, + }, + }); + if (!response.ok) { + throw new Error("Failed to fetch data"); + } + const data = await response.json(); + // Process the data + const finalLayoutData = data.map((item) => ({ + displayValue: item.id, + defaultValue: item.id, + value: item.id, + })); + // Set the data for me.inputUrl + + me.connectedDocumentList.setData(finalLayoutData); + }, - $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); - me.internalList.on('entervalue', _.bind(me.onPrimary, me)); - me.externalPanel = $window.find('#id-external-link'); - me.internalPanel = $window.find('#id-internal-link'); + companyErrands: async function () { + var me = this; + this.token = Common.localStorage.getItem("token"); + this.getErrandUrl = Common.localStorage.getItem("getErrandUrl"); + // Fetch data from the server + const response = await fetch(this.getErrandUrl, { + method: "GET", + headers: { + Authorization: `Bearer ${this.token}`, + }, + }); + if (!response.ok) { + throw new Error("Failed to fetch data"); + } + const data = await response.json(); + // Process the data + const finalErrandData = data.map((item) => ({ + displayValue: item.id, + defaultValue: item.id, + value: item.id, + })); + // Set the data for me.inputUrl + me.connectedDocumentList.setData(finalErrandData); }, - getFocusedComponents: function() { - return [this.inputUrl, this.internalList, this.inputDisplay, this.inputTip]; + companyDocuments: async function () { + var me = this; + this.token = Common.localStorage.getItem("token"); + this.getDocumentUrl = Common.localStorage.getItem("getDocumentUrl"); + // Fetch data from the server + const response = await fetch(this.getDocumentUrl, { + method: "GET", + headers: { + Authorization: `Bearer ${this.token}`, + }, + }); + if (!response.ok) { + throw new Error("Failed to fetch data"); + } + const data = await response.json(); + // Process the data + const finalDocumentData = data.map((item) => ({ + displayValue: item.title, + defaultValue: item.title, + value: item.id, + })); + // Set the data for me.connectedDocumentList + me.connectedDocumentList.setData(finalDocumentData); }, - ShowHideElem: function(value) { - this.externalPanel.toggleClass('hidden', value !== c_oHyperlinkType.WebLink); - this.internalPanel.toggleClass('hidden', value !== c_oHyperlinkType.InternalLink); - var store = this.internalList.store; - if (value==c_oHyperlinkType.InternalLink) { - if (store.length<1) { - var anchors = this.api.asc_GetHyperlinkAnchors(), - count = anchors.length, - prev_level = 0, - header_level = 0, - arr = []; - arr.push(new Common.UI.TreeViewModel({ - name : this.txtBeginning, - level: 0, - index: 0, - hasParent: false, - isEmptyItem: false, - isNotHeader: true, - hasSubItems: false - })); - arr.push(new Common.UI.TreeViewModel({ - name : this.txtHeadings, - level: 0, - index: 1, - hasParent: false, - isEmptyItem: false, - isNotHeader: false, - type: Asc.c_oAscHyperlinkAnchor.Heading, - hasSubItems: false - })); - - for (var i=0; iprev_level) - arr[arr.length-1].set('hasSubItems', true); - if (level<=header_level) { - header_level = level; - hasParent = false; - } - arr.push(new Common.UI.TreeViewModel({ - name : anchor.asc_GetHeadingText(), - level: level, - index: i+2, - hasParent: hasParent, - type: Asc.c_oAscHyperlinkAnchor.Heading, - headingParagraph: anchor.asc_GetHeadingParagraph() - })); - prev_level = level; - } - } - arr.push(new Common.UI.TreeViewModel({ - name : this.txtBookmarks, - level: 0, - index: arr.length, - hasParent: false, - isEmptyItem: false, - isNotHeader: false, - type: Asc.c_oAscHyperlinkAnchor.Bookmark, - hasSubItems: false - })); - - prev_level = 0; - for (var i=0; i0); - var me = this; - _.delay(function(){ - me.inputDisplay.focus(); - },50); + onLinkTypeClick: function (type, btn, event) { + this.ShowHideElem(type); + if (this.isAutoUpdate) { + if (type == c_oHyperlinkType.InternalLink) { + var rec = this.internalList.getSelectedRec(); + this.inputDisplay.setValue( + rec && (rec.get("level") || rec.get("index") == 0) + ? rec.get("name") + : "" + ); } else { - this.btnOk.setDisabled($.trim(this.inputUrl.getValue())==''); - var me = this; - _.delay(function(){ - me.inputUrl.focus(); - },50); + this.inputDisplay.setValue(this.connectedDocumentList.getValue()); } + this.isTextChanged = true; + } }, - onLinkTypeClick: function(type, btn, event) { - this.ShowHideElem(type); - if (this.isAutoUpdate) { - if (type==c_oHyperlinkType.InternalLink) { - var rec = this.internalList.getSelectedRec(); - this.inputDisplay.setValue(rec && (rec.get('level') || rec.get('index')==0)? rec.get('name') : ''); - } else { - this.inputDisplay.setValue(this.inputUrl.getValue()); - } - this.isTextChanged = true; - } + onSelectItem: function (picker, item, record, e) { + this.btnOk.setDisabled(false); + if (this.isAutoUpdate) { + this.inputDisplay.setValue( + record.get("level") || record.get("index") == 0 + ? record.get("name") + : "" + ); + this.isTextChanged = true; + } }, - onSelectItem: function(picker, item, record, e){ - this.btnOk.setDisabled(record.get('level')==0 && record.get('index')>0); - if (this.isAutoUpdate) { - this.inputDisplay.setValue((record.get('level') || record.get('index')==0) ? record.get('name') : ''); - this.isTextChanged = true; - } + show: function () { + Common.UI.Window.prototype.show.apply(this, arguments); }, - show: function() { - Common.UI.Window.prototype.show.apply(this, arguments); + close: function () { + Common.UI.Window.prototype.close.apply(this, arguments); + Common.localStorage.removeItem("documentLinkId"); + Common.localStorage.removeItem("link_Id"); }, - setSettings: function (props) { - if (props) { - var me = this; - - var bookmark = props.get_Bookmark(), - type = (bookmark === null || bookmark=='') ? ((props.get_Value() || !Common.Utils.InternalSettings.get("de-settings-link-type")) ? c_oHyperlinkType.WebLink : c_oHyperlinkType.InternalLink) : c_oHyperlinkType.InternalLink; - - (type == c_oHyperlinkType.WebLink) ? me.btnExternal.toggle(true) : me.btnInternal.toggle(true); - me.ShowHideElem(type); - - if (type == c_oHyperlinkType.WebLink) { - if (props.get_Value()) { - me.inputUrl.setValue(props.get_Value().replace(new RegExp(" ",'g'), "%20")); - } else { - me.inputUrl.setValue(''); - } - this.btnOk.setDisabled($.trim(this.inputUrl.getValue())==''); - } else { - if (props.is_TopOfDocument()) - this.internalList.selectByIndex(0); - else if (props.is_Heading()) { - var rec = this.internalList.store.findWhere({type: Asc.c_oAscHyperlinkAnchor.Heading, headingParagraph: props.get_Heading() }); - if (rec) { - this.internalList.expandRecord(this.internalList.store.at(1)); - this.internalList.scrollToRecord(this.internalList.selectRecord(rec)); - } - } else { - var rec = this.internalList.store.findWhere({type: Asc.c_oAscHyperlinkAnchor.Bookmark, name: bookmark}); - if (rec) { - this.internalList.expandRecord(this.internalList.store.findWhere({type: Asc.c_oAscHyperlinkAnchor.Bookmark, level: 0})); - this.internalList.scrollToRecord(this.internalList.selectRecord(rec)); - } - } - var rec = this.internalList.getSelectedRec(); - this.btnOk.setDisabled(!rec || rec.get('level')==0 && rec.get('index')>0); - } - - if (props.get_Text() !== null) { - me.inputDisplay.setValue(props.get_Text()); - me.inputDisplay.setDisabled(false); - me.isAutoUpdate = (me.inputDisplay.getValue()=='' || type == c_oHyperlinkType.WebLink && me.inputUrl.getValue()==me.inputDisplay.getValue()); - } else { - me.inputDisplay.setValue(this.textDefault); - me.inputDisplay.setDisabled(true); - } - - this.isTextChanged = false; + demoLink: async function () { + var me = this, + props = new Asc.CHyperlinkProperty(), + display = "", + type = this.btnExternal.isActive() + ? c_oHyperlinkType.WebLink + : c_oHyperlinkType.InternalLink; + + if (type == c_oHyperlinkType.WebLink) { + const documentLinkId = Number( + Common.localStorage.getItem("documentLinkId") + ); + if (documentLinkId) { + const id = await this.updateLink(documentLinkId); + this.editorUrl = Common.localStorage.getItem("editorUrl"); + var url = `${this.editorUrl}/${id}`; // `${$.trim(me.inputDisplay.getValue())}/${id}`; + } else { + const id = await this.createLink(); + this.editorUrl = Common.localStorage.getItem("editorUrl"); + var url = `${this.editorUrl}/${id}`; // `${$.trim(me.inputDisplay.getValue())}/${id}`; + } - me.inputTip.setValue(props.get_ToolTip()); - me._originalProps = props; + if ( + me.urlType !== AscCommon.c_oAscUrlType.Unsafe && + !/(((^https?)|(^ftp)):\/\/)|(^mailto:)/i.test(url) + ) + // url = + // (me.urlType == AscCommon.c_oAscUrlType.Email + // ? "mailto:" + // : "http://") + url; + + url = url.replace(new RegExp("%20", "g"), " "); + props.put_Value(url); + props.put_Bookmark(null); + display = url; + } else { + var rec = this.internalList.getSelectedRec(); + if (rec) { + props.put_Bookmark(rec.get("name")); + if (rec.get("index") == 0) props.put_TopOfDocument(); + var para = rec.get("headingParagraph"); + if (para) props.put_Heading(para); + display = rec.get("name"); } + } + + if ( + !me.inputDisplay.isDisabled() && + (me.isTextChanged || _.isEmpty(me.inputDisplay.getValue())) + ) { + if ( + _.isEmpty(me.inputDisplay.getValue()) || + (type == c_oHyperlinkType.WebLink && me.isAutoUpdate) + ) + me.inputDisplay.setValue(display); + props.put_Text(me.inputDisplay.getValue()); + } else { + props.put_Text(null); + } + + props.put_ToolTip(me.inputTip.getValue()); + props.put_InternalHyperlink( + me._originalProps.get_InternalHyperlink() + ); + + return props; + }, + createLink: async function () { + this.token = Common.localStorage.getItem("token"); + this.linkUrl = Common.localStorage.getItem("linkUrl"); + this.documentId = Common.localStorage.getItem("documentId"); + + return await fetch(this.linkUrl, { + method: "POST", + body: JSON.stringify({ + link_to: this.documentLinkTo.getValue() || "Document", + id_of_to: Number(this.connectedDocumentList.getValue()), + action: this.documentLinkAction.getValue() || "New Tab", + document_id: Number(this.documentId), + }), + headers: { + Accept: "application/json", + "Content-Type": "application/json;charset=UTF-8", + Authorization: `Bearer ${this.token}`, + }, + }) + .then((res) => res.json()) + .then(async (data) => { + return await data.link_no; + }) + .catch((err) => { + console.log(err, "err"); + }); }, - getSettings: function () { - var me = this, - props = new Asc.CHyperlinkProperty(), - display = '', - type = this.btnExternal.isActive() ? c_oHyperlinkType.WebLink : c_oHyperlinkType.InternalLink; - - if (type==c_oHyperlinkType.WebLink) {//WebLink - var url = $.trim(me.inputUrl.getValue()); + updateLink: async function (documentLinkId) { + this.token = Common.localStorage.getItem("token"); + this.linkUrl = Common.localStorage.getItem("linkUrl"); + this.documentId = Common.localStorage.getItem("documentId"); + + return await fetch(`${this.linkUrl}/update`, { + method: "POST", + body: JSON.stringify({ + id: documentLinkId, + link_to: this.documentLinkTo.getValue() || "Document", + id_of_to: Number(this.connectedDocumentList.getValue()), + action: this.documentLinkAction.getValue() || "New Tab", + document_id: Number(this.documentId), + }), + headers: { + Accept: "application/json", + "Content-Type": "application/json;charset=UTF-8", + Authorization: `Bearer ${this.token}`, + }, + }) + .then((res) => res.json()) + .then(async (data) => { + Common.localStorage.removeItem("documentLinkId"); + return await data.link_no; + }) + .catch((err) => { + console.log(err, "err"); + }); + }, - if (me.urlType!==AscCommon.c_oAscUrlType.Unsafe && ! /(((^https?)|(^ftp)):\/\/)|(^mailto:)/i.test(url) ) - url = ( (me.urlType==AscCommon.c_oAscUrlType.Email) ? 'mailto:' : 'http://' ) + url; + linkData: async function (linkNo) { + Common.localStorage.setItem("link_Id", JSON.stringify(linkNo)); + this.token = Common.localStorage.getItem("token"); + this.documentId = Common.localStorage.getItem("documentId"); + this.linkUrl = Common.localStorage.getItem("linkUrl"); + return await fetch( + `${this.linkUrl}/link?documentId=${this.documentId}&linkNo=${linkNo}`, + { + method: "GET", + headers: { + Authorization: `Bearer ${this.token}`, + }, + } + ) + .then((response) => response.json()) + .then((linkData) => { + return linkData; + }) + .catch((error) => { + console.error("Error fetching data:", error); + }); + }, - url = url.replace(new RegExp("%20",'g')," "); - props.put_Value(url); - props.put_Bookmark(null); - display = url; + setSettings: async function (props) { + if (props) { + var me = this; + + await me.documentLinkToTypes(); + await me.documentActionTypes(); + + var bookmark = props.get_Bookmark(), + type = + bookmark === null || bookmark == "" + ? props.get_Value() || + !Common.Utils.InternalSettings.get("de-settings-link-type") + ? c_oHyperlinkType.WebLink + : c_oHyperlinkType.InternalLink + : c_oHyperlinkType.InternalLink; + + type == c_oHyperlinkType.WebLink + ? me.btnExternal.toggle(true) + : me.btnInternal.toggle(true); + me.ShowHideElem(type); + + if (type == c_oHyperlinkType.WebLink) { + if (props.get_Value()) { + const urlString = props.get_Value(); + const regex = /\/editor\/(\d+)$/; + const match = urlString.match(regex); + + if (match && match[1]) { + const number = parseInt(match[1]); + + await this.linkData(number).then(async (documentLinkData) => { + Common.localStorage.setItem( + "documentLinkId", + JSON.stringify(documentLinkData.id) + ); + + if (documentLinkData.link_to === "Layout") { + await me.companyLayouts(); + me.connectedDocumentList.setValue( + documentLinkData.link_document.id ?? "" + ); + } else if (documentLinkData.link_to === "Case") { + await me.companyErrands(); + me.connectedDocumentList.setValue( + documentLinkData.link_document.id ?? "" + ); + } else if (documentLinkData.link_to === "Document") { + await me.companyDocuments(); + me.connectedDocumentList.setValue( + documentLinkData.link_document?.title ?? "" + ); + } else if (documentLinkData.link_to === "New Layout") { + me.connectedDocumentList.setData([]); + me.connectedDocumentList.setValue(""); + me.connectedDocumentList.setDisabled(true); + } else if (documentLinkData.link_to === "New Case") { + me.connectedDocumentList.setData([]); + me.connectedDocumentList.setValue(""); + me.connectedDocumentList.setDisabled(true); + } + me.documentLinkTo.setValue(documentLinkData.link_to ?? ""); + me.documentLinkAction.setValue( + documentLinkData.action ?? "" + ); + }); + } else { + console.log("No match found"); + } + } else { + me.connectedDocumentList.setValue( + me.connectedDocumentList.value + ); + } + this.btnOk.setDisabled(false); } else { - var rec = this.internalList.getSelectedRec(); + if (props.is_TopOfDocument()) this.internalList.selectByIndex(0); + else if (props.is_Heading()) { + var rec = this.internalList.store.findWhere({ + type: Asc.c_oAscHyperlinkAnchor.Heading, + headingParagraph: props.get_Heading(), + }); + if (rec) { + this.internalList.expandRecord(this.internalList.store.at(1)); + this.internalList.scrollToRecord( + this.internalList.selectRecord(rec) + ); + } + } else { + var rec = this.internalList.store.findWhere({ + type: Asc.c_oAscHyperlinkAnchor.Bookmark, + name: bookmark, + }); if (rec) { - props.put_Bookmark(rec.get('name')); - if (rec.get('index')==0) - props.put_TopOfDocument(); - var para = rec.get('headingParagraph'); - if (para) - props.put_Heading(para); - display = rec.get('name'); + this.internalList.expandRecord( + this.internalList.store.findWhere({ + type: Asc.c_oAscHyperlinkAnchor.Bookmark, + level: 0, + }) + ); + this.internalList.scrollToRecord( + this.internalList.selectRecord(rec) + ); } + } + var rec = this.internalList.getSelectedRec(); + this.btnOk.setDisabled(false); } - if (!me.inputDisplay.isDisabled() && ( me.isTextChanged || _.isEmpty(me.inputDisplay.getValue()))) { - if (_.isEmpty(me.inputDisplay.getValue()) || type==c_oHyperlinkType.WebLink && me.isAutoUpdate) - me.inputDisplay.setValue(display); - props.put_Text(me.inputDisplay.getValue()); + if (props.get_Text() !== null) { + me.inputDisplay.setValue(props.get_Text()); + me.inputDisplay.setDisabled(false); + me.isAutoUpdate = + me.inputDisplay.getValue() == "" || + (type == c_oHyperlinkType.WebLink && + me.connectedDocumentList.getValue() == + me.inputDisplay.getValue()); } else { - props.put_Text(null); + me.inputDisplay.setValue(this.textDefault); + me.inputDisplay.setDisabled(true); } - props.put_ToolTip(me.inputTip.getValue()); - props.put_InternalHyperlink(me._originalProps.get_InternalHyperlink()); + this.isTextChanged = false; - return props; + me.inputTip.setValue(props.get_ToolTip()); + me._originalProps = props; + } }, - onBtnClick: function(event) { - this._handleInput(event.currentTarget.attributes['result'].value); + getSettings: function () { + return {}; }, - onPrimary: function(event) { - this._handleInput('ok'); - return false; + onBtnClick: function (event) { + this._handleInput(event.currentTarget.attributes["result"].value); }, - _handleInput: function(state) { - if (this.options.handler) { - if (state == 'ok') { - if (this.btnExternal.isActive()) {//WebLink - if (this.inputUrl.checkValidate() !== true) { - this.isInputFirstChange = true; - this.inputUrl.focus(); - return; - } - } else { - var rec = this.internalList.getSelectedRec(); - if (!rec || rec.get('level')==0 && rec.get('index')>0) - return; - } - if (this.inputDisplay.checkValidate() !== true) { - this.inputDisplay.focus(); - return; - } - (!this._originalProps.get_Bookmark() && !this._originalProps.get_Value()) && Common.Utils.InternalSettings.set("de-settings-link-type", this.btnInternal.isActive()); // save last added hyperlink - } + onPrimary: function (event) { + this._handleInput("ok"); + return false; + }, - this.options.handler.call(this, this, state); + _handleInput: async function (state) { + if (this.options.handler) { + if (state == "ok") { + if (this.btnExternal.isActive()) { + //Because of below code inputUrl not working + // if (this.inputUrl.checkValidate() !== true) { + // this.isInputFirstChange = true; + // // this.inputUrl.focus(); + // return; + // } + } else { + var rec = this.internalList.getSelectedRec(); + if (!rec || (rec.get("level") == 0 && rec.get("index") > 0)) + return; + } + if (this.inputDisplay.checkValidate() !== true) { + this.inputDisplay.focus(); + return; + } + !this._originalProps.get_Bookmark() && + !this._originalProps.get_Value() && + Common.Utils.InternalSettings.set( + "de-settings-link-type", + this.btnInternal.isActive() + ); // save last added hyperlink + + const props = await this.demoLink(); + this.options.handler.call(this, this, state, props); + } else { + this.options.handler.call(this, this, state); } - - this.close(); + } + this.close(); }, - textUrl: 'Link to', - textDisplay: 'Display', - txtEmpty: 'This field is required', - txtNotUrl: 'This field should be a URL in the format \"http://www.example.com\"', - textTooltip: 'ScreenTip text', - textDefault: 'Selected text', - textTitle: 'Hyperlink Settings', - textExternal: 'External Link', - textInternal: 'Place in Document', - txtBeginning: 'Beginning of document', - txtHeadings: 'Headings', - txtBookmarks: 'Bookmarks', - txtSizeLimit: 'This field is limited to 2083 characters' - }, DE.Views.HyperlinkSettingsDialog || {})) -}); \ No newline at end of file + textUrl: "Link to", + textDisplay: "Display", + txtEmpty: "This field is required", + txtNotUrl: + 'This field should be a URL in the format "http://www.example.com"', + textTooltip: "ScreenTip text", + textDefault: "Selected text", + textTitle: "Hyperlink Settings", + textExternal: "External Link", + textInternal: "Place in Document", + txtBeginning: "Beginning of document", + txtHeadings: "Headings", + txtBookmarks: "Bookmarks", + txtSizeLimit: "This field is limited to 2083 characters", + }, + DE.Views.HyperlinkSettingsDialog || {} + ) + ); +}); diff --git a/apps/documenteditor/main/app/view/Links.js b/apps/documenteditor/main/app/view/Links.js index 9e2abf6995..de6fc4621b 100644 --- a/apps/documenteditor/main/app/view/Links.js +++ b/apps/documenteditor/main/app/view/Links.js @@ -39,472 +39,728 @@ */ define([ - 'common/main/lib/util/utils', - 'common/main/lib/component/BaseView', - 'common/main/lib/component/Layout' + "common/main/lib/util/utils", + "common/main/lib/component/BaseView", + "common/main/lib/component/Layout", ], function () { - 'use strict'; + "use strict"; - DE.Views.Links = Common.UI.BaseView.extend(_.extend((function(){ + DE.Views.Links = Common.UI.BaseView.extend( + _.extend( + (function () { function setEvents() { - var me = this; - this.btnsContents.forEach(function(button) { - button.menu.on('item:click', function (menu, item, e) { - me.fireEvent('links:contents', [item.value]); - }); - button.on('click', function (b, e) { - me.fireEvent('links:contents', [0]); - }); - button.menu.on('show:after', function (menu, e) { - me.fireEvent('links:contents-open', [menu]); - }); + var me = this; + this.btnsContents.forEach(function (button) { + button.menu.on("item:click", function (menu, item, e) { + me.fireEvent("links:contents", [item.value]); }); - this.contentsMenu.on('item:click', function (menu, item, e) { - setTimeout(function(){ - me.fireEvent('links:contents', [item.value, true]); - }, 10); + button.on("click", function (b, e) { + me.fireEvent("links:contents", [0]); }); - this.contentsMenu.on('show:after', function (menu, e) { - me.fireEvent('links:contents-open', [menu]); + button.menu.on("show:after", function (menu, e) { + me.fireEvent("links:contents-open", [menu]); }); - - this.btnContentsUpdate.menu.on('item:click', function (menu, item, e) { - me.fireEvent('links:update', [item.value]); + }); + this.contentsMenu.on("item:click", function (menu, item, e) { + setTimeout(function () { + me.fireEvent("links:contents", [item.value, true]); + }, 10); + }); + this.contentsMenu.on("show:after", function (menu, e) { + me.fireEvent("links:contents-open", [menu]); + }); + + this.btnContentsUpdate.menu.on( + "item:click", + function (menu, item, e) { + me.fireEvent("links:update", [item.value]); + } + ); + this.btnContentsUpdate.on("click", function (b, e) { + me.fireEvent("links:update", ["all"]); + }); + this.contentsUpdateMenu.on("item:click", function (menu, item, e) { + setTimeout(function () { + me.fireEvent("links:update", [item.value, true]); + }, 10); + }); + + this.btnAddText.menu.on("item:click", function (menu, item, e) { + me.fireEvent("links:addtext", [item.value]); + }); + this.btnAddText.menu.on("show:after", function (menu, e) { + me.fireEvent("links:addtext-open", [menu]); + }); + + this.btnsNotes.forEach(function (button) { + button.menu.on("item:click", function (menu, item, e) { + me.fireEvent("links:notes", [item.value]); }); - this.btnContentsUpdate.on('click', function (b, e) { - me.fireEvent('links:update', ['all']); + button.on("click", function (b, e) { + me.fireEvent("links:notes", ["ins_footnote"]); }); - this.contentsUpdateMenu.on('item:click', function (menu, item, e) { - setTimeout(function(){ - me.fireEvent('links:update', [item.value, true]); - }, 10); + button.menu.items[7].menu.on( + "item:click", + function (menu, item, e) { + //convert + me.fireEvent("links:notes", [item.value]); + } + ); + }); + + this.btnsPrevNote.forEach(function (button) { + button.on("click", function (b, e) { + me.fireEvent("links:notes", ["prev"]); }); + }); - this.btnAddText.menu.on('item:click', function (menu, item, e) { - me.fireEvent('links:addtext', [item.value]); - }); - this.btnAddText.menu.on('show:after', function (menu, e) { - me.fireEvent('links:addtext-open', [menu]); + this.btnsNextNote.forEach(function (button) { + button.on("click", function (b, e) { + me.fireEvent("links:notes", ["next"]); }); + }); - this.btnsNotes.forEach(function(button) { - button.menu.on('item:click', function (menu, item, e) { - me.fireEvent('links:notes', [item.value]); - }); - button.on('click', function (b, e) { - me.fireEvent('links:notes', ['ins_footnote']); - }); - button.menu.items[7].menu.on('item:click', function (menu, item, e) {//convert - me.fireEvent('links:notes', [item.value]); - }); + this.btnsPrevEndNote.forEach(function (button) { + button.on("click", function (b, e) { + me.fireEvent("links:notes", ["prev-end"]); }); + }); - this.btnsPrevNote.forEach(function(button) { - button.on('click', function (b, e) { - me.fireEvent('links:notes', ['prev']); - }); + this.btnsNextEndNote.forEach(function (button) { + button.on("click", function (b, e) { + me.fireEvent("links:notes", ["next-end"]); }); + }); - this.btnsNextNote.forEach(function(button) { - button.on('click', function (b, e) { - me.fireEvent('links:notes', ['next']); - }); + this.btnsHyperlink.forEach(function (button) { + button.on("click", function (b, e) { + me.fireEvent("links:hyperlink"); }); + }); - this.btnsPrevEndNote.forEach(function(button) { - button.on('click', function (b, e) { - me.fireEvent('links:notes', ['prev-end']); - }); - }); + this.btnBookmarks.on("click", function (b, e) { + me.fireEvent("links:bookmarks"); + }); - this.btnsNextEndNote.forEach(function(button) { - button.on('click', function (b, e) { - me.fireEvent('links:notes', ['next-end']); - }); - }); + this.btnCaption.on("click", function (b, e) { + me.fireEvent("links:caption"); + }); - this.btnsHyperlink.forEach(function(button) { - button.on('click', function (b, e) { - me.fireEvent('links:hyperlink'); - }); - }); + this.btnCrossRef.on("click", function (b, e) { + me.fireEvent("links:crossref"); + }); - this.btnBookmarks.on('click', function (b, e) { - me.fireEvent('links:bookmarks'); - }); + this.btnTableFigures.on("click", function (b, e) { + me.fireEvent("links:tof"); + }); - this.btnCaption.on('click', function (b, e) { - me.fireEvent('links:caption'); - }); + this.btnTableFiguresUpdate.on("click", function (b, e) { + me.fireEvent("links:tof-update"); + }); + } - this.btnCrossRef.on('click', function (b, e) { - me.fireEvent('links:crossref'); + return { + options: {}, + + initialize: function (options) { + Common.UI.BaseView.prototype.initialize.call(this); + this.toolbar = options.toolbar; + + this.btnsPrevNote = []; + this.btnsNextNote = []; + this.btnsPrevEndNote = []; + this.btnsNextEndNote = []; + this.paragraphControls = []; + var _set = Common.enumLock; + var me = this, + $host = me.toolbar.$el; + + this.btnsContents = Common.Utils.injectButtons( + $host.find(".btn-slot.btn-contents"), + "", + "toolbar__icon btn-big-contents", + me.capBtnInsContents, + [ + _set.inHeader, + _set.richEditLock, + _set.plainEditLock, + _set.richDelLock, + _set.plainDelLock, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + true, + true, + undefined, + "1", + "bottom", + "small" + ); + this.btnsNotes = Common.Utils.injectButtons( + $host.find(".btn-slot.slot-notes"), + "", + "toolbar__icon btn-notes", + me.capBtnInsFootnote, + [ + _set.paragraphLock, + _set.inEquation, + _set.inImage, + _set.inHeader, + _set.controlPlain, + _set.richEditLock, + _set.plainEditLock, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + true, + true, + undefined, + "1", + "bottom", + "small" + ); + this.btnsHyperlink = Common.Utils.injectButtons( + $host.find(".btn-slot.slot-inshyperlink"), + "", + "toolbar__icon btn-inserthyperlink", + me.capBtnInsLink, + [ + _set.paragraphLock, + _set.headerLock, + _set.hyperlinkLock, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + undefined, + undefined, + undefined, + "1", + "bottom", + "small" + ); + Array.prototype.push.apply( + this.paragraphControls, + this.btnsContents.concat(this.btnsNotes, this.btnsHyperlink) + ); + + this.btnContentsUpdate = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-contents-update"), + cls: "btn-toolbar", + iconCls: "toolbar__icon btn-update", + lock: [ + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnContentsUpdate, + split: true, + menu: true, + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "0, -8", }); - - this.btnTableFigures.on('click', function (b, e) { - me.fireEvent('links:tof'); + this.paragraphControls.push(this.btnContentsUpdate); + + this.btnAddText = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-add-text"), + cls: "btn-toolbar", + iconCls: "toolbar__icon btn-add-text", + lock: [ + _set.cantAddTextTOF, + _set.inHeader, + _set.inFootnote, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnAddText, + menu: new Common.UI.Menu({ + items: [], + }), + dataHint: "1", + dataHintDirection: "left", + dataHintOffset: "medium", }); - - this.btnTableFiguresUpdate.on('click', function (b, e) { - me.fireEvent('links:tof-update'); + this.paragraphControls.push(this.btnAddText); + + this.btnBookmarks = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-bookmarks"), + cls: "btn-toolbar x-huge icon-top", + iconCls: "toolbar__icon btn-bookmarks", + lock: [ + _set.paragraphLock, + _set.inHeader, + _set.headerLock, + _set.controlPlain, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnBookmarks, + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "small", }); - } + this.paragraphControls.push(this.btnBookmarks); + + this.btnCaption = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-caption"), + cls: "btn-toolbar x-huge icon-top", + iconCls: "toolbar__icon btn-caption", + lock: [ + _set.inHeader, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnCaption, + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "small", + }); + this.paragraphControls.push(this.btnCaption); + + this.btnCrossRef = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-crossref"), + cls: "btn-toolbar x-huge icon-top", + iconCls: "toolbar__icon btn-cross-reference", + lock: [ + _set.paragraphLock, + _set.headerLock, + _set.controlPlain, + _set.richEditLock, + _set.plainEditLock, + _set.contentLock, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnCrossRef, + dataHint: "1", + dataHintDirection: "bottom", + dataHintOffset: "small", + }); + this.paragraphControls.push(this.btnCrossRef); + + this.btnTableFigures = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-tof"), + cls: "btn-toolbar", + iconCls: "toolbar__icon btn-contents", + lock: [ + _set.inHeader, + _set.richEditLock, + _set.plainEditLock, + _set.richDelLock, + _set.plainDelLock, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnTOF, + dataHint: "1", + dataHintDirection: "left", + dataHintOffset: "medium", + }); + this.paragraphControls.push(this.btnTableFigures); + + this.btnTableFiguresUpdate = new Common.UI.Button({ + parentEl: $host.find("#slot-btn-tof-update"), + cls: "btn-toolbar", + iconCls: "toolbar__icon btn-update", + lock: [ + _set.paragraphLock, + _set.inHeader, + _set.richEditLock, + _set.plainEditLock, + _set.richDelLock, + _set.plainDelLock, + _set.cantUpdateTOF, + _set.previewReviewMode, + _set.viewFormMode, + _set.lostConnect, + _set.disableOnStart, + _set.docLockView, + _set.docLockForms, + _set.docLockComments, + ], + caption: this.capBtnContentsUpdate, + dataHint: "1", + dataHintDirection: "left", + dataHintOffset: "medium", + }); + this.paragraphControls.push(this.btnTableFiguresUpdate); + Common.Utils.lockControls(Common.enumLock.disableOnStart, true, { + array: this.paragraphControls, + }); + this._state = { disabled: false }; + }, - return { + render: function (el) { + return this; + }, - options: {}, - - initialize: function (options) { - Common.UI.BaseView.prototype.initialize.call(this); - this.toolbar = options.toolbar; - - this.btnsPrevNote = []; - this.btnsNextNote = []; - this.btnsPrevEndNote = []; - this.btnsNextEndNote = []; - this.paragraphControls = []; - var _set = Common.enumLock; - var me = this, - $host = me.toolbar.$el; - - this.btnsContents = Common.Utils.injectButtons($host.find('.btn-slot.btn-contents'), '', 'toolbar__icon btn-big-contents', me.capBtnInsContents, - [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - true, true, undefined, '1', 'bottom', 'small'); - this.btnsNotes = Common.Utils.injectButtons($host.find('.btn-slot.slot-notes'), '', 'toolbar__icon btn-notes', me.capBtnInsFootnote, - [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - true, true, undefined, '1', 'bottom', 'small'); - this.btnsHyperlink = Common.Utils.injectButtons($host.find('.btn-slot.slot-inshyperlink'), '', 'toolbar__icon btn-inserthyperlink', me.capBtnInsLink, - [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - undefined, undefined, undefined, '1', 'bottom', 'small'); - Array.prototype.push.apply(this.paragraphControls, this.btnsContents.concat(this.btnsNotes, this.btnsHyperlink)); - - this.btnContentsUpdate = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-contents-update'), - cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-update', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockForms, _set.docLockComments], - caption: this.capBtnContentsUpdate, - split: true, - menu: true, - dataHint: '1', - dataHintDirection: 'bottom', - dataHintOffset: '0, -8' - }); - this.paragraphControls.push(this.btnContentsUpdate); - - this.btnAddText = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-add-text'), - cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-add-text', - lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - caption: this.capBtnAddText, - menu: new Common.UI.Menu({ - items: [] - }), - dataHint: '1', - dataHintDirection: 'left', - dataHintOffset: 'medium' - }); - this.paragraphControls.push(this.btnAddText); - - this.btnBookmarks = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-bookmarks'), - cls: 'btn-toolbar x-huge icon-top', - iconCls: 'toolbar__icon btn-bookmarks', - lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - caption: this.capBtnBookmarks, - dataHint: '1', - dataHintDirection: 'bottom', - dataHintOffset: 'small' - }); - this.paragraphControls.push(this.btnBookmarks); - - this.btnCaption = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-caption'), - cls: 'btn-toolbar x-huge icon-top', - iconCls: 'toolbar__icon btn-caption', - lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - caption: this.capBtnCaption, - dataHint: '1', - dataHintDirection: 'bottom', - dataHintOffset: 'small' - }); - this.paragraphControls.push(this.btnCaption); - - this.btnCrossRef = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-crossref'), - cls: 'btn-toolbar x-huge icon-top', - iconCls: 'toolbar__icon btn-cross-reference', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - caption: this.capBtnCrossRef, - dataHint: '1', - dataHintDirection: 'bottom', - dataHintOffset: 'small' - }); - this.paragraphControls.push(this.btnCrossRef); - - this.btnTableFigures = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-tof'), - cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-contents', - lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - caption: this.capBtnTOF, - dataHint: '1', - dataHintDirection: 'left', - dataHintOffset: 'medium' - }); - this.paragraphControls.push(this.btnTableFigures); - - this.btnTableFiguresUpdate = new Common.UI.Button({ - parentEl: $host.find('#slot-btn-tof-update'), - cls: 'btn-toolbar', - iconCls: 'toolbar__icon btn-update', - lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], - caption: this.capBtnContentsUpdate, - dataHint: '1', - dataHintDirection: 'left', - dataHintOffset: 'medium' + onAppReady: function (config) { + var me = this; + new Promise(function (accept, reject) { + accept(); + }).then(function () { + var contentsTemplate = _.template( + '
    ' + ); + me.btnsContents.forEach(function (btn) { + btn.updateHint(me.tipContents); + + var _menu = new Common.UI.Menu({ + cls: "toc-menu shifted-left", + items: [ + { + template: contentsTemplate, + offsety: 0, + value: 0, + previewId: "id-toolbar-toc-0", + }, + { + template: contentsTemplate, + offsety: 72, + value: 1, + previewId: "id-toolbar-toc-1", + }, + { caption: me.textContentsSettings, value: "settings" }, + { caption: me.textContentsRemove, value: "remove" }, + ], }); - this.paragraphControls.push(this.btnTableFiguresUpdate); - Common.Utils.lockControls(Common.enumLock.disableOnStart, true, {array: this.paragraphControls}); - this._state = {disabled: false}; - }, - - render: function (el) { - return this; - }, - - onAppReady: function (config) { - var me = this; - (new Promise(function (accept, reject) { - accept(); - })).then(function(){ - var contentsTemplate = _.template('
    '); - me.btnsContents.forEach( function(btn) { - btn.updateHint( me.tipContents ); - - var _menu = new Common.UI.Menu({ - cls: 'toc-menu shifted-left', - items: [ - {template: contentsTemplate, offsety: 0, value: 0, previewId: 'id-toolbar-toc-0'}, - {template: contentsTemplate, offsety: 72, value: 1, previewId: 'id-toolbar-toc-1'}, - {caption: me.textContentsSettings, value: 'settings'}, - {caption: me.textContentsRemove, value: 'remove'} - ] - }); - - btn.setMenu(_menu); - }); - - me.contentsMenu = new Common.UI.Menu({ - cls: 'toc-menu shifted-left', - items: [ - {template: contentsTemplate, offsety: 0, value: 0, previewId: 'id-toolbar-toc-menu-0'}, - {template: contentsTemplate, offsety: 72, value: 1, previewId: 'id-toolbar-toc-menu-1'}, - {caption: me.textContentsSettings, value: 'settings'}, - {caption: me.textContentsRemove, value: 'remove'} - ] - }); - - me.btnContentsUpdate.updateHint([me.textUpdateAll, me.tipContentsUpdate]); - me.btnContentsUpdate.setMenu(new Common.UI.Menu({ - items: [ - {caption: me.textUpdateAll, value: 'all'}, - {caption: me.textUpdatePages, value: 'pages'} - ] - })); - me.btnAddText.updateHint(me.tipAddText); - - me.contentsUpdateMenu = new Common.UI.Menu({ + btn.setMenu(_menu); + }); + + me.contentsMenu = new Common.UI.Menu({ + cls: "toc-menu shifted-left", + items: [ + { + template: contentsTemplate, + offsety: 0, + value: 0, + previewId: "id-toolbar-toc-menu-0", + }, + { + template: contentsTemplate, + offsety: 72, + value: 1, + previewId: "id-toolbar-toc-menu-1", + }, + { caption: me.textContentsSettings, value: "settings" }, + { caption: me.textContentsRemove, value: "remove" }, + ], + }); + + me.btnContentsUpdate.updateHint([ + me.textUpdateAll, + me.tipContentsUpdate, + ]); + me.btnContentsUpdate.setMenu( + new Common.UI.Menu({ + items: [ + { caption: me.textUpdateAll, value: "all" }, + { caption: me.textUpdatePages, value: "pages" }, + ], + }) + ); + + me.btnAddText.updateHint(me.tipAddText); + + me.contentsUpdateMenu = new Common.UI.Menu({ + items: [ + { caption: me.textUpdateAll, value: "all" }, + { caption: me.textUpdatePages, value: "pages" }, + ], + }); + + me.btnsNotes.forEach(function (btn, index) { + btn.updateHint(me.tipNotes); + + var _menu = new Common.UI.Menu({ + items: [ + { caption: me.mniInsFootnote, value: "ins_footnote" }, + { caption: me.mniInsEndnote, value: "ins_endnote" }, + { caption: "--" }, + new Common.UI.MenuItem({ + template: !Common.UI.isRTL() + ? _.template( + [ + '", + ].join("") + ) + : _.template( + [ + '", + ].join("") + ), + stopPropagation: true, + }), + new Common.UI.MenuItem({ + template: !Common.UI.isRTL() + ? _.template( + [ + '", + ].join("") + ) + : _.template( + [ + '", + ].join("") + ), + stopPropagation: true, + }), + { caption: "--" }, + { caption: me.mniDelFootnote, value: "delele" }, + { + caption: me.mniConvertNote, + value: "convert", + menu: new Common.UI.Menu({ + menuAlign: "tl-tr", items: [ - {caption: me.textUpdateAll, value: 'all'}, - {caption: me.textUpdatePages, value: 'pages'} - ] - }); - - me.btnsNotes.forEach( function(btn, index) { - btn.updateHint( me.tipNotes ); - - var _menu = new Common.UI.Menu({ - items: [ - {caption: me.mniInsFootnote, value: 'ins_footnote'}, - {caption: me.mniInsEndnote, value: 'ins_endnote'}, - {caption: '--'}, - new Common.UI.MenuItem({ - template: !Common.UI.isRTL() ? _.template([ - '' - ].join('')) : - _.template([ - '' - ].join('')), - stopPropagation: true - }), - new Common.UI.MenuItem({ - template: !Common.UI.isRTL() ? _.template([ - '' - ].join('')) : - _.template([ - '' - ].join('')), - stopPropagation: true - }), - {caption: '--'}, - {caption: me.mniDelFootnote, value: 'delele'}, - { - caption: me.mniConvertNote, value: 'convert', - menu: new Common.UI.Menu({ - menuAlign : 'tl-tr', - items: [ - {caption: me.textConvertToEndnotes, value: 'to-endnotes'}, - {caption: me.textConvertToFootnotes, value: 'to-footnotes'}, - {caption: me.textSwapNotes, value: 'swap'} - ] - }) - }, - {caption: me.mniNoteSettings, value: 'settings'} - ] - }); - btn.setMenu(_menu); - - me.btnsPrevNote.push(new Common.UI.Button({ - el: $('#id-menu-goto-footnote-prev-'+index), - cls: 'btn-toolbar' - })); - me.btnsNextNote.push(new Common.UI.Button({ - el: $('#id-menu-goto-footnote-next-'+index), - cls: 'btn-toolbar' - })); - me.btnsPrevEndNote.push(new Common.UI.Button({ - el: $('#id-menu-goto-endnote-prev-'+index), - cls: 'btn-toolbar' - })); - me.btnsNextEndNote.push(new Common.UI.Button({ - el: $('#id-menu-goto-endnote-next-'+index), - cls: 'btn-toolbar' - })); - }); - - me.btnsHyperlink.forEach( function(btn) { - btn.updateHint(me.tipInsertHyperlink + Common.Utils.String.platformKey('Ctrl+K')); - }); - - me.btnBookmarks.updateHint(me.tipBookmarks); - me.btnCaption.updateHint(me.tipCaption); - me.btnCrossRef.updateHint(me.tipCrossRef); - - me.btnTableFigures.updateHint(me.tipTableFigures); - me.btnTableFiguresUpdate.updateHint(me.tipTableFiguresUpdate); - - setEvents.call(me); + { + caption: me.textConvertToEndnotes, + value: "to-endnotes", + }, + { + caption: me.textConvertToFootnotes, + value: "to-footnotes", + }, + { caption: me.textSwapNotes, value: "swap" }, + ], + }), + }, + { caption: me.mniNoteSettings, value: "settings" }, + ], }); - }, - - fillAddTextMenu: function(menu, endlevel, current) { - endlevel = Math.max(endlevel || 3, current+1); - menu.removeAll(); - menu.addItem(new Common.UI.MenuItem({ - caption: this.txtDontShowTof, - value: -1, - checkable: true, - checked: current<0, - toggleGroup : 'addTextGroup' - })); - for (var i=0; i