[DE] Parse format string

This commit is contained in:
Julia Radzhabova 2022-10-06 23:16:04 +03:00
parent 41221d0bf1
commit c2665ffba4

View file

@ -157,7 +157,12 @@ define([
this.api = options.api; this.api = options.api;
this.options.tpl = _.template(this.template)(this.options); this.options.tpl = _.template(this.template)(this.options);
this.levels = []; this.levels = [];
this.formatStrings = []; this.formatString = {
selectionStart: 0,
selectionEnd: 0,
text: '',
lvlIndexes: []
};
Common.UI.Window.prototype.initialize.call(this, this.options); Common.UI.Window.prototype.initialize.call(this, this.options);
}, },
@ -368,8 +373,9 @@ define([
value : '' value : ''
}); });
var $formatInput = this.txtNumFormat.$el.find('input'); var $formatInput = this.txtNumFormat.$el.find('input');
// $captionInput.on('mouseup', _.bind(this.checkStartPosition, this, 'mouse')); $formatInput.on('mouseup', _.bind(this.checkMousePosition, this));
// $captionInput.on('keydown', _.bind(this.checkStartPosition, this, 'key')); // $formatInput.on('keydown', _.bind(this.checkStartPosition, this));
$formatInput.on('input', _.bind(this.onFormatInput, this));
this.cmbLevel = new Common.UI.ComboBox({ this.cmbLevel = new Common.UI.ComboBox({
el : $window.find('#id-dlg-numbering-format-lvl'), el : $window.find('#id-dlg-numbering-format-lvl'),
@ -648,12 +654,12 @@ define([
makeFormatStr: function(props) { makeFormatStr: function(props) {
var formatStr = ''; var formatStr = '';
this.formatStrings[this.level] = []; this.formatString.lvlIndexes[this.level] = [];
if (props) { if (props) {
if (props.get_Format() !== Asc.c_oAscNumberingFormat.Bullet) { if (props.get_Format() !== Asc.c_oAscNumberingFormat.Bullet) {
var text = props.get_Text(); var text = props.get_Text();
var me = this; var me = this;
var arr = this.formatStrings[this.level]; var arr = this.formatString.lvlIndexes[this.level];
text.forEach(function (item, index) { text.forEach(function (item, index) {
if (item.get_Type() === Asc.c_oAscNumberingLvlTextType.Text) { if (item.get_Type() === Asc.c_oAscNumberingLvlTextType.Text) {
formatStr += item.get_Value().toString(); formatStr += item.get_Value().toString();
@ -669,6 +675,7 @@ define([
}); });
} }
} }
this.formatString.text = formatStr;
this.txtNumFormat.setValue(formatStr); this.txtNumFormat.setValue(formatStr);
}, },
@ -678,7 +685,7 @@ define([
if (this._changedProps) { if (this._changedProps) {
var text = this._changedProps.get_Text(), var text = this._changedProps.get_Text(),
arr = this.formatStrings[this.level]; arr = this.formatString.lvlIndexes[this.level];
for (var i=0; i<arr.length; i++) { for (var i=0; i<arr.length; i++) {
if (arr[i]) { if (arr[i]) {
var item = arr[i]; var item = arr[i];
@ -701,6 +708,52 @@ define([
} }
}, },
posToIndex: function (position) {
if (this._changedProps) {
var arr = this.formatString.lvlIndexes[this.level];
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
var item = arr[i];
if (item.end < position)
position -= (item.end - item.start - 1);
}
}
}
return position;
},
checkMousePosition: function(event) {
var me = this;
setTimeout(function () {
// if (event.target.selectionStart < me.positionCaption + 1) {
// event.target.selectionStart = me.positionCaption;
// }
me.formatString.selectionStart = event.target.selectionStart;
me.formatString.selectionEnd = event.target.selectionEnd;
}, 0);
},
onFormatInput: function(e) {
var newValue = $(e.target).val(),
oldStr = this.formatString.text,
newStr = newValue.slice(this.formatString.selectionStart, newValue.length - (oldStr.length - this.formatString.selectionEnd)),
startIdx = this.posToIndex(this.formatString.selectionStart),
endIdx = this.posToIndex(this.formatString.selectionEnd);
if (this._changedProps) {
var text = this._changedProps.get_Text();
var arr = text.slice(0, startIdx);
newStr.split('').forEach(function(str){
arr.push(new Asc.CAscNumberingLvlText(Asc.c_oAscNumberingLvlTextType.Text, str));
});
arr = arr.concat(text.slice(endIdx, text.length));
this._changedProps.put_Text(arr);
if (this.api) {
this.api.SetDrawImagePreviewBullet('bulleted-list-preview', this.props, this.level, this.type==2);
}
this.makeFormatStr(this._changedProps);
}
},
txtTitle: 'List Settings', txtTitle: 'List Settings',
txtSize: 'Size', txtSize: 'Size',
txtColor: 'Color', txtColor: 'Color',