diff --git a/apps/common/main/lib/view/AutoCorrectDialog.js b/apps/common/main/lib/view/AutoCorrectDialog.js index f7d348a95..d88681da8 100644 --- a/apps/common/main/lib/view/AutoCorrectDialog.js +++ b/apps/common/main/lib/view/AutoCorrectDialog.js @@ -53,6 +53,9 @@ define([ }, initialize : function(options) { + var filter = Common.localStorage.getKeysFilter(); + this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; + _.extend(this.options, { title: this.textTitle }, options || {}); @@ -79,20 +82,35 @@ define([ '', '', '', - '', - '
', + '', + '
', + '', + '', + '', + '', + '', + '', + '', '', '', '', '', '', + '
', '' ].join(''); this.options.tpl = _.template(this.template)(this.options); - this.props = this.options.props || []; + this.mathStore = this.options.mathStore || []; + this.api = this.options.api; + + var path = this.appPrefix + "settings-math-correct"; + var value = Common.Utils.InternalSettings.get(path + "-add"); + this.arrAdd = value ? JSON.parse(value) : {}; + value = Common.Utils.InternalSettings.get(path + "-rem"); + this.arrRem = value ? JSON.parse(value) : []; Common.UI.Window.prototype.initialize.call(this, this.options); }, @@ -103,16 +121,18 @@ define([ var $window = this.getChild(); var me = this; + this.onResetList(); + // special this.mathList = new Common.UI.ListView({ el: $window.find('#auto-correct-math-list'), - store: new Common.UI.DataViewStore(this.props), + store: this.mathStore, simpleAddMode: true, template: _.template(['
'].join('')), itemTemplate: _.template([ '
', - '
<%= replaced %>
', - '
<%= by %>
', + '
<%= replaced %>
', + '
<%= by %>
', '
' ].join('')), scrollAlwaysVisible: true @@ -125,9 +145,10 @@ define([ validateOnChange : true, validation : function () { return true; } }).on ('changing', function (input, value) { + var _selectedItem; if (value.length) { var store = me.mathList.store; - var _selectedItem = store.find(function(item) { + _selectedItem = store.find(function(item) { if ( item.get('replaced').indexOf(value) == 0) { return true; } @@ -141,6 +162,7 @@ define([ } else { me.mathList.deselectAll(); } + me.updateControls(_selectedItem); }); this.inputReplace.cmpEl.find('input').on('keydown', function(event){ @@ -162,15 +184,52 @@ define([ allowBlank : true, validateOnChange : true, validation : function () { return true; } + }).on ('changing', function (input, value) { + me.updateControls(); }); // this.inputBy.cmpEl.find('input').css('font-size', '13px'); + this.btnReset = new Common.UI.Button({ + el: $('#auto-correct-btn-reset') + }); + this.btnReset.on('click', _.bind(this.onResetList, this, true)); + + this.btnEdit = new Common.UI.Button({ + el: $('#auto-correct-btn-edit') + }); + this.btnEdit.on('click', _.bind(this.onEdit, this, false)); + + this.btnDelete = new Common.UI.Button({ + el: $('#auto-correct-btn-delete') + }); + this.btnDelete.on('click', _.bind(this.onDelete, this, false)); + + this.updateControls(); + $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); }, onSelectMathItem: function(lisvView, itemView, record) { - this.inputReplace.setValue(record.get('replaced')); - this.inputBy.setValue(record.get('by')); + if (record) { + this.inputReplace.setValue(record.get('replaced')); + this.inputBy.setValue(record.get('by')); + } + this.updateControls(record); + }, + + updateControls: function(rec) { + if (!this.mathList) return; + + rec = rec || this.mathList.getSelectedRec(); + if (rec) { + this.btnDelete.setCaption(rec.get('defaultDisabled') ? this.textRestore : this.textDelete); + this.btnEdit.setDisabled(!this.inputBy.getValue() || this.inputBy.getValue() === rec.get('by')); + } else { + this.btnDelete.setCaption(this.textDelete); + this.btnDelete.setCaption(this.textDelete); + } + this.btnDelete.setDisabled(!rec); + this.btnEdit.setCaption(rec ? this.textEdit : this.textAdd); }, show: function() { @@ -190,10 +249,110 @@ define([ return true; }, + onDelete: function() { + var rec = this.mathList.getSelectedRec(); + if (rec) { + if (rec.get('defaultValue')) { + var path = this.appPrefix + "settings-math-correct-rem"; + var disabled = !rec.get('defaultDisabled'); + rec.set('defaultDisabled', disabled); + if (disabled) + this.arrRem.push(rec.get('replaced')); + else + this.arrRem.splice(this.arrRem.indexOf(rec.get('replaced')), 1); + var val = JSON.stringify(this.arrRem); + Common.Utils.InternalSettings.set(path, val); + Common.localStorage.setItem(path, val); + this.btnDelete.setCaption(disabled ? this.textRestore : this.textDelete); + } else { + this.mathStore.remove(rec); + } + this.api.asc_deleteFromAutoCorrectMathSymbols(rec.get('replaced')); + } + }, + + onEdit: function() { + var rec = this.mathList.getSelectedRec(); + if (rec) { + rec.set('by', this.inputBy.getValue()); + } else { + rec = this.mathStore.add({ + replaced: this.inputReplace.getValue(), + by: this.inputBy.getValue(), + defaultDisabled: false + }); + this.mathList.selectRecord(rec); + this.mathList.scrollToRecord(rec); + } + this.arrAdd[rec.get('replaced')] = rec.get('by'); + var path = this.appPrefix + "settings-math-correct-add"; + var val = JSON.stringify(this.arrAdd); + Common.Utils.InternalSettings.set(path, val); + Common.localStorage.setItem(path, val); + this.api.asc_AddOrEditFromAutoCorrectMathSymbols(rec.get('replaced'), rec.get('by')); + }, + + onResetList: function(clear) { + if (this.mathStore.length>0 && !clear) return; + + if (clear) { + // remove storage data + var path = this.appPrefix + "settings-math-correct"; + var val = JSON.stringify([]); + Common.Utils.InternalSettings.set(path + "-add", val); + Common.localStorage.setItem(path + "-add", val); + Common.Utils.InternalSettings.set(path + "-rem", val); + Common.localStorage.setItem(path + "-rem", val); + this.arrAdd = {}; + this.arrRem = []; + } + var arrAdd = this.arrAdd, + arrRem = this.arrRem; + + var arr = (this.api) ? this.api.asc_getAutoCorrectMathSymbols() : [], + data = []; + _.each(arr, function(item, index){ + var itm = { + replaced: item[0], + defaultDisabled: arrRem.indexOf(item[0])>-1 + }; + var by = arrAdd[item[0]]; + if (typeof item[1]=='object') { + itm.defaultValue = ''; + _.each(item[1], function(ch){ + itm.defaultValue += Common.Utils.String.encodeSurrogateChar(ch); + }); + itm.by = by ? by : itm.defaultValue; + } else { + itm.defaultValue = Common.Utils.String.encodeSurrogateChar(item[1]); + itm.by = by ? by : itm.defaultValue; + } + data.push(itm); + by && (arrAdd[item[0]] = undefined); + }); + for(var key in arrAdd){ + if(arrAdd.hasOwnProperty(key) && arrAdd[key]){ + var itm = { + replaced: key, + by: arrAdd[key], + defaultDisabled: false + }; + data.push(itm); + } + } + this.mathStore.reset(data); + this.updateControls(); + }, + textTitle: 'AutoCorrect', textMathCorrect: 'Math AutoCorrect', textReplace: 'Replace:', - textBy: 'By:' + textBy: 'By:', + textReset: 'Reset to default', + textAdd: 'Add', + textEdit: 'Replace', + textDelete: 'Delete', + textRestore: 'Restore' }, Common.Views.AutoCorrectDialog || {})) }); diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index f963fe96d..03d1ea81c 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1054,6 +1054,15 @@ define([ Common.Utils.InternalSettings.set("de-settings-paste-button", parseInt(value)); me.api.asc_setVisiblePasteButton(!!parseInt(value)); + // autocorrection + value = Common.localStorage.getItem("de-settings-math-correct-add"); + Common.Utils.InternalSettings.set("de-settings-math-correct-add", value); + var arrAdd = value ? JSON.parse(value) : {}; + value = Common.localStorage.getItem("de-settings-math-correct-rem"); + Common.Utils.InternalSettings.set("de-settings-math-correct-rem", value); + var arrRem = value ? JSON.parse(value) : []; + me.api.asc_refreshOnStartAutoCorrectMathSymbols(arrRem, arrAdd, true); + if (me.needToUpdateVersion) Common.NotificationCenter.trigger('api:disconnect'); var timer_sl = setInterval(function(){ diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index 2d46a8e45..d89dcf1a6 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -609,25 +609,11 @@ define([ }, autoCorrect: function() { - if (!this._mathCorrect) { - var arr = (this.api) ? this.api.asc_getAutoCorrectMathSymbols() : [], - data = []; - _.each(arr, function(item, index){ - var itm = {replaced: item[0]}; - if (typeof item[1]=='object') { - itm.by = ''; - _.each(item[1], function(ch){ - itm.by += Common.Utils.String.encodeSurrogateChar(ch); - }); - } else { - itm.by = Common.Utils.String.encodeSurrogateChar(item[1]); - } - data.push(itm); - }); - this._mathCorrect = data; - } + if (!this._mathCorrect) + this._mathCorrect = new Common.UI.DataViewStore(); (new Common.Views.AutoCorrectDialog({ - props: this._mathCorrect + mathStore: this._mathCorrect, + api: this.api })).show(); },