diff --git a/apps/api/documents/api.js b/apps/api/documents/api.js index ee1428a8b..aa509db4f 100644 --- a/apps/api/documents/api.js +++ b/apps/api/documents/api.js @@ -782,7 +782,14 @@ if (config.frameEditorId) params += "&frameEditorId=" + config.frameEditorId; - + + if (config.editorConfig && config.editorConfig.mode == 'view' || + config.document && config.document.permissions && (config.document.permissions.edit === false && !config.document.permissions.review )) + params += "&mode=view"; + + if (config.editorConfig && config.editorConfig.customization && !!config.editorConfig.customization.compactHeader) + params += "&compact=true"; + return params; } diff --git a/apps/common/main/lib/component/Calendar.js b/apps/common/main/lib/component/Calendar.js new file mode 100644 index 000000000..71b282a13 --- /dev/null +++ b/apps/common/main/lib/component/Calendar.js @@ -0,0 +1,491 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2019 + * + * 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 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * 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 + * +*/ +if (Common === undefined) + var Common = {}; + +define([ + 'common/main/lib/component/BaseView', + 'common/main/lib/util/utils' +], function () { + 'use strict'; + + Common.UI.Calendar = Common.UI.BaseView.extend(_.extend({ + + template : + _.template([ + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
', + '
' + ].join('')), + + options: { + date: undefined, + firstday: 0 // 0 - sunday, 1 - monday + }, + + initialize : function(options) { + Common.UI.BaseView.prototype.initialize.call(this, options); + + var me = this; + + this.monthNames = [this.textJanuary, this.textFebruary, this.textMarch, this.textApril, this.textMay, this.textJune, this.textJuly, this.textAugust, this.textSeptember, this.textOctober, this.textNovember, this.textDecember]; + this.dayNamesShort = [this.textShortSunday, this.textShortMonday, this.textShortTuesday, this.textShortWednesday, this.textShortThursday, this.textShortFriday, this.textShortSaturday]; + this.monthShortNames = [this.textShortJanuary, this.textShortFebruary, this.textShortMarch, this.textShortApril, this.textShortMay, this.textShortJune, this.textShortJuly, this.textShortAugust, this.textShortSeptember, this.textShortOctober, this.textShortNovember, this.textShortDecember]; + + me.options.date = options.date; + if (!_.isUndefined(options.firstday) && (options.firstday === 0 || options.firstday === 1)) { + me.options.firstday = options.firstday; + } + + me.enableKeyEvents= me.options.enableKeyEvents; + + me._state = undefined; // 0 - month, 1 - months, 2 - years + + me.render(); + }, + + render: function () { + var me = this; + me.cmpEl = me.$el || $(this.el); + me.cmpEl.html(this.template()); + + me.currentDate = me.options.date || new Date(); + + me.btnPrev = new Common.UI.Button({ + cls: '', + iconCls: 'arrow-prev img-commonctrl' + }); + me.btnPrev.render(me.cmpEl.find('#prev-arrow')); + me.btnPrev.on('click', _.bind(me.onClickPrev, me)); + + me.btnNext = new Common.UI.Button({ + cls: '', + iconCls: 'arrow-next img-commonctrl' + }); + me.btnNext.render(me.cmpEl.find('#next-arrow')); + me.btnNext.on('click', _.bind(me.onClickNext, me)); + + me.cmpEl.on('keydown', function(e) { + me.trigger('calendar:keydown', me, e); + }); + + me.renderMonth(me.currentDate); + + this.trigger('render:after', this); + return this; + }, + + onClickPrev: function () { + var me = this; + if (me._state === 0) { + var d = new Date(me.currentDate); + d.setMonth(d.getMonth() - 1); + if (d.getFullYear() > 0) { + me.renderMonth(d); + } + } else if (me._state === 1) { + var d = new Date(me.currentDate); + d.setFullYear(d.getFullYear() - 1); + if (d.getFullYear() > 0) { + me.renderMonths(d); + } + } else if (me._state === 2) { + var year = me.currentDate.getFullYear(), + newYear; + if (year % 10 !== 0) { + newYear = String(year); + newYear = Number(newYear.slice(0, -1) + '0') - 1; + } else { + newYear = year - 1; + } + if (newYear > 0) { + me.currentDate.setFullYear(newYear); + me.renderYears(newYear); + } + } + }, + + onClickNext: function () { + var me = this; + if (me._state === 0) { + var d = new Date(me.currentDate); + d.setMonth(d.getMonth() + 1); + if (d.getFullYear() > 0) { + me.renderMonth(d); + } + } else if (me._state === 1) { + var d = new Date(me.currentDate); + d.setFullYear(d.getFullYear() + 1); + if (d.getFullYear() > 0) { + me.renderMonths(d); + } + } else if (me._state === 2) { + var year = me.currentDate.getFullYear(), + newYear; + if (year % 10 !== 9) { + newYear = String(year); + newYear = Number(newYear.slice(0, -1) + '9') + 1; + } else { + newYear = year + 1; + } + if (newYear > 0) { + me.currentDate.setFullYear(newYear); + me.renderYears(newYear); + } + } + }, + + renderYears: function (year) { + var me = this, + year = _.isNumber(year) ? year : (me.currentDate ? me.currentDate.getFullYear() : new Date().getFullYear()); + + me._state = 2; + + var firstYear = year, + lastYear = year; + if ((firstYear % 10) !== 0) { + var strYear = String(year); + firstYear = Number(strYear.slice(0, -1) + '0'); + } + if ((lastYear % 10) !== 9) { + var strYear = String(year); + lastYear = Number(strYear.slice(0, -1) + '9'); + } + + me.topTitle = _.template([ + '' + ].join('')); + me.cmpEl.find('.calendar-header .title').html(me.topTitle); + + me.bottomTitle = _.template([ + '' + ].join('')); + me.cmpEl.find('.calendar-header .bottom-row').html(me.bottomTitle); + + var arrYears = []; + var tmpYear = firstYear - 3; + + for (var i = 0; i < 16; i++) { + arrYears.push({ + year: (tmpYear > 0) ? tmpYear : '', + isCurrentDecade: ((tmpYear >= firstYear) && (tmpYear <= lastYear)) ? true : false, + disabled: (tmpYear > 0) ? false : true, + selected: (_.isDate(me.selectedDate)) ? + (tmpYear === me.selectedDate.getFullYear()) : + (tmpYear === new Date().getFullYear()) + }); + tmpYear++; + } + + if (!me.yearPicker) { + me.yearPicker = new Common.UI.DataView({ + el: me.cmpEl.find('.calendar-content'), + store: new Common.UI.DataViewStore(arrYears), + itemTemplate: _.template('
<%= year %>
') + }); + me.yearPicker.on('item:click', function (picker, item, record, e) { + var year = record.get('year'), + date = new Date(); + date.setFullYear(year); + me.renderMonths(date); + }); + me.enableKeyEvents && this.yearPicker.on('item:keydown', function(view, record, e) { + if (e.keyCode==Common.UI.Keys.ESC) { + Common.NotificationCenter.trigger('dataview:blur'); + } + }); + } else + me.yearPicker.store.reset(arrYears); + + me.enableKeyEvents && _.delay(function() { + me.monthPicker.cmpEl.find('.dataview').focus(); + }, 10); + }, + + renderMonths: function (date) { + var me = this, + curDate = (_.isDate(date)) ? date : (me.currentDate ? me.currentDate : new Date()), + year = curDate.getFullYear(); + + me._state = 1; + me.currentDate = curDate; + + // Number of year + me.topTitle = _.template([ + '
' + ].join('')); + me.cmpEl.find('.calendar-header .title').html(me.topTitle); + me.cmpEl.find('.calendar-header .title').off(); + me.cmpEl.find('.calendar-header .title').on('click', _.bind(me.renderYears, me)); + + me.bottomTitle = _.template([ + '' + ].join('')); + me.cmpEl.find('.calendar-header .bottom-row').html(me.bottomTitle); + + var arrMonths = []; + var today = new Date(); + + for (var ind = 0; ind < 12; ind++) { + arrMonths.push({ + indexMonth: ind, + nameMonth: me.monthShortNames[ind], + year: year, + curYear: true, + isCurrentMonth: (ind === curDate.getMonth()), + selected: (_.isDate(me.selectedDate)) ? + (ind === me.selectedDate.getMonth() && year === me.selectedDate.getFullYear()) : + (ind === today.getMonth() && year === today.getFullYear()) + }); + } + year = year + 1; + for (var ind = 0; ind < 4; ind++) { + arrMonths.push({ + indexMonth: ind, + nameMonth: me.monthShortNames[ind], + year: year, + curYear: false, + selected: (_.isDate(me.selectedDate)) ? + (ind === me.selectedDate.getMonth() && year === me.selectedDate.getFullYear()) : + (ind === today.getMonth() && year === today.getFullYear()) + }); + } + + if (!me.monthsPicker) { + me.monthsPicker = new Common.UI.DataView({ + el: me.cmpEl.find('.calendar-content'), + store: new Common.UI.DataViewStore(arrMonths), + itemTemplate: _.template('
<%= nameMonth %>
') + }); + me.monthsPicker.on('item:click', function (picker, item, record, e) { + var month = record.get('indexMonth'), + year = record.get('year'), + date = new Date(); + date.setFullYear(year, month); + me.renderMonth(date); + }); + me.enableKeyEvents && this.monthsPicker.on('item:keydown', function(view, record, e) { + if (e.keyCode==Common.UI.Keys.ESC) { + Common.NotificationCenter.trigger('dataview:blur'); + } + }); + } else + me.monthsPicker.store.reset(arrMonths); + + me.enableKeyEvents && _.delay(function() { + me.monthPicker.cmpEl.find('.dataview').focus(); + }, 10); + }, + + renderMonth: function (date) { + var me = this; + me._state = 0; + var firstDay = me.options.firstday; + + // Current date + var curDate = date || new Date(), + curMonth = curDate.getMonth(), + curIndexDayInWeek = curDate.getDay(), + curNumberDayInMonth = curDate.getDate(), + curYear = curDate.getFullYear(); + + me.currentDate = curDate; + + // Name month + me.topTitle = _.template([ + '
', + '', + '
' + ].join('')); + me.cmpEl.find('.calendar-header .title').html(me.topTitle); + me.cmpEl.find('.calendar-header .title').off(); + me.cmpEl.find('.calendar-header .title').on('click', _.bind(me.renderMonths, me)); + + // Name days of week + var dayNamesTemplate = ''; + for (var i = firstDay; i < 7; i++) { + dayNamesTemplate += ''; + } + if (firstDay > 0) { + dayNamesTemplate += ''; + } + me.cmpEl.find('.calendar-header .bottom-row').html(_.template(dayNamesTemplate)); + + // Month + var rows = 6, + cols = 7; + + var arrDays = []; + + var d = new Date(curDate); + d.setDate(1); + var firstDayOfMonthIndex = d.getDay(); + + var daysInPrevMonth = me.daysInMonth(d.getTime() - (10 * 24 * 60 * 60 * 1000)), + numberDay, + month, + year; + if (firstDay === 0) { + numberDay = (firstDayOfMonthIndex > 0) ? (daysInPrevMonth - (firstDayOfMonthIndex - 1)) : 1; + } else { + if (firstDayOfMonthIndex === 0) { + numberDay = daysInPrevMonth - 5; + } else { + numberDay = daysInPrevMonth - (firstDayOfMonthIndex - 2); + } + } + if ((firstDayOfMonthIndex > 0 && firstDay === 0) || firstDay === 1) { + if (curMonth - 1 >= 0) { + month = curMonth - 1; + year = curYear; + } else { + month = 11; + year = curYear - 1; + } + } else { + month = curMonth; + year = curYear; + } + + var tmp = new Date(); + tmp.setFullYear(year, month, numberDay); + var today = new Date(); + + for(var r = 0; r < rows; r++) { + for(var c = 0; c < cols; c++) { + var tmpDay = tmp.getDay(), + tmpNumber = tmp.getDate(), + tmpMonth = tmp.getMonth(), + tmpYear = tmp.getFullYear(); + arrDays.push({ + indexInWeek: tmpDay, + dayNumber: tmpNumber, + month: tmpMonth, + year: tmpYear, + isCurrentMonth: tmpMonth === curMonth, + selected: (_.isDate(me.selectedDate)) ? + (tmpNumber === me.selectedDate.getDate() && tmpMonth === me.selectedDate.getMonth() && tmpYear === me.selectedDate.getFullYear()) : + (tmpNumber === today.getDate() && tmpMonth === today.getMonth() && tmpYear === today.getFullYear()) + }); + tmp.setDate(tmpNumber + 1); + } + } + + if (!me.monthPicker) { + me.monthPicker = new Common.UI.DataView({ + el: me.cmpEl.find('.calendar-content'), + store: new Common.UI.DataViewStore(arrDays), + itemTemplate: _.template('
<%= dayNumber %>
') + }); + me.monthPicker.on('item:click', function(picker, item, record, e) { + var day = record.get('dayNumber'), + month = record.get('month'), + year = record.get('year'); + if (_.isUndefined(me.selectedDate)) { + me.selectedDate = new Date(); + } + me.selectedDate.setFullYear(year, month, day); + me.trigger('date:click', me, me.selectedDate); + }); + me.enableKeyEvents && this.monthPicker.on('item:keydown', function(view, record, e) { + if (e.keyCode==Common.UI.Keys.ESC) { + Common.NotificationCenter.trigger('dataview:blur'); + } + }); + } else + me.monthPicker.store.reset(arrDays); + + me.enableKeyEvents && _.delay(function() { + me.monthPicker.cmpEl.find('.dataview').focus(); + }, 10); + }, + + daysInMonth: function (date) { + var d; + d = date ? new Date(date) : new Date(); + var result = new Date(); + result.setFullYear(d.getFullYear(), d.getMonth() + 1, 0); + return result.getDate(); + }, + + setDate: function (date) { + if (_.isDate(date)) { + this.selectedDate = new Date(date); + this.renderMonth(this.selectedDate); + } + }, + + textJanuary: 'January', + textFebruary: 'February', + textMarch: 'March', + textApril: 'April', + textMay: 'May', + textJune: 'June', + textJuly: 'July', + textAugust: 'August', + textSeptember: 'September', + textOctober: 'October', + textNovember: 'November', + textDecember: 'December', + textShortJanuary: 'Jan', + textShortFebruary: 'Feb', + textShortMarch: 'Mar', + textShortApril: 'Apr', + textShortMay: 'May', + textShortJune: 'Jun', + textShortJuly: 'Jul', + textShortAugust: 'Aug', + textShortSeptember: 'Sep', + textShortOctober: 'Oct', + textShortNovember: 'Nov', + textShortDecember: 'Dec', + textShortSunday: 'Su', + textShortMonday: 'Mo', + textShortTuesday: 'Tu', + textShortWednesday: 'We', + textShortThursday: 'Th', + textShortFriday: 'Fr', + textShortSaturday: 'Sa', + textMonths: 'Months', + textYears: 'Years' + }, Common.UI.Calendar || {})); +}); \ No newline at end of file diff --git a/apps/common/main/lib/component/MultiSliderGradient.js b/apps/common/main/lib/component/MultiSliderGradient.js index 8ad11eaff..71a5bf3a6 100644 --- a/apps/common/main/lib/component/MultiSliderGradient.js +++ b/apps/common/main/lib/component/MultiSliderGradient.js @@ -159,11 +159,21 @@ define([ me.changeSliderStyle(); }, + addNewThumb: function(index, color) { + var me = this; + me.thumbs[index].thumbcolor = me.thumbs[index].thumb.find('> div'); + (index>0) && this.setColorValue(color, index); + me.sortThumbs(); + me.changeSliderStyle(); + me.changeGradientStyle(); + }, + removeThumb: function(index) { if (index===undefined) index = this.thumbs.length-1; - if (index>0) { + if (this.thumbs.length > 2) { this.thumbs[index].thumb.remove(); this.thumbs.splice(index, 1); + this.sortThumbs(); this.changeSliderStyle(); } }, diff --git a/apps/common/main/lib/component/Slider.js b/apps/common/main/lib/component/Slider.js index 0ee059b7e..00e54d0d0 100644 --- a/apps/common/main/lib/component/Slider.js +++ b/apps/common/main/lib/component/Slider.js @@ -347,17 +347,28 @@ define([ pos = Math.max(0, Math.min(100, position)), value = pos/me.delta + me.minValue; - me.setThumbPosition(index, pos); - me.thumbs[index].value = value; + if (me.isRemoveThumb) { + if (me.thumbs.length < 3) { + $(document).off('mouseup', me.binding.onMouseUp); + $(document).off('mousemove', me.binding.onMouseMove); + return; + } + me.trigger('removethumb', me, _.findIndex(me.thumbs, {index: index})); + me.trigger('changecomplete', me, value, lastValue); + } else { + me.setThumbPosition(index, pos); + me.thumbs[index].value = value; - if (need_sort) - me.sortThumbs(); + if (need_sort) + me.sortThumbs(); + } $(document).off('mouseup', me.binding.onMouseUp); $(document).off('mousemove', me.binding.onMouseMove); me._dragstart = undefined; - me.trigger('changecomplete', me, value, lastValue); + !me.isRemoveThumb && me.trigger('changecomplete', me, value, lastValue); + me.isRemoveThumb = undefined; }; var onMouseMove = function (e) { @@ -382,6 +393,10 @@ define([ if (need_sort) me.sortThumbs(); + var positionY = e.pageY*Common.Utils.zoom() - me.cmpEl.offset().top; + me.isRemoveThumb = positionY > me.cmpEl.height() || positionY < 0; + me.setRemoveThumb(index, me.isRemoveThumb); + if (Math.abs(value-lastValue)>0.001) me.trigger('change', me, value, lastValue); }; @@ -403,7 +418,25 @@ define([ $(document).on('mousemove', null, e.data, me.binding.onMouseMove); }; - var onTrackMouseDown = function (e) { + var onTrackMouseUp = function (e) { + if ( me.disabled || !_.isUndefined(me._dragstart) || me.thumbs.length > 9) return; + + var pos = Math.max(0, Math.min(100, (Math.round((e.pageX*Common.Utils.zoom() - me.cmpEl.offset().left) / me.width * 100)))), + nearIndex = findThumb(pos), + thumbColor = me.thumbs[nearIndex].colorValue, + thumbValue = me.thumbs[nearIndex].value, + value = pos/me.delta + me.minValue; + me.addThumb(); + var index = me.thumbs.length - 1; + me.setThumbPosition(index, pos); + me.thumbs[index].value = value; + me.trigger('addthumb', me, index, nearIndex, thumbColor); + + me.trigger('change', me); + me.trigger('changecomplete', me); + }; + + /*var onTrackMouseDown = function (e) { if ( me.disabled ) return; var pos = Math.max(0, Math.min(100, (Math.round((e.pageX*Common.Utils.zoom() - me.cmpEl.offset().left) / me.width * 100)))), @@ -416,7 +449,7 @@ define([ me.trigger('change', me, value, lastValue); me.trigger('changecomplete', me, value, lastValue); - }; + };*/ var findThumb = function(pos) { var nearest = 100, @@ -462,7 +495,8 @@ define([ me.setActiveThumb(0, true); if (!me.rendered) { - el.on('mousedown', '.track', onTrackMouseDown); + /*el.on('mousedown', '.track', onTrackMouseDown);*/ + el.on('mouseup', '.track', onTrackMouseUp); } me.rendered = true; @@ -472,11 +506,23 @@ define([ setActiveThumb: function(index, suspend) { this.currentThumb = index; + this.$thumbs = this.cmpEl.find('.thumb'); this.$thumbs.removeClass('active'); this.thumbs[index].thumb.addClass('active'); if (suspend!==true) this.trigger('thumbclick', this, index); }, + setRemoveThumb: function(index, remove) { + var ind = _.findIndex(this.thumbs, {index: index}); + if (ind !== -1) { + if (remove && this.thumbs.length > 2) { + this.$el.find('.active').addClass('remove'); + } else { + this.$el.find('.remove').removeClass('remove'); + } + } + }, + setThumbPosition: function(index, x) { this.thumbs[index].position = x; this.thumbs[index].thumb.css({left: x + '%'}); diff --git a/apps/common/main/lib/util/define.js b/apps/common/main/lib/util/define.js index 0b04adfec..bb448a41c 100644 --- a/apps/common/main/lib/util/define.js +++ b/apps/common/main/lib/util/define.js @@ -30,14 +30,15 @@ * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ - if (Common === undefined) { var Common = {}; } -define(function(){ 'use strict'; - +if (Common.define === undefined) { Common.define = {}; +} + +define(function(){ 'use strict'; Common.define.c_oAscMathMainType = { Symbol : 0x00, @@ -413,4 +414,86 @@ define(function(){ 'use strict'; Matrix_Flat_Round : 0x0b040000, Matrix_Flat_Square : 0x0b040001 }; + + Common.define.chartData = _.extend( new(function() { + return { + textLine: 'Line', + textColumn: 'Column', + textBar: 'Bar', + textArea: 'Area', + textPie: 'Pie', + textPoint: 'XY (Scatter)', + textStock: 'Stock', + textSurface: 'Surface', + textCharts: 'Charts', + textSparks: 'Sparklines', + textLineSpark: 'Line', + textColumnSpark: 'Column', + textWinLossSpark: 'Win/Loss', + + getChartGroupData: function(headername) { + return [ + {id: 'menu-chart-group-bar', caption: this.textColumn, headername: (headername) ? this.textCharts : undefined}, + {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, inline: true}, + {id: 'menu-chart-group-scatter', caption: this.textPoint, inline: true}, + {id: 'menu-chart-group-stock', caption: this.textStock, inline: true} + // {id: 'menu-chart-group-surface', caption: this.textSurface} + ]; + }, + + getChartData: function() { + return [ + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal'}, + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStacked, iconCls: 'column-stack'}, + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStackedPer, iconCls: 'column-pstack'}, + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal3d, iconCls: 'column-3d-normal'}, + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStacked3d, iconCls: 'column-3d-stack'}, + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStackedPer3d, iconCls: 'column-3d-pstack'}, + { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal3dPerspective, iconCls: 'column-3d-normal-per'}, + { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineNormal, iconCls: 'line-normal'}, + { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineStacked, iconCls: 'line-stack'}, + { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineStackedPer, iconCls: 'line-pstack'}, + { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.line3d, iconCls: 'line-3d'}, + { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.pie, iconCls: 'pie-normal'}, + { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.doughnut, iconCls: 'pie-doughnut'}, + { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.pie3d, iconCls: 'pie-3d-normal'}, + { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarNormal, iconCls: 'bar-normal'}, + { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStacked, iconCls: 'bar-stack'}, + { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStackedPer, iconCls: 'bar-pstack'}, + { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarNormal3d, iconCls: 'bar-3d-normal'}, + { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStacked3d, iconCls: 'bar-3d-stack'}, + { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStackedPer3d, iconCls: 'bar-3d-pstack'}, + { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaNormal, iconCls: 'area-normal'}, + { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStacked, iconCls: 'area-stack'}, + { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStackedPer, iconCls: 'area-pstack'}, + { group: 'menu-chart-group-scatter', type: Asc.c_oAscChartTypeSettings.scatter, iconCls: 'point-normal'}, + { group: 'menu-chart-group-stock', type: Asc.c_oAscChartTypeSettings.stock, iconCls: 'stock-normal'} + // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.surfaceNormal, iconCls: 'surface-normal'}, + // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.surfaceWireframe, iconCls: 'surface-wireframe'}, + // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.contourNormal, iconCls: 'contour-normal'}, + // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.contourWireframe, iconCls: 'contour-wireframe'} + + ]; + }, + + getSparkGroupData: function(headername) { + return [ + { id: 'menu-chart-group-sparkcolumn', inline: true, headername: (headername) ? this.textSparks : undefined }, + { id: 'menu-chart-group-sparkline', inline: true }, + { id: 'menu-chart-group-sparkwin', inline: true } + ]; + }, + + getSparkData: function() { + return [ + { group: 'menu-chart-group-sparkcolumn', type: Asc.c_oAscSparklineType.Column, allowSelected: true, iconCls: 'spark-column', tip: this.textColumnSpark}, + { group: 'menu-chart-group-sparkline', type: Asc.c_oAscSparklineType.Line, allowSelected: true, iconCls: 'spark-line', tip: this.textLineSpark}, + { group: 'menu-chart-group-sparkwin', type: Asc.c_oAscSparklineType.Stacked, allowSelected: true, iconCls: 'spark-win', tip: this.textWinLossSpark} + ]; + } + } + })(), Common.define.chartData || {}); }); diff --git a/apps/common/main/lib/view/ListSettingsDialog.js b/apps/common/main/lib/view/ListSettingsDialog.js index e0820cd4d..8f783c8d0 100644 --- a/apps/common/main/lib/view/ListSettingsDialog.js +++ b/apps/common/main/lib/view/ListSettingsDialog.js @@ -46,15 +46,16 @@ define([ 'common/main/lib/component/Window', 'common/main/lib/component/MetricSpinner', 'common/main/lib/component/ThemeColorPalette', - 'common/main/lib/component/ColorButton' + 'common/main/lib/component/ColorButton', + 'common/main/lib/view/SymbolTableDialog' ], function () { 'use strict'; Common.Views.ListSettingsDialog = Common.UI.Window.extend(_.extend({ options: { type: 0, // 0 - markers, 1 - numbers width: 230, - height: 156, - style: 'min-width: 230px;', + height: 200, + style: 'min-width: 240px;', cls: 'modal-dlg', split: false, buttons: ['ok', 'cancel'] @@ -64,20 +65,25 @@ define([ this.type = options.type || 0; _.extend(this.options, { - title: this.txtTitle, - height: this.type==1 ? 190 : 156 + title: this.txtTitle }, options || {}); this.template = [ '
', - '
', + '
', '
', '
', - '
', + '
', '
', '
', + '<% if (type == 0) { %>', + '
', + '', + '', + '
', + '<% } %>', '<% if (type == 1) { %>', - '
', + '
', '
', '
', '<% } %>', @@ -163,6 +169,13 @@ define([ } }); + this.btnEdit = new Common.UI.Button({ + el: $window.find('#id-dlg-list-edit'), + hint: this.tipChange + }); + this.btnEdit.on('click', _.bind(this.onEditBullet, this)); + this.btnEdit.cmpEl.css({'font-size': '12px'}); + this.afterRender(); }, @@ -186,6 +199,36 @@ define([ } }, + onEditBullet: function() { + var me = this, + props = me.bulletProps, + handler = function(dlg, result, settings) { + if (result == 'ok') { + props.changed = true; + props.code = settings.code; + props.font = settings.font; + props.symbol = settings.symbol; + props.font && me.btnEdit.cmpEl.css('font-family', props.font); + settings.symbol && me.btnEdit.setCaption(settings.symbol); + if (me._changedProps) { + me._changedProps.asc_putBulletFont(props.font); + me._changedProps.asc_putBulletSymbol(props.symbol); + } + } + }, + win = new Common.Views.SymbolTableDialog({ + api: me.options.api, + lang: me.options.interfaceLang, + modal: true, + type: 0, + font: props.font, + symbol: props.symbol, + handler: handler + }); + win.show(); + win.on('symbol:dblclick', handler); + }, + _handleInput: function(state) { if (this.options.handler) { this.options.handler.call(this, state, this._changedProps); @@ -228,6 +271,12 @@ define([ if (!isselected) this.colors.clearSelection(); } else this.colors.select(color,true); + + if (this.type==0) { + this.bulletProps = {symbol: props.asc_getBulletSymbol(), font: props.asc_getBulletFont()}; + this.bulletProps.font && this.btnEdit.cmpEl.css('font-family', this.bulletProps.font); + this.bulletProps.symbol && this.btnEdit.setCaption(this.bulletProps.symbol); + } } this._changedProps = new Asc.asc_CParagraphProperty(); }, @@ -237,6 +286,8 @@ define([ txtColor: 'Color', txtOfText: '% of text', textNewColor: 'Add New Custom Color', - txtStart: 'Start at' + txtStart: 'Start at', + txtBullet: 'Bullet', + tipChange: 'Change bullet' }, Common.Views.ListSettingsDialog || {})) }); \ No newline at end of file diff --git a/apps/common/main/lib/view/SymbolTableDialog.js b/apps/common/main/lib/view/SymbolTableDialog.js index 601c7070d..a0e808329 100644 --- a/apps/common/main/lib/view/SymbolTableDialog.js +++ b/apps/common/main/lib/view/SymbolTableDialog.js @@ -453,6 +453,15 @@ define([ var init = (aFontSelects.length<1); init && this.initFonts(); + if (options.font) { + for(var i = 0; i < aFontSelects.length; ++i){ + if(aFontSelects[i].displayValue === options.font){ + nCurrentFont = i; + break; + } + } + } + if (nCurrentFont < 0) nCurrentFont = 0; @@ -477,6 +486,12 @@ define([ nCurrentSymbol = aRanges[0].Start; } + if (options.code) { + nCurrentSymbol = options.code; + } else if (options.symbol) { + nCurrentSymbol = this.fixedCharCodeAt(options.symbol, 0); + } + if (init && this.options.lang && this.options.lang != 'en') { var me = this; loadTranslation(this.options.lang, function(){ @@ -536,6 +551,7 @@ define([ for(i = 0; i < aFontSelects.length; ++i){ aFontSelects[i].value = i; } + if(!oFontsByName[sInitFont]){ if(oFontsByName['Cambria Math']){ sInitFont = 'Cambria Math'; @@ -599,6 +615,7 @@ define([ el : $window.find('#symbol-table-cmb-range'), cls : 'input-group-nr', editable : false, + search : true, menuStyle : 'min-width: 100%; max-height: 209px;' }).on('selected', function(combo, record) { var oCurrentRange = me.getRangeByName(aRanges, parseInt(record.value)); @@ -681,7 +698,7 @@ define([ var nFontId = parseInt(cellId.split('_')[2]); sFont = aFontSelects[nFontId].displayValue; } - return {font: sFont, symbol: this.encodeSurrogateChar(nCurrentSymbol), updateRecents: bUpdateRecents}; + return {font: sFont, symbol: this.encodeSurrogateChar(nCurrentSymbol), code: nCurrentSymbol, updateRecents: bUpdateRecents}; }, onBtnClick: function(event) { @@ -929,7 +946,7 @@ define([ var settings = this.getPasteSymbol($(e.target).attr('id')); settings.updateRecents && this.checkRecent(nCurrentSymbol, settings.font); settings.updateRecents && this.updateView(false, undefined, undefined, true); - this.fireEvent('symbol:dblclick', this, settings); + this.fireEvent('symbol:dblclick', this, 'ok', settings); } }, diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less index 3642c73af..8771a15a0 100644 --- a/apps/common/main/resources/less/buttons.less +++ b/apps/common/main/resources/less/buttons.less @@ -400,8 +400,10 @@ } } .dropdown-menu { - li.disabled { - opacity: 0.65; + &.scale-menu { + li.disabled { + opacity: 0.65; + } } } } diff --git a/apps/common/main/resources/less/calendar.less b/apps/common/main/resources/less/calendar.less new file mode 100644 index 000000000..5f0fd3c21 --- /dev/null +++ b/apps/common/main/resources/less/calendar.less @@ -0,0 +1,128 @@ +@calendar-bg-color: @tabs-bg-color; + +.calendar-window { + border-radius: 0; + box-shadow: none; +} +.calendar-box { + width: 198px; + height: 220px; + border: 1px solid @calendar-bg-color; + .top-row { + padding: 0 5px; + } + .btn { + background-color: transparent; + border: none; + height: 20px; + width: 20px; + margin-top: 4px; + display: flex; + justify-content: center; + align-items: center; + .icon { + width: 16px; + height: 16px; + display: block; + position: relative; + &.arrow-prev { + background-position: -55px -96px; + } + &.arrow-next { + background-position: -52px -112px; + } + } + &:hover { + background-color: rgba(255,255,255,0.2); + cursor: pointer; + } + } + .calendar-header { + height: 50px; + background-color: @calendar-bg-color; + color: #FFFFFF; + .top-row { + display: flex; + justify-content: space-between; + } + .bottom-row { + display: flex; + justify-content: space-around; + padding: 0; + } + .title { + width: 100%; + margin: 4px 6px 3px 6px; + text-align: center; + font-size: 13px; + label { + padding: 2px 10px 0; + display: block; + font-weight: bold; + &:not(:last-of-type) { + margin-right: 6px; + } + } + .button { + height: 100%; + width: 100%; + &:hover { + background-color: rgba(255,255,255,0.2); + cursor: pointer; + label { + cursor: pointer; + } + } + } + + } + } + .calendar-content { + .item { + margin: 0; + padding: 0; + height: auto; + width: auto; + box-shadow: none; + border: 1px solid #fff; + .name-month, .name-year { + height: 40px; + width: 47px; + background-color: #F1F1F1; + display: flex; + justify-content: center; + align-items: center; + font-size: 13px; + } + .number-day { + height: 26px; + width: 26px; + background-color: #F1F1F1; + display: flex; + justify-content: center; + align-items: center; + } + &.selected { + .number-day, .name-month, .name-year { + color: #fff; + background-color: #7D858C; + } + } + .weekend { + color: #D25252; + } + .no-current-month, .no-cur-year, .no-current-decade { + color: #A5A5A5; + } + &:not(.disabled):not(.selected) { + .number-day, .name-month, .name-year { + &:hover { + background-color: #D9D9D9; + } + } + } + + + } + } +} \ No newline at end of file diff --git a/apps/common/main/resources/less/multislider-gradient.less b/apps/common/main/resources/less/multislider-gradient.less index d42350d94..562f15b8f 100644 --- a/apps/common/main/resources/less/multislider-gradient.less +++ b/apps/common/main/resources/less/multislider-gradient.less @@ -40,6 +40,10 @@ &.active .thumb-bottom { border-bottom-width: 2px; } + + &.remove { + opacity: 0.5; + } } .track { diff --git a/apps/common/main/resources/less/toolbar.less b/apps/common/main/resources/less/toolbar.less index 16ddef848..74da8eb05 100644 --- a/apps/common/main/resources/less/toolbar.less +++ b/apps/common/main/resources/less/toolbar.less @@ -584,3 +584,137 @@ width: 20px; height: 20px; } + +// charts +.menu-insertchart { + .group-description { + padding-left: 4px; + } + + .group-items-container { + float: left; + position: relative; + } +} + +.item-chartlist { + .background-ximage('@{common-image-path}/toolbar/charttypes.png', '@{common-image-path}/toolbar/charttypes@2x.png', 250px); + width: 50px; + height: 50px; +} + +.line-normal { + background-position: 0 0; +} + +.line-stack { + background-position: -50px 0; +} + +.line-pstack { + background-position: -100px 0; +} + +.line-3d { + background-position: -150px 0; +} + +.column-normal { + background-position: 0 -50px; +} + +.column-stack{ + background-position: -50px -50px; +} + +.column-pstack{ + background-position: -100px -50px; +} + +.column-3d-normal { + background-position: -150px -50px; +} + +.column-3d-stack{ + background-position: -200px -50px; +} + +.column-3d-pstack{ + background-position: -150px -100px; +} + +.column-3d-normal-per{ + background-position: -200px -100px; +} + +.bar-normal { + background-position: 0 -100px; +} + +.bar-stack{ + background-position: -50px -100px; +} + +.bar-pstack{ + background-position: -100px -100px; +} + +.bar-3d-normal { + background-position: -150px -150px; +} + +.bar-3d-stack{ + background-position: -200px -150px; +} + +.bar-3d-pstack{ + background-position: -150px -200px; +} + +.area-normal { + background-position: 0 -150px; +} + +.area-stack{ + background-position: -50px -150px; +} + +.area-pstack{ + background-position: -100px -150px; +} + +.pie-normal { + background-position: 0 -200px; +} + +.pie-3d-normal { + background-position: -200px -200px; +} + +.point-normal{ + background-position: -50px -200px; +} + +.stock-normal{ + background-position: -100px -200px; +} + +.pie-doughnut{ + background-position: -200px 0; +} + +.surface-normal{ + background-position: 0px -300px; +} + +.surface-wireframe{ + background-position: -50px -300px; +} + +.contour-normal{ + background-position: -100px -300px; +} + +.contour-wireframe{ + background-position: -150px -300px; +} diff --git a/apps/documenteditor/embed/js/ApplicationController.js b/apps/documenteditor/embed/js/ApplicationController.js index 7d8762564..db428d1c5 100644 --- a/apps/documenteditor/embed/js/ApplicationController.js +++ b/apps/documenteditor/embed/js/ApplicationController.js @@ -563,6 +563,6 @@ DE.ApplicationController = new(function(){ textLoadingDocument: 'Loading document', txtClose: 'Close', errorFileSizeExceed: 'The file size exceeds the limitation set for your server.
Please contact your Document Server administrator for details.', - errorUpdateVersionOnDisconnect: 'The file version has been changed.
Use the \'Download\' option to save the file backup copy to your computer hard drive.' + errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.' } })(); \ No newline at end of file diff --git a/apps/documenteditor/embed/locale/en.json b/apps/documenteditor/embed/locale/en.json index b8debeec6..a36be77b1 100644 --- a/apps/documenteditor/embed/locale/en.json +++ b/apps/documenteditor/embed/locale/en.json @@ -22,7 +22,7 @@ "DE.ApplicationController.unknownErrorText": "Unknown error.", "DE.ApplicationController.unsupportedBrowserErrorText": "Your browser is not supported.", "DE.ApplicationController.waitText": "Please, wait...", - "DE.ApplicationController.errorUpdateVersionOnDisconnect": "The file version has been changed.
Use the 'Download' option to save the file backup copy to your computer hard drive.", + "DE.ApplicationController.errorUpdateVersionOnDisconnect": "Internet connection has been restored, and the file version has been changed.
Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.", "DE.ApplicationView.txtDownload": "Download", "DE.ApplicationView.txtEmbed": "Embed", "DE.ApplicationView.txtFullScreen": "Full Screen", diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index f6d37fd4c..e4a30288b 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -41,6 +41,7 @@ define([ 'core', + 'common/main/lib/component/Calendar', 'documenteditor/main/app/view/Links', 'documenteditor/main/app/view/NoteSettingsDialog', 'documenteditor/main/app/view/HyperlinkSettingsDialog', @@ -129,7 +130,8 @@ define([ in_header = false, in_equation = false, in_image = false, - in_table = false; + in_table = false, + frame_pr = null; while (++i < selectedObjects.length) { type = selectedObjects[i].get_ObjectType(); @@ -137,6 +139,7 @@ define([ if (type === Asc.c_oAscTypeSelectElement.Paragraph) { paragraph_locked = pr.get_Locked(); + frame_pr = pr; } else if (type === Asc.c_oAscTypeSelectElement.Header) { header_locked = pr.get_Locked(); in_header = true; @@ -153,12 +156,19 @@ define([ var control_props = this.api.asc_IsContentControl() ? this.api.asc_GetContentControlProperties() : null, control_plain = (control_props) ? (control_props.get_ContentControlType()==Asc.c_oAscSdtLevelType.Inline) : false; + var rich_del_lock = (frame_pr) ? !frame_pr.can_DeleteBlockContentControl() : true, + rich_edit_lock = (frame_pr) ? !frame_pr.can_EditBlockContentControl() : true, + plain_del_lock = (frame_pr) ? !frame_pr.can_DeleteInlineContentControl() : true, + plain_edit_lock = (frame_pr) ? !frame_pr.can_EditInlineContentControl() : true; - var need_disable = paragraph_locked || in_equation || in_image || in_header || control_plain; + var need_disable = paragraph_locked || in_equation || in_image || in_header || control_plain || rich_edit_lock || plain_edit_lock; this.view.btnsNotes.setDisabled(need_disable); need_disable = paragraph_locked || header_locked || in_header || control_plain; this.view.btnBookmarks.setDisabled(need_disable); + + need_disable = in_header || rich_edit_lock || plain_edit_lock || rich_del_lock || plain_del_lock; + this.view.btnsContents.setDisabled(need_disable); }, onApiCanAddHyperlink: function(value) { @@ -351,8 +361,9 @@ define([ })).show(); }, - onShowContentControlsActions: function(action, x, y) { - var menu = (action==1) ? this.view.contentsUpdateMenu : this.view.contentsMenu, + onShowTOCActions: function(obj, x, y) { + var action = obj.button, + menu = (action==AscCommon.CCButtonType.Toc) ? this.view.contentsUpdateMenu : this.view.contentsMenu, documentHolderView = this.getApplication().getController('DocumentHolder').documentHolder, menuContainer = documentHolderView.cmpEl.find(Common.Utils.String.format('#menu-container-{0}', menu.id)), me = this; @@ -391,6 +402,150 @@ define([ onHideContentControlsActions: function() { this.view.contentsMenu && this.view.contentsMenu.hide(); this.view.contentsUpdateMenu && this.view.contentsUpdateMenu.hide(); + this.view.listControlMenu && this.view.listControlMenu.isVisible() && this.view.listControlMenu.hide(); + var controlsContainer = this.getApplication().getController('DocumentHolder').documentHolder.cmpEl.find('#calendar-control-container'); + if (controlsContainer.is(':visible')) + controlsContainer.hide(); + }, + + onShowDateActions: function(obj, x, y) { + var props = obj.pr, + specProps = props.get_DateTimePr(), + id = props.get_InternalId(), + documentHolderView = this.getApplication().getController('DocumentHolder').documentHolder, + controlsContainer = documentHolderView.cmpEl.find('#calendar-control-container'), + me = this; + + if (controlsContainer.length < 1) { + controlsContainer = $('
'); + documentHolderView.cmpEl.append(controlsContainer); + } + + Common.UI.Menu.Manager.hideAll(); + + controlsContainer.css({left: x, top : y}); + controlsContainer.show(); + + if (!this.cmpCalendar) { + this.cmpCalendar = new Common.UI.Calendar({ + el: documentHolderView.cmpEl.find('#id-document-calendar-control'), + enableKeyEvents: true, + firstday: 1 + }); + this.cmpCalendar.on('date:click', function (cmp, date) { + specProps.put_FullDate(new Date(date)); + me.api.asc_SetContentControlProperties(props, id); + controlsContainer.hide(); + me.api.asc_UncheckContentControlButtons(); + }); + this.cmpCalendar.on('calendar:keydown', function (cmp, e) { + if (e.keyCode==Common.UI.Keys.ESC) { + controlsContainer.hide(); + me.api.asc_UncheckContentControlButtons(); + } + }); + } + this.cmpCalendar.setDate(new Date(specProps ? specProps.get_FullDate() : undefined)); + + // align + var offset = controlsContainer.offset(), + docW = Common.Utils.innerWidth(), + docH = Common.Utils.innerHeight() - 10, // Yep, it's magic number + menuW = this.cmpCalendar.cmpEl.outerWidth(), + menuH = this.cmpCalendar.cmpEl.outerHeight(), + buttonOffset = 22, + left = offset.left - menuW, + top = offset.top; + if (top + menuH > docH) { + top = docH - menuH; + left -= buttonOffset; + } + if (top < 0) + top = 0; + if (left + menuW > docW) + left = docW - menuW; + this.cmpCalendar.cmpEl.css({left: left, top : top}); + + documentHolderView._preventClick = true; + }, + + onShowListActions: function(obj, x, y) { + var type = obj.type, + props = obj.pr, + id = props.get_InternalId(), + specProps = (type == Asc.c_oAscContentControlSpecificType.ComboBox) ? props.get_ComboBoxPr() : props.get_DropDownListPr(), + menu = this.view.listControlMenu, + documentHolderView = this.getApplication().getController('DocumentHolder').documentHolder, + menuContainer = menu ? documentHolderView.cmpEl.find(Common.Utils.String.format('#menu-container-{0}', menu.id)) : null, + me = this; + + this._fromShowContentControls = true; + Common.UI.Menu.Manager.hideAll(); + + if (!menu) { + this.view.listControlMenu = menu = new Common.UI.Menu({ + menuAlign: 'tr-bl', + items: [] + }); + menu.on('item:click', function(menu, item) { + setTimeout(function(){ + me.api.asc_SelectContentControlListItem(item.value, id); + }, 1); + }); + + // Prepare menu container + if (!menuContainer || menuContainer.length < 1) { + menuContainer = $(Common.Utils.String.format('', menu.id)); + documentHolderView.cmpEl.append(menuContainer); + } + + menu.render(menuContainer); + menu.cmpEl.attr({tabindex: "-1"}); + menu.on('hide:after', function(){ + me.view.listControlMenu.removeAll(); + if (!me._fromShowContentControls) + me.api.asc_UncheckContentControlButtons(); + }); + } + if (specProps) { + var count = specProps.get_ItemsCount(); + for (var i=0; iUse the \'Download as...\' option to save the file backup copy to your computer hard drive.' + errorUpdateVersionOnDisconnect: 'Internet connection has been restored, and the file version has been changed.
Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index d4ceada56..1affbdbd8 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -380,7 +380,10 @@ define([ this.api.asc_registerCallback('asc_onContextMenu', _.bind(this.onContextMenu, this)); this.api.asc_registerCallback('asc_onShowParaMarks', _.bind(this.onShowParaMarks, this)); this.api.asc_registerCallback('asc_onChangeSdtGlobalSettings', _.bind(this.onChangeSdtGlobalSettings, this)); + this.api.asc_registerCallback('asc_onTextLanguage', _.bind(this.onTextLanguage, this)); Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this)); + this.api.asc_registerCallback('asc_onTableDrawModeChanged', _.bind(this.onTableDraw, this)); + this.api.asc_registerCallback('asc_onTableEraseModeChanged', _.bind(this.onTableErase, this)); } else if (this.mode.isRestrictedEdit) { this.api.asc_registerCallback('asc_onFocusObject', _.bind(this.onApiFocusObjectRestrictedEdit, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); @@ -736,7 +739,11 @@ define([ if (sh) this.onParagraphColor(sh); - var need_disable = paragraph_locked || header_locked; + var rich_del_lock = (frame_pr) ? !frame_pr.can_DeleteBlockContentControl() : true, + rich_edit_lock = (frame_pr) ? !frame_pr.can_EditBlockContentControl() : true, + plain_del_lock = (frame_pr) ? !frame_pr.can_DeleteInlineContentControl() : true, + plain_edit_lock = (frame_pr) ? !frame_pr.can_EditInlineContentControl() : true; + var need_disable = paragraph_locked || header_locked || rich_edit_lock || plain_edit_lock; if (this._state.prcontrolsdisable != need_disable) { if (this._state.activated) this._state.prcontrolsdisable = need_disable; @@ -750,15 +757,18 @@ define([ lock_type = (in_control&&control_props) ? control_props.get_Lock() : Asc.c_oAscSdtLockType.Unlocked, control_plain = (in_control&&control_props) ? (control_props.get_ContentControlType()==Asc.c_oAscSdtLevelType.Inline) : false; (lock_type===undefined) && (lock_type = Asc.c_oAscSdtLockType.Unlocked); + var content_locked = lock_type==Asc.c_oAscSdtLockType.SdtContentLocked || lock_type==Asc.c_oAscSdtLockType.ContentLocked; - if (!paragraph_locked && !header_locked) { - toolbar.btnContentControls.menu.items[0].setDisabled(control_plain || lock_type==Asc.c_oAscSdtLockType.SdtContentLocked || lock_type==Asc.c_oAscSdtLockType.ContentLocked); - toolbar.btnContentControls.menu.items[1].setDisabled(control_plain || lock_type==Asc.c_oAscSdtLockType.SdtContentLocked || lock_type==Asc.c_oAscSdtLockType.ContentLocked); - toolbar.btnContentControls.menu.items[3].setDisabled(!in_control || lock_type==Asc.c_oAscSdtLockType.SdtContentLocked || lock_type==Asc.c_oAscSdtLockType.SdtLocked); - toolbar.btnContentControls.menu.items[5].setDisabled(!in_control); + toolbar.btnContentControls.setDisabled(paragraph_locked || header_locked); + if (!(paragraph_locked || header_locked)) { + var control_disable = control_plain || content_locked; + for (var i=0; i<7; i++) + toolbar.btnContentControls.menu.items[i].setDisabled(control_disable); + toolbar.btnContentControls.menu.items[8].setDisabled(!in_control || lock_type==Asc.c_oAscSdtLockType.SdtContentLocked || lock_type==Asc.c_oAscSdtLockType.SdtLocked); + toolbar.btnContentControls.menu.items[10].setDisabled(!in_control); } - var need_text_disable = paragraph_locked || header_locked || in_chart; + var need_text_disable = paragraph_locked || header_locked || in_chart || rich_edit_lock || plain_edit_lock; if (this._state.textonlycontrolsdisable != need_text_disable) { if (this._state.activated) this._state.textonlycontrolsdisable = need_text_disable; if (!need_disable) { @@ -766,7 +776,7 @@ define([ item.setDisabled(need_text_disable); }, this); } - toolbar.btnCopyStyle.setDisabled(need_text_disable); + // toolbar.btnCopyStyle.setDisabled(need_text_disable); toolbar.btnClearStyle.setDisabled(need_text_disable); } @@ -792,22 +802,22 @@ define([ if ( !toolbar.btnDropCap.isDisabled() ) toolbar.mnuDropCapAdvanced.setDisabled(disable_dropcapadv); - need_disable = !can_add_table || header_locked || in_equation || control_plain; + need_disable = !can_add_table || header_locked || in_equation || control_plain || rich_edit_lock || plain_edit_lock || rich_del_lock || plain_del_lock; toolbar.btnInsertTable.setDisabled(need_disable); need_disable = toolbar.mnuPageNumCurrentPos.isDisabled() && toolbar.mnuPageNumberPosPicker.isDisabled() || control_plain; toolbar.mnuInsertPageNum.setDisabled(need_disable); var in_footnote = this.api.asc_IsCursorInFootnote(); - need_disable = paragraph_locked || header_locked || in_header || in_image || in_equation && !btn_eq_state || in_footnote || in_control; + need_disable = paragraph_locked || header_locked || in_header || in_image || in_equation && !btn_eq_state || in_footnote || in_control || rich_edit_lock || plain_edit_lock || rich_del_lock; toolbar.btnsPageBreak.setDisabled(need_disable); toolbar.btnBlankPage.setDisabled(need_disable); - need_disable = paragraph_locked || header_locked || in_equation || control_plain; + need_disable = paragraph_locked || header_locked || in_equation || control_plain || content_locked; toolbar.btnInsertShape.setDisabled(need_disable); toolbar.btnInsertText.setDisabled(need_disable); - need_disable = paragraph_locked || header_locked || in_para && !can_add_image || in_equation || control_plain; + need_disable = paragraph_locked || header_locked || in_para && !can_add_image || in_equation || control_plain || rich_del_lock || plain_del_lock || content_locked; toolbar.btnInsertImage.setDisabled(need_disable); toolbar.btnInsertTextArt.setDisabled(need_disable || in_footnote); @@ -816,28 +826,28 @@ define([ this._state.in_chart = in_chart; } - need_disable = in_chart && image_locked || !in_chart && need_disable || control_plain; + need_disable = in_chart && image_locked || !in_chart && need_disable || control_plain || rich_del_lock || plain_del_lock || content_locked; toolbar.btnInsertChart.setDisabled(need_disable); - need_disable = paragraph_locked || header_locked || in_chart || !can_add_image&&!in_equation || control_plain; + need_disable = paragraph_locked || header_locked || in_chart || !can_add_image&&!in_equation || control_plain || rich_edit_lock || plain_edit_lock || rich_del_lock || plain_del_lock; toolbar.btnInsertEquation.setDisabled(need_disable); - toolbar.btnInsertSymbol.setDisabled(!in_para || paragraph_locked || header_locked); + toolbar.btnInsertSymbol.setDisabled(!in_para || paragraph_locked || header_locked || rich_edit_lock || plain_edit_lock || rich_del_lock || plain_del_lock); - need_disable = paragraph_locked || header_locked || in_equation; + need_disable = paragraph_locked || header_locked || in_equation || rich_edit_lock || plain_edit_lock; toolbar.btnSuperscript.setDisabled(need_disable); toolbar.btnSubscript.setDisabled(need_disable); toolbar.btnEditHeader.setDisabled(in_equation); - need_disable = paragraph_locked || header_locked || in_image || control_plain; + need_disable = paragraph_locked || header_locked || in_image || control_plain || rich_edit_lock || plain_edit_lock; if (need_disable != toolbar.btnColumns.isDisabled()) toolbar.btnColumns.setDisabled(need_disable); if (toolbar.listStylesAdditionalMenuItem && (frame_pr===undefined) !== toolbar.listStylesAdditionalMenuItem.isDisabled()) toolbar.listStylesAdditionalMenuItem.setDisabled(frame_pr===undefined); - need_disable = !this.api.can_AddQuotedComment() || paragraph_locked || header_locked || image_locked; + need_disable = !this.api.can_AddQuotedComment() || paragraph_locked || header_locked || image_locked || rich_del_lock || rich_edit_lock || plain_del_lock || plain_edit_lock; if (this.mode.compatibleFeatures) { need_disable = need_disable || in_image; } @@ -854,6 +864,13 @@ define([ this.modeAlwaysSetStyle = false; }, + onTableDraw: function(v) { + this.toolbar.mnuInsertTable && this.toolbar.mnuInsertTable.items[2].setChecked(!!v, true); + }, + onTableErase: function(v) { + this.toolbar.mnuInsertTable && this.toolbar.mnuInsertTable.items[3].setChecked(!!v, true); + }, + onApiParagraphStyleChange: function(name) { if (this._state.prstyle != name) { var listStyle = this.toolbar.listStyles, @@ -1410,6 +1427,12 @@ define([ Common.NotificationCenter.trigger('edit:complete', me.toolbar); } })).show(); + } else if (item.value == 'draw') { + item.isChecked() && menu.items[3].setChecked(false, true); + this.api.SetTableDrawMode(item.isChecked()); + } else if (item.value == 'erase') { + item.isChecked() && menu.items[2].setChecked(false, true); + this.api.SetTableEraseMode(item.isChecked()); } }, @@ -1733,6 +1756,8 @@ define([ (new DE.Views.ControlSettingsDialog({ props: props, api: me.api, + controlLang: me._state.lang, + interfaceLang: me.mode.lang, handler: function(result, value) { if (result == 'ok') { me.api.asc_SetContentControlProperties(value, id); @@ -1749,7 +1774,17 @@ define([ } } } else { - this.api.asc_AddContentControl(item.value); + if (item.value == 'plain' || item.value == 'rich') + this.api.asc_AddContentControl((item.value=='plain') ? Asc.c_oAscSdtLevelType.Inline : Asc.c_oAscSdtLevelType.Block); + else if (item.value == 'picture') + this.api.asc_AddContentControlPicture(); + else if (item.value == 'checkbox') + this.api.asc_AddContentControlCheckBox(); + else if (item.value == 'date') + this.api.asc_AddContentControlDatePicker(); + else if (item.value == 'combobox' || item.value == 'dropdown') + this.api.asc_AddContentControlList(item.value == 'combobox'); + Common.component.Analytics.trackEvent('ToolBar', 'Add Content Control'); } @@ -2487,14 +2522,14 @@ define([ buttons: [{value: 'ok', caption: this.textInsert}, 'close'], handler: function(dlg, result, settings) { if (result == 'ok') { - me.api.pluginMethod_PasteHtml("" + settings.symbol + ""); + me.api.asc_insertSymbol(settings.font, settings.code); } else Common.NotificationCenter.trigger('edit:complete', me.toolbar); } }); me.dlgSymbolTable.show(); - me.dlgSymbolTable.on('symbol:dblclick', function(cmp, settings) { - me.api.pluginMethod_PasteHtml("" + settings.symbol + ""); + me.dlgSymbolTable.on('symbol:dblclick', function(cmp, result, settings) { + me.api.asc_insertSymbol(settings.font, settings.code); }); } }, @@ -2952,6 +2987,10 @@ define([ } }, + onTextLanguage: function(langId) { + this._state.lang = langId; + }, + textEmptyImgUrl : 'You need to specify image URL.', textWarning : 'Warning', textFontSizeErr : 'The entered value is incorrect.
Please enter a numeric value between 1 and 100', diff --git a/apps/documenteditor/main/app/template/ControlSettingsDialog.template b/apps/documenteditor/main/app/template/ControlSettingsDialog.template new file mode 100644 index 000000000..70df12159 --- /dev/null +++ b/apps/documenteditor/main/app/template/ControlSettingsDialog.template @@ -0,0 +1,151 @@ +
+
+ + + + + + + + + + +
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + + + + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + + +
+ + +
+
+
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + +
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + + + + + + + + +
+ + +
+
+ +
+ + +
+
+ +
+
+
\ No newline at end of file diff --git a/apps/documenteditor/main/app/template/ImageSettings.template b/apps/documenteditor/main/app/template/ImageSettings.template index 8abc9eaf0..9fae4b54e 100644 --- a/apps/documenteditor/main/app/template/ImageSettings.template +++ b/apps/documenteditor/main/app/template/ImageSettings.template @@ -14,17 +14,17 @@ - + - + -
+
diff --git a/apps/documenteditor/main/app/view/ChartSettings.js b/apps/documenteditor/main/app/view/ChartSettings.js index 64eb011be..878effd46 100644 --- a/apps/documenteditor/main/app/view/ChartSettings.js +++ b/apps/documenteditor/main/app/view/ChartSettings.js @@ -261,48 +261,8 @@ define([ el: $('#id-chart-menu-type'), parentMenu: btn.menu, 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, 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-surface', caption: me.textSurface} - ]), - store: new Common.UI.DataViewStore([ - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal', selected: true}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStacked, iconCls: 'column-stack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStackedPer, iconCls: 'column-pstack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal3d, iconCls: 'column-3d-normal'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStacked3d, iconCls: 'column-3d-stack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStackedPer3d, iconCls: 'column-3d-pstack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal3dPerspective, iconCls: 'column-3d-normal-per'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineNormal, iconCls: 'line-normal'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineStacked, iconCls: 'line-stack'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineStackedPer, iconCls: 'line-pstack'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.line3d, iconCls: 'line-3d'}, - { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.pie, iconCls: 'pie-normal'}, - { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.doughnut, iconCls: 'pie-doughnut'}, - { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.pie3d, iconCls: 'pie-3d-normal'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarNormal, iconCls: 'bar-normal'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStacked, iconCls: 'bar-stack'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStackedPer, iconCls: 'bar-pstack'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarNormal3d, iconCls: 'bar-3d-normal'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStacked3d, iconCls: 'bar-3d-stack'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStackedPer3d, iconCls: 'bar-3d-pstack'}, - { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaNormal, iconCls: 'area-normal'}, - { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStacked, iconCls: 'area-stack'}, - { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStackedPer, iconCls: 'area-pstack'}, - { group: 'menu-chart-group-scatter', type: Asc.c_oAscChartTypeSettings.scatter, iconCls: 'point-normal'}, - { group: 'menu-chart-group-stock', type: Asc.c_oAscChartTypeSettings.stock, iconCls: 'stock-normal'} - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.surfaceNormal, iconCls: 'surface-normal'}, - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.surfaceWireframe, iconCls: 'surface-wireframe'}, - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.contourNormal, iconCls: 'contour-normal'}, - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.contourWireframe, iconCls: 'contour-wireframe'} - - ]), + groups: new Common.UI.DataViewGroupStore(Common.define.chartData.getChartGroupData()), + store: new Common.UI.DataViewStore(Common.define.chartData.getChartData()), itemTemplate: _.template('
') }); }); @@ -538,15 +498,7 @@ define([ txtInFront: 'In front', textEditData: 'Edit Data', textChartType: 'Change Chart Type', - textLine: 'Line', - textColumn: 'Column', - textBar: 'Bar', - textArea: 'Area', - textPie: 'Pie', - textPoint: 'XY (Scatter)', - textStock: 'Stock', - textStyle: 'Style', - textSurface: 'Surface' + textStyle: 'Style' }, DE.Views.ChartSettings || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/ControlSettingsDialog.js b/apps/documenteditor/main/app/view/ControlSettingsDialog.js index d82b927ee..99d10656c 100644 --- a/apps/documenteditor/main/app/view/ControlSettingsDialog.js +++ b/apps/documenteditor/main/app/view/ControlSettingsDialog.js @@ -39,17 +39,21 @@ * */ -define([ +define([ 'text!documenteditor/main/app/template/ControlSettingsDialog.template', 'common/main/lib/util/utils', 'common/main/lib/component/CheckBox', 'common/main/lib/component/InputField', - 'common/main/lib/view/AdvancedSettingsWindow' -], function () { 'use strict'; + 'common/main/lib/view/AdvancedSettingsWindow', + 'common/main/lib/view/SymbolTableDialog', + 'documenteditor/main/app/view/EditListItemDialog' +], function (contentTemplate) { 'use strict'; DE.Views.ControlSettingsDialog = Common.Views.AdvancedSettingsWindow.extend(_.extend({ options: { contentWidth: 310, - height: 412 + height: 392, + toggleGroup: 'control-adv-settings-group', + storageName: 'de-control-settings-adv-category' }, initialize : function(options) { @@ -57,83 +61,16 @@ define([ _.extend(this.options, { title: this.textTitle, - template: [ - '
', - '
', - '
', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '
', - '', - '
', - '
', - '', - '
', - '
', - '
', - '
', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '
', - '', - '
', - '', - '', - '
', - '
', - '', - '', - '
', - '
', - '', - '
', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '
', - '
', - '
', - '', - '
', - '
', - '
', - '
', - '
', - '
', - '
', - '
' - ].join('') + items: [ + {panelId: 'id-adv-control-settings-general', panelCaption: this.strGeneral}, + {panelId: 'id-adv-control-settings-lock', panelCaption: this.textLock}, + {panelId: 'id-adv-control-settings-list', panelCaption: this.textCombobox}, + {panelId: 'id-adv-control-settings-date', panelCaption: this.textDate}, + {panelId: 'id-adv-control-settings-checkbox',panelCaption: this.textCheckbox} + ], + contentTemplate: _.template(contentTemplate)({ + scope: this + }) }, options); this.handler = options.handler; @@ -222,6 +159,117 @@ define([ labelText: this.txtLockEdit }); + // combobox & dropdown list + this.list = new Common.UI.ListView({ + el: $('#control-settings-list', this.$window), + store: new Common.UI.DataViewStore(), + emptyText: '', + template: _.template(['
'].join('')), + itemTemplate: _.template([ + '
', + '
<%= name %>
', + '
<%= value %>
', + '
' + ].join('')) + }); + this.list.on('item:select', _.bind(this.onSelectItem, this)); + + this.btnAdd = new Common.UI.Button({ + el: $('#control-settings-btn-add') + }); + this.btnAdd.on('click', _.bind(this.onAddItem, this)); + + this.btnChange = new Common.UI.Button({ + el: $('#control-settings-btn-change') + }); + this.btnChange.on('click', _.bind(this.onChangeItem, this)); + + this.btnDelete = new Common.UI.Button({ + el: $('#control-settings-btn-delete') + }); + this.btnDelete.on('click', _.bind(this.onDeleteItem, this)); + + this.btnUp = new Common.UI.Button({ + el: $('#control-settings-btn-up') + }); + this.btnUp.on('click', _.bind(this.onMoveItem, this, true)); + + this.btnDown = new Common.UI.Button({ + el: $('#control-settings-btn-down') + }); + this.btnDown.on('click', _.bind(this.onMoveItem, this, false)); + + // date picker + var data = [{ value: 0x042C }, { value: 0x0402 }, { value: 0x0405 }, { value: 0x0407 }, {value: 0x0807}, { value: 0x0408 }, { value: 0x0C09 }, { value: 0x0809 }, { value: 0x0409 }, { value: 0x0C0A }, { value: 0x080A }, + { value: 0x040B }, { value: 0x040C }, { value: 0x0410 }, { value: 0x0411 }, { value: 0x0412 }, { value: 0x0426 }, { value: 0x0413 }, { value: 0x0415 }, { value: 0x0416 }, + { value: 0x0816 }, { value: 0x0419 }, { value: 0x041B }, { value: 0x0424 }, { value: 0x081D }, { value: 0x041D }, { value: 0x041F }, { value: 0x0422 }, { value: 0x042A }, { value: 0x0804 }]; + data.forEach(function(item) { + var langinfo = Common.util.LanguageInfo.getLocalLanguageName(item.value); + item.displayValue = langinfo[1]; + item.langName = langinfo[0]; + }); + + this.cmbLang = new Common.UI.ComboBox({ + el : $('#control-settings-lang'), + menuStyle : 'min-width: 100%; max-height: 185px;', + cls : 'input-group-nr', + editable : false, + data : data + }); + this.cmbLang.setValue(0x0409); + this.cmbLang.on('selected',function(combo, record) { + me.updateFormats(record.value); + }); + + this.listFormats = new Common.UI.ListView({ + el: $('#control-settings-format'), + store: new Common.UI.DataViewStore(), + scrollAlwaysVisible: true + }); + this.listFormats.on('item:select', _.bind(this.onSelectFormat, this)); + + this.txtDate = new Common.UI.InputField({ + el : $('#control-settings-txt-format'), + allowBlank : true, + validateOnChange: false, + validateOnBlur: false, + style : 'width: 100%;', + value : '' + }); + + // Check Box + this.txtChecked = new Common.UI.InputField({ + el : $('#control-settings-input-checked'), + allowBlank : true, + validateOnChange: false, + validateOnBlur: false, + style : 'width: 30px;', + value : '' + }); + this.txtChecked._input.attr('disabled', true); + this.txtChecked._input.css({'text-align': 'center', 'font-size': '16px'}); + + this.txtUnchecked = new Common.UI.InputField({ + el : $('#control-settings-input-unchecked'), + allowBlank : true, + validateOnChange: false, + validateOnBlur: false, + style : 'width: 30px;', + value : '' + }); + this.txtUnchecked._input.attr('disabled', true); + this.txtUnchecked._input.css({'text-align': 'center', 'font-size': '16px'}); + + this.btnEditChecked = new Common.UI.Button({ + el: $('#control-settings-btn-checked-edit') + }); + this.btnEditChecked.on('click', _.bind(this.onEditCheckbox, this, true)); + + this.btnEditUnchecked = new Common.UI.Button({ + el: $('#control-settings-btn-unchecked-edit') + }); + this.btnEditUnchecked.on('click', _.bind(this.onEditCheckbox, this, false)); + this.afterRender(); }, @@ -252,6 +300,10 @@ define([ afterRender: function() { this.updateThemeColors(); this._setDefaults(this.props); + if (this.storageName) { + var value = Common.localStorage.getItem(this.storageName); + this.setActiveCategory((value!==null) ? parseInt(value) : 0); + } }, show: function() { @@ -286,6 +338,69 @@ define([ (val===undefined) && (val = Asc.c_oAscSdtLockType.Unlocked); this.chLockDelete.setValue(val==Asc.c_oAscSdtLockType.SdtContentLocked || val==Asc.c_oAscSdtLockType.SdtLocked); this.chLockEdit.setValue(val==Asc.c_oAscSdtLockType.SdtContentLocked || val==Asc.c_oAscSdtLockType.ContentLocked); + + var type = props.get_SpecificType(); + + //for list controls + this.btnsCategory[2].setVisible(type == Asc.c_oAscContentControlSpecificType.ComboBox || type == Asc.c_oAscContentControlSpecificType.DropDownList); + if (type == Asc.c_oAscContentControlSpecificType.ComboBox || type == Asc.c_oAscContentControlSpecificType.DropDownList) { + this.btnsCategory[2].setCaption(type == Asc.c_oAscContentControlSpecificType.ComboBox ? this.textCombobox : this.textDropDown); + var specProps = (type == Asc.c_oAscContentControlSpecificType.ComboBox) ? props.get_ComboBoxPr() : props.get_DropDownListPr(); + if (specProps) { + var count = specProps.get_ItemsCount(); + var arr = []; + for (var i=0; istore.length-1) idx = store.length-1; + if (store.length>0) { + this.list.selectByIndex(idx); + this.list.scrollToRecord(store.at(idx)); + } + } + this.disableListButtons(); + this.list.cmpEl.find('.listview').focus(); + }, + + onMoveItem: function(up) { + var store = this.list.store, + length = store.length, + rec = this.list.getSelectedRec(); + if (rec) { + var index = store.indexOf(rec); + store.add(store.remove(rec), {at: up ? Math.max(0, index-1) : Math.min(length-1, index+1)}); + this.list.selectRecord(rec); + this.list.scrollToRecord(rec); + } + this.list.cmpEl.find('.listview').focus(); + }, + + updateFormats: function(lang) { + if (this.datetime) { + var props = this.datetime, + formats = props.get_FormatsExamples(), + arr = []; + for (var i = 0, len = formats.length; i < len; i++) + { + props.get_String(formats[i], undefined, lang); + var rec = new Common.UI.DataViewModel(); + rec.set({ + format: formats[i], + value: props.get_String(formats[i], undefined, lang) + }); + arr.push(rec); + } + this.listFormats.store.reset(arr); + this.listFormats.selectByIndex(0); + var rec = this.listFormats.getSelectedRec(); + this.listFormats.scrollToRecord(rec); + this.txtDate.setValue(rec.get('format')); + } + }, + + onEditCheckbox: function(checked) { + if (this.api) { + var me = this, + props = (checked) ? me.checkedBox : me.uncheckedBox, + cmp = (checked) ? me.txtChecked : me.txtUnchecked, + handler = function(dlg, result, settings) { + if (result == 'ok') { + props.changed = true; + props.code = settings.code; + props.font = settings.font; + props.font && cmp.cmpEl.css('font-family', props.font); + settings.symbol && cmp.setValue(settings.symbol); + } + }, + win = new Common.Views.SymbolTableDialog({ + api: me.api, + lang: me.options.interfaceLang, + modal: true, + type: 0, + font: props.font, + code: props.code, + handler: handler + }); + win.show(); + win.on('symbol:dblclick', handler); + } + }, + + onSelectFormat: function(lisvView, itemView, record) { + if (!record) return; + this.txtDate.setValue(record.get('format')); + }, + textTitle: 'Content Control Settings', textName: 'Title', textTag: 'Tag', @@ -352,7 +641,23 @@ define([ textNewColor: 'Add New Custom Color', textApplyAll: 'Apply to All', textAppearance: 'Appearance', - textSystemColor: 'System' + textSystemColor: 'System', + strGeneral: 'General', + textAdd: 'Add', + textChange: 'Edit', + textDelete: 'Delete', + textUp: 'Up', + textDown: 'Down', + textCombobox: 'Combo box', + textDropDown: 'Drop-down list', + textDisplayName: 'Display name', + textValue: 'Value', + textDate: 'Date format', + textLang: 'Language', + textFormat: 'Display the date like this', + textCheckbox: 'Check box', + textChecked: 'Checked symbol', + textUnchecked: 'Unchecked symbol' }, DE.Views.ControlSettingsDialog || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/EditListItemDialog.js b/apps/documenteditor/main/app/view/EditListItemDialog.js new file mode 100644 index 000000000..56b05eca2 --- /dev/null +++ b/apps/documenteditor/main/app/view/EditListItemDialog.js @@ -0,0 +1,175 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2019 + * + * 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 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * 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 + * + */ + +/** + * EditListItemDialog.js + * + * Created by Julia Radzhabova on 05.11.2019 + * Copyright (c) 2019 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window', + 'common/main/lib/component/InputField' +], function () { 'use strict'; + + DE.Views.EditListItemDialog = Common.UI.Window.extend(_.extend({ + options: { + width: 330, + header: false, + cls: 'modal-dlg', + buttons: ['ok', 'cancel'] + }, + + initialize : function(options) { + _.extend(this.options, options || {}); + + this.template = [ + '
', + '
', + '', + '
', + '
', + '
', + '', + '
', + '
', + '
' + ].join(''); + + this.options.tpl = _.template(this.template)(this.options); + Common.UI.Window.prototype.initialize.call(this, this.options); + }, + + render: function() { + Common.UI.Window.prototype.render.call(this); + + var me = this; + me.inputName = new Common.UI.InputField({ + el : $('#id-dlg-label-name'), + allowBlank : false, + blankError : me.textNameError, + style : 'width: 100%;', + validateOnBlur: false, + validation : function(value) { + return value ? true : ''; + } + }); + me.inputName._input.on('input', function (e) { + if (me.copyvalue==undefined && me.inputValue.getValue()==me.inputName.getValue()) { + me.copyvalue = 1; + } + if (me.copyvalue==1) + me.inputValue.setValue($(e.target).val()); + else if (me.copyvalue==2) + me.copyvalue = 0; + }); + + me.inputValue = new Common.UI.InputField({ + el : $('#id-dlg-label-value'), + style : 'width: 100%;', + validateOnBlur: false, + validation : function(value) { + if (value!=='' && me.options.store) { + var rec = me.options.store.findWhere({value: value}); + if (rec) + return me.textValueError + } + return true; + } + }); + me.inputValue._input.on('input', function (e) { + if (me.copyvalue==undefined && me.inputValue.getValue()==me.inputName.getValue()) { + me.copyvalue = 2; + } + if (me.copyvalue==2) + me.inputName.setValue($(e.target).val()); + else if (me.copyvalue==1) + me.copyvalue = 0; + }); + + var $window = this.getChild(); + $window.find('.btn').on('click', _.bind(this.onBtnClick, this)); + }, + + show: function() { + Common.UI.Window.prototype.show.apply(this, arguments); + + var me = this; + _.delay(function(){ + me.inputName.cmpEl.find('input').focus(); + },50); + }, + + onPrimary: function(event) { + this._handleInput('ok'); + return false; + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + _handleInput: function(state) { + if (this.options.handler) { + if (state == 'ok') { + if (this.inputName.checkValidate() !== true) { + this.inputName.cmpEl.find('input').focus(); + return; + } + if (this.inputValue.checkValidate() !== true) { + this.inputValue.cmpEl.find('input').focus(); + return; + } + } + + this.options.handler.call(this, state, this.inputName.getValue(), this.inputValue.getValue()); + } + + this.close(); + }, + + setSettings: function (props) { + if (props) { + this.inputName.setValue(props.name || ''); + this.inputValue.setValue(props.value || ''); + } + }, + + textDisplayName: 'Display name', + textValue: 'Value', + textNameError: 'Display name must not be empty.', + textValueError: 'An item with the same value already exists.' + }, DE.Views.EditListItemDialog || {})); +}); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/ImageSettings.js b/apps/documenteditor/main/app/view/ImageSettings.js index 527037a2b..d0717940b 100644 --- a/apps/documenteditor/main/app/view/ImageSettings.js +++ b/apps/documenteditor/main/app/view/ImageSettings.js @@ -159,6 +159,10 @@ define([ }); this.lockedControls.push(this.btnFitMargins); + var w = Math.max(this.btnOriginalSize.cmpEl.width(), this.btnFitMargins.cmpEl.width()); + this.btnOriginalSize.cmpEl.width(w); + this.btnFitMargins.cmpEl.width(w); + this.btnInsertFromFile = new Common.UI.Button({ el: $('#image-button-from-file') }); @@ -229,6 +233,7 @@ define([ this.btnFlipH.on('click', _.bind(this.onBtnFlipClick, this)); this.lockedControls.push(this.btnFlipH); + var w = this.btnOriginalSize.cmpEl.outerWidth(); this.btnCrop = new Common.UI.Button({ cls: 'btn-text-split-default', caption: this.textCrop, @@ -236,9 +241,9 @@ define([ enableToggle: true, allowDepress: true, pressed: this._state.cropMode, - width: 100, + width: w, menu : new Common.UI.Menu({ - style : 'min-width: 100px;', + style : 'min-width:' + w + 'px;', items: [ { caption: this.textCrop, diff --git a/apps/documenteditor/main/app/view/ShapeSettings.js b/apps/documenteditor/main/app/view/ShapeSettings.js index 1d227611a..76c98258b 100644 --- a/apps/documenteditor/main/app/view/ShapeSettings.js +++ b/apps/documenteditor/main/app/view/ShapeSettings.js @@ -550,17 +550,16 @@ define([ }); fill.get_fill().put_positions(arr); - if (this.OriginalFillType !== Asc.c_oAscFill.FILL_TYPE_GRAD) { - if (this.GradFillType == Asc.c_oAscFillGradType.GRAD_LINEAR) { - fill.get_fill().put_linear_angle(this.GradLinearDirectionType * 60000); - fill.get_fill().put_linear_scale(true); - } - arr = []; - this.GradColor.colors.forEach(function(item){ - arr.push(Common.Utils.ThemeColor.getRgbColor(item)); - }); - fill.get_fill().put_colors(arr); + if (this.GradFillType == Asc.c_oAscFillGradType.GRAD_LINEAR) { + fill.get_fill().put_linear_angle(this.GradLinearDirectionType * 60000); + fill.get_fill().put_linear_scale(true); } + arr = []; + this.GradColor.colors.forEach(function(item){ + arr.push(Common.Utils.ThemeColor.getRgbColor(item)); + }); + fill.get_fill().put_colors(arr); + props.put_fill(fill); this.imgprops.put_ShapeProperties(props); this.api.ImgApply(this.imgprops); @@ -958,6 +957,10 @@ define([ me.sldrGradient.setColorValue(Common.Utils.String.format('#{0}', (typeof(me.GradColor.colors[index]) == 'object') ? me.GradColor.colors[index].color : me.GradColor.colors[index]), index); me.sldrGradient.setValue(index, me.GradColor.values[index]); } + if (_.isUndefined(me.GradColor.currentIdx) || me.GradColor.currentIdx >= this.GradColor.colors.length) { + me.GradColor.currentIdx = 0; + } + me.sldrGradient.setActiveThumb(me.GradColor.currentIdx); this.OriginalFillType = Asc.c_oAscFill.FILL_TYPE_GRAD; this.FGColor = {Value: 1, Color: this.GradColor.colors[0]}; this.BGColor = {Value: 1, Color: 'ffffff'}; @@ -1357,6 +1360,16 @@ define([ me.GradColor.colors = colors; me.GradColor.currentIdx = currentIdx; }); + this.sldrGradient.on('addthumb', function(cmp, index, nearIndex, color){ + me.GradColor.colors[index] = me.GradColor.colors[nearIndex]; + me.GradColor.currentIdx = index; + me.sldrGradient.addNewThumb(index, color); + }); + this.sldrGradient.on('removethumb', function(cmp, index){ + me.sldrGradient.removeThumb(index); + me.GradColor.values.splice(index, 1); + me.sldrGradient.changeGradientStyle(); + }); this.fillControls.push(this.sldrGradient); this.cmbBorderSize = new Common.UI.ComboBorderSizeEditable({ diff --git a/apps/documenteditor/main/app/view/TextArtSettings.js b/apps/documenteditor/main/app/view/TextArtSettings.js index 4613bf022..89600a6df 100644 --- a/apps/documenteditor/main/app/view/TextArtSettings.js +++ b/apps/documenteditor/main/app/view/TextArtSettings.js @@ -650,6 +650,10 @@ define([ me.sldrGradient.setColorValue(Common.Utils.String.format('#{0}', (typeof(me.GradColor.colors[index]) == 'object') ? me.GradColor.colors[index].color : me.GradColor.colors[index]), index); me.sldrGradient.setValue(index, me.GradColor.values[index]); } + if (_.isUndefined(me.GradColor.currentIdx) || me.GradColor.currentIdx >= this.GradColor.colors.length) { + me.GradColor.currentIdx = 0; + } + me.sldrGradient.setActiveThumb(me.GradColor.currentIdx); this.OriginalFillType = Asc.c_oAscFill.FILL_TYPE_GRAD; this.ShapeColor = {Value: 1, Color: this.GradColor.colors[0]}; } @@ -944,6 +948,16 @@ define([ me.GradColor.colors = colors; me.GradColor.currentIdx = currentIdx; }); + this.sldrGradient.on('addthumb', function(cmp, index, nearIndex, color){ + me.GradColor.colors[index] = me.GradColor.colors[nearIndex]; + me.GradColor.currentIdx = index; + me.sldrGradient.addNewThumb(index, color); + }); + this.sldrGradient.on('removethumb', function(cmp, index){ + me.sldrGradient.removeThumb(index); + me.GradColor.values.splice(index, 1); + me.sldrGradient.changeGradientStyle(); + }); this.lockedControls.push(this.sldrGradient); this.cmbBorderSize = new Common.UI.ComboBorderSizeEditable({ diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index e3746bc6a..ee80a4da9 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -480,7 +480,9 @@ define([ menu: new Common.UI.Menu({ items: [ {template: _.template('
')}, - {caption: this.mniCustomTable, value: 'custom'} + {caption: this.mniCustomTable, value: 'custom'}, + {caption: this.mniDrawTable, value: 'draw', checkable: true}, + {caption: this.mniEraseTable, value: 'erase', checkable: true} ] }) }); @@ -638,18 +640,43 @@ define([ items: [ { caption: this.textPlainControl, - iconCls: 'mnu-control-plain', - value: Asc.c_oAscSdtLevelType.Inline + // iconCls: 'mnu-control-plain', + value: 'plain' }, { caption: this.textRichControl, - iconCls: 'mnu-control-rich', - value: Asc.c_oAscSdtLevelType.Block + // iconCls: 'mnu-control-rich', + value: 'rich' + }, + { + caption: this.textPictureControl, + // iconCls: 'mnu-control-rich', + value: 'picture' + }, + { + caption: this.textComboboxControl, + // iconCls: 'mnu-control-rich', + value: 'combobox' + }, + { + caption: this.textDropdownControl, + // iconCls: 'mnu-control-rich', + value: 'dropdown' + }, + { + caption: this.textDateControl, + // iconCls: 'mnu-control-rich', + value: 'date' + }, + { + caption: this.textCheckboxControl, + // iconCls: 'mnu-control-rich', + value: 'checkbox' }, {caption: '--'}, { caption: this.textRemoveControl, - iconCls: 'mnu-control-remove', + // iconCls: 'mnu-control-remove', value: 'remove' }, {caption: '--'}, @@ -677,7 +704,7 @@ define([ ] }) }); - this.paragraphControls.push(this.btnContentControls); + // this.paragraphControls.push(this.btnContentControls); this.btnColumns = new Common.UI.Button({ id: 'tlbtn-columns', @@ -1674,48 +1701,8 @@ define([ parentMenu: menu, showLast: false, restoreHeight: 421, - groups: new Common.UI.DataViewGroupStore([ - {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-surface', caption: me.textSurface} - ]), - store: new Common.UI.DataViewStore([ - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal, iconCls: 'column-normal'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStacked, iconCls: 'column-stack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStackedPer, iconCls: 'column-pstack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal3d, iconCls: 'column-3d-normal'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStacked3d, iconCls: 'column-3d-stack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barStackedPer3d, iconCls: 'column-3d-pstack'}, - { group: 'menu-chart-group-bar', type: Asc.c_oAscChartTypeSettings.barNormal3dPerspective, iconCls: 'column-3d-normal-per'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineNormal, iconCls: 'line-normal'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineStacked, iconCls: 'line-stack'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.lineStackedPer, iconCls: 'line-pstack'}, - { group: 'menu-chart-group-line', type: Asc.c_oAscChartTypeSettings.line3d, iconCls: 'line-3d'}, - { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.pie, iconCls: 'pie-normal'}, - { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.doughnut, iconCls: 'pie-doughnut'}, - { group: 'menu-chart-group-pie', type: Asc.c_oAscChartTypeSettings.pie3d, iconCls: 'pie-3d-normal'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarNormal, iconCls: 'bar-normal'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStacked, iconCls: 'bar-stack'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStackedPer, iconCls: 'bar-pstack'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarNormal3d, iconCls: 'bar-3d-normal'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStacked3d, iconCls: 'bar-3d-stack'}, - { group: 'menu-chart-group-hbar', type: Asc.c_oAscChartTypeSettings.hBarStackedPer3d, iconCls: 'bar-3d-pstack'}, - { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaNormal, iconCls: 'area-normal'}, - { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStacked, iconCls: 'area-stack'}, - { group: 'menu-chart-group-area', type: Asc.c_oAscChartTypeSettings.areaStackedPer, iconCls: 'area-pstack'}, - { group: 'menu-chart-group-scatter', type: Asc.c_oAscChartTypeSettings.scatter, iconCls: 'point-normal'}, - { group: 'menu-chart-group-stock', type: Asc.c_oAscChartTypeSettings.stock, iconCls: 'stock-normal'} - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.surfaceNormal, iconCls: 'surface-normal'}, - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.surfaceWireframe, iconCls: 'surface-wireframe'}, - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.contourNormal, iconCls: 'contour-normal'}, - // { group: 'menu-chart-group-surface', type: Asc.c_oAscChartTypeSettings.contourWireframe, iconCls: 'contour-wireframe'} - - ]), + groups: new Common.UI.DataViewGroupStore(Common.define.chartData.getChartGroupData(true)), + store: new Common.UI.DataViewStore(Common.define.chartData.getChartData()), itemTemplate: _.template('
') }); picker.on('item:click', function (picker, item, record, e) { @@ -1968,8 +1955,7 @@ define([ this.btnMailRecepients.setVisible(mode.canCoAuthoring == true && mode.canUseMailMerge); this.listStylesAdditionalMenuItem.setVisible(mode.canEditStyles); - this.btnContentControls.menu.items[4].setVisible(mode.canEditContentControl); - this.btnContentControls.menu.items[5].setVisible(mode.canEditContentControl); + this.btnContentControls.menu.items[10].setVisible(mode.canEditContentControl); this.mnuInsertImage.items[2].setVisible(this.mode.canRequestInsertImage || this.mode.fileChoiceUrl && this.mode.fileChoiceUrl.indexOf("{documentType}")>-1); }, @@ -2204,13 +2190,6 @@ define([ textNewColor: 'Add New Custom Color', textAutoColor: 'Automatic', tipInsertChart: 'Insert Chart', - textLine: 'Line', - textColumn: 'Column', - textBar: 'Bar', - textArea: 'Area', - textPie: 'Pie', - textPoint: 'XY (Scatter)', - textStock: 'Stock', tipColorSchemas: 'Change Color Scheme', tipInsertText: 'Insert Text', tipInsertTextArt: 'Insert Text Art', @@ -2278,7 +2257,6 @@ define([ textPortrait: 'Portrait', textLandscape: 'Landscape', textInsertPageCount: 'Insert number of pages', - textCharts: 'Charts', tipChangeChart: 'Change Chart Type', capBtnInsPagebreak: 'Page Break', capBtnInsImage: 'Image', @@ -2311,7 +2289,6 @@ define([ capImgWrapping: 'Wrapping', capBtnComment: 'Comment', textColumnsCustom: 'Custom Columns', - textSurface: 'Surface', textTabCollaboration: 'Collaboration', textTabProtect: 'Protection', textTabLinks: 'References', @@ -2335,9 +2312,16 @@ define([ textEditWatermark: 'Custom Watermark', textRemWatermark: 'Remove Watermark', tipWatermark: 'Edit watermark', + textPictureControl: 'Picture', + textComboboxControl: 'Combo box', + textCheckboxControl: 'Check box', + textDropdownControl: 'Drop-down list', + textDateControl: 'Date', capBtnAddComment: 'Add Comment', capBtnInsSymbol: 'Symbol', - tipInsertSymbol: 'Insert symbol' + tipInsertSymbol: 'Insert symbol', + mniDrawTable: 'Draw table', + mniEraseTable: 'Erase table' } })(), DE.Views.Toolbar || {})); }); diff --git a/apps/documenteditor/main/index.html b/apps/documenteditor/main/index.html index 48fe2d650..b33401e7f 100644 --- a/apps/documenteditor/main/index.html +++ b/apps/documenteditor/main/index.html @@ -18,7 +18,7 @@ width: 100%; overflow: hidden; border: none; - background: #f1f1f1; + background: #e2e2e2; z-index: 1001; } @@ -101,10 +101,10 @@ .loadmask > .placeholder { background: #fbfbfb; - width: 796px; + width: 794px; margin: 46px auto; height: 100%; - border: 1px solid #dfdfdf; + border: 1px solid #bebebe; padding-top: 50px; } @@ -223,10 +223,14 @@