diff --git a/apps/api/documents/api.js b/apps/api/documents/api.js index adbc4a6d9..179c2eeb9 100644 --- a/apps/api/documents/api.js +++ b/apps/api/documents/api.js @@ -557,7 +557,7 @@ }; DocsAPI.DocEditor.version = function() { - return '4.2.0'; + return '4.2.4'; }; MessageDispatcher = function(fn, scope) { diff --git a/apps/common/embed/lib/controller/modals.js b/apps/common/embed/lib/controller/modals.js index d31e41f67..f85f39e92 100644 --- a/apps/common/embed/lib/controller/modals.js +++ b/apps/common/embed/lib/controller/modals.js @@ -53,7 +53,7 @@ $dlgShare = common.view.modals.create('share'); var _encoded = encodeURIComponent(appConfig.shareUrl); - var _mailto = 'mailto:?subject=I have shared a document with you: ' + appConfig.docTitle + '&body=I have shared a document with you: ' + _encoded + '"'; + var _mailto = 'mailto:?subject=I have shared a document with you: ' + appConfig.docTitle + '&body=I have shared a document with you: ' + _encoded; $dlgShare.find('#btn-copyshort').on('click', copytext.bind(this, $dlgShare.find('#id-short-url'))); $dlgShare.find('.share-buttons > span').on('click', function(e){ diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index 3f251628c..61968da31 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -430,10 +430,11 @@ define([ isGroup && decorateBtn(el.children('button')); } - if (disabled) { + if (disabled || !Common.Utils.isGecko) { var tip = this.cmpEl.data('bs.tooltip'); if (tip) { - tip.hide(); + disabled && tip.hide(); + !Common.Utils.isGecko && (tip.enabled = !disabled); } } } @@ -466,8 +467,10 @@ define([ var cmpEl = this.cmpEl, modalParents = cmpEl.closest('.asc-window'); + if (cmpEl.data('bs.tooltip')) + cmpEl.removeData('bs.tooltip'); cmpEl.attr('data-toggle', 'tooltip'); - cmpEl.tooltip('destroy').tooltip({ + cmpEl.tooltip({ title : hint, placement : this.options.hintAnchor || 'cursor' }); diff --git a/apps/common/main/lib/component/DataView.js b/apps/common/main/lib/component/DataView.js index b9e68a11f..8ece277ca 100644 --- a/apps/common/main/lib/component/DataView.js +++ b/apps/common/main/lib/component/DataView.js @@ -84,7 +84,9 @@ define([ defaults: function() { return { id: Common.UI.getId(), - caption: '' + caption: '', + inline: false, + headername: undefined } } }); @@ -99,7 +101,8 @@ define([ id: Common.UI.getId(), selected: false, allowSelected: true, - value: null + value: null, + disabled: false } } }); @@ -140,6 +143,7 @@ define([ el.off('click').on('click', _.bind(this.onClick, this)); el.off('dblclick').on('dblclick', _.bind(this.onDblClick, this)); el.off('contextmenu').on('contextmenu', _.bind(this.onContextMenu, this)); + el.toggleClass('disabled', this.model.get('disabled')); if (!_.isUndefined(this.model.get('cls'))) el.addClass(this.model.get('cls')); @@ -157,10 +161,14 @@ define([ }, onClick: function(e) { + if (this.model.get('disabled')) return false; + this.trigger('click', this, this.model, e); }, onDblClick: function(e) { + if (this.model.get('disabled')) return false; + this.trigger('dblclick', this, this.model, e); }, @@ -190,10 +198,15 @@ define([ template: _.template([ '
', '<% _.each(groups, function(group) { %>', - '
', - '
', - '<%= group.caption %>', - '
', + '<% if (group.headername !== undefined) { %>', + '
<%= group.headername %>
', + '<% } %>', + '
', + '<% if (!_.isEmpty(group.caption)) { %>', + '
', + '<%= group.caption %>', + '
', + '<% } %>', '
', '
', '
', @@ -696,39 +709,29 @@ define([ fillIndexesArray: function() { if (this.dataViewItems.length<=0) return; - var top, left, - el = $(this.dataViewItems[0].el), - itemW = el.outerWidth() + parseInt(el.css('margin-left')) + parseInt(el.css('margin-right')), - itemH = el.outerHeight() + parseInt(el.css('margin-top')) + parseInt(el.css('margin-bottom')), - offsetLeft = this.$el.offset().left, - offsetTop = this.$el.offset().top, - idxOffset = 0; - this._layoutParams = { itemsIndexes: [], columns: 0, rows: 0 }; - if (this.groups && this.groups.length > 0) { - var group_desc = this.cmpEl.find('.group-description:first'); - if (group_desc.length>0) - offsetLeft += group_desc.width(); - } + var el = $(this.dataViewItems[0].el), + itemW = el.outerWidth() + parseInt(el.css('margin-left')) + parseInt(el.css('margin-right')), + offsetLeft = this.$el.offset().left, + prevtop = -1, topIdx = 0, leftIdx = 0; + for (var i=0; i this._layoutParams.itemsIndexes.length-1) { + var top = $(this.dataViewItems[i].el).offset().top; + leftIdx = Math.floor(($(this.dataViewItems[i].el).offset().left - offsetLeft)/itemW); + if (top>prevtop) { + prevtop = top; this._layoutParams.itemsIndexes.push([]); + topIdx = this._layoutParams.itemsIndexes.length-1; } - this._layoutParams.itemsIndexes[top][left] = i; - this.dataViewItems[i].topIdx = top; - this.dataViewItems[i].leftIdx = left; - if (this._layoutParams.columns 300) - me.zoom = window.outerWidth / window.innerWidth; - - if (Math.abs(me.zoom - 1) < 0.1) - me.zoom = 1; - - me.zoom = window.outerWidth / window.innerWidth; - - var _devicePixelRatio = window.devicePixelRatio / me.zoom; - - // device pixel ratio: кратно 0.5 - _devicePixelRatio = (5 * (((2.5 + 10 * _devicePixelRatio) / 5) >> 0)) / 10; - me.zoom = window.devicePixelRatio / _devicePixelRatio; - - // chrome 54.x: zoom = "reset" - clear retina zoom (windows) - //document.firstElementChild.style.zoom = "reset"; - document.firstElementChild.style.zoom = 1.0 / me.zoom; - } - else - { - // делаем простую проверку - // считаем: 0 < window.devicePixelRatio < 2 => _devicePixelRatio = 1; zoom = window.devicePixelRatio / _devicePixelRatio; - // считаем: window.devicePixelRatio >= 2 => _devicePixelRatio = 2; zoom = window.devicePixelRatio / _devicePixelRatio; - if (window.devicePixelRatio > 0.1) - { - if (window.devicePixelRatio < 1.99) - { - var _devicePixelRatio = 1; - me.zoom = window.devicePixelRatio / _devicePixelRatio; - } - else - { - var _devicePixelRatio = 2; - me.zoom = window.devicePixelRatio / _devicePixelRatio; - } - // chrome 54.x: zoom = "reset" - clear retina zoom (windows) - //document.firstElementChild.style.zoom = "reset"; - document.firstElementChild.style.zoom = 1.0 / me.zoom; - } - else - document.firstElementChild.style.zoom = "normal"; - } + // делаем простую проверку + // считаем: 0 < window.devicePixelRatio < 2 => _devicePixelRatio = 1; zoom = window.devicePixelRatio / _devicePixelRatio; + // считаем: window.devicePixelRatio >= 2 => _devicePixelRatio = 2; zoom = window.devicePixelRatio / _devicePixelRatio; + if (window.devicePixelRatio > 0.1) + { + if (window.devicePixelRatio < 1.99) + { + var _devicePixelRatio = 1; + me.zoom = window.devicePixelRatio / _devicePixelRatio; + } + else + { + var _devicePixelRatio = 2; + me.zoom = window.devicePixelRatio / _devicePixelRatio; + } + // chrome 54.x: zoom = "reset" - clear retina zoom (windows) + //document.firstElementChild.style.zoom = "reset"; + document.firstElementChild.style.zoom = 1.0 / me.zoom; + } + else + document.firstElementChild.style.zoom = "normal"; } me.innerWidth = window.innerWidth * me.zoom; me.innerHeight = window.innerHeight * me.zoom; @@ -648,6 +624,48 @@ Common.Utils.applyCustomization = function(config, elmap) { } }; +Common.Utils.applyCustomizationPlugins = function(plugins) { + if (!plugins || plugins.length<1) return; + + var _createXMLHTTPObject = function() { + var xmlhttp; + try { + xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); + } + catch (e) { + try { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + catch (E) { + xmlhttp = false; + } + } + if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { + xmlhttp = new XMLHttpRequest(); + } + return xmlhttp; + }; + + var _getPluginCode = function(url) { + if (!url) return ''; + try { + var xhrObj = _createXMLHTTPObject(); + if (xhrObj && url) { + xhrObj.open('GET', url, false); + xhrObj.send(''); + if (xhrObj.status == 200) + eval(xhrObj.responseText); + } + } + catch (e) {} + return null; + }; + + plugins.forEach(function(url){ + if (url) _getPluginCode(url); + }); +}; + Common.Utils.fillUserInfo = function(info, lang, defname) { var _user = info || {}; !_user.id && (_user.id = ('uid-' + Date.now())); diff --git a/apps/common/main/lib/view/About.js b/apps/common/main/lib/view/About.js index 29e0789ac..c79cc8f55 100644 --- a/apps/common/main/lib/view/About.js +++ b/apps/common/main/lib/view/About.js @@ -52,7 +52,7 @@ define([ initialize: function(options) { Common.UI.BaseView.prototype.initialize.call(this,arguments); - this.txtVersionNum = '4.2'; + this.txtVersionNum = '4.3'; this.txtAscMail = 'support@onlyoffice.com'; this.txtAscTelNum = '+371 660-16425'; this.txtAscUrl = 'www.onlyoffice.com'; diff --git a/apps/common/main/resources/less/dataview.less b/apps/common/main/resources/less/dataview.less index 32002ce61..a212b8b65 100644 --- a/apps/common/main/resources/less/dataview.less +++ b/apps/common/main/resources/less/dataview.less @@ -31,26 +31,43 @@ clear: left; overflow: hidden; - & > div { + &.inline { display: inline-block; + &.margin .group-items-container { + margin-right: 20px; + } } .group-items-container { overflow: hidden; + margin-bottom: 5px; & > div { display: inline-block; float: left; - margin: 4px; - cursor: pointer; + margin: 2px 4px 4px; + + &:not(.disabled) { + cursor: pointer; + } + + &.disabled { + opacity: 0.5; + } .box-shadow(0 0 0 1px @gray); - &:hover, - &.selected { + &:hover:not(.disabled), + &.selected:not(.disabled) { .box-shadow(0 0 0 2px @primary); } } } } + + .header-name { + padding: 10px 2px 12px 4px; + font-weight: bold; + cursor: default; + } } \ No newline at end of file diff --git a/apps/common/main/resources/less/review-changes.less b/apps/common/main/resources/less/review-changes.less index 68c96b186..f4f5da96c 100644 --- a/apps/common/main/resources/less/review-changes.less +++ b/apps/common/main/resources/less/review-changes.less @@ -5,7 +5,7 @@ background: @gray-light; border: 1px solid @gray-dark; height: 35px; - z-index: 1000; + z-index: @zindex-dropdown - 1; .review-group { display: inline-block; diff --git a/apps/common/main/resources/less/tooltip.less b/apps/common/main/resources/less/tooltip.less index d2ae02886..728459182 100644 --- a/apps/common/main/resources/less/tooltip.less +++ b/apps/common/main/resources/less/tooltip.less @@ -50,3 +50,7 @@ word-wrap: break-word; max-width: 300px; } + +.link-tooltip .tooltip-inner { + max-width: 500px; +} \ No newline at end of file diff --git a/apps/documenteditor/main/app.js b/apps/documenteditor/main/app.js index 40df85e8a..6160cf190 100644 --- a/apps/documenteditor/main/app.js +++ b/apps/documenteditor/main/app.js @@ -178,6 +178,7 @@ require([ 'documenteditor/main/app/controller/RightMenu', 'documenteditor/main/app/controller/LeftMenu', 'documenteditor/main/app/controller/Main', + 'documenteditor/main/app/view/FileMenuPanels', 'documenteditor/main/app/view/ParagraphSettings', 'documenteditor/main/app/view/HeaderFooterSettings', 'documenteditor/main/app/view/ImageSettings', diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 30626e67f..93b10ee92 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -283,7 +283,7 @@ define([ this.api.SetTextBoxInputMode(parseInt(value) == 1); /** coauthoring begin **/ - if (this.mode.isEdit && this.mode.canLicense && !this.mode.isOffline && this.mode.canCoAuthoring) { + if (this.mode.isEdit && !this.mode.isOffline && this.mode.canCoAuthoring) { value = Common.localStorage.getItem("de-settings-coauthmode"); var fast_coauth = (value===null || parseInt(value) == 1); this.api.asc_SetFastCollaborative(fast_coauth); diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index ee00af621..6072e1079 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -147,6 +147,7 @@ define([ this.editorConfig = {}; this.appOptions = {}; this.plugins = undefined; + this.UICustomizePlugins = []; Common.Gateway.on('init', _.bind(this.loadConfig, this)); Common.Gateway.on('showmessage', _.bind(this.onExternalMessage, this)); Common.Gateway.on('opendocument', _.bind(this.loadDocument, this)); @@ -821,7 +822,7 @@ define([ me.api.SetTextBoxInputMode(value!==null && parseInt(value) == 1); /** coauthoring begin **/ - if (me.appOptions.isEdit && me.appOptions.canLicense && !me.appOptions.isOffline && me.appOptions.canCoAuthoring) { + if (me.appOptions.isEdit && !me.appOptions.isOffline && me.appOptions.canCoAuthoring) { value = Common.localStorage.getItem("de-settings-coauthmode"); if (value===null && Common.localStorage.getItem("de-settings-autosave")===null && me.appOptions.customization && me.appOptions.customization.autosave===false) { @@ -860,7 +861,7 @@ define([ application.getController('Common.Controllers.ExternalMergeEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization}); pluginsController.setApi(me.api); - me.updatePlugins(me.plugins); + me.updatePlugins(me.plugins, false); me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me)); documentHolderController.setApi(me.api); @@ -905,9 +906,14 @@ define([ toolbarController.onApiCoAuthoringDisconnect(); me.api.UpdateInterfaceState(); me.fillTextArt(me.api.asc_getTextArtPreviews()); + + if (me.appOptions.canBrandingExt) + Common.NotificationCenter.trigger('document:ready', 'main'); } }, 50); - } + } else if (me.appOptions.canBrandingExt) + Common.NotificationCenter.trigger('document:ready', 'main'); + if (this.appOptions.canAnalytics && false) Common.component.Analytics.initialize('UA-12442749-13', 'Document Editor'); @@ -1013,7 +1019,9 @@ define([ params.asc_getTrial() && headerView.setDeveloperMode(true); this.appOptions.canRename && headerView.setCanRename(true); - this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object'); + this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object' || this.editorConfig.plugins); + if (this.appOptions.canBrandingExt) + this.updatePlugins(this.plugins, true); this.applyModeCommonElements(); this.applyModeEditorElements(); @@ -1464,13 +1472,15 @@ define([ }, hidePreloader: function() { - if (!!this.appOptions.customization && !this.appOptions.customization.done) { - this.appOptions.customization.done = true; - if (!this.appOptions.isDesktopApp) + if (!this._state.customizationDone) { + this._state.customizationDone = true; + if (this.appOptions.customization && !this.appOptions.isDesktopApp) this.appOptions.customization.about = true; Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationElements); - if (this.appOptions.canBrandingExt) + if (this.appOptions.canBrandingExt) { Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationExtElements); + Common.Utils.applyCustomizationPlugins(this.UICustomizePlugins); + } } Common.NotificationCenter.trigger('layout:changed', 'main'); @@ -1745,7 +1755,7 @@ define([ }, applySettings: function() { - if (this.appOptions.isEdit && this.appOptions.canLicense && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { + if (this.appOptions.isEdit && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { var value = Common.localStorage.getItem("de-settings-coauthmode"), oldval = this._state.fastCoauth; this._state.fastCoauth = (value===null || parseInt(value) == 1); @@ -1803,8 +1813,11 @@ define([ if (url) this.iframePrint.src = url; }, - updatePlugins: function(plugins) { // plugins from config - if (!plugins || !plugins.pluginsData || plugins.pluginsData.length<1) return; + updatePlugins: function(plugins, uiCustomize) { // plugins from config + if (!plugins) return; + + var pluginsData = (uiCustomize) ? plugins.UIpluginsData : plugins.pluginsData; + if (!pluginsData || pluginsData.length<1) return; var _createXMLHTTPObject = function() { var xmlhttp; @@ -1842,7 +1855,7 @@ define([ var arr = [], baseUrl = plugins.url; - plugins.pluginsData.forEach(function(item){ + pluginsData.forEach(function(item){ var url = item; if (!/(^https?:\/\/)/i.test(url) && !/(^www.)/i.test(item)) url = baseUrl + item; @@ -1855,14 +1868,14 @@ define([ autoStartGuid: plugins.autoStartGuid, url: plugins.url, pluginsData: arr - }); + }, !!uiCustomize); }, - updatePluginsList: function(plugins) { + updatePluginsList: function(plugins, uiCustomize) { var pluginStore = this.getApplication().getCollection('Common.Collections.Plugins'), isEdit = this.appOptions.isEdit; - if (pluginStore && plugins) { - var arr = []; + if (plugins) { + var arr = [], arrUI = []; plugins.pluginsData.forEach(function(item){ var variations = item.variations, variationsArr = []; @@ -1873,7 +1886,9 @@ define([ isSupported = true; break; } } - if (isSupported && (isEdit || itemVar.isViewer)) + if (isSupported && (isEdit || itemVar.isViewer)) { + var isRelativeUrl = !(/(^https?:\/\/)/i.test(itemVar.url) || /(^www.)/i.test(itemVar.url)); + item.isUICustomizer ? arrUI.push((isRelativeUrl) ? ((item.baseUrl ? item.baseUrl : plugins.url) + itemVar.url) : itemVar.url) : variationsArr.push(new Common.Models.PluginVariation({ description: itemVar.description, index: variationsArr.length, @@ -1890,10 +1905,11 @@ define([ buttons: itemVar.buttons, size: itemVar.size, initOnSelectionChanged: itemVar.initOnSelectionChanged, - isRelativeUrl: !(/(^https?:\/\/)/i.test(itemVar.url) || /(^www.)/i.test(itemVar.url)) + isRelativeUrl: isRelativeUrl })); + } }); - if (variationsArr.length>0) + if (variationsArr.length>0 && !item.isUICustomizer) arr.push(new Common.Models.Plugin({ name : item.name, guid: item.guid, @@ -1903,11 +1919,15 @@ define([ })); }); - pluginStore.reset(arr); + if (uiCustomize!==false) // from ui customizer in editor config or desktop event + this.UICustomizePlugins = arrUI; - this.appOptions.pluginsPath = (plugins.url); - this.appOptions.canPlugins = (arr.length>0); - } else { + if (!uiCustomize) { + if (pluginStore) pluginStore.reset(arr); + this.appOptions.pluginsPath = (plugins.url); + this.appOptions.canPlugins = (arr.length>0); + } + } else if (!uiCustomize){ this.appOptions.pluginsPath = ''; this.appOptions.canPlugins = false; } @@ -1916,7 +1936,7 @@ define([ if (plugins.autoStartGuid) this.api.asc_pluginRun(plugins.autoStartGuid, 0, ''); } - this.getApplication().getController('LeftMenu').enablePlugins(); + if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins(); }, 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.', diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 8ed872111..554b9e0f5 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -53,7 +53,8 @@ define([ 'documenteditor/main/app/view/MailMergeRecepients', 'documenteditor/main/app/view/StyleTitleDialog', 'documenteditor/main/app/view/PageMarginsDialog', - 'documenteditor/main/app/view/PageSizeDialog' + 'documenteditor/main/app/view/PageSizeDialog', + 'documenteditor/main/app/view/NoteSettingsDialog' ], function () { 'use strict'; @@ -92,7 +93,8 @@ define([ can_copycut: undefined, pgmargins: undefined, fontsize: undefined, - in_equation: false + in_equation: false, + in_chart: false }; this.flg = {}; this.diagramEditor = null; @@ -264,6 +266,9 @@ define([ toolbar.mnuZoomIn.on('click', _.bind(this.onZoomInClick, this)); toolbar.mnuZoomOut.on('click', _.bind(this.onZoomOutClick, this)); toolbar.btnInsertEquation.on('click', _.bind(this.onInsertEquationClick, this)); + toolbar.btnNotes.menu.on('item:click', _.bind(this.onNotesClick, this)); + toolbar.mnuGotoFootPrev.on('click', _.bind(this.onFootnotePrevClick, this)); + toolbar.mnuGotoFootNext.on('click', _.bind(this.onFootnoteNextClick, this)); $('#id-save-style-plus, #id-save-style-link', toolbar.$el).on('click', this.onMenuSaveStyle.bind(this)); @@ -563,6 +568,7 @@ define([ var pr, sh, i = -1, type, paragraph_locked = false, header_locked = false, + image_locked = false, can_add_table = false, can_add_image = false, enable_dropcap = undefined, @@ -590,6 +596,7 @@ define([ in_header = true; } else if (type === Asc.c_oAscTypeSelectElement.Image) { in_image = in_header = true; + image_locked = pr.get_Locked(); if (pr && pr.get_ChartProperties()) in_chart = true; } else if (type === Asc.c_oAscTypeSelectElement.Math) { @@ -670,16 +677,23 @@ define([ } need_disable = paragraph_locked || header_locked || !can_add_image || in_equation; - if (need_disable != toolbar.btnInsertChart.isDisabled()) { - toolbar.btnInsertChart.setDisabled(need_disable); + if (need_disable != toolbar.btnInsertImage.isDisabled()) { toolbar.btnInsertImage.setDisabled(need_disable); toolbar.btnInsertShape.setDisabled(need_disable); toolbar.btnInsertText.setDisabled(need_disable); } - need_disable = need_disable || in_image; - if (need_disable != toolbar.mnuInsertTextArt.isDisabled()) - toolbar.mnuInsertTextArt.setDisabled(need_disable); + if ((need_disable || in_image) != toolbar.mnuInsertTextArt.isDisabled()) + toolbar.mnuInsertTextArt.setDisabled(need_disable || in_image); + + if (in_chart !== this._state.in_chart) { + toolbar.btnInsertChart.updateHint(in_chart ? toolbar.tipChangeChart : toolbar.tipInsertChart); + this._state.in_chart = in_chart; + } + + need_disable = in_chart && image_locked || !in_chart && need_disable; + if (need_disable != toolbar.btnInsertChart.isDisabled()) + toolbar.btnInsertChart.setDisabled(need_disable); need_disable = paragraph_locked || header_locked || in_chart || !can_add_image&&!in_equation; if (need_disable !== toolbar.btnInsertEquation.isDisabled()) toolbar.btnInsertEquation.setDisabled(need_disable); @@ -1675,20 +1689,43 @@ define([ onSelectChart: function(picker, item, record) { var me = this, - type = record.get('type'); + type = record.get('type'), + chart = false; - if (!this.diagramEditor) - this.diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); - - if (this.diagramEditor && me.api) { - this.diagramEditor.setEditMode(false); - this.diagramEditor.show(); - - var chart = me.api.asc_getChartObject(type); - if (chart) { - this.diagramEditor.setChartData(new Asc.asc_CChartBinary(chart)); + var selectedElements = me.api.getSelectedElements(); + if (selectedElements && _.isArray(selectedElements)) { + for (var i = 0; i< selectedElements.length; i++) { + if (Asc.c_oAscTypeSelectElement.Image == selectedElements[i].get_ObjectType()) { + var elValue = selectedElements[i].get_ObjectValue().get_ChartProperties(); + if (elValue) { + chart = elValue; + break; + } + } + } + } + + if (chart) { + var props = new Asc.asc_CImgProperty(); + chart.changeType(type); + props.put_ChartProperties(chart); + this.api.ImgApply(props); + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + } else { + if (!this.diagramEditor) + this.diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); + + if (this.diagramEditor && me.api) { + this.diagramEditor.setEditMode(false); + this.diagramEditor.show(); + + chart = me.api.asc_getChartObject(type); + if (chart) { + this.diagramEditor.setChartData(new Asc.asc_CChartBinary(chart)); + } + me.toolbar.fireEvent('insertchart', me.toolbar); } - me.toolbar.fireEvent('insertchart', me.toolbar); } }, @@ -1960,6 +1997,57 @@ define([ Common.NotificationCenter.trigger('edit:complete', this.toolbar); }, + onNotesClick: function(menu, item) { + if (this.api) { + if (item.value == 'ins_footnote') + this.api.asc_AddFootnote(); + else if (item.value == 'delele') + Common.UI.warning({ + msg: this.confirmDeleteFootnotes, + buttons: ['yes', 'no'], + primary: 'yes', + callback: _.bind(function(btn) { + if (btn == 'yes') { + this.api.asc_RemoveAllFootnotes(); + } + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + }, this) + }); + else if (item.value == 'settings') { + var me = this; + (new DE.Views.NoteSettingsDialog({ + api: me.api, + handler: function(result, settings) { + if (settings) { + me.api.asc_SetFootnoteProps(settings.props, settings.applyToAll); + if (result == 'insert') + me.api.asc_AddFootnote(settings.custom); + } + Common.NotificationCenter.trigger('edit:complete', me.toolbar); + }, + props : me.api.asc_GetFootnoteProps() + })).show(); + } else + return; + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + } + }, + + onFootnotePrevClick: function(btn) { + if (this.api) + this.api.asc_GotoFootnote(false); + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + }, + + onFootnoteNextClick: function(btn) { + if (this.api) + this.api.asc_GotoFootnote(true); + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + }, + _clearBullets: function() { this.toolbar.btnMarkers.toggle(false, true); this.toolbar.btnNumbers.toggle(false, true); @@ -2992,7 +3080,8 @@ define([ confirmAddFontName: 'The font you are going to save is not available on the current device.
The text style will be displayed using one of the device fonts, the saved font will be used when it is available.
Do you want to continue?', notcriticalErrorTitle: 'Warning', txtMarginsW: 'Left and right margins are too high for a given page wight', - txtMarginsH: 'Top and bottom margins are too high for a given page height' + txtMarginsH: 'Top and bottom margins are too high for a given page height', + confirmDeleteFootnotes: 'Do you want to delete all footnotes?' }, DE.Controllers.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/template/Toolbar.template b/apps/documenteditor/main/app/template/Toolbar.template index c6d15c865..6a71a0ac4 100644 --- a/apps/documenteditor/main/app/template/Toolbar.template +++ b/apps/documenteditor/main/app/template/Toolbar.template @@ -153,6 +153,7 @@ +
@@ -160,7 +161,7 @@ - +
diff --git a/apps/documenteditor/main/app/view/ChartSettings.js b/apps/documenteditor/main/app/view/ChartSettings.js index 08ca005e6..a4424e7ad 100644 --- a/apps/documenteditor/main/app/view/ChartSettings.js +++ b/apps/documenteditor/main/app/view/ChartSettings.js @@ -244,7 +244,7 @@ define([ cls : 'btn-large-dataview', iconCls : 'item-chartlist bar-normal', menu : new Common.UI.Menu({ - style: 'width: 560px;', + style: 'width: 435px; padding-top: 12px;', items: [ { template: _.template('') } ] @@ -254,15 +254,15 @@ define([ me.mnuChartTypePicker = new Common.UI.DataView({ el: $('#id-chart-menu-type'), parentMenu: btn.menu, - restoreHeight: 411, + restoreHeight: 421, groups: new Common.UI.DataViewGroupStore([ { id: 'menu-chart-group-bar', caption: me.textColumn }, { id: 'menu-chart-group-line', caption: me.textLine }, { id: 'menu-chart-group-pie', caption: me.textPie }, { id: 'menu-chart-group-hbar', caption: me.textBar }, - { id: 'menu-chart-group-area', caption: me.textArea }, - { id: 'menu-chart-group-scatter', caption: me.textPoint }, - { id: 'menu-chart-group-stock', caption: me.textStock } + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal', selected: true}, @@ -545,13 +545,13 @@ define([ txtInFront: 'In front', textEditData: 'Edit Data', textChartType: 'Change Chart Type', - textLine: 'Line Chart', - textColumn: 'Column Chart', - textBar: 'Bar Chart', - textArea: 'Area Chart', - textPie: 'Pie Chart', - textPoint: 'XY (Scatter) Chart', - textStock: 'Stock Chart', + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', textStyle: 'Style' }, DE.Views.ChartSettings || {})); diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index 7cd5aef47..47d1b05d5 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -327,7 +327,8 @@ define([ toolTip: new Common.UI.Tooltip({ owner: this, html: true, - title: '
Press Ctrl and click link' + title: '
Press Ctrl and click link', + cls: 'link-tooltip' // style: 'word-wrap: break-word;' }), strTip: '', @@ -335,7 +336,6 @@ define([ isVisible: false }; - /** coauthoring begin **/ var userTooltip = true; @@ -401,7 +401,6 @@ define([ }; var onMouseMoveStart = function() { - screenTip.isHidden = true; /** coauthoring begin **/ if (me.usertips.length>0) { @@ -418,10 +417,18 @@ define([ /** coauthoring end **/ }; + var mouseMoveData = null, + isTooltipHiding = false; + var onMouseMoveEnd = function() { if (screenTip.isHidden && screenTip.isVisible) { screenTip.isVisible = false; - screenTip.toolTip.hide(); + isTooltipHiding = true; + screenTip.toolTip.hide(function(){ + isTooltipHiding = false; + if (mouseMoveData) onMouseMove(mouseMoveData); + mouseMoveData = null; + }); } }; @@ -436,42 +443,63 @@ define([ } if (moveData) { - var showPoint, ToolTip; + var showPoint, ToolTip, + type = moveData.get_Type(); - if (moveData.get_Type()==1) { // 1 - hyperlink - var hyperProps = moveData.get_Hyperlink(); - var recalc = false; - if (hyperProps) { - screenTip.isHidden = false; - - ToolTip = (_.isEmpty(hyperProps.get_ToolTip())) ? hyperProps.get_Value() : hyperProps.get_ToolTip(); - ToolTip = Common.Utils.String.htmlEncode(ToolTip); - - if (screenTip.tipLength !== ToolTip.length || screenTip.strTip.indexOf(ToolTip)<0 ) { - screenTip.toolTip.setTitle(ToolTip + '
' + me.txtPressLink + ''); - screenTip.tipLength = ToolTip.length; - screenTip.strTip = ToolTip; - recalc = true; - } - - showPoint = [moveData.get_X(), moveData.get_Y()]; - showPoint[1] += (me._XY[1]-15); - showPoint[0] += (me._XY[0]+5); - - if (!screenTip.isVisible || recalc) { - screenTip.isVisible = true; - screenTip.toolTip.show([-10000, -10000]); - } - - if ( recalc ) { - screenTip.tipHeight = screenTip.toolTip.getBSTip().$tip.height(); - screenTip.tipWidth = screenTip.toolTip.getBSTip().$tip.width(); - } - showPoint[1] -= screenTip.tipHeight; - if (showPoint[0] + screenTip.tipWidth > me._BodyWidth ) - showPoint[0] = me._BodyWidth - screenTip.tipWidth; - screenTip.toolTip.getBSTip().$tip.css({top: showPoint[1] + 'px', left: showPoint[0] + 'px'}); + if (type==1 || type==3) { // 1 - hyperlink, 3 - footnote + if (isTooltipHiding) { + mouseMoveData = moveData; + return; } + + if (type==1) { + var hyperProps = moveData.get_Hyperlink(); + if (!hyperProps) return; + ToolTip = (_.isEmpty(hyperProps.get_ToolTip())) ? hyperProps.get_Value() : hyperProps.get_ToolTip(); + } else { + ToolTip = moveData.get_FootnoteText(); + if (ToolTip.length>1000) + ToolTip = ToolTip.substr(0, 1000) + '...'; + } + + var recalc = false; + screenTip.isHidden = false; + + ToolTip = Common.Utils.String.htmlEncode(ToolTip); + + if (screenTip.tipType !== type || screenTip.tipLength !== ToolTip.length || screenTip.strTip.indexOf(ToolTip)<0 ) { + screenTip.toolTip.setTitle((type==1) ? (ToolTip + '
' + me.txtPressLink + '') : ToolTip); + screenTip.tipLength = ToolTip.length; + screenTip.strTip = ToolTip; + screenTip.tipType = type; + recalc = true; + } + + showPoint = [moveData.get_X(), moveData.get_Y()]; + showPoint[1] += (me._XY[1]-15); + showPoint[0] += (me._XY[0]+5); + + if (!screenTip.isVisible || recalc) { + screenTip.isVisible = true; + screenTip.toolTip.show([-10000, -10000]); + } + + if ( recalc ) { + screenTip.tipHeight = screenTip.toolTip.getBSTip().$tip.height(); + screenTip.tipWidth = screenTip.toolTip.getBSTip().$tip.width(); + } + + recalc = false; + if (showPoint[0] + screenTip.tipWidth > me._BodyWidth ) { + showPoint[0] = me._BodyWidth - screenTip.tipWidth; + recalc = true; + } + if (showPoint[1] - screenTip.tipHeight < 0) { + showPoint[1] = (recalc) ? showPoint[1]+30 : 0; + } else + showPoint[1] -= screenTip.tipHeight; + + screenTip.toolTip.getBSTip().$tip.css({top: showPoint[1] + 'px', left: showPoint[0] + 'px'}); } /** coauthoring begin **/ else if (moveData.get_Type()==2 && me.mode.isEdit) { // 2 - locked object diff --git a/apps/documenteditor/main/app/view/FileMenu.js b/apps/documenteditor/main/app/view/FileMenu.js index d9a6eed04..292dc34c5 100644 --- a/apps/documenteditor/main/app/view/FileMenu.js +++ b/apps/documenteditor/main/app/view/FileMenu.js @@ -178,18 +178,15 @@ define([ ); var me = this; - this.panels = {}; - require(['documenteditor/main/app/view/FileMenuPanels'], function(){ - me.panels = { + me.panels = { // 'saveas' : (new DE.Views.FileMenuPanels.ViewSaveAs({menu:me})).render(), - 'opts' : (new DE.Views.FileMenuPanels.Settings({menu:me})).render(), - 'info' : (new DE.Views.FileMenuPanels.DocumentInfo({menu:me})).render(), - 'rights' : (new DE.Views.FileMenuPanels.DocumentRights({menu:me})).render(), - 'help' : (new DE.Views.FileMenuPanels.Help({menu:me})).render() - }; + 'opts' : (new DE.Views.FileMenuPanels.Settings({menu:me})).render(), + 'info' : (new DE.Views.FileMenuPanels.DocumentInfo({menu:me})).render(), + 'rights' : (new DE.Views.FileMenuPanels.DocumentRights({menu:me})).render(), + 'help' : (new DE.Views.FileMenuPanels.Help({menu:me})).render() + }; - me.$el.find('.content-box').hide(); - }); + me.$el.find('.content-box').hide(); return this; }, diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index 311edaa73..2a047e51b 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -315,7 +315,7 @@ define([ } /** coauthoring begin **/ $('tr.coauth', this.el)[mode.isEdit && mode.canCoAuthoring ? 'show' : 'hide'](); - $('tr.coauth.changes', this.el)[mode.isEdit && mode.canLicense && !mode.isOffline && mode.canCoAuthoring ? 'show' : 'hide'](); + $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring ? 'show' : 'hide'](); /** coauthoring end **/ }, @@ -375,7 +375,7 @@ define([ Common.localStorage.setItem("de-settings-zoom", this.cmbZoom.getValue()); /** coauthoring begin **/ Common.localStorage.setItem("de-settings-livecomment", this.chLiveComment.isChecked() ? 1 : 0); - if (this.mode.isEdit && this.mode.canLicense && !this.mode.isOffline && this.mode.canCoAuthoring) { + if (this.mode.isEdit && !this.mode.isOffline && this.mode.canCoAuthoring) { Common.localStorage.setItem("de-settings-coauthmode", this.cmbCoAuthMode.getValue()); Common.localStorage.setItem(this.cmbCoAuthMode.getValue() ? "de-settings-showchanges-fast" : "de-settings-showchanges-strict", this.cmbShowChanges.getValue()); } diff --git a/apps/documenteditor/main/app/view/FootnoteTip.js b/apps/documenteditor/main/app/view/FootnoteTip.js new file mode 100644 index 000000000..ca07deb04 --- /dev/null +++ b/apps/documenteditor/main/app/view/FootnoteTip.js @@ -0,0 +1,134 @@ +/* + * + * (c) Copyright Ascensio System Limited 2010-2016 + * + * This program is freeware. You can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html). + * In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that + * Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights. + * + * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html + * + * You can contact Ascensio System SIA by email at sales@onlyoffice.com + * + * The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display + * Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3. + * + * Pursuant to Section 7  3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains + * relevant author attributions when distributing the software. If the display of the logo in its graphic + * form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE" + * in every copy of the program you distribute. + * Pursuant to Section 7  3(e) we decline to grant you any rights under trademark law for use of our trademarks. + * +*/ + +define([ + 'common/main/lib/component/BaseView' +], function () { + 'use strict'; + + DE.Views.FootnoteTip = Common.UI.BaseView.extend(_.extend((function() { + var tipEl; + + return { + options : { + name : '', + text : '', + target : null, + placement: 'bottom' + }, + + template: _.template([ + '
', + '
', + '
', + '
', + '', + '', + '
', + '', + '', + '
', + '
', + '', + '
', + '
' + ].join('')), + + initialize : function(options) { + Common.UI.BaseView.prototype.initialize.call(this, options); + this.text = this.options.text; + this.name = this.options.name; + this.target = this.options.target; + this.placement = this.options.placement; + }, + + render: function() { + tipEl = $(this.template({ scope: this })); + + this.btnPrev = new Common.UI.Button({ + el: $('#footnote-btn-prev',tipEl) + }); + + this.btnNext = new Common.UI.Button({ + el: $('#footnote-btn-next',tipEl) + }); + + tipEl.find('.show-link label').on('click', _.bind(function() { this.trigger('settingsclick');}, this)); + this.btnPrev.on('click', _.bind(function(btn) { + this.trigger('prevclick'); + }, this)); + this.btnNext.on('click', _.bind(function(btn) { + this.trigger('nextclick'); + }, this)); + + this.lblName = tipEl.find('.tip-name'); + this.lblText = tipEl.find('.tip-text'); + + $(document.body).append(tipEl); + this.applyPlacement(this.target); + + return this; + }, + + show: function(name, text, target){ + if (tipEl) { + this.lblName.text(name); + this.lblText.text(text); + this.applyPlacement(target); + tipEl.show() + } else + this.render(); + }, + + hide: function() { + if (tipEl) tipEl.hide(); + }, + + applyPlacement: function (target) { + if (!target) + target = {top: 0, left: 0, width: 1, height: 1}; + var docHeight = Common.Utils.innerHeight(), + elHeight = tipEl.height(), + elWidth = tipEl.width(), + placement = this.placement; + + if (this.placement == 'bottom') { + if (target.top + target.height + elHeight > docHeight) + placement = 'top'; + } else if (this.placement == 'top') { + if (target.top - elHeight < 0) + placement = 'bottom'; + } + tipEl.removeClass(placement == 'top' ? 'bottom' : 'top'); + tipEl.addClass(placement); + (placement == 'top') ? tipEl.css({top: 'auto', bottom : docHeight - target.top + 'px', left: target.left + target.width/2 - elWidth/2 + 'px'}) + : tipEl.css({top : target.top + target.height + 'px', bottom: 'auto', left: target.left + target.width/2 - elWidth/2 + 'px'}); + }, + + textSettings: 'Note Settings' + } + })(), DE.Views.FootnoteTip || {})); +}); + diff --git a/apps/documenteditor/main/app/view/NoteSettingsDialog.js b/apps/documenteditor/main/app/view/NoteSettingsDialog.js new file mode 100644 index 000000000..518239fb8 --- /dev/null +++ b/apps/documenteditor/main/app/view/NoteSettingsDialog.js @@ -0,0 +1,434 @@ +/* + * + * (c) Copyright Ascensio System Limited 2010-2016 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, + * EU, LV-1021. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +/** + * NoteSettingsDialog.js.js + * + * Created by Julia Radzhabova on 18.12.2016 + * Copyright (c) 2016 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/util/utils', + 'common/main/lib/component/MetricSpinner', + 'common/main/lib/component/ComboBox', + 'common/main/lib/view/AdvancedSettingsWindow' +], function () { 'use strict'; + + DE.Views.NoteSettingsDialog = Common.Views.AdvancedSettingsWindow.extend(_.extend({ + options: { + contentWidth: 300, + height: 380 + }, + + initialize : function(options) { + var me = this; + + _.extend(this.options, { + title: this.textTitle, + template: [ + '
', + '
', + '
', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
', + '', + '
', + '', + '
', + '
', + '
', + '
', + '', + '
', + '
', + '', + '
', + '
','
', + '', + '
', + '
', + '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '
', + '' + ].join('') + }, options); + + this.api = options.api; + this.handler = options.handler; + this.props = options.props; + + Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); + + this.FormatType = 1; + this.StartValue = 1; + }, + + render: function() { + Common.Views.AdvancedSettingsWindow.prototype.render.call(this); + var me = this; + + this.cmbFootnote = new Common.UI.ComboBox({ + el: $('#note-settings-combo-footnote'), + cls: 'input-group-nr', + menuStyle: 'min-width: 150px;', + editable: false, + data: [ + { displayValue: this.textPageBottom, value: Asc.c_oAscFootnotePos.PageBottom }, + { displayValue: this.textTextBottom, value: Asc.c_oAscFootnotePos.BeneathText } + ] + }); + this.cmbFootnote.setValue(Asc.c_oAscFootnotePos.PageBottom); + + this.cmbFormat = new Common.UI.ComboBox({ + el: $('#note-settings-combo-format'), + cls: 'input-group-nr', + menuStyle: 'min-width: 150px;', + editable: false, + data: [ + { displayValue: '1, 2, 3,...', value: c_oAscNumberingFormat.Decimal, maskExp: /[0-9]/, defValue: 1 }, + { displayValue: 'a, b, c,...', value: c_oAscNumberingFormat.LowerLetter, maskExp: /[a-z]/, defValue: 'a' }, + { displayValue: 'A, B, C,...', value: c_oAscNumberingFormat.UpperLetter, maskExp: /[A-Z]/, defValue: 'A' }, + { displayValue: 'i, ii, iii,...', value: c_oAscNumberingFormat.LowerRoman, maskExp: /[ivxlcdm]/, defValue: 'i' }, + { displayValue: 'I, II, III,...', value: c_oAscNumberingFormat.UpperRoman, maskExp: /[IVXLCDM]/, defValue: 'I' } + ] + }); + this.cmbFormat.setValue(this.FormatType); + this.cmbFormat.on('selected', _.bind(this.onFormatSelect, this)); + + // this.spnStart = new Common.UI.MetricSpinner({ + this.spnStart = new Common.UI.CustomSpinner({ + el: $('#note-settings-spin-start'), + step: 1, + width: 85, + defaultUnit : "", + value: 1, + maxValue: 16383, + minValue: 1, + allowDecimal: false, + maskExp: /[0-9]/ + }); + + this.cmbNumbering = new Common.UI.ComboBox({ + el: $('#note-settings-combo-numbering'), + cls: 'input-group-nr', + menuStyle: 'min-width: 150px;', + editable: false, + data: [ + { displayValue: this.textContinue, value: Asc.c_oAscFootnoteRestart.Continuous }, + { displayValue: this.textEachSection, value: Asc.c_oAscFootnoteRestart.EachSect }, + { displayValue: this.textEachPage, value: Asc.c_oAscFootnoteRestart.EachPage } + ] + }); + this.cmbNumbering.setValue(Asc.c_oAscFootnoteRestart.Continuous); + + this.txtCustom = new Common.UI.InputField({ + el : $('#note-settings-txt-custom'), + allowBlank : true, + validateOnChange: true, + validateOnBlur: false, + style : 'width: 85px; vertical-align: middle;', + value : '' + }).on ('changing', function (input, value) { + me.cmbFormat.setDisabled(value.length>0); + me.spnStart.setDisabled(value.length>0); + me.btnApply.setDisabled(value.length>0); + }); + + this.cmbApply = new Common.UI.ComboBox({ + el: $('#note-settings-combo-apply'), + cls: 'input-group-nr', + menuStyle: 'min-width: 150px;', + editable: false, + data: [ + { displayValue: this.textDocument, value: 1 }, + { displayValue: this.textSection, value: 0 } + ] + }); + this.cmbApply.setValue(1); + + this.btnApply = new Common.UI.Button({ + el: $('#note-settings-btn-apply') + }); + + this.afterRender(); + }, + + afterRender: function() { + this._setDefaults(this.props); + }, + + show: function() { + Common.Views.AdvancedSettingsWindow.prototype.show.apply(this, arguments); + }, + + _setDefaults: function (props) { + if (props) { + var val = props.get_Pos(); + this.cmbFootnote.setValue(val); + + val = props.get_NumFormat(); + this.cmbFormat.setValue(val); + this.onFormatSelect(this.cmbFormat, this.cmbFormat.getSelectedRecord()); + + val = props.get_NumStart(); + this.spnStart.setValue(val); + + val = props.get_NumRestart(); + this.cmbNumbering.setValue(val); + } + }, + + getSettings: function () { + var props = new Asc.CAscFootnotePr(); + + props.put_Pos(this.cmbFootnote.getValue()); + props.put_NumRestart(this.cmbNumbering.getValue()); + + var val = this.txtCustom.getValue(); + if (_.isEmpty(val)) { + val = this.cmbFormat.getValue(); + props.put_NumFormat(val); + props.put_NumStart(this.spnStart.getNumberValue()); + } + + return {props: props, applyToAll: (this.cmbApply.getValue()==1), custom: _.isEmpty(val) ? undefined : val}; + }, + + onDlgBtnClick: function(event) { + var me = this; + var state = (typeof(event) == 'object') ? event.currentTarget.attributes['result'].value : event; + if (state == 'insert' || state == 'apply') { + this.handler && this.handler.call(this, state, (state == 'insert' || state == 'apply') ? this.getSettings() : undefined); + } + + this.close(); + }, + + onPrimary: function() { + return true; + }, + + onFormatSelect: function(combo, record) { + if (!record) return; + + this.spnStart.setMask(record.maskExp); + + var me = this; + switch (record.value) { + case c_oAscNumberingFormat.UpperRoman: // I, II, III, ... + this.spnStart.options.toCustomFormat = this._10toRome; + this.spnStart.options.fromCustomFormat = this._Rometo10; + break; + case c_oAscNumberingFormat.LowerRoman: // i, ii, iii, ... + this.spnStart.options.toCustomFormat = function(value) { return me._10toRome(value).toLocaleLowerCase(); }; + this.spnStart.options.fromCustomFormat = function(value) { return me._Rometo10(value.toLocaleUpperCase()); }; + break; + case c_oAscNumberingFormat.UpperLetter: // A, B, C, ... + this.spnStart.options.toCustomFormat = this._10toS; + this.spnStart.options.fromCustomFormat = this._Sto10; + break; + case c_oAscNumberingFormat.LowerLetter: // a, b, c, ... + this.spnStart.options.toCustomFormat = function(value) { return me._10toS(value).toLocaleLowerCase(); }; + this.spnStart.options.fromCustomFormat = function(value) { return me._Sto10(value.toLocaleUpperCase()); }; + break; + default: // 1, 2, 3, ... + this.spnStart.options.toCustomFormat = function(value) { return value; }; + this.spnStart.options.fromCustomFormat = function(value) { return value; }; + break; + } + + this.spnStart.setValue(this.spnStart.getValue()); + this.FormatType = record.value; + }, + + _10toS: function(value) { + value = parseInt(value); + var n = Math.ceil(value / 26), + code = String.fromCharCode((value-1) % 26 + "A".charCodeAt(0)) , + result = ''; + + for (var i=0; i0) { + val = digits[n][1]; + div = value - val; + if (div>=0) { + result += digits[n][0]; + value = div; + } else + n++; + } + + return result; + }, + + _Rometo10: function(str) { + if ( !/[IVXLCDM]/.test(str) || str.length<1 ) return 1; + + var digits = { + 'I': 1, + 'V': 5, + 'X': 10, + 'L': 50, + 'C': 100, + 'D': 500, + 'M': 1000 + }; + + var n = str.length-1, + result = digits[str.charAt(n)], + prev = result; + + for (var i=n-1; i>=0; i-- ) { + var val = digits[str.charAt(i)]; + if (val10) return 1; + val *= -1; + } + + result += val; + } + + return result; + }, + + textTitle: 'Notes Settings', + textLocation: 'Location', + textFootnote: 'Footnote', + textPageBottom: 'Bottom of page', + textTextBottom: 'Below text', + textFormat: 'Format', + textNumFormat: 'Number Format', + textStart: 'Start at', + textNumbering: 'Numbering', + textContinue: 'Continuous', + textEachPage: 'Restart each page', + textEachSection: 'Restart each section', + textApplyTo: 'Apply changes to', + textDocument: 'Whole document', + textSection: 'Current section', + textApply: 'Apply', + textInsert: 'Insert', + textCancel: 'Cancel', + textCustom: 'Custom Mark' + + }, DE.Views.NoteSettingsDialog || {})) +}); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 14d17c2ce..e7fd84e34 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -489,7 +489,7 @@ define([ cls : 'btn-toolbar', iconCls : 'btn-insertchart', menu : new Common.UI.Menu({ - style: 'width: 560px;', + style: 'width: 435px;', items: [ { template: _.template('') } ] @@ -737,6 +737,14 @@ define([ }); this.toolbarControls.push(this.btnColorSchemas); + this.btnNotes = new Common.UI.Button({ + id : 'id-toolbar-btn-notes', + cls : 'btn-toolbar', + iconCls : 'btn-notes', + menu : true + }); + this.paragraphControls.push(this.btnNotes); + this.btnMailRecepients= new Common.UI.Button({ id : 'id-toolbar-btn-mailrecepients', cls : 'btn-toolbar', @@ -1076,14 +1084,11 @@ define([ replacePlacholder('#id-toolbar-full-placeholder-field-styles', this.listStyles); replacePlacholder('#id-toolbar-short-placeholder-btn-halign', this.btnHorizontalAlign); replacePlacholder('#id-toolbar-full-placeholder-btn-mailrecepients', this.btnMailRecepients); + replacePlacholder('#id-toolbar-' + prefix + '-placeholder-btn-notes', this.btnNotes); }, createDelayedElements: function() { if (this.api) { - var schemes = this.api.get_PropertyThemeColorSchemes(); - if (schemes) - this.onSendThemeColorSchemes(schemes); - this.mnuNonPrinting.items[0].setChecked(this.api.get_ShowParaMarks(), true); this.mnuNonPrinting.items[1].setChecked(this.api.get_ShowTableEmptyLine(), true); this.btnShowHidenChars.toggle(this.mnuNonPrinting.items[0].checked, true); @@ -1143,6 +1148,7 @@ define([ this.btnMailRecepients.updateHint(this.tipMailRecepients); this.btnHide.updateHint(this.tipViewSettings); this.btnAdvSettings.updateHint(this.tipAdvSettings); + this.btnNotes.updateHint(this.tipNotes); // set menus @@ -1284,6 +1290,40 @@ define([ cls : 'btn-toolbar' }); + this.btnNotes.setMenu( + new Common.UI.Menu({ + items: [ + { caption: this.mniInsFootnote, value: 'ins_footnote' }, + { caption: '--' }, + this.mnuGotoFootnote = new Common.UI.MenuItem({ + template: _.template([ + '' + ].join('')), + stopPropagation: true + }), + { caption: '--' }, + { caption: this.mniDelFootnote, value: 'delele' }, + { caption: this.mniNoteSettings, value: 'settings' } + ] + }) + ); + + this.mnuGotoFootPrev = new Common.UI.Button({ + el : $('#id-menu-goto-footnote-prev'), + cls : 'btn-toolbar' + }); + this.mnuGotoFootNext = new Common.UI.Button({ + el : $('#id-menu-goto-footnote-next'), + cls : 'btn-toolbar' + }); + // set dataviews var _conf = this.mnuMarkersPicker.conf; @@ -1362,15 +1402,15 @@ define([ el: $('#id-toolbar-menu-insertchart'), parentMenu: this.btnInsertChart.menu, showLast: false, - restoreHeight: 411, + restoreHeight: 421, groups: new Common.UI.DataViewGroupStore([ - { id: 'menu-chart-group-bar', caption: me.textColumn }, + { id: 'menu-chart-group-bar', caption: me.textColumn, headername: me.textCharts }, { id: 'menu-chart-group-line', caption: me.textLine }, { id: 'menu-chart-group-pie', caption: me.textPie }, { id: 'menu-chart-group-hbar', caption: me.textBar }, - { id: 'menu-chart-group-area', caption: me.textArea }, - { id: 'menu-chart-group-scatter', caption: me.textPoint }, - { id: 'menu-chart-group-stock', caption: me.textStock } + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, allowSelected: true, iconCls: 'column-normal', selected: true}, @@ -1457,6 +1497,7 @@ define([ setApi: function(api) { this.api = api; /** coauthoring begin **/ + this.api.asc_registerCallback('asc_onSendThemeColorSchemes', _.bind(this.onSendThemeColorSchemes, this)); this.api.asc_registerCallback('asc_onCollaborativeChanges', _.bind(this.onCollaborativeChanges, this)); this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onApiUsersChanged, this)); this.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(this.onApiUsersChanged, this)); @@ -1517,6 +1558,7 @@ define([ this.cmbFontName.setDisabled(true); this.cmbFontSize.setDisabled(true); this.listStyles.setDisabled(true); + this.btnNotes.setDisabled(true); if (mode.disableDownload) this.btnPrint.setDisabled(true); } @@ -1827,13 +1869,13 @@ define([ textNewColor: 'Add New Custom Color', textAutoColor: 'Automatic', tipInsertChart: 'Insert Chart', - textLine: 'Line Chart', - textColumn: 'Column Chart', - textBar: 'Bar Chart', - textArea: 'Area Chart', - textPie: 'Pie Chart', - textPoint: 'XY (Scatter) Chart', - textStock: 'Stock Chart', + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', tipColorSchemas: 'Change Color Scheme', tipInsertText: 'Insert Text', tipHAligh: 'Horizontal Align', @@ -1910,7 +1952,14 @@ define([ textPageSizeCustom: 'Custom Page Size', textPortrait: 'Portrait', textLandscape: 'Landscape', - textInsertPageCount: 'Insert number of pages' - + textInsertPageCount: 'Insert number of pages', + textCharts: 'Charts', + tipNotes: 'Footnotes', + mniInsFootnote: 'Insert Footnote', + mniDelFootnote: 'Delete All Footnotes', + mniNoteSettings: 'Notes Settings', + textGotoFootnote: 'Go to Footnotes', + tipChangeChart: 'Change Chart Type' + }, DE.Views.Toolbar || {})); }); diff --git a/apps/documenteditor/main/app_dev.js b/apps/documenteditor/main/app_dev.js index c4a8a9888..92212bc32 100644 --- a/apps/documenteditor/main/app_dev.js +++ b/apps/documenteditor/main/app_dev.js @@ -168,6 +168,7 @@ require([ 'documenteditor/main/app/controller/RightMenu', 'documenteditor/main/app/controller/LeftMenu', 'documenteditor/main/app/controller/Main', + 'documenteditor/main/app/view/FileMenuPanels', 'documenteditor/main/app/view/ParagraphSettings', 'documenteditor/main/app/view/HeaderFooterSettings', 'documenteditor/main/app/view/ImageSettings', diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 72563c3a0..33103d0c9 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -302,6 +302,7 @@ "DE.Controllers.Statusbar.textTrackChanges": "The document is opened with the Track Changes mode enabled", "DE.Controllers.Statusbar.zoomText": "Zoom {0}%", "DE.Controllers.Toolbar.confirmAddFontName": "The font you are going to save is not available on the current device.
The text style will be displayed using one of the system fonts, the saved font will be used when it is available.
Do you want to continue?", + "DE.Controllers.Toolbar.confirmDeleteFootnotes": "Do you want to delete all footnotes?", "DE.Controllers.Toolbar.notcriticalErrorTitle": "Warning", "DE.Controllers.Toolbar.textAccent": "Accents", "DE.Controllers.Toolbar.textBracket": "Brackets", @@ -637,18 +638,18 @@ "DE.Controllers.Toolbar.txtSymbol_xsi": "Xi", "DE.Controllers.Toolbar.txtSymbol_zeta": "Zeta", "DE.Views.ChartSettings.textAdvanced": "Show advanced settings", - "DE.Views.ChartSettings.textArea": "Area Chart", - "DE.Views.ChartSettings.textBar": "Bar Chart", + "DE.Views.ChartSettings.textArea": "Area", + "DE.Views.ChartSettings.textBar": "Bar", "DE.Views.ChartSettings.textChartType": "Change Chart Type", - "DE.Views.ChartSettings.textColumn": "Column Chart", + "DE.Views.ChartSettings.textColumn": "Column", "DE.Views.ChartSettings.textEditData": "Edit Data", "DE.Views.ChartSettings.textHeight": "Height", - "DE.Views.ChartSettings.textLine": "Line Chart", + "DE.Views.ChartSettings.textLine": "Line", "DE.Views.ChartSettings.textOriginalSize": "Default Size", - "DE.Views.ChartSettings.textPie": "Pie Chart", - "DE.Views.ChartSettings.textPoint": "XY (Scatter) Chart", + "DE.Views.ChartSettings.textPie": "Pie", + "DE.Views.ChartSettings.textPoint": "XY (Scatter)", "DE.Views.ChartSettings.textSize": "Size", - "DE.Views.ChartSettings.textStock": "Stock Chart", + "DE.Views.ChartSettings.textStock": "Stock", "DE.Views.ChartSettings.textStyle": "Style", "DE.Views.ChartSettings.textUndock": "Undock from panel", "DE.Views.ChartSettings.textWidth": "Width", @@ -1115,6 +1116,25 @@ "DE.Views.MailMergeSettings.txtPrev": "To previous record", "DE.Views.MailMergeSettings.txtUntitled": "Untitled", "DE.Views.MailMergeSettings.warnProcessMailMerge": "Starting merge failed", + "DE.Views.NoteSettingsDialog.textTitle": "Notes Settings", + "DE.Views.NoteSettingsDialog.textLocation": "Location", + "DE.Views.NoteSettingsDialog.textFootnote": "Footnote", + "DE.Views.NoteSettingsDialog.textPageBottom": "Bottom of page", + "DE.Views.NoteSettingsDialog.textTextBottom": "Below text", + "DE.Views.NoteSettingsDialog.textFormat": "Format", + "DE.Views.NoteSettingsDialog.textNumFormat": "Number Format", + "DE.Views.NoteSettingsDialog.textStart": "Start at", + "DE.Views.NoteSettingsDialog.textNumbering": "Numbering", + "DE.Views.NoteSettingsDialog.textContinue": "Continuous", + "DE.Views.NoteSettingsDialog.textEachPage": "Restart each page", + "DE.Views.NoteSettingsDialog.textEachSection": "Restart each section", + "DE.Views.NoteSettingsDialog.textApplyTo": "Apply changes to", + "DE.Views.NoteSettingsDialog.textDocument": "Whole document", + "DE.Views.NoteSettingsDialog.textSection": "Current section", + "DE.Views.NoteSettingsDialog.textApply": "Apply", + "DE.Views.NoteSettingsDialog.textInsert": "Insert", + "DE.Views.NoteSettingsDialog.textCancel": "Cancel", + "DE.Views.NoteSettingsDialog.textCustom": "Custom Mark", "DE.Views.PageMarginsDialog.cancelButtonText": "Cancel", "DE.Views.PageMarginsDialog.notcriticalErrorTitle": "Warning", "DE.Views.PageMarginsDialog.okButtonText": "Ok", @@ -1430,12 +1450,13 @@ "DE.Views.Toolbar.mniImageFromFile": "Picture from File", "DE.Views.Toolbar.mniImageFromUrl": "Picture from URL", "DE.Views.Toolbar.strMenuNoFill": "No Fill", - "DE.Views.Toolbar.textArea": "Area Chart", + "DE.Views.Toolbar.textArea": "Area", "DE.Views.Toolbar.textAutoColor": "Automatic", - "DE.Views.Toolbar.textBar": "Bar Chart", + "DE.Views.Toolbar.textBar": "Bar", "DE.Views.Toolbar.textBold": "Bold", "DE.Views.Toolbar.textBottom": "Bottom: ", - "DE.Views.Toolbar.textColumn": "Column Chart", + "DE.Views.Toolbar.textCharts": "Charts", + "DE.Views.Toolbar.textColumn": "Column", "DE.Views.Toolbar.textColumnsLeft": "Left", "DE.Views.Toolbar.textColumnsOne": "One", "DE.Views.Toolbar.textColumnsRight": "Right", @@ -1461,7 +1482,7 @@ "DE.Views.Toolbar.textItalic": "Italic", "DE.Views.Toolbar.textLandscape": "Landscape", "DE.Views.Toolbar.textLeft": "Left: ", - "DE.Views.Toolbar.textLine": "Line Chart", + "DE.Views.Toolbar.textLine": "Line", "DE.Views.Toolbar.textMarginsLast": "Last Custom", "DE.Views.Toolbar.textMarginsModerate": "Moderate", "DE.Views.Toolbar.textMarginsNarrow": "Narrow", @@ -1474,11 +1495,11 @@ "DE.Views.Toolbar.textOddPage": "Odd Page", "DE.Views.Toolbar.textPageMarginsCustom": "Custom margins", "DE.Views.Toolbar.textPageSizeCustom": "Custom Page Size", - "DE.Views.Toolbar.textPie": "Pie Chart", - "DE.Views.Toolbar.textPoint": "XY (Scatter) Chart", + "DE.Views.Toolbar.textPie": "Pie", + "DE.Views.Toolbar.textPoint": "XY (Scatter)", "DE.Views.Toolbar.textPortrait": "Portrait", "DE.Views.Toolbar.textRight": "Right: ", - "DE.Views.Toolbar.textStock": "Stock Chart", + "DE.Views.Toolbar.textStock": "Stock", "DE.Views.Toolbar.textStrikeout": "Strikeout", "DE.Views.Toolbar.textStyleMenuDelete": "Delete style", "DE.Views.Toolbar.textStyleMenuDeleteAll": "Delete all custom styles", @@ -1499,6 +1520,7 @@ "DE.Views.Toolbar.tipAlignLeft": "Align Left", "DE.Views.Toolbar.tipAlignRight": "Align Right", "DE.Views.Toolbar.tipBack": "Back", + "DE.Views.Toolbar.tipChangeChart": "Change Chart Type", "DE.Views.Toolbar.tipClearStyle": "Clear Style", "DE.Views.Toolbar.tipColorSchemas": "Change Color Scheme", "DE.Views.Toolbar.tipColumns": "Insert columns", @@ -1565,5 +1587,11 @@ "DE.Views.Toolbar.txtScheme6": "Concourse", "DE.Views.Toolbar.txtScheme7": "Equity", "DE.Views.Toolbar.txtScheme8": "Flow", - "DE.Views.Toolbar.txtScheme9": "Foundry" + "DE.Views.Toolbar.txtScheme9": "Foundry", + "DE.Views.Toolbar.tipNotes": "Footnotes", + "DE.Views.Toolbar.mniInsFootnote": "Insert Footnote", + "DE.Views.Toolbar.mniDelFootnote": "Delete All Footnotes", + "DE.Views.Toolbar.mniNoteSettings": "Notes Settings", + "DE.Views.Toolbar.textGotoFootnote": "Go to Footnotes" + } \ No newline at end of file diff --git a/apps/documenteditor/main/resources/img/toolbar-menu.png b/apps/documenteditor/main/resources/img/toolbar-menu.png index 4a3467f6c..91fc2ad34 100644 Binary files a/apps/documenteditor/main/resources/img/toolbar-menu.png and b/apps/documenteditor/main/resources/img/toolbar-menu.png differ diff --git a/apps/documenteditor/main/resources/img/toolbar-menu@2x.png b/apps/documenteditor/main/resources/img/toolbar-menu@2x.png index 018302470..ee9d5f5db 100644 Binary files a/apps/documenteditor/main/resources/img/toolbar-menu@2x.png and b/apps/documenteditor/main/resources/img/toolbar-menu@2x.png differ diff --git a/apps/documenteditor/main/resources/less/footnote.less b/apps/documenteditor/main/resources/less/footnote.less new file mode 100644 index 000000000..d50272e28 --- /dev/null +++ b/apps/documenteditor/main/resources/less/footnote.less @@ -0,0 +1,124 @@ +.footnote-tip-root { + position: absolute; + z-index: @zindex-tooltip + 5; + width: 250px; + + .tip-arrow { + position: absolute; + overflow: hidden; + } + + &.bottom { + margin: 15px 0 0 0; + + .tip-arrow { + left: 50%; + top: -15px; + width: 26px; + height: 15px; + margin-left: -13px; + &:after { + top: 8px; + left: 5px; + .box-shadow(0 0 8px -1px rgba(0, 0, 0, 0.2)); + } + } + } + + &.top { + margin: 0 0px 15px 0; + + .tip-arrow { + left: 50%; + bottom: -15px; + width: 26px; + height: 15px; + margin-left: -13px; + &:after { + top: -8px; + left: 5px; + } + } + } +} + +.asc-footnotetip { + padding: 15px 8px 10px 15px; + border-radius: 5px; + background-color: #fff; + overflow: visible; + + .box-shadow(0 4px 15px -2px rgba(0, 0, 0, 0.5)); + font-size: 11px; +} + +.asc-footnotetip .tip-arrow:after { + content: ''; + position: absolute; + top: 5px; + left: 8px; + background-color: #fff; + width: 15px; + height: 15px; + + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + + .box-shadow(0 4px 8px -1px rgba(0, 0, 0, 0.2)); +} + +.asc-footnotetip .show-link { + margin-top: 15px; + + label { + border-bottom: 1px dotted #445799; + color: #445799; + cursor: pointer; + } +} + +.asc-footnotetip .move-ct { + position: absolute; + right: 0; + bottom: 0; + height: 16px; + margin: 8px; + + .prev, .next { + width: 16px; + height: 16px; + display: inline-block; + cursor: pointer; + } + + .prev { + background-position: @search-dlg-offset-x @search-dlg-offset-y; + } + + .next { + background-position: @search-dlg-offset-x @search-dlg-offset-y - 16px; + } + + .btn { + &:hover, + .over, + &:active, + &.active { + background-color: transparent !important; + } + + &.disabled{ + cursor: default; + .prev { + background-position: @search-dlg-offset-x - 32px @search-dlg-offset-y; + } + + .next{ + background-position: @search-dlg-offset-x - 32px @search-dlg-offset-y - 16px; + } + } + } +} diff --git a/apps/documenteditor/main/resources/less/leftmenu.less b/apps/documenteditor/main/resources/less/leftmenu.less index 92a926d22..964bf5c26 100644 --- a/apps/documenteditor/main/resources/less/leftmenu.less +++ b/apps/documenteditor/main/resources/less/leftmenu.less @@ -375,8 +375,6 @@ button.notify .btn-menu-comments {background-position: -0*@toolbar-icon-size -60 .header-name { padding: 7px 2px 7px 10px; - font-weight: bold; - cursor: default; } } } diff --git a/apps/documenteditor/main/resources/less/toolbar.less b/apps/documenteditor/main/resources/less/toolbar.less index 85120fdda..44cda7f91 100644 --- a/apps/documenteditor/main/resources/less/toolbar.less +++ b/apps/documenteditor/main/resources/less/toolbar.less @@ -149,7 +149,7 @@ .title { padding: 5px 0 5px 20px; float: left; - max-width: 95px; + //max-width: 95px; overflow: hidden; text-overflow: ellipsis; } @@ -163,20 +163,12 @@ // charts .menu-insertchart { .group-description { - float: left; - width: 125px; - line-height: 58px; - padding-left: 6px; + padding-left: 4px; } .group-items-container { float: left; position: relative; - -// & > div { -// float: left; -// margin: 0 0 0 14px; -// } } } @@ -341,6 +333,7 @@ .button-normal-icon(btn-zoomout, 58, @toolbar-icon-size); .button-normal-icon(btn-columns, 82, @toolbar-icon-size); .button-normal-icon(btn-pagemargins, 83, @toolbar-icon-size); +.button-normal-icon(btn-notes, 85, @toolbar-icon-size); .button-normal-icon(mmerge-next, 71, @toolbar-icon-size); .button-normal-icon(mmerge-last, 72, @toolbar-icon-size); diff --git a/apps/documenteditor/sdk_dev_scripts.js b/apps/documenteditor/sdk_dev_scripts.js index 915b58c45..9d88f2f9a 100644 --- a/apps/documenteditor/sdk_dev_scripts.js +++ b/apps/documenteditor/sdk_dev_scripts.js @@ -11,7 +11,10 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/apiCommon.js", "../../../../sdkjs/common/SerializeCommonWordExcel.js", "../../../../sdkjs/common/editorscommon.js", - "../../../../sdkjs/common/NumFormat.js", + "../../../../sdkjs/common/HistoryCommon.js", + "../../../../sdkjs/common/TableId.js", + "../../../../sdkjs/common/TableIdChanges.js", + "../../../../sdkjs/common/NumFormat.js", "../../../../sdkjs/common/SerializeChart.js", "../../../../sdkjs/common/AdvancedOptions.js", "../../../../sdkjs/common/FontsFreeType/font_engine.js", @@ -28,7 +31,6 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/Drawings/Hit.js", "../../../../sdkjs/common/Drawings/ArcTo.js", "../../../../sdkjs/common/Drawings/ColorArray.js", - "../../../../sdkjs/common/Drawings/Format/Constants.js", "../../../../sdkjs/common/Drawings/CommonController.js", "../../../../sdkjs/word/Editor/GraphicObjects/DrawingStates.js", "../../../../sdkjs/common/Drawings/Format/CreateGeometry.js", @@ -65,6 +67,7 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/Drawings/HatchPattern.js", "../../../../sdkjs/common/scroll.js", "../../../../sdkjs/common/Scrolls/iscroll.js", + "../../../../sdkjs/common/Scrolls/mobileTouchManagerBase.js", "../../../../sdkjs/common/wordcopypaste.js", "../../../../sdkjs/word/apiDefines.js", "../../../../sdkjs/cell/utils/utils.js", @@ -82,12 +85,21 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/word/Editor/GraphicObjects/WrapManager.js", "../../../../sdkjs/word/Editor/CollaborativeEditing.js", "../../../../sdkjs/word/Editor/Comments.js", + "../../../../sdkjs/word/Editor/CommentsChanges.js", "../../../../sdkjs/word/Editor/Styles.js", + "../../../../sdkjs/word/Editor/StylesChanges.js", "../../../../sdkjs/word/Editor/ParagraphContent.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaTextPr.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaTextPrChanges.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaDrawing.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaDrawingChanges.js", "../../../../sdkjs/word/Editor/Paragraph.js", + "../../../../sdkjs/word/Editor/ParagraphChanges.js", "../../../../sdkjs/word/Editor/DocumentContentBase.js", "../../../../sdkjs/word/Editor/Document.js", + "../../../../sdkjs/word/Editor/DocumentChanges.js", "../../../../sdkjs/word/Editor/DocumentContent.js", + "../../../../sdkjs/word/Editor/DocumentContentChanges.js", "../../../../sdkjs/word/Editor/DocumentControllerBase.js", "../../../../sdkjs/word/Editor/LogicDocumentController.js", "../../../../sdkjs/word/Editor/DrawingsController.js", @@ -95,25 +107,35 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/word/Editor/FlowObjects.js", "../../../../sdkjs/word/Editor/ParagraphContentBase.js", "../../../../sdkjs/word/Editor/Hyperlink.js", + "../../../../sdkjs/word/Editor/HyperlinkChanges.js", "../../../../sdkjs/word/Editor/Field.js", + "../../../../sdkjs/word/Editor/FieldChanges.js", "../../../../sdkjs/word/Editor/Run.js", + "../../../../sdkjs/word/Editor/RunChanges.js", "../../../../sdkjs/word/Editor/Math.js", + "../../../../sdkjs/word/Editor/MathChanges.js", "../../../../sdkjs/word/Editor/Paragraph_Recalculate.js", "../../../../sdkjs/word/Editor/Sections.js", + "../../../../sdkjs/word/Editor/SectionsChanges.js", "../../../../sdkjs/word/Editor/Numbering.js", "../../../../sdkjs/word/Editor/HeaderFooter.js", "../../../../sdkjs/word/Editor/Common.js", "../../../../sdkjs/word/Editor/Numbering.js", + "../../../../sdkjs/word/Editor/NumberingChanges.js", "../../../../sdkjs/word/Editor/Table.js", + "../../../../sdkjs/word/Editor/Table/TableChanges.js", "../../../../sdkjs/word/Editor/Table/TableRecalculate.js", "../../../../sdkjs/word/Editor/Table/TableDraw.js", "../../../../sdkjs/word/Editor/Table/TableRow.js", + "../../../../sdkjs/word/Editor/Table/TableRowChanges.js", "../../../../sdkjs/word/Editor/Table/TableCell.js", + "../../../../sdkjs/word/Editor/Table/TableCellChanges.js", "../../../../sdkjs/word/Editor/Serialize2.js", "../../../../sdkjs/word/Editor/Search.js", "../../../../sdkjs/word/Editor/FontClassification.js", "../../../../sdkjs/word/Editor/Spelling.js", "../../../../sdkjs/word/Editor/Footnotes.js", + "../../../../sdkjs/word/Editor/FootnotesChanges.js", "../../../../sdkjs/word/Editor/FootEndNote.js", "../../../../sdkjs/word/Drawing/Graphics.js", "../../../../sdkjs/word/Drawing/ShapeDrawer.js", @@ -122,6 +144,7 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/word/Drawing/Rulers.js", "../../../../sdkjs/word/Drawing/HtmlPage.js", "../../../../sdkjs/word/Drawing/documentrenderer.js", + "../../../../sdkjs/word/Drawing/mobileTouchManager.js", "../../../../sdkjs/word/apiCommon.js", "../../../../sdkjs/common/apiBase.js", "../../../../sdkjs/word/api.js", diff --git a/apps/presentationeditor/main/app.js b/apps/presentationeditor/main/app.js index f241c26f6..18a13c411 100644 --- a/apps/presentationeditor/main/app.js +++ b/apps/presentationeditor/main/app.js @@ -172,6 +172,7 @@ require([ 'presentationeditor/main/app/controller/RightMenu', 'presentationeditor/main/app/controller/LeftMenu', 'presentationeditor/main/app/controller/Main', + 'presentationeditor/main/app/view/FileMenuPanels', 'presentationeditor/main/app/view/ParagraphSettings', 'presentationeditor/main/app/view/ImageSettings', 'presentationeditor/main/app/view/ShapeSettings', diff --git a/apps/presentationeditor/main/app/controller/LeftMenu.js b/apps/presentationeditor/main/app/controller/LeftMenu.js index 7e563df19..5d8200b7c 100644 --- a/apps/presentationeditor/main/app/controller/LeftMenu.js +++ b/apps/presentationeditor/main/app/controller/LeftMenu.js @@ -231,7 +231,7 @@ define([ this.api.SetTextBoxInputMode(parseInt(value) == 1); /** coauthoring begin **/ - if (this.mode.isEdit && this.mode.canLicense && !this.mode.isOffline && this.mode.canCoAuthoring) { + if (this.mode.isEdit && !this.mode.isOffline && this.mode.canCoAuthoring) { value = Common.localStorage.getItem("pe-settings-coauthmode"); this.api.asc_SetFastCollaborative(value===null || parseInt(value) == 1); } diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index b0ed3b324..cb065fe42 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -142,6 +142,7 @@ define([ this.editorConfig = {}; this.appOptions = {}; this.plugins = undefined; + this.UICustomizePlugins = []; Common.Gateway.on('init', _.bind(this.loadConfig, this)); Common.Gateway.on('showmessage', _.bind(this.onExternalMessage, this)); Common.Gateway.on('opendocument', _.bind(this.loadDocument, this)); @@ -609,7 +610,7 @@ define([ me.api.SetTextBoxInputMode(value!==null && parseInt(value) == 1); /** coauthoring begin **/ - if (me.appOptions.isEdit && me.appOptions.canLicense && !me.appOptions.isOffline && me.appOptions.canCoAuthoring) { + if (me.appOptions.isEdit && !me.appOptions.isOffline && me.appOptions.canCoAuthoring) { value = Common.localStorage.getItem("pe-settings-coauthmode"); if (value===null && Common.localStorage.getItem("pe-settings-autosave")===null && me.appOptions.customization && me.appOptions.customization.autosave===false) { @@ -639,7 +640,7 @@ define([ application.getController('Common.Controllers.ExternalDiagramEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization}); pluginsController.setApi(me.api); - me.updatePlugins(me.plugins); + me.updatePlugins(me.plugins, false); me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me)); documentHolderController.setApi(me.api); @@ -686,9 +687,14 @@ define([ if (me.needToUpdateVersion) toolbarController.onApiCoAuthoringDisconnect(); me.api.UpdateInterfaceState(); + + if (me.appOptions.canBrandingExt) + Common.NotificationCenter.trigger('document:ready', 'main'); } }, 50); - } + } else if (me.appOptions.canBrandingExt) + Common.NotificationCenter.trigger('document:ready', 'main'); + if (this.appOptions.canAnalytics && false) Common.component.Analytics.initialize('UA-12442749-13', 'Presentation Editor'); @@ -778,7 +784,9 @@ define([ params.asc_getTrial() && headerView.setDeveloperMode(true); this.appOptions.canRename && headerView.setCanRename(true); - this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object'); + this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object' || this.editorConfig.plugins); + if (this.appOptions.canBrandingExt) + this.updatePlugins(this.plugins, true); this.applyModeCommonElements(); this.applyModeEditorElements(); @@ -1217,13 +1225,15 @@ define([ }, hidePreloader: function() { - if (!!this.appOptions.customization && !this.appOptions.customization.done) { - this.appOptions.customization.done = true; - if (!this.appOptions.isDesktopApp) + if (!this._state.customizationDone) { + this._state.customizationDone = true; + if (this.appOptions.customization && !this.appOptions.isDesktopApp) this.appOptions.customization.about = true; Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationElements); - if (this.appOptions.canBrandingExt) + if (this.appOptions.canBrandingExt) { Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationExtElements); + Common.Utils.applyCustomizationPlugins(this.UICustomizePlugins); + } } Common.NotificationCenter.trigger('layout:changed', 'main'); @@ -1500,7 +1510,7 @@ define([ }, applySettings: function() { - if (this.appOptions.isEdit && this.appOptions.canLicense && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { + if (this.appOptions.isEdit && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { var value = Common.localStorage.getItem("pe-settings-coauthmode"), oldval = this._state.fastCoauth; this._state.fastCoauth = (value===null || parseInt(value) == 1); @@ -1581,8 +1591,11 @@ define([ } }, - updatePlugins: function(plugins) { // plugins from config - if (!plugins || !plugins.pluginsData || plugins.pluginsData.length<1) return; + updatePlugins: function(plugins, uiCustomize) { // plugins from config + if (!plugins) return; + + var pluginsData = (uiCustomize) ? plugins.UIpluginsData : plugins.pluginsData; + if (!pluginsData || pluginsData.length<1) return; var _createXMLHTTPObject = function() { var xmlhttp; @@ -1620,7 +1633,7 @@ define([ var arr = [], baseUrl = plugins.url; - plugins.pluginsData.forEach(function(item){ + pluginsData.forEach(function(item){ var url = item; if (!/(^https?:\/\/)/i.test(url) && !/(^www.)/i.test(item)) url = baseUrl + item; @@ -1633,14 +1646,14 @@ define([ autoStartGuid: plugins.autoStartGuid, url: plugins.url, pluginsData: arr - }); + }, !!uiCustomize); }, - updatePluginsList: function(plugins) { + updatePluginsList: function(plugins, uiCustomize) { var pluginStore = this.getApplication().getCollection('Common.Collections.Plugins'), isEdit = this.appOptions.isEdit; - if (pluginStore && plugins) { - var arr = []; + if (plugins) { + var arr = [], arrUI = []; plugins.pluginsData.forEach(function(item){ var variations = item.variations, variationsArr = []; @@ -1651,7 +1664,9 @@ define([ isSupported = true; break; } } - if (isSupported && (isEdit || itemVar.isViewer)) + if (isSupported && (isEdit || itemVar.isViewer)){ + var isRelativeUrl = !(/(^https?:\/\/)/i.test(itemVar.url) || /(^www.)/i.test(itemVar.url)); + item.isUICustomizer ? arrUI.push((isRelativeUrl) ? ((item.baseUrl ? item.baseUrl : plugins.url) + itemVar.url) : itemVar.url) : variationsArr.push(new Common.Models.PluginVariation({ description: itemVar.description, index: variationsArr.length, @@ -1668,10 +1683,11 @@ define([ buttons: itemVar.buttons, size: itemVar.size, initOnSelectionChanged: itemVar.initOnSelectionChanged, - isRelativeUrl: !(/(^https?:\/\/)/i.test(itemVar.url) || /(^www.)/i.test(itemVar.url)) + isRelativeUrl: isRelativeUrl })); + } }); - if (variationsArr.length>0) + if (variationsArr.length>0 && !item.isUICustomizer) arr.push(new Common.Models.Plugin({ name : item.name, guid: item.guid, @@ -1681,11 +1697,15 @@ define([ })); }); - pluginStore.reset(arr); + if (uiCustomize!==false) // from ui customizer in editor config or desktop event + this.UICustomizePlugins = arrUI; - this.appOptions.pluginsPath = (plugins.url); - this.appOptions.canPlugins = (arr.length>0); - } else { + if (!uiCustomize) { + if (pluginStore) pluginStore.reset(arr); + this.appOptions.pluginsPath = (plugins.url); + this.appOptions.canPlugins = (arr.length>0); + } + } else if (!uiCustomize){ this.appOptions.pluginsPath = ''; this.appOptions.canPlugins = false; } @@ -1694,7 +1714,7 @@ define([ if (plugins.autoStartGuid) this.api.asc_pluginRun(plugins.autoStartGuid, 0, ''); } - this.getApplication().getController('LeftMenu').enablePlugins(); + if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins(); }, // Translation diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js index 2bfe4873a..90be0964d 100644 --- a/apps/presentationeditor/main/app/controller/Toolbar.js +++ b/apps/presentationeditor/main/app/controller/Toolbar.js @@ -95,7 +95,8 @@ define([ zoom_type: undefined, zoom_percent: undefined, fontsize: undefined, - in_equation: undefined + in_equation: undefined, + in_chart: false }; this._isAddingShape = false; this.slideSizeArr = [ @@ -570,7 +571,8 @@ define([ no_paragraph = true, no_text = true, no_object = true, - in_equation = false; + in_equation = false, + in_chart = false; while (++i < selectedObjects.length) { type = selectedObjects[i].get_ObjectType(); @@ -589,11 +591,17 @@ define([ if (type !== Asc.c_oAscTypeSelectElement.Image) { no_text = false; } + in_chart = type == Asc.c_oAscTypeSelectElement.Chart; } else if (type === Asc.c_oAscTypeSelectElement.Math) { in_equation = true; } } + if (in_chart !== this._state.in_chart) { + this.toolbar.btnInsertChart.updateHint(in_chart ? this.toolbar.tipChangeChart : this.toolbar.tipInsertChart); + this._state.in_chart = in_chart; + } + if (paragraph_locked!==undefined && this._state.prcontrolsdisable !== paragraph_locked) { if (this._state.activated) this._state.prcontrolsdisable = paragraph_locked; this.toolbar.lockToolbar(PE.enumLock.paragraphLock, paragraph_locked, {array: me.toolbar.paragraphControls}); @@ -1450,20 +1458,39 @@ define([ onSelectChart: function(picker, item, record) { var me = this, - type = record.get('type'); + type = record.get('type'), + chart = false; - if (!this.diagramEditor) - this.diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); - - if (this.diagramEditor && me.api) { - this.diagramEditor.setEditMode(false); - this.diagramEditor.show(); - - var chart = me.api.asc_getChartObject(type); - if (chart) { - this.diagramEditor.setChartData(new Asc.asc_CChartBinary(chart)); + var selectedElements = me.api.getSelectedElements(); + if (selectedElements && _.isArray(selectedElements)) { + for (var i = 0; i< selectedElements.length; i++) { + if (Asc.c_oAscTypeSelectElement.Chart == selectedElements[i].get_ObjectType()) { + chart = true; + break; + } + } + } + + if (chart) { + var props = new Asc.CAscChartProp(); + props.changeType(type); + this.api.ChartApply(props); + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + } else { + if (!this.diagramEditor) + this.diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); + + if (this.diagramEditor && me.api) { + this.diagramEditor.setEditMode(false); + this.diagramEditor.show(); + + chart = me.api.asc_getChartObject(type); + if (chart) { + this.diagramEditor.setChartData(new Asc.asc_CChartBinary(chart)); + } + me.toolbar.fireEvent('insertchart', me.toolbar); } - me.toolbar.fireEvent('insertchart', me.toolbar); } }, diff --git a/apps/presentationeditor/main/app/view/ChartSettings.js b/apps/presentationeditor/main/app/view/ChartSettings.js index 80ab24a9c..c8123238c 100644 --- a/apps/presentationeditor/main/app/view/ChartSettings.js +++ b/apps/presentationeditor/main/app/view/ChartSettings.js @@ -200,7 +200,7 @@ define([ cls : 'btn-large-dataview', iconCls : 'item-chartlist bar-normal', menu : new Common.UI.Menu({ - style: 'width: 560px;', + style: 'width: 435px; padding-top: 12px;', items: [ { template: _.template('') } ] @@ -210,15 +210,15 @@ define([ me.mnuChartTypePicker = new Common.UI.DataView({ el: $('#id-chart-menu-type'), parentMenu: btn.menu, - restoreHeight: 411, + restoreHeight: 421, groups: new Common.UI.DataViewGroupStore([ { id: 'menu-chart-group-bar', caption: me.textColumn }, { id: 'menu-chart-group-line', caption: me.textLine }, { id: 'menu-chart-group-pie', caption: me.textPie }, { id: 'menu-chart-group-hbar', caption: me.textBar }, - { id: 'menu-chart-group-area', caption: me.textArea }, - { id: 'menu-chart-group-scatter', caption: me.textPoint }, - { id: 'menu-chart-group-stock', caption: me.textStock } + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal', selected: true}, @@ -487,13 +487,13 @@ define([ textHeight: 'Height', textEditData: 'Edit Data', textChartType: 'Change Chart Type', - textLine: 'Line Chart', - textColumn: 'Column Chart', - textBar: 'Bar Chart', - textArea: 'Area Chart', - textPie: 'Pie Chart', - textPoint: 'XY (Scatter) Chart', - textStock: 'Stock Chart', + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', textStyle: 'Style' }, PE.Views.ChartSettings || {})); }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app/view/FileMenu.js b/apps/presentationeditor/main/app/view/FileMenu.js index da463c62d..39364b3c1 100644 --- a/apps/presentationeditor/main/app/view/FileMenu.js +++ b/apps/presentationeditor/main/app/view/FileMenu.js @@ -175,18 +175,15 @@ define([ ); var me = this; - this.panels = {}; - require(['presentationeditor/main/app/view/FileMenuPanels'], function(){ - me.panels = { - 'saveas' : (new PE.Views.FileMenuPanels.ViewSaveAs({menu:me})).render(), - 'opts' : (new PE.Views.FileMenuPanels.Settings({menu:me})).render(), - 'info' : (new PE.Views.FileMenuPanels.DocumentInfo({menu:me})).render(), - 'rights' : (new PE.Views.FileMenuPanels.DocumentRights({menu:me})).render(), - 'help' : (new PE.Views.FileMenuPanels.Help({menu:me})).render() - }; + me.panels = { + 'saveas' : (new PE.Views.FileMenuPanels.ViewSaveAs({menu:me})).render(), + 'opts' : (new PE.Views.FileMenuPanels.Settings({menu:me})).render(), + 'info' : (new PE.Views.FileMenuPanels.DocumentInfo({menu:me})).render(), + 'rights' : (new PE.Views.FileMenuPanels.DocumentRights({menu:me})).render(), + 'help' : (new PE.Views.FileMenuPanels.Help({menu:me})).render() + }; - me.$el.find('.content-box').hide(); - }); + me.$el.find('.content-box').hide(); return this; }, diff --git a/apps/presentationeditor/main/app/view/FileMenuPanels.js b/apps/presentationeditor/main/app/view/FileMenuPanels.js index ff96d1159..aa48251d3 100644 --- a/apps/presentationeditor/main/app/view/FileMenuPanels.js +++ b/apps/presentationeditor/main/app/view/FileMenuPanels.js @@ -260,7 +260,7 @@ define([ this.lblAutosave.text(this.textAutoRecover); } /** coauthoring begin **/ - $('tr.coauth.changes', this.el)[mode.isEdit && mode.canLicense && !mode.isOffline && mode.canCoAuthoring ? 'show' : 'hide'](); + $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring ? 'show' : 'hide'](); /** coauthoring end **/ }, @@ -303,7 +303,7 @@ define([ Common.localStorage.setItem("pe-settings-inputmode", this.chInputMode.isChecked() ? 1 : 0); Common.localStorage.setItem("pe-settings-zoom", this.cmbZoom.getValue()); /** coauthoring begin **/ - if (this.mode.isEdit && this.mode.canLicense && !this.mode.isOffline && this.mode.canCoAuthoring) { + if (this.mode.isEdit && !this.mode.isOffline && this.mode.canCoAuthoring) { Common.localStorage.setItem("pe-settings-coauthmode", this.cmbCoAuthMode.getValue()); } /** coauthoring end **/ diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index 46bcc4ddb..b0e19e85a 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -554,7 +554,7 @@ define([ iconCls : 'btn-insertchart', lock : [_set.slideDeleted, _set.lostConnect, _set.noSlides, _set.disableOnStart], menu : new Common.UI.Menu({ - style: 'width: 560px;', + style: 'width: 435px;', items: [ { template: _.template('') } ] @@ -564,15 +564,15 @@ define([ el: $('#id-toolbar-menu-insertchart'), parentMenu: btn.menu, showLast: false, - restoreHeight: 411, + restoreHeight: 421, groups: new Common.UI.DataViewGroupStore([ - { id: 'menu-chart-group-bar', caption: me.textColumn }, + { id: 'menu-chart-group-bar', caption: me.textColumn, headername: me.textCharts }, { id: 'menu-chart-group-line', caption: me.textLine }, { id: 'menu-chart-group-pie', caption: me.textPie }, { id: 'menu-chart-group-hbar', caption: me.textBar }, - { id: 'menu-chart-group-area', caption: me.textArea }, - { id: 'menu-chart-group-scatter', caption: me.textPoint }, - { id: 'menu-chart-group-stock', caption: me.textStock } + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, allowSelected: true, iconCls: 'column-normal', selected: true}, @@ -1676,13 +1676,13 @@ define([ textFitWidth: 'Fit to Width', textZoom: 'Zoom', tipInsertChart: 'Insert Chart', - textLine: 'Line Chart', - textColumn: 'Column Chart', - textBar: 'Bar Chart', - textArea: 'Area Chart', - textPie: 'Pie Chart', - textPoint: 'XY (Scatter) Chart', - textStock: 'Stock Chart', + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', tipSynchronize: 'The document has been changed by another user. Please click to save your changes and reload the updates.', txtScheme1: 'Office', txtScheme2: 'Grayscale', @@ -1712,6 +1712,8 @@ define([ textShowBegin: 'Show from Beginning', textShowCurrent: 'Show from Current slide', textShowSettings: 'Show Settings', - tipInsertEquation: 'Insert Equation' + tipInsertEquation: 'Insert Equation', + textCharts: 'Charts', + tipChangeChart: 'Change Chart Type' }, PE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/presentationeditor/main/app_dev.js b/apps/presentationeditor/main/app_dev.js index d3e8cfecd..1348fc7b5 100644 --- a/apps/presentationeditor/main/app_dev.js +++ b/apps/presentationeditor/main/app_dev.js @@ -163,6 +163,7 @@ require([ 'presentationeditor/main/app/controller/RightMenu', 'presentationeditor/main/app/controller/LeftMenu', 'presentationeditor/main/app/controller/Main', + 'presentationeditor/main/app/view/FileMenuPanels', 'presentationeditor/main/app/view/ParagraphSettings', 'presentationeditor/main/app/view/ImageSettings', 'presentationeditor/main/app/view/ShapeSettings', diff --git a/apps/presentationeditor/main/locale/en.json b/apps/presentationeditor/main/locale/en.json index 550f76e57..fd577aea1 100644 --- a/apps/presentationeditor/main/locale/en.json +++ b/apps/presentationeditor/main/locale/en.json @@ -578,18 +578,18 @@ "PE.Controllers.Toolbar.txtSymbol_vdots": "Vertical Ellipsis", "PE.Controllers.Toolbar.txtSymbol_xsi": "Xi", "PE.Controllers.Toolbar.txtSymbol_zeta": "Zeta", - "PE.Views.ChartSettings.textArea": "Area Chart", - "PE.Views.ChartSettings.textBar": "Bar Chart", + "PE.Views.ChartSettings.textArea": "Area", + "PE.Views.ChartSettings.textBar": "Bar", "PE.Views.ChartSettings.textChartType": "Change Chart Type", - "PE.Views.ChartSettings.textColumn": "Column Chart", + "PE.Views.ChartSettings.textColumn": "Column", "PE.Views.ChartSettings.textEditData": "Edit Data", "PE.Views.ChartSettings.textHeight": "Height", "PE.Views.ChartSettings.textKeepRatio": "Constant Proportions", - "PE.Views.ChartSettings.textLine": "Line Chart", - "PE.Views.ChartSettings.textPie": "Pie Chart", - "PE.Views.ChartSettings.textPoint": "XY (Scatter) Chart", + "PE.Views.ChartSettings.textLine": "Line", + "PE.Views.ChartSettings.textPie": "Pie", + "PE.Views.ChartSettings.textPoint": "XY (Scatter)", "PE.Views.ChartSettings.textSize": "Size", - "PE.Views.ChartSettings.textStock": "Stock Chart", + "PE.Views.ChartSettings.textStock": "Stock", "PE.Views.ChartSettings.textStyle": "Style", "PE.Views.ChartSettings.textWidth": "Width", "PE.Views.DocumentHolder.aboveText": "Above", @@ -1190,15 +1190,16 @@ "PE.Views.Toolbar.textAlignMiddle": "Align text to the middle", "PE.Views.Toolbar.textAlignRight": "Align text right", "PE.Views.Toolbar.textAlignTop": "Align text to the top", - "PE.Views.Toolbar.textArea": "Area Chart", + "PE.Views.Toolbar.textArea": "Area", "PE.Views.Toolbar.textArrangeBack": "Send to Background", "PE.Views.Toolbar.textArrangeBackward": "Move Backward", "PE.Views.Toolbar.textArrangeForward": "Move Forward", "PE.Views.Toolbar.textArrangeFront": "Bring To Foreground", - "PE.Views.Toolbar.textBar": "Bar Chart", + "PE.Views.Toolbar.textBar": "Bar", "PE.Views.Toolbar.textBold": "Bold", "PE.Views.Toolbar.textCancel": "Cancel", - "PE.Views.Toolbar.textColumn": "Column Chart", + "PE.Views.Toolbar.textCharts": "Charts", + "PE.Views.Toolbar.textColumn": "Column", "PE.Views.Toolbar.textCompactView": "View Compact Toolbar", "PE.Views.Toolbar.textFitPage": "Fit to Slide", "PE.Views.Toolbar.textFitWidth": "Fit to Width", @@ -1208,11 +1209,11 @@ "PE.Views.Toolbar.textInsText": "Insert text box", "PE.Views.Toolbar.textInsTextArt": "Insert Text Art", "PE.Views.Toolbar.textItalic": "Italic", - "PE.Views.Toolbar.textLine": "Line Chart", + "PE.Views.Toolbar.textLine": "Line", "PE.Views.Toolbar.textNewColor": "Custom Color", "PE.Views.Toolbar.textOK": "OK", - "PE.Views.Toolbar.textPie": "Pie Chart", - "PE.Views.Toolbar.textPoint": "XY (Scatter) Chart", + "PE.Views.Toolbar.textPie": "Pie", + "PE.Views.Toolbar.textPoint": "XY (Scatter)", "PE.Views.Toolbar.textShapeAlignBottom": "Align Bottom", "PE.Views.Toolbar.textShapeAlignCenter": "Align Center", "PE.Views.Toolbar.textShapeAlignLeft": "Align Left", @@ -1222,7 +1223,7 @@ "PE.Views.Toolbar.textShowBegin": "Show from Beginning", "PE.Views.Toolbar.textShowCurrent": "Show from Current slide", "PE.Views.Toolbar.textShowSettings": "Show Settings", - "PE.Views.Toolbar.textStock": "Stock Chart", + "PE.Views.Toolbar.textStock": "Stock", "PE.Views.Toolbar.textStrikeout": "Strikeout", "PE.Views.Toolbar.textSubscript": "Subscript", "PE.Views.Toolbar.textSuperscript": "Superscript", @@ -1232,6 +1233,7 @@ "PE.Views.Toolbar.tipAddSlide": "Add Slide", "PE.Views.Toolbar.tipAdvSettings": "Advanced Settings", "PE.Views.Toolbar.tipBack": "Back", + "PE.Views.Toolbar.tipChangeChart": "Change Chart Type", "PE.Views.Toolbar.tipChangeSlide": "Change Slide Layout", "PE.Views.Toolbar.tipClearStyle": "Clear Style", "PE.Views.Toolbar.tipColorSchemas": "Change Color Scheme", diff --git a/apps/presentationeditor/main/resources/less/leftmenu.less b/apps/presentationeditor/main/resources/less/leftmenu.less index 5fde48cd0..a624d8907 100644 --- a/apps/presentationeditor/main/resources/less/leftmenu.less +++ b/apps/presentationeditor/main/resources/less/leftmenu.less @@ -394,8 +394,6 @@ .header-name { padding: 7px 2px 7px 10px; - font-weight: bold; - cursor: default; } } } diff --git a/apps/presentationeditor/main/resources/less/toolbar.less b/apps/presentationeditor/main/resources/less/toolbar.less index 83235f262..22a026dfc 100644 --- a/apps/presentationeditor/main/resources/less/toolbar.less +++ b/apps/presentationeditor/main/resources/less/toolbar.less @@ -174,20 +174,12 @@ // charts .menu-insertchart { .group-description { - float: left; - width: 125px; - line-height: 58px; - padding-left: 6px; + padding-left: 4px; } .group-items-container { float: left; position: relative; - - & > div { - float: left; - margin: 0 0 0 14px; - } } } diff --git a/apps/presentationeditor/sdk_dev_scripts.js b/apps/presentationeditor/sdk_dev_scripts.js index 0be236e9a..76168a3a7 100644 --- a/apps/presentationeditor/sdk_dev_scripts.js +++ b/apps/presentationeditor/sdk_dev_scripts.js @@ -8,6 +8,9 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/apiCommon.js", "../../../../sdkjs/common/SerializeCommonWordExcel.js", "../../../../sdkjs/common/editorscommon.js", + "../../../../sdkjs/common/HistoryCommon.js", + "../../../../sdkjs/common/TableId.js", + "../../../../sdkjs/common/TableIdChanges.js", "../../../../sdkjs/common/NumFormat.js", "../../../../sdkjs/common/SerializeChart.js", "../../../../sdkjs/common/AdvancedOptions.js", @@ -25,7 +28,6 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/Drawings/Hit.js", "../../../../sdkjs/common/Drawings/ArcTo.js", "../../../../sdkjs/common/Drawings/ColorArray.js", - "../../../../sdkjs/common/Drawings/Format/Constants.js", "../../../../sdkjs/common/Drawings/CommonController.js", "../../../../sdkjs/common/Drawings/States.js", "../../../../sdkjs/common/Drawings/Format/CreateGeometry.js", @@ -75,17 +77,23 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/slide/Drawing/ThemeLoader.js", "../../../../sdkjs/word/Editor/Serialize2.js", "../../../../sdkjs/word/Editor/Numbering.js", + "../../../../sdkjs/word/Editor/NumberingChanges.js", "../../../../sdkjs/slide/Editor/CollaborativeEditing.js", "../../../../sdkjs/word/Drawing/GraphicsEvents.js", "../../../../sdkjs/word/Drawing/Rulers.js", "../../../../sdkjs/word/Editor/Table.js", + "../../../../sdkjs/word/Editor/Table/TableChanges.js", "../../../../sdkjs/word/Editor/Table/TableRecalculate.js", "../../../../sdkjs/word/Editor/Table/TableDraw.js", "../../../../sdkjs/word/Editor/Table/TableRow.js", + "../../../../sdkjs/word/Editor/Table/TableRowChanges.js", "../../../../sdkjs/word/Editor/Table/TableCell.js", + "../../../../sdkjs/word/Editor/Table/TableCellChanges.js", "../../../../sdkjs/word/Editor/Common.js", "../../../../sdkjs/word/Editor/Sections.js", + "../../../../sdkjs/word/Editor/SectionsChanges.js", "../../../../sdkjs/word/Editor/Styles.js", + "../../../../sdkjs/word/Editor/StylesChanges.js", "../../../../sdkjs/slide/Editor/Format/StylesPrototype.js", "../../../../sdkjs/word/Drawing/Graphics.js", "../../../../sdkjs/word/Drawing/ShapeDrawer.js", @@ -99,10 +107,17 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/slide/Editor/Format/Layout.js", "../../../../sdkjs/slide/Editor/Format/Comments.js", "../../../../sdkjs/word/Editor/ParagraphContent.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaTextPr.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaTextPrChanges.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaDrawing.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaDrawingChanges.js", "../../../../sdkjs/word/Editor/Paragraph.js", + "../../../../sdkjs/word/Editor/ParagraphChanges.js", "../../../../sdkjs/word/Editor/DocumentContentBase.js", "../../../../sdkjs/word/Editor/Document.js", + "../../../../sdkjs/word/Editor/DocumentChanges.js", "../../../../sdkjs/word/Editor/DocumentContent.js", + "../../../../sdkjs/word/Editor/DocumentContentChanges.js", "../../../../sdkjs/word/Editor/DocumentControllerBase.js", "../../../../sdkjs/word/Editor/LogicDocumentController.js", "../../../../sdkjs/word/Editor/DrawingsController.js", @@ -115,8 +130,11 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/word/Editor/Numbering.js", "../../../../sdkjs/word/Editor/ParagraphContentBase.js", "../../../../sdkjs/word/Editor/Hyperlink.js", + "../../../../sdkjs/word/Editor/HyperlinkChanges.js", "../../../../sdkjs/word/Editor/Field.js", + "../../../../sdkjs/word/Editor/FieldChanges.js", "../../../../sdkjs/word/Editor/Run.js", + "../../../../sdkjs/word/Editor/RunChanges.js", "../../../../sdkjs/word/Math/mathTypes.js", "../../../../sdkjs/word/Math/mathText.js", "../../../../sdkjs/word/Math/mathContent.js", @@ -134,8 +152,10 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/word/Editor/Paragraph_Recalculate.js", "../../../../sdkjs/word/Editor/HeaderFooter.js", "../../../../sdkjs/word/Editor/Math.js", + "../../../../sdkjs/word/Editor/MathChanges.js", "../../../../sdkjs/word/Editor/Spelling.js", "../../../../sdkjs/word/Editor/Footnotes.js", + "../../../../sdkjs/word/Editor/FootnotesChanges.js", "../../../../sdkjs/word/Editor/FootEndNote.js", "../../../../sdkjs/word/Editor/Search.js", "../../../../sdkjs/word/Editor/FontClassification.js", @@ -151,5 +171,8 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/plugins.js", "../../../../sdkjs/word/apiBuilder.js", "../../../../sdkjs/slide/apiBuilder.js", - "../../../../sdkjs/common/text_input.js" + "../../../../sdkjs/common/text_input.js", + "../../../../sdkjs/common/Scrolls/iscroll.js", + "../../../../sdkjs/common/Scrolls/mobileTouchManagerBase.js", + "../../../../sdkjs/slide/Drawing/mobileTouchManager.js" ]; \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app.js b/apps/spreadsheeteditor/main/app.js index b1640b119..70cd97b97 100644 --- a/apps/spreadsheeteditor/main/app.js +++ b/apps/spreadsheeteditor/main/app.js @@ -174,6 +174,7 @@ require([ 'spreadsheeteditor/main/app/controller/LeftMenu', 'spreadsheeteditor/main/app/controller/Main', 'spreadsheeteditor/main/app/controller/Print', + 'spreadsheeteditor/main/app/view/FileMenuPanels', 'spreadsheeteditor/main/app/view/ParagraphSettings', 'spreadsheeteditor/main/app/view/ImageSettings', 'spreadsheeteditor/main/app/view/ChartSettings', diff --git a/apps/spreadsheeteditor/main/app/controller/CellEditor.js b/apps/spreadsheeteditor/main/app/controller/CellEditor.js index 2147bd64c..27ddf7fbe 100644 --- a/apps/spreadsheeteditor/main/app/controller/CellEditor.js +++ b/apps/spreadsheeteditor/main/app/controller/CellEditor.js @@ -125,6 +125,7 @@ define([ this.api.isCEditorFocused = false; this.editor.cellNameDisabled(false); } + this.editor.$btnfunc.toggleClass('disabled', state == Asc.c_oAscCellEditorState.editText); }, onApiCellSelection: function(info) { @@ -147,6 +148,7 @@ define([ onCellsRange: function(status) { this.editor.cellNameDisabled(status != Asc.c_oAscSelectionDialogType.None); + this.editor.$btnfunc.toggleClass('disabled', status != Asc.c_oAscSelectionDialogType.None); }, onLayoutResize: function(o, r) { diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index 3bc0df158..13a22a08b 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -257,7 +257,7 @@ define([ (!(value!==null && parseInt(value) == 0)) ? this.api.asc_showComments() : this.api.asc_hideComments(); // this.getApplication().getController('DocumentHolder').setLiveCommenting(!(value!==null && parseInt(value) == 0)); - if (this.mode.isEdit && this.mode.canLicense && !this.mode.isOffline && this.mode.canCoAuthoring) { + if (this.mode.isEdit && !this.mode.isOffline && this.mode.canCoAuthoring) { value = Common.localStorage.getItem("sse-settings-coauthmode"); this.api.asc_SetFastCollaborative(value===null || parseInt(value) == 1); } diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index fe6cca645..cb53074c3 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -147,6 +147,7 @@ define([ // Initialize api gateway this.editorConfig = {}; this.plugins = undefined; + this.UICustomizePlugins = []; Common.Gateway.on('init', _.bind(this.loadConfig, this)); Common.Gateway.on('showmessage', _.bind(this.onExternalMessage, this)); Common.Gateway.on('opendocument', _.bind(this.loadDocument, this)); @@ -580,7 +581,7 @@ define([ this.isLiveCommenting = !(value!==null && parseInt(value) == 0); this.isLiveCommenting?this.api.asc_showComments():this.api.asc_hideComments(); - if (this.appOptions.isEdit && this.appOptions.canLicense && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { + if (this.appOptions.isEdit && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { value = Common.localStorage.getItem("sse-settings-coauthmode"); if (value===null && Common.localStorage.getItem("sse-settings-autosave")===null && this.appOptions.customization && this.appOptions.customization.autosave===false) { @@ -620,7 +621,7 @@ define([ if (!me.appOptions.isEditMailMerge && !me.appOptions.isEditDiagram) { pluginsController.setApi(me.api); - me.updatePlugins(me.plugins); + me.updatePlugins(me.plugins, false); me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me)); } @@ -692,9 +693,13 @@ define([ } if (me.needToUpdateVersion) toolbarController.onApiCoAuthoringDisconnect(); + + if (me.appOptions.canBrandingExt) + Common.NotificationCenter.trigger('document:ready', 'main'); } }, 50); - } + } else if (me.appOptions.canBrandingExt) + Common.NotificationCenter.trigger('document:ready', 'main'); if (me.appOptions.canAnalytics && false) Common.component.Analytics.initialize('UA-12442749-13', 'Spreadsheet Editor'); @@ -790,7 +795,9 @@ define([ if (this.appOptions.canBranding) this.headerView.setBranding(this.editorConfig.customization); - this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object'); + this.appOptions.canBrandingExt = params.asc_getCanBranding() && (typeof this.editorConfig.customization == 'object' || this.editorConfig.plugins); + if (this.appOptions.canBrandingExt) + this.updatePlugins(this.plugins, true); params.asc_getTrial() && this.headerView.setDeveloperMode(true); this.appOptions.canRename && this.headerView.setCanRename(true); @@ -1356,13 +1363,15 @@ define([ }, hidePreloader: function() { - if (!!this.appOptions.customization && !this.appOptions.customization.done) { - this.appOptions.customization.done = true; - if (!this.appOptions.isDesktopApp) + if (!this._state.customizationDone) { + this._state.customizationDone = true; + if (this.appOptions.customization && !this.appOptions.isDesktopApp) this.appOptions.customization.about = true; Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationElements); - if (this.appOptions.canBrandingExt) + if (this.appOptions.canBrandingExt) { Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationExtElements); + Common.Utils.applyCustomizationPlugins(this.UICustomizePlugins); + } } this.stackLongActions.pop({id: InitApplication, type: Asc.c_oAscAsyncActionType.BlockInteraction}); @@ -1752,7 +1761,7 @@ define([ }, applySettings: function() { - if (this.appOptions.isEdit && this.appOptions.canLicense && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { + if (this.appOptions.isEdit && !this.appOptions.isOffline && this.appOptions.canCoAuthoring) { var value = Common.localStorage.getItem("sse-settings-coauthmode"), oldval = this._state.fastCoauth; this._state.fastCoauth = (value===null || parseInt(value) == 1); @@ -1807,8 +1816,11 @@ define([ if (url) this.iframePrint.src = url; }, - updatePlugins: function(plugins) { // plugins from config - if (!plugins || !plugins.pluginsData || plugins.pluginsData.length<1) return; + updatePlugins: function(plugins, uiCustomize) { // plugins from config + if (!plugins) return; + + var pluginsData = (uiCustomize) ? plugins.UIpluginsData : plugins.pluginsData; + if (!pluginsData || pluginsData.length<1) return; var _createXMLHTTPObject = function() { var xmlhttp; @@ -1846,7 +1858,7 @@ define([ var arr = [], baseUrl = plugins.url; - plugins.pluginsData.forEach(function(item){ + pluginsData.forEach(function(item){ var url = item; if (!/(^https?:\/\/)/i.test(url) && !/(^www.)/i.test(item)) url = baseUrl + item; @@ -1859,14 +1871,14 @@ define([ autoStartGuid: plugins.autoStartGuid, url: plugins.url, pluginsData: arr - }); + }, !!uiCustomize); }, - updatePluginsList: function(plugins) { + updatePluginsList: function(plugins, uiCustomize) { var pluginStore = this.getApplication().getCollection('Common.Collections.Plugins'), isEdit = this.appOptions.isEdit; - if (pluginStore && plugins) { - var arr = []; + if (plugins) { + var arr = [], arrUI = []; plugins.pluginsData.forEach(function(item){ var variations = item.variations, variationsArr = []; @@ -1877,7 +1889,9 @@ define([ isSupported = true; break; } } - if (isSupported && (isEdit || itemVar.isViewer)) + if (isSupported && (isEdit || itemVar.isViewer)) { + var isRelativeUrl = !(/(^https?:\/\/)/i.test(itemVar.url) || /(^www.)/i.test(itemVar.url)); + item.isUICustomizer ? arrUI.push((isRelativeUrl) ? ((item.baseUrl ? item.baseUrl : plugins.url) + itemVar.url) : itemVar.url) : variationsArr.push(new Common.Models.PluginVariation({ description: itemVar.description, index: variationsArr.length, @@ -1894,10 +1908,11 @@ define([ buttons: itemVar.buttons, size: itemVar.size, initOnSelectionChanged: itemVar.initOnSelectionChanged, - isRelativeUrl: !(/(^https?:\/\/)/i.test(itemVar.url) || /(^www.)/i.test(itemVar.url)) + isRelativeUrl: isRelativeUrl })); + } }); - if (variationsArr.length>0) + if (variationsArr.length>0 && !item.isUICustomizer) arr.push(new Common.Models.Plugin({ name : item.name, guid: item.guid, @@ -1907,11 +1922,15 @@ define([ })); }); - pluginStore.reset(arr); + if (uiCustomize!==false) // from ui customizer in editor config or desktop event + this.UICustomizePlugins = arrUI; - this.appOptions.pluginsPath = (plugins.url); - this.appOptions.canPlugins = (arr.length>0); - } else { + if (!uiCustomize) { + if (pluginStore) pluginStore.reset(arr); + this.appOptions.pluginsPath = (plugins.url); + this.appOptions.canPlugins = (arr.length>0); + } + } else if (!uiCustomize){ this.appOptions.pluginsPath = ''; this.appOptions.canPlugins = false; } @@ -1920,7 +1939,7 @@ define([ if (plugins.autoStartGuid) this.api.asc_pluginRun(plugins.autoStartGuid, 0, ''); } - this.getApplication().getController('LeftMenu').enablePlugins(); + if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins(); }, 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.', diff --git a/apps/spreadsheeteditor/main/app/controller/RightMenu.js b/apps/spreadsheeteditor/main/app/controller/RightMenu.js index 403f6f009..a004411b9 100644 --- a/apps/spreadsheeteditor/main/app/controller/RightMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/RightMenu.js @@ -150,6 +150,7 @@ define([ if (settingsType == Common.Utils.documentSettingsType.Image) { if (value.asc_getChartProperties() !== null) { settingsType = Common.Utils.documentSettingsType.Chart; + this._settings[settingsType].btn.updateHint(this.rightmenu.txtChartSettings); } else if (value.asc_getShapeProperties() !== null) { settingsType = Common.Utils.documentSettingsType.Shape; if (value.asc_getShapeProperties().asc_getTextArtProperties()) { @@ -177,6 +178,7 @@ define([ this._settings[settingsType].props = sparkLineInfo; this._settings[settingsType].locked = isSparkLocked; this._settings[settingsType].hidden = 0; + this._settings[settingsType].btn.updateHint(this.rightmenu.txtSparklineSettings); } var lastactive = -1, currentactive, priorityactive = -1, diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 1a8b32f99..869f4c620 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -100,7 +100,8 @@ define([ tablename: undefined, namedrange_locked: false, fontsize: undefined, - multiselect: false + multiselect: false, + sparklines_disabled: false }; var checkInsertAutoshape = function(e, action) { @@ -205,10 +206,8 @@ define([ toolbar.btnTextOrient.menu.on('item:click', _.bind(this.onTextOrientationMenu, this)); toolbar.btnInsertImage.menu.on('item:click', _.bind(this.onInsertImageMenu, this)); toolbar.btnInsertHyperlink.on('click', _.bind(this.onHyperlink, this)); - toolbar.btnInsertChart.on('click', _.bind(this.onInsertChart, this)); -// if (toolbar.mnuInsertChartPicker) toolbar.mnuInsertChartPicker.on('item:click', _.bind(this.onSelectChart, this)); -// if (toolbar.mnuInsertSparkPicker) toolbar.mnuInsertSparkPicker.on('item:click', _.bind(this.onSelectSpark, this)); - toolbar.btnEditChart.on('click', _.bind(this.onInsertChart, this)); + toolbar.mnuInsertChartPicker.on('item:click', _.bind(this.onSelectChart, this)); + toolbar.btnEditChart.on('click', _.bind(this.onEditChart, this)); toolbar.btnInsertText.on('click', _.bind(this.onBtnInsertTextClick, this)); toolbar.btnInsertText.menu.on('item:click', _.bind(this.onInsertTextClick, this)); toolbar.btnInsertShape.menu.on('hide:after', _.bind(this.onInsertShapeHide, this)); @@ -272,7 +271,7 @@ define([ setApi: function(api) { this.api = api; - this.api.asc_registerCallback('asc_onInitTablePictures', _.bind(this.onApiInitTableTemplates, this)); + this.api.asc_registerCallback('asc_onSendThemeColors', _.bind(this.onSendThemeColors, this)); this.api.asc_registerCallback('asc_onInitEditorStyles', _.bind(this.onApiInitEditorStyles, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onApiCoAuthoringDisconnect, this, true)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); @@ -743,7 +742,7 @@ define([ Common.component.Analytics.trackEvent('ToolBar', 'Add Hyperlink'); }, - onInsertChart: function(btn) { + onEditChart: function(btn) { if (!this.editMode) return; var me = this, info = me.api.asc_getCellInfo(); if (info.asc_getFlags().asc_getSelectionType()!=Asc.c_oAscSelectionType.RangeImage) { @@ -774,37 +773,30 @@ define([ onSelectChart: function(picker, item, record, e) { if (!this.editMode) return; - var me = this, info = me.api.asc_getCellInfo(); - if (info.asc_getFlags().asc_getSelectionType()!=Asc.c_oAscSelectionType.RangeImage) { - var win, props; - if (me.api){ - var ischartedit = ( info.asc_getFlags().asc_getSelectionType() == Asc.c_oAscSelectionType.RangeChart || info.asc_getFlags().asc_getSelectionType() == Asc.c_oAscSelectionType.RangeChartText); - if (ischartedit) { - } else { - props = me.api.asc_getChartObject(); - if (props) { - props.putType(record.get('type')); - me.api.asc_addChartDrawingObject(props); - } - } - } - } - if (e.type !== 'click') - me.toolbar.btnInsertChart.menu.hide(); - Common.NotificationCenter.trigger('edit:complete', this.toolbar); - }, + var me = this, + info = me.api.asc_getCellInfo(), + type = info.asc_getFlags().asc_getSelectionType(), + group = record.get('group'), + isSpark = (group == 'menu-chart-group-sparkcolumn' || group == 'menu-chart-group-sparkline' || group == 'menu-chart-group-sparkwin'); - onSelectSpark: function(picker, item, record, e) { - if (!this.editMode) return; - var me = this, info = me.api.asc_getCellInfo(), type = info.asc_getFlags().asc_getSelectionType(); - if (type==Asc.c_oAscSelectionType.RangeCells || type==Asc.c_oAscSelectionType.RangeCol || - type==Asc.c_oAscSelectionType.RangeRow || type==Asc.c_oAscSelectionType.RangeMax) { - var props; - if (me.api){ + if (type!=Asc.c_oAscSelectionType.RangeImage && me.api) { + var win, props; + if (isSpark && (type==Asc.c_oAscSelectionType.RangeCells || type==Asc.c_oAscSelectionType.RangeCol || + type==Asc.c_oAscSelectionType.RangeRow || type==Asc.c_oAscSelectionType.RangeMax)) { + var sparkLineInfo = info.asc_getSparklineInfo(); + if (!!sparkLineInfo) { + var props = new Asc.sparklineGroup(); + props.asc_setType(record.get('type')); + this.api.asc_setSparklineGroup(sparkLineInfo.asc_getId(), props); + } else { + // add sparkline + } + } else if (!isSpark) { + var ischartedit = ( type == Asc.c_oAscSelectionType.RangeChart || type == Asc.c_oAscSelectionType.RangeChartText); props = me.api.asc_getChartObject(); if (props) { props.putType(record.get('type')); - me.api.asc_addChartDrawingObject(props); + (ischartedit) ? me.api.asc_editChartDrawingObject(props) : me.api.asc_addChartDrawingObject(props); } } } @@ -1366,14 +1358,21 @@ define([ }, onTableTplMenuOpen: function(cmp) { - var scroller = this.toolbar.mnuTableTemplatePicker.scroller; + this.onApiInitTableTemplates(this.api.asc_getTablePictures(this.api.asc_getCellInfo().asc_getFormatTableInfo())); + var scroller = this.toolbar.mnuTableTemplatePicker.scroller; if (scroller) { scroller.update({alwaysVisibleY: true}); scroller.scrollTop(0); } }, + onSendThemeColors: function() { + // get new table templates + if (this.toolbar.btnTableTemplate.rendered && this.toolbar.btnTableTemplate.cmpEl.hasClass('open')) + this.onTableTplMenuOpen(); + }, + onApiInitTableTemplates: function(images) { var store = this.getCollection('TableTemplates'); if (store) { @@ -1385,7 +1384,8 @@ define([ type : item.asc_getType(), imageUrl : item.asc_getImage(), allowSelected : true, - selected : false + selected : false, + tip : item.asc_getDisplayName() }); }); @@ -1432,7 +1432,7 @@ define([ }, onApiChartDblClick: function() { - this.onInsertChart(this.btnInsertChart); + this.onEditChart(this.btnInsertChart); }, onApiCanRevert: function(which, can) { @@ -1626,6 +1626,16 @@ define([ toolbar.lockToolbar(SSE.enumLock.cantHyperlink, (selectionType == Asc.c_oAscSelectionType.RangeShapeText) && (this.api.asc_canAddShapeHyperlink()===false), { array: [toolbar.btnInsertHyperlink]}); + need_disable = selectionType != Asc.c_oAscSelectionType.RangeCells && selectionType != Asc.c_oAscSelectionType.RangeCol && + selectionType != Asc.c_oAscSelectionType.RangeRow && selectionType != Asc.c_oAscSelectionType.RangeMax; + if (this._state.sparklines_disabled !== need_disable) { + var len = toolbar.mnuInsertChartPicker.store.length; + for (var i=0; i<3; i++) { + toolbar.mnuInsertChartPicker.store.at(len-i-1).set({disabled: need_disable}); + this._state.sparklines_disabled = need_disable; + } + } + if (editOptionsDisabled) return; /* read font params */ @@ -2001,17 +2011,13 @@ define([ if (!_.isUndefined(opts.headings)) { if (this.api) { - var current = this.api.asc_getSheetViewSettings(); - current.asc_setShowRowColHeaders(!opts.headings); - this.api.asc_setSheetViewSettings(current); + this.api.asc_setDisplayHeadings(!opts.headings); } } if (!_.isUndefined(opts.gridlines)) { if (this.api) { - current = this.api.asc_getSheetViewSettings(); - current.asc_setShowGridLines(!opts.gridlines); - this.api.asc_setSheetViewSettings(current); + this.api.asc_setDisplayGridlines(!opts.gridlines); } } @@ -2394,6 +2400,7 @@ define([ clear: [_set.selImage, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.coAuth] }); toolbar.lockToolbar(SSE.enumLock.coAuthText, is_objLocked); + toolbar.lockToolbar(SSE.enumLock.coAuthText, is_objLocked && (seltype==Asc.c_oAscSelectionType.RangeChart || seltype==Asc.c_oAscSelectionType.RangeChartText), { array: [toolbar.btnInsertChart] } ); } $('#ce-func-label').toggleClass('disabled', is_image || is_mode_2 || coauth_disable); diff --git a/apps/spreadsheeteditor/main/app/template/ChartSettingsDlg.template b/apps/spreadsheeteditor/main/app/template/ChartSettingsDlg.template index f005dc48c..e694f2ce4 100644 --- a/apps/spreadsheeteditor/main/app/template/ChartSettingsDlg.template +++ b/apps/spreadsheeteditor/main/app/template/ChartSettingsDlg.template @@ -335,35 +335,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
+ +
+
+
+ +
+ +
+
+
+ +
diff --git a/apps/spreadsheeteditor/main/app/view/CellEditor.js b/apps/spreadsheeteditor/main/app/view/CellEditor.js index 2e4671261..43f05f074 100644 --- a/apps/spreadsheeteditor/main/app/view/CellEditor.js +++ b/apps/spreadsheeteditor/main/app/view/CellEditor.js @@ -102,7 +102,6 @@ define([ cellNameDisabled: function(disabled){ (disabled) ? this.$cellname.attr('disabled', 'disabled') : this.$cellname.removeAttr('disabled'); - this.$btnfunc.toggleClass('disabled', disabled); this.btnNamedRanges.setDisabled(disabled); }, diff --git a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js index 9654c6ce7..6a16694b1 100644 --- a/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js +++ b/apps/spreadsheeteditor/main/app/view/CellRangeDialog.js @@ -109,20 +109,23 @@ define([ this.inputRange.setValue(settings.range ? settings.range : ''); + if (settings.type===undefined) + settings.type = Asc.c_oAscSelectionDialogType.Chart; + if (settings.api) { me.api = settings.api; - me.api.asc_setSelectionDialogMode(Asc.c_oAscSelectionDialogType.Chart, settings.range ? settings.range : ''); + me.api.asc_setSelectionDialogMode(settings.type, settings.range ? settings.range : ''); me.api.asc_unregisterCallback('asc_onSelectionRangeChanged', _.bind(me.onApiRangeChanged, me)); me.api.asc_registerCallback('asc_onSelectionRangeChanged', _.bind(me.onApiRangeChanged, me)); - Common.NotificationCenter.trigger('cells:range', Asc.c_oAscSelectionDialogType.Chart); + Common.NotificationCenter.trigger('cells:range', settings.type); } me.inputRange.validation = function(value) { if (settings.validation) { return settings.validation.call(me, value); } else { - var isvalid = me.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Chart, value, false); + var isvalid = me.api.asc_checkDataRange(settings.type, value, false); return (isvalid==Asc.c_oAscError.ID.DataRangeError) ? me.txtInvalidRange : true; } }; diff --git a/apps/spreadsheeteditor/main/app/view/ChartSettings.js b/apps/spreadsheeteditor/main/app/view/ChartSettings.js index a422d2bb1..0afaa942c 100644 --- a/apps/spreadsheeteditor/main/app/view/ChartSettings.js +++ b/apps/spreadsheeteditor/main/app/view/ChartSettings.js @@ -654,7 +654,7 @@ define([ cls : 'btn-large-dataview', iconCls : 'item-chartlist bar-normal', menu : new Common.UI.Menu({ - style: 'width: 560px;', + style: 'width: 435px; padding-top: 12px;', items: [ { template: _.template('') } ] @@ -665,15 +665,15 @@ define([ me.mnuChartTypePicker = new Common.UI.DataView({ el: $('#id-chart-menu-type'), parentMenu: btn.menu, - restoreHeight: 411, + restoreHeight: 421, groups: new Common.UI.DataViewGroupStore([ { id: 'menu-chart-group-bar', caption: me.textColumn }, { id: 'menu-chart-group-line', caption: me.textLine }, { id: 'menu-chart-group-pie', caption: me.textPie }, { id: 'menu-chart-group-hbar', caption: me.textBar }, - { id: 'menu-chart-group-area', caption: me.textArea }, - { id: 'menu-chart-group-scatter', caption: me.textPoint }, - { id: 'menu-chart-group-stock', caption: me.textStock } + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal', selected: true}, @@ -762,9 +762,9 @@ define([ cls : 'btn-large-dataview', iconCls : 'item-chartlist spark-column', menu : new Common.UI.Menu({ - style: 'width: 210px;', + style: 'width: 200px; padding-top: 12px;', items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); @@ -772,17 +772,17 @@ define([ me.mnuSparkTypePicker = new Common.UI.DataView({ el: $('#id-spark-menu-type'), parentMenu: btn.menu, - restoreHeight: 200, + restoreHeight: 120, allowScrollbar: false, groups: new Common.UI.DataViewGroupStore([ - { id: 'menu-chart-group-sparkcolumn', caption: me.textColumnSpark }, - { id: 'menu-chart-group-sparkline', caption: me.textLineSpark }, - { id: 'menu-chart-group-sparkwin', caption: me.textWinLossSpark } + { id: 'menu-chart-group-sparkcolumn', inline: true }, + { id: 'menu-chart-group-sparkline', inline: true }, + { id: 'menu-chart-group-sparkwin', inline: true } ]), store: new Common.UI.DataViewStore([ - { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column'}, - { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line'}, - { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win'} + { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column', tip: me.textColumnSpark}, + { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line', tip: me.textLineSpark}, + { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win', tip: me.textWinLossSpark} ]), itemTemplate: _.template('
') }); @@ -979,7 +979,8 @@ define([ win.setSettings({ api : me.api, range : props.getRange(), - validation: validation + validation: validation, + type : Asc.c_oAscSelectionDialogType.Chart }); } }, @@ -1305,13 +1306,13 @@ define([ textHeight: 'Height', textEditData: 'Edit Data and Location', textChartType: 'Change Chart Type', - textLine: 'Line Chart', - textColumn: 'Column Chart', - textBar: 'Bar Chart', - textArea: 'Area Chart', - textPie: 'Pie Chart', - textPoint: 'XY (Scatter) Chart', - textStock: 'Stock Chart', + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', textStyle: 'Style', textAdvanced: 'Show advanced settings', strSparkColor: 'Color', diff --git a/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js b/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js index 51c240162..92b0b4316 100644 --- a/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js +++ b/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js @@ -94,6 +94,8 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.horAxisProps = null; this.currentAxisProps = null; this.dataRangeValid = ''; + this.sparkDataRangeValid = ''; + this.dataLocationRangeValid = ''; this.currentChartType = this._state.ChartType; this.storageName = (this.isChart) ? 'sse-chart-settings-adv-category' : 'sse-spark-settings-adv-category'; }, @@ -125,7 +127,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' cls : 'btn-large-dataview', iconCls : 'item-chartlist bar-normal', menu : new Common.UI.Menu({ - style: 'width: 560px;', + style: 'width: 435px; padding-top: 12px;', additionalAlign: menuAddAlign, items: [ { template: _.template('') } @@ -136,15 +138,15 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' me.mnuChartTypePicker = new Common.UI.DataView({ el: $('#id-chart-dlg-menu-type'), parentMenu: btn.menu, - restoreHeight: 411, + restoreHeight: 421, groups: new Common.UI.DataViewGroupStore([ { id: 'menu-chart-group-bar', caption: me.textColumn }, { id: 'menu-chart-group-line', caption: me.textLine }, { id: 'menu-chart-group-pie', caption: me.textPie }, { id: 'menu-chart-group-hbar', caption: me.textBar }, - { id: 'menu-chart-group-area', caption: me.textArea }, - { id: 'menu-chart-group-scatter', caption: me.textPoint }, - { id: 'menu-chart-group-stock', caption: me.textStock } + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal', selected: true}, @@ -782,10 +784,10 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' cls : 'btn-large-dataview', iconCls : 'item-chartlist spark-column', menu : new Common.UI.Menu({ - style: 'width: 210px;', + style: 'width: 200px; padding-top: 12px;', additionalAlign: menuAddAlign, items: [ - { template: _.template('') } + { template: _.template('') } ] }) }); @@ -793,16 +795,16 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' me.mnuSparkTypePicker = new Common.UI.DataView({ el: $('#id-spark-dlg-menu-type'), parentMenu: btn.menu, - restoreHeight: 200, + restoreHeight: 120, groups: new Common.UI.DataViewGroupStore([ - { id: 'menu-chart-group-sparkcolumn', caption: me.textColumnSpark }, - { id: 'menu-chart-group-sparkline', caption: me.textLineSpark }, - { id: 'menu-chart-group-sparkwin', caption: me.textWinLossSpark } + { id: 'menu-chart-group-sparkcolumn', inline: true }, + { id: 'menu-chart-group-sparkline', inline: true }, + { id: 'menu-chart-group-sparkwin', inline: true } ]), store: new Common.UI.DataViewStore([ - { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column'}, - { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line'}, - { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win'} + { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column', tip: me.textColumnSpark}, + { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line', tip: me.textLineSpark}, + { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win', tip: me.textWinLossSpark} ]), itemTemplate: _.template('
') }); @@ -840,7 +842,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' labelText: this.textSingle, name: 'asc-radio-sparkline' }); - + */ this.txtSparkDataRange = new Common.UI.InputField({ el : $('#spark-dlg-txt-range'), name : 'range', @@ -853,7 +855,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.btnSelectSparkData = new Common.UI.Button({ el: $('#spark-dlg-btn-data') }); -// this.btnSelectSparkData.on('click', _.bind(this.onSelectData, this)); + this.btnSelectSparkData.on('click', _.bind(this.onSelectSparkData, this)); this.txtSparkDataLocation = new Common.UI.InputField({ el : $('#spark-dlg-txt-location'), @@ -865,11 +867,10 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' }); this.btnSelectLocationData = new Common.UI.Button({ - el: $('#spark-dlg-btn-data') + el: $('#spark-dlg-btn-location-data') }); -// this.btnSelectLocationData.on('click', _.bind(this.onSelectData, this)); - */ - + this.btnSelectLocationData.on('click', _.bind(this.onSelectLocationData, this)); + this._arrEmptyCells = [ { value: Asc.c_oAscEDispBlanksAs.Gap, displayValue: this.textGaps }, { value: Asc.c_oAscEDispBlanksAs.Zero, displayValue: this.textZero }, @@ -1371,6 +1372,30 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.spnSparkMinValue.setValue((props.asc_getManualMin() !== null) ? props.asc_getManualMin() : '', true); this.spnSparkMaxValue.setValue((props.asc_getManualMax() !== null) ? props.asc_getManualMax() : '', true); + var value = props.asc_getDataRanges(); + if (value && value.length==2) { + this.txtSparkDataRange.setValue((value[0]) ? value[0] : ''); + this.txtSparkDataLocation.setValue((value[1]) ? value[1] : ''); + + this.sparkDataRangeValid = value[0]; + this.txtSparkDataRange.validation = function(value) { + if (_.isEmpty(value)) + return true; + + var isvalid = me.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.Chart, value, false); + return (isvalid==Asc.c_oAscError.ID.DataRangeError) ? me.textInvalidRange : true; + }; + + this.dataLocationRangeValid = value[1]; + this.txtSparkDataLocation.validation = function(value) { + if (_.isEmpty(value)) + return true; + + var isvalid = me.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.FormatTable, value, false); + return (isvalid==Asc.c_oAscError.ID.DataRangeError) ? me.textInvalidRange : true; + }; + } + this._changedProps = new Asc.sparklineGroup(); this._noApply = false; } @@ -1472,7 +1497,8 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' win.setSettings({ api : me.api, isRows : (me.cmbDataDirect.getValue()==0), - range : (!_.isEmpty(me.txtDataRange.getValue()) && (me.txtDataRange.checkValidate()==true)) ? me.txtDataRange.getValue() : me.dataRangeValid + range : (!_.isEmpty(me.txtDataRange.getValue()) && (me.txtDataRange.checkValidate()==true)) ? me.txtDataRange.getValue() : me.dataRangeValid, + type : Asc.c_oAscSelectionDialogType.Chart }); } }, @@ -1489,6 +1515,63 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' } }, + onSelectSparkData: function() { + var me = this; + if (me.api) { + var handlerDlg = function(dlg, result) { + if (result == 'ok') { + me.sparkDataRangeValid = dlg.getSettings(); + me.txtSparkDataRange.setValue(me.sparkDataRangeValid); + me.txtSparkDataRange.checkValidate(); + } + }; + + var win = new SSE.Views.CellRangeDialog({ + handler: handlerDlg + }).on('close', function() { + me.show(); + }); + + var xy = me.$window.offset(); + me.hide(); + win.show(xy.left + 160, xy.top + 125); + win.setSettings({ + api : me.api, + range : (!_.isEmpty(me.txtSparkDataRange.getValue()) && (me.txtSparkDataRange.checkValidate()==true)) ? me.txtSparkDataRange.getValue() : me.sparkDataRangeValid, + type : Asc.c_oAscSelectionDialogType.Chart + }); + } + }, + + + onSelectLocationData: function() { + var me = this; + if (me.api) { + var handlerDlg = function(dlg, result) { + if (result == 'ok') { + me.dataLocationRangeValid = dlg.getSettings(); + me.txtSparkDataLocation.setValue(me.dataLocationRangeValid); + me.txtSparkDataLocation.checkValidate(); + } + }; + + var win = new SSE.Views.CellRangeDialog({ + handler: handlerDlg + }).on('close', function() { + me.show(); + }); + + var xy = me.$window.offset(); + me.hide(); + win.show(xy.left + 160, xy.top + 125); + win.setSettings({ + api : me.api, + range : (!_.isEmpty(me.txtSparkDataLocation.getValue()) && (me.txtSparkDataLocation.checkValidate()==true)) ? me.txtSparkDataLocation.getValue() : me.dataLocationRangeValid, + type : Asc.c_oAscSelectionDialogType.FormatTable + }); + } + }, + show: function() { Common.Views.AdvancedSettingsWindow.prototype.show.apply(this, arguments); @@ -1511,7 +1594,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' textBar: 'Bar', textArea: 'Area', textPie: 'Pie', - textPoint: 'Point', + textPoint: 'XY (Scatter)', textStock: 'Stock', textDataRows: 'in rows', textDataColumns: 'in columns', diff --git a/apps/spreadsheeteditor/main/app/view/FileMenu.js b/apps/spreadsheeteditor/main/app/view/FileMenu.js index ff7b248c5..0c58d1bb3 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenu.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenu.js @@ -162,18 +162,15 @@ define([ ); var me = this; - this.panels = {}; - require(['spreadsheeteditor/main/app/view/FileMenuPanels'], function(){ - me.panels = { - 'saveas' : (new SSE.Views.FileMenuPanels.ViewSaveAs({menu:me})).render(), - 'opts' : (new SSE.Views.FileMenuPanels.Settings({menu:me})).render(), - 'info' : (new SSE.Views.FileMenuPanels.DocumentInfo({menu:me})).render(), - 'rights' : (new SSE.Views.FileMenuPanels.DocumentRights({menu:me})).render(), - 'help' : (new SSE.Views.FileMenuPanels.Help({menu:me})).render() - }; + me.panels = { + 'saveas' : (new SSE.Views.FileMenuPanels.ViewSaveAs({menu:me})).render(), + 'opts' : (new SSE.Views.FileMenuPanels.Settings({menu:me})).render(), + 'info' : (new SSE.Views.FileMenuPanels.DocumentInfo({menu:me})).render(), + 'rights' : (new SSE.Views.FileMenuPanels.DocumentRights({menu:me})).render(), + 'help' : (new SSE.Views.FileMenuPanels.Help({menu:me})).render() + }; - me.$el.find('.content-box').hide(); - }); + me.$el.find('.content-box').hide(); return this; }, diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index d55744713..0551bcda4 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -652,7 +652,7 @@ define([ this.lblAutosave.text(this.textAutoRecover); } $('tr.coauth', this.el)[mode.canCoAuthoring && mode.isEdit ? 'show' : 'hide'](); - $('tr.coauth.changes', this.el)[mode.isEdit && mode.canLicense && !mode.isOffline && mode.canCoAuthoring? 'show' : 'hide'](); + $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring? 'show' : 'hide'](); }, setApi: function(api) { @@ -733,7 +733,7 @@ define([ Common.localStorage.setItem("sse-settings-zoom", this.cmbZoom.getValue()); /** coauthoring begin **/ Common.localStorage.setItem("sse-settings-livecomment", this.chLiveComment.isChecked() ? 1 : 0); - if (this.mode.isEdit && this.mode.canLicense && !this.mode.isOffline && this.mode.canCoAuthoring) + if (this.mode.isEdit && !this.mode.isOffline && this.mode.canCoAuthoring) Common.localStorage.setItem("sse-settings-coauthmode", this.cmbCoAuthMode.getValue()); /** coauthoring end **/ Common.localStorage.setItem("sse-settings-fontrender", this.cmbFontRender.getValue()); diff --git a/apps/spreadsheeteditor/main/app/view/NamedRangeEditDlg.js b/apps/spreadsheeteditor/main/app/view/NamedRangeEditDlg.js index 3a8092487..429f06179 100644 --- a/apps/spreadsheeteditor/main/app/view/NamedRangeEditDlg.js +++ b/apps/spreadsheeteditor/main/app/view/NamedRangeEditDlg.js @@ -251,7 +251,8 @@ define([ win.show(xy.left + 65, xy.top + 77); win.setSettings({ api : me.api, - range : (!_.isEmpty(me.txtDataRange.getValue()) && (me.txtDataRange.checkValidate()==true)) ? me.txtDataRange.getValue() : me.dataRangeValid + range : (!_.isEmpty(me.txtDataRange.getValue()) && (me.txtDataRange.checkValidate()==true)) ? me.txtDataRange.getValue() : me.dataRangeValid, + type : Asc.c_oAscSelectionDialogType.Chart }); } }, diff --git a/apps/spreadsheeteditor/main/app/view/RightMenu.js b/apps/spreadsheeteditor/main/app/view/RightMenu.js index 14cdd13ed..ce4c6d5d2 100644 --- a/apps/spreadsheeteditor/main/app/view/RightMenu.js +++ b/apps/spreadsheeteditor/main/app/view/RightMenu.js @@ -255,6 +255,7 @@ define([ txtShapeSettings: 'Shape Settings', txtTextArtSettings: 'Text Art Settings', txtChartSettings: 'Chart Settings', + txtSparklineSettings: 'Sparkline Settings', txtTableSettings: 'Table Settings' }, SSE.Views.RightMenu || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/TableSettings.js b/apps/spreadsheeteditor/main/app/view/TableSettings.js index bafa46c25..355b471d0 100644 --- a/apps/spreadsheeteditor/main/app/view/TableSettings.js +++ b/apps/spreadsheeteditor/main/app/view/TableSettings.js @@ -140,7 +140,7 @@ define([ setApi: function(o) { this.api = o; if (o) { - this.api.asc_registerCallback('asc_onInitTablePictures', _.bind(this.onApiInitTableTemplates, this)); + this.api.asc_registerCallback('asc_onSendThemeColors', _.bind(this.onSendThemeColors, this)); } return this; }, @@ -347,6 +347,14 @@ define([ } }, + onSendThemeColors: function() { + // get new table templates + if (this.cmbTableTemplate) { + this.onApiInitTableTemplates(this.api.asc_getTablePictures(this._originalProps)); + this.cmbTableTemplate.menuPicker.scroller.update({alwaysVisibleY: true}); + } + }, + onApiInitTableTemplates: function(Templates){ var self = this; this._isTemplatesChanged = true; @@ -387,7 +395,8 @@ define([ type : template.asc_getType(), imageUrl : template.asc_getImage(), allowSelected : true, - selected : false + selected : false, + tip : template.asc_getDisplayName() }); }); self.cmbTableTemplate.menuPicker.store.add(arr); diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index fc1f8abb1..79ec7f70c 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -505,33 +505,13 @@ define([ id : 'id-toolbar-btn-insertchart', cls : 'btn-toolbar', iconCls : 'btn-insertchart', - lock : [_set.editCell, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth] - /*,menu : new Common.UI.Menu({ - items : [ - this.mnuInsertChart = new Common.UI.MenuItem({ - caption: this.textInsCharts, - value: 'chart', - menu: new Common.UI.Menu({ - menuAlign: 'tl-tr', - style: 'width: 560px;', - items: [ - { template: _.template('') } - ] - }) - }), - this.mnuInsertSparkline = new Common.UI.MenuItem({ - caption: this.textInsSparklines, - value: 'chart', - menu: new Common.UI.Menu({ - menuAlign: 'tl-tr', - style: 'width: 210px;', - items: [ - { template: _.template('') } - ] - }) - }) + lock : [_set.editCell, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.coAuthText], + menu : new Common.UI.Menu({ + style: 'width: 435px;', + items: [ + { template: _.template('') } ] - })*/ + }) }); me.btnEditChart = new Common.UI.Button({ @@ -1304,7 +1284,7 @@ define([ this.btnWrap.updateHint(this.tipWrap); this.btnTextOrient.updateHint(this.tipTextOrientation); this.btnInsertImage.updateHint(this.tipInsertImage); - this.btnInsertChart.updateHint(this.tipInsertChart); + this.btnInsertChart.updateHint(this.tipInsertChartSpark); this.btnInsertText.updateHint(this.tipInsertText); this.btnInsertHyperlink.updateHint(this.tipInsertHyperlink + Common.Utils.String.platformKey('Ctrl+K')); this.btnInsertShape.updateHint(this.tipInsertShape); @@ -1714,20 +1694,22 @@ define([ ] })); - /* this.mnuInsertChartPicker = new Common.UI.DataView({ el: $('#id-toolbar-menu-insertchart'), - parentMenu: this.mnuInsertChart.menu, + parentMenu: this.btnInsertChart.menu, showLast: false, - restoreHeight: 411, + restoreHeight: 539, groups: new Common.UI.DataViewGroupStore([ - { id: 'menu-chart-group-bar', caption: this.textColumn }, - { id: 'menu-chart-group-line', caption: this.textLine }, - { id: 'menu-chart-group-pie', caption: this.textPie }, - { id: 'menu-chart-group-hbar', caption: this.textBar }, - { id: 'menu-chart-group-area', caption: this.textArea }, - { id: 'menu-chart-group-scatter', caption: this.textPoint }, - { id: 'menu-chart-group-stock', caption: this.textStock } + { id: 'menu-chart-group-bar', caption: me.textColumn, headername: me.textCharts }, + { id: 'menu-chart-group-line', caption: me.textLine }, + { id: 'menu-chart-group-pie', caption: me.textPie }, + { id: 'menu-chart-group-hbar', caption: me.textBar }, + { id: 'menu-chart-group-area', caption: me.textArea, inline: true }, + { id: 'menu-chart-group-scatter', caption: me.textPoint, inline: true }, + { id: 'menu-chart-group-stock', caption: me.textStock, inline: true }, + { id: 'menu-chart-group-sparkcolumn', inline: true, headername: me.textSparks }, + { id: 'menu-chart-group-sparkline', inline: true }, + { id: 'menu-chart-group-sparkwin', inline: true } ]), store: new Common.UI.DataViewStore([ { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, allowSelected: true, iconCls: 'column-normal', selected: true}, @@ -1754,29 +1736,13 @@ define([ { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStacked, allowSelected: true, iconCls: 'area-stack'}, { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStackedPer, allowSelected: true, iconCls: 'area-pstack'}, { group: 'menu-chart-group-scatter', type: Asc.c_oAscChartTypeSettings.scatter, allowSelected: true, iconCls: 'point-normal'}, - { group: 'menu-chart-group-stock', type: Asc.c_oAscChartTypeSettings.stock, allowSelected: true, iconCls: 'stock-normal'} + { group: 'menu-chart-group-stock', type: Asc.c_oAscChartTypeSettings.stock, allowSelected: true, iconCls: 'stock-normal'}, + { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column', tip: me.textColumnSpark}, + { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line', tip: me.textLineSpark}, + { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win', tip: me.textWinLossSpark} ]), itemTemplate: _.template('
') }); - this.mnuInsertSparkPicker = new Common.UI.DataView({ - el: $('#id-toolbar-menu-insertspark'), - parentMenu: this.mnuInsertSparkline.menu, - showLast: false, - restoreHeight: 200, - allowScrollbar: false, - groups: new Common.UI.DataViewGroupStore([ - { id: 'menu-chart-group-sparkcolumn', caption: this.textColumnSpark }, - { id: 'menu-chart-group-sparkline', caption: this.textLineSpark }, - { id: 'menu-chart-group-sparkwin', caption: this.textWinLossSpark } - ]), - store: new Common.UI.DataViewStore([ - { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column'}, - { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line'}, - { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win'} - ]), - itemTemplate: _.template('
') - }) - */ }, setApi: function(api) { @@ -2124,17 +2090,19 @@ define([ textInsText: 'Insert text box', textInsTextArt: 'Insert Text Art', textInsCharts: 'Charts', - textLine: 'Line Chart', - textColumn: 'Column Chart', - textBar: 'Bar Chart', - textArea: 'Area Chart', - textPie: 'Pie Chart', - textPoint: 'Point Chart', - textStock: 'Stock Chart', - textInsSparklines: 'Sparklines', + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', textLineSpark: 'Line', textColumnSpark: 'Column', textWinLossSpark: 'Win/Loss', - tipInsertEquation: 'Insert Equation' + tipInsertEquation: 'Insert Equation', + textCharts: 'Charts', + textSparks: 'Sparklines', + tipInsertChartSpark: 'Insert Chart or Sparkline' }, SSE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app_dev.js b/apps/spreadsheeteditor/main/app_dev.js index 74387f0d2..690ac2a92 100644 --- a/apps/spreadsheeteditor/main/app_dev.js +++ b/apps/spreadsheeteditor/main/app_dev.js @@ -164,6 +164,7 @@ require([ 'spreadsheeteditor/main/app/controller/LeftMenu', 'spreadsheeteditor/main/app/controller/Main', 'spreadsheeteditor/main/app/controller/Print', + 'spreadsheeteditor/main/app/view/FileMenuPanels', 'spreadsheeteditor/main/app/view/ParagraphSettings', 'spreadsheeteditor/main/app/view/ImageSettings', 'spreadsheeteditor/main/app/view/ChartSettings', diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 863ccaaf9..5c9560616 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -721,33 +721,48 @@ "SSE.Views.CellRangeDialog.txtInvalidRange": "ERROR! Invalid cells range", "SSE.Views.CellRangeDialog.txtTitle": "Select Data Range", "SSE.Views.ChartSettings.textAdvanced": "Show advanced settings", - "SSE.Views.ChartSettings.textArea": "Area Chart", - "SSE.Views.ChartSettings.textBar": "Bar Chart", + "SSE.Views.ChartSettings.textArea": "Area", + "SSE.Views.ChartSettings.textBar": "Bar", "SSE.Views.ChartSettings.textChartType": "Change Chart Type", - "SSE.Views.ChartSettings.textColumn": "Column Chart", + "SSE.Views.ChartSettings.textColumn": "Column", "SSE.Views.ChartSettings.textEditData": "Edit Data and Location", "SSE.Views.ChartSettings.textHeight": "Height", "SSE.Views.ChartSettings.textKeepRatio": "Constant Proportions", - "SSE.Views.ChartSettings.textLine": "Line Chart", - "SSE.Views.ChartSettings.textPie": "Pie Chart", - "SSE.Views.ChartSettings.textPoint": "XY (Scatter) Chart", + "SSE.Views.ChartSettings.textLine": "Line", + "SSE.Views.ChartSettings.textPie": "Pie", + "SSE.Views.ChartSettings.textPoint": "XY (Scatter)", "SSE.Views.ChartSettings.textRanges": "Data Range", "SSE.Views.ChartSettings.textSelectData": "Select Data", "SSE.Views.ChartSettings.textSize": "Size", - "SSE.Views.ChartSettings.textStock": "Stock Chart", + "SSE.Views.ChartSettings.textStock": "Stock", "SSE.Views.ChartSettings.textStyle": "Style", "SSE.Views.ChartSettings.textType": "Type", "SSE.Views.ChartSettings.textWidth": "Width", + "SSE.Views.ChartSettings.textLineSpark": "Line", + "SSE.Views.ChartSettings.textColumnSpark": "Column", + "SSE.Views.ChartSettings.textWinLossSpark": "Win/Loss", + "SSE.Views.ChartSettings.strSparkColor": "Color", + "SSE.Views.ChartSettings.strLineWeight": "Line Weight", + "SSE.Views.ChartSettings.textMarkers": "Markers", + "SSE.Views.ChartSettings.textNewColor": "Add New Custom Color", + "SSE.Views.ChartSettings.textHighPoint": "High Point", + "SSE.Views.ChartSettings.textLowPoint": "Low Point", + "SSE.Views.ChartSettings.textNegativePoint": "Negative Point", + "SSE.Views.ChartSettings.textFirstPoint": "First Point", + "SSE.Views.ChartSettings.textLastPoint": "Last Point", + "SSE.Views.ChartSettings.strTemplate": "Template", + "SSE.Views.ChartSettings.textShow": "Show", + "SSE.Views.ChartSettings.textBorderSizeErr": "The entered value is incorrect.
Please enter a value between 0 pt and 1584 pt.", "SSE.Views.ChartSettingsDlg.cancelButtonText": "Cancel", "SSE.Views.ChartSettingsDlg.errorMaxRows": "ERROR! The maximum number of data series per chart is 255", "SSE.Views.ChartSettingsDlg.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.", - "SSE.Views.ChartSettingsDlg.textArea": "Area Chart", + "SSE.Views.ChartSettingsDlg.textArea": "Area", "SSE.Views.ChartSettingsDlg.textAuto": "Auto", "SSE.Views.ChartSettingsDlg.textAxisCrosses": "Axis Crosses", "SSE.Views.ChartSettingsDlg.textAxisOptions": "Axis Options", "SSE.Views.ChartSettingsDlg.textAxisPos": "Axis Position", "SSE.Views.ChartSettingsDlg.textAxisSettings": "Axis Settings", - "SSE.Views.ChartSettingsDlg.textBar": "Bar Chart", + "SSE.Views.ChartSettingsDlg.textBar": "Bar", "SSE.Views.ChartSettingsDlg.textBetweenTickMarks": "Between Tick Marks", "SSE.Views.ChartSettingsDlg.textBillions": "Billions", "SSE.Views.ChartSettingsDlg.textBottom": "Bottom", @@ -755,7 +770,7 @@ "SSE.Views.ChartSettingsDlg.textCenter": "Center", "SSE.Views.ChartSettingsDlg.textChartElementsLegend": "Chart Elements &
Chart Legend", "SSE.Views.ChartSettingsDlg.textChartTitle": "Chart Title", - "SSE.Views.ChartSettingsDlg.textColumn": "Column Chart", + "SSE.Views.ChartSettingsDlg.textColumn": "Column", "SSE.Views.ChartSettingsDlg.textCross": "Cross", "SSE.Views.ChartSettingsDlg.textCustom": "Custom", "SSE.Views.ChartSettingsDlg.textDataColumns": "in columns", @@ -813,8 +828,8 @@ "SSE.Views.ChartSettingsDlg.textOut": "Out", "SSE.Views.ChartSettingsDlg.textOuterTop": "Outer Top", "SSE.Views.ChartSettingsDlg.textOverlay": "Overlay", - "SSE.Views.ChartSettingsDlg.textPie": "Pie Chart", - "SSE.Views.ChartSettingsDlg.textPoint": "XY (Scatter) Chart", + "SSE.Views.ChartSettingsDlg.textPie": "Pie", + "SSE.Views.ChartSettingsDlg.textPoint": "XY (Scatter)", "SSE.Views.ChartSettingsDlg.textReverse": "Values in reverse order", "SSE.Views.ChartSettingsDlg.textRight": "Right", "SSE.Views.ChartSettingsDlg.textRightOverlay": "Right Overlay", @@ -828,7 +843,7 @@ "SSE.Views.ChartSettingsDlg.textShowGrid": "Grid Lines", "SSE.Views.ChartSettingsDlg.textShowValues": "Display chart values", "SSE.Views.ChartSettingsDlg.textSmooth": "Smooth", - "SSE.Views.ChartSettingsDlg.textStock": "Stock Chart", + "SSE.Views.ChartSettingsDlg.textStock": "Stock", "SSE.Views.ChartSettingsDlg.textStraight": "Straight", "SSE.Views.ChartSettingsDlg.textStyle": "Style", "SSE.Views.ChartSettingsDlg.textTenMillions": "10 000 000", @@ -849,6 +864,24 @@ "SSE.Views.ChartSettingsDlg.textXAxisTitle": "X Axis Title", "SSE.Views.ChartSettingsDlg.textYAxisTitle": "Y Axis Title", "SSE.Views.ChartSettingsDlg.txtEmpty": "This field is required", + "SSE.Views.ChartSettingsDlg.textLineSpark": "Line", + "SSE.Views.ChartSettingsDlg.textColumnSpark": "Column", + "SSE.Views.ChartSettingsDlg.textWinLossSpark": "Win/Loss", + "SSE.Views.ChartSettingsDlg.textSparkRanges": "Sparkline Ranges", + "SSE.Views.ChartSettingsDlg.textLocationRange": "Location Range", + "SSE.Views.ChartSettingsDlg.textEmptyCells": "Hidden and Empty cells", + "SSE.Views.ChartSettingsDlg.textShowEmptyCells": "Show empty cells as", + "SSE.Views.ChartSettingsDlg.textShowData": "Show data in hidden rows and columns", + "SSE.Views.ChartSettingsDlg.textGroup": "Group Sparkline", + "SSE.Views.ChartSettingsDlg.textSingle": "Single Sparkline", + "SSE.Views.ChartSettingsDlg.textGaps": "Gaps", + "SSE.Views.ChartSettingsDlg.textZero": "Zero", + "SSE.Views.ChartSettingsDlg.textEmptyLine": "Connect data points with line", + "SSE.Views.ChartSettingsDlg.textShowSparkAxis": "Show Axis", + "SSE.Views.ChartSettingsDlg.textReverseOrder": "Reverse order", + "SSE.Views.ChartSettingsDlg.textAutoEach": "Auto for Each", + "SSE.Views.ChartSettingsDlg.textSameAll": "Same for All", + "SSE.Views.ChartSettingsDlg.textTitleSparkline": "Sparkline - Advanced Settings", "SSE.Views.DigitalFilterDialog.cancelButtonText": "Cancel", "SSE.Views.DigitalFilterDialog.capAnd": "And", "SSE.Views.DigitalFilterDialog.capCondition1": "equals", @@ -1219,6 +1252,7 @@ "SSE.Views.RightMenu.txtParagraphSettings": "Text Settings", "SSE.Views.RightMenu.txtSettings": "Common Settings", "SSE.Views.RightMenu.txtShapeSettings": "Shape Settings", + "SSE.Views.RightMenu.txtSparklineSettings": "Sparkline Settings", "SSE.Views.RightMenu.txtTableSettings": "Table Settings", "SSE.Views.RightMenu.txtTextArtSettings": "Text Art Settings", "SSE.Views.SetValueDialog.cancelButtonText": "Cancel", @@ -1425,6 +1459,15 @@ "SSE.Views.Toolbar.textBottomBorders": "Bottom Borders", "SSE.Views.Toolbar.textCenterBorders": "Inside Vertical Borders", "SSE.Views.Toolbar.textClockwise": "Angle Clockwise", + "SSE.Views.Toolbar.textArea": "Area", + "SSE.Views.Toolbar.textBar": "Bar", + "SSE.Views.Toolbar.textColumn": "Column", + "SSE.Views.Toolbar.textLine": "Line", + "SSE.Views.Toolbar.textPie": "Pie", + "SSE.Views.Toolbar.textPoint": "XY (Scatter)", + "SSE.Views.Toolbar.textStock": "Stock", + "SSE.Views.Toolbar.textCharts": "Charts", + "SSE.Views.Toolbar.textSparks": "Sparklines", "SSE.Views.Toolbar.textCompactToolbar": "View Compact Toolbar", "SSE.Views.Toolbar.textCounterCw": "Angle Counterclockwise", "SSE.Views.Toolbar.textDelLeft": "Shift Cells Left", @@ -1494,6 +1537,7 @@ "SSE.Views.Toolbar.tipInsertOpt": "Insert Cells", "SSE.Views.Toolbar.tipInsertShape": "Insert Autoshape", "SSE.Views.Toolbar.tipInsertText": "Insert Text", + "SSE.Views.Toolbar.tipInsertChartSpark": "Insert Chart or Sparkline", "SSE.Views.Toolbar.tipMerge": "Merge", "SSE.Views.Toolbar.tipNewDocument": "New Document", "SSE.Views.Toolbar.tipNumFormat": "Number Format", @@ -1578,6 +1622,9 @@ "SSE.Views.Toolbar.txtTime": "Time", "SSE.Views.Toolbar.txtUnmerge": "Unmerge Cells", "SSE.Views.Toolbar.txtYen": "¥ Yen", + "SSE.Views.Toolbar.textLineSpark": "Line", + "SSE.Views.Toolbar.textColumnSpark": "Column", + "SSE.Views.Toolbar.textWinLossSpark": "Win/Loss", "SSE.Views.Top10FilterDialog.cancelButtonText": "Cancel", "SSE.Views.Top10FilterDialog.okButtonText": "OK", "SSE.Views.Top10FilterDialog.textType": "Show", diff --git a/apps/spreadsheeteditor/main/resources/less/leftmenu.less b/apps/spreadsheeteditor/main/resources/less/leftmenu.less index 4c74d623b..df99dd51d 100644 --- a/apps/spreadsheeteditor/main/resources/less/leftmenu.less +++ b/apps/spreadsheeteditor/main/resources/less/leftmenu.less @@ -459,8 +459,6 @@ .header-name { padding: 7px 2px 7px 10px; - font-weight: bold; - cursor: default; } } } diff --git a/apps/spreadsheeteditor/main/resources/less/rightmenu.less b/apps/spreadsheeteditor/main/resources/less/rightmenu.less index 801c35841..2c65f6014 100644 --- a/apps/spreadsheeteditor/main/resources/less/rightmenu.less +++ b/apps/spreadsheeteditor/main/resources/less/rightmenu.less @@ -172,20 +172,12 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px - .menu-insertchart { .group-description { - float: left; - width: 125px; - line-height: 58px; - padding-left: 6px; + padding-left: 4px; } .group-items-container { float: left; position: relative; - - & > div { - float: left; - margin: 0 0 0 14px; - } } } diff --git a/apps/spreadsheeteditor/sdk_dev_scripts.js b/apps/spreadsheeteditor/sdk_dev_scripts.js index b290dad2c..258055eb2 100644 --- a/apps/spreadsheeteditor/sdk_dev_scripts.js +++ b/apps/spreadsheeteditor/sdk_dev_scripts.js @@ -8,6 +8,9 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/apiCommon.js", "../../../../sdkjs/common/SerializeCommonWordExcel.js", "../../../../sdkjs/common/editorscommon.js", + "../../../../sdkjs/common/HistoryCommon.js", + "../../../../sdkjs/common/TableId.js", + "../../../../sdkjs/common/TableIdChanges.js", "../../../../sdkjs/common/NumFormat.js", "../../../../sdkjs/common/SerializeChart.js", "../../../../sdkjs/common/AdvancedOptions.js", @@ -25,7 +28,6 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/Drawings/Hit.js", "../../../../sdkjs/common/Drawings/ArcTo.js", "../../../../sdkjs/common/Drawings/ColorArray.js", - "../../../../sdkjs/common/Drawings/Format/Constants.js", "../../../../sdkjs/common/Drawings/CommonController.js", "../../../../sdkjs/common/Drawings/States.js", "../../../../sdkjs/common/Drawings/Format/CreateGeometry.js", @@ -61,7 +63,8 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/common/Overlay.js", "../../../../sdkjs/common/Drawings/HatchPattern.js", "../../../../sdkjs/common/scroll.js", - "../../../../sdkjs/cell/view/iscroll.js", + "../../../../sdkjs/common/Scrolls/iscroll.js", + "../../../../sdkjs/common/Scrolls/mobileTouchManagerBase.js", "../../../../sdkjs/common/wordcopypaste.js", "../../../../sdkjs/cell/apiDefines.js", "../../../../sdkjs/cell/document/empty-workbook.js", @@ -114,12 +117,21 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/cell/Private/comments.js", "../../../../sdkjs/word/Editor/Common.js", "../../../../sdkjs/word/Editor/Comments.js", + "../../../../sdkjs/word/Editor/CommentsChanges.js", "../../../../sdkjs/word/Editor/Styles.js", + "../../../../sdkjs/word/Editor/StylesChanges.js", "../../../../sdkjs/word/Editor/ParagraphContent.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaTextPr.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaTextPrChanges.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaDrawing.js", + "../../../../sdkjs/word/Editor/Paragraph/ParaDrawingChanges.js", "../../../../sdkjs/word/Editor/Paragraph.js", + "../../../../sdkjs/word/Editor/ParagraphChanges.js", "../../../../sdkjs/word/Editor/DocumentContentBase.js", "../../../../sdkjs/word/Editor/Document.js", + "../../../../sdkjs/word/Editor/DocumentChanges.js", "../../../../sdkjs/word/Editor/DocumentContent.js", + "../../../../sdkjs/word/Editor/DocumentContentChanges.js", "../../../../sdkjs/word/Editor/DocumentControllerBase.js", "../../../../sdkjs/word/Editor/LogicDocumentController.js", "../../../../sdkjs/word/Editor/DrawingsController.js", @@ -127,22 +139,32 @@ var sdk_dev_scrpipts = [ "../../../../sdkjs/word/Editor/FlowObjects.js", "../../../../sdkjs/word/Editor/ParagraphContentBase.js", "../../../../sdkjs/word/Editor/Hyperlink.js", + "../../../../sdkjs/word/Editor/HyperlinkChanges.js", "../../../../sdkjs/word/Editor/Field.js", + "../../../../sdkjs/word/Editor/FieldChanges.js", "../../../../sdkjs/word/Editor/Run.js", + "../../../../sdkjs/word/Editor/RunChanges.js", "../../../../sdkjs/word/Editor/Math.js", + "../../../../sdkjs/word/Editor/MathChanges.js", "../../../../sdkjs/word/Editor/Paragraph_Recalculate.js", "../../../../sdkjs/word/Editor/Sections.js", + "../../../../sdkjs/word/Editor/SectionsChanges.js", "../../../../sdkjs/word/Editor/Numbering.js", + "../../../../sdkjs/word/Editor/NumberingChanges.js", "../../../../sdkjs/word/Editor/HeaderFooter.js", "../../../../sdkjs/word/Editor/Table.js", + "../../../../sdkjs/word/Editor/Table/TableChanges.js", "../../../../sdkjs/word/Editor/Table/TableRecalculate.js", "../../../../sdkjs/word/Editor/Table/TableDraw.js", "../../../../sdkjs/word/Editor/Table/TableRow.js", + "../../../../sdkjs/word/Editor/Table/TableRowChanges.js", "../../../../sdkjs/word/Editor/Table/TableCell.js", + "../../../../sdkjs/word/Editor/Table/TableCellChanges.js", "../../../../sdkjs/word/Editor/Serialize2.js", "../../../../sdkjs/word/Editor/FontClassification.js", "../../../../sdkjs/word/Editor/Spelling.js", "../../../../sdkjs/word/Editor/Footnotes.js", + "../../../../sdkjs/word/Editor/FootnotesChanges.js", "../../../../sdkjs/word/Editor/FootEndNote.js", "../../../../sdkjs/word/Editor/GraphicObjects/WrapManager.js", "../../../../sdkjs/word/Math/mathTypes.js",