[DE] Note settings: support start position in different formats.

This commit is contained in:
Julia Radzhabova 2016-12-21 15:40:22 +03:00
parent 59a8fb5867
commit c490430580
2 changed files with 141 additions and 67 deletions

View file

@ -244,6 +244,10 @@ define([
if (this.$input) this.$input.val(value);
},
getRawValue: function () {
return this.$input.val();
},
setValue: function(value, suspendchange) {
var showError = false;
this._fromKeyDown = false;
@ -290,6 +294,10 @@ define([
}
},
setMask: function(value) {
this.options.maskExp = value;
},
onMouseDown: function (type, e) {
if ( this.disabled ) return;
@ -336,7 +344,7 @@ define([
}
} else if (e.keyCode==Common.UI.Keys.RETURN) {
if (this.options.defaultUnit && this.options.defaultUnit.length) {
var value = this.$input.val();
var value = this.getRawValue();
if (this.value != value) {
this.onEnterValue();
return false;
@ -384,7 +392,7 @@ define([
onEnterValue: function() {
if (this.$input) {
var val = this.$input.val();
var val = this.getRawValue();
this.setValue((val==='') ? this.value : val );
this.trigger('entervalue', this);
}
@ -392,7 +400,7 @@ define([
onBlur: function(e){
if (this.$input) {
var val = this.$input.val();
var val = this.getRawValue();
this.setValue((val==='') ? this.value : val );
if (this.options.hold && this.switches.fromKeyDown)
this._stopSpin();
@ -430,7 +438,7 @@ define([
if (!me.readOnly) {
var val = me.options.step;
if (me._fromKeyDown) {
val = this.$input.val();
val = this.getRawValue();
val = _.isEmpty(val) ? me.oldValue : parseFloat(val);
} else if(me.getValue() !== '') {
if (me.options.allowAuto && me.getValue()==me.options.autoText) {
@ -451,7 +459,7 @@ define([
if (!me.readOnly) {
var val = me.options.step;
if (me._fromKeyDown) {
val = this.$input.val();
val = this.getRawValue();
val = _.isEmpty(val) ? me.oldValue : parseFloat(val);
} else if(me.getValue() !== '') {
if (me.options.allowAuto && me.getValue()==me.options.autoText) {
@ -520,4 +528,22 @@ define([
return v_out;
}
});
Common.UI.CustomSpinner = Common.UI.MetricSpinner.extend(_.extend({
initialize : function(options) {
this.options.toCustomFormat = (options.toCustomFormat) ? options.toCustomFormat : function(value) { return value; };
this.options.fromCustomFormat = (options.fromCustomFormat) ? options.fromCustomFormat : function(value) { return value; };
Common.UI.MetricSpinner.prototype.initialize.call(this, options);
},
setRawValue: function (value) {
if (this.$input) this.$input.val(this.options.toCustomFormat(value));
},
getRawValue: function () {
return this.options.fromCustomFormat(this.$input.val());
}
}, Common.UI.CustomSpinner || {}));
});

View file

@ -43,7 +43,6 @@ define([
'common/main/lib/util/utils',
'common/main/lib/component/MetricSpinner',
'common/main/lib/component/ComboBox',
'common/main/lib/component/InputField',
'common/main/lib/view/AdvancedSettingsWindow'
], function () { 'use strict';
@ -95,7 +94,6 @@ define([
'<td class="padding-small">',
'<label class="input-label">', me.textStart,'</label>',
'<div id="note-settings-spin-start"></div>',
// '<div id="note-settings-txt-start"></div>',
'</td>',
'</tr>',
'<tr>',
@ -177,34 +175,19 @@ define([
this.cmbFormat.setValue(this.FormatType);
this.cmbFormat.on('selected', _.bind(this.onFormatSelect, this));
this.spnStart = new Common.UI.MetricSpinner({
// this.spnStart = new Common.UI.MetricSpinner({
this.spnStart = new Common.UI.CustomSpinner({
el: $('#note-settings-spin-start'),
step: 1,
width: 100,
defaultUnit : "",
value: '1',
value: 1,
maxValue: 16383,
minValue: 1
minValue: 1,
allowDecimal: false,
maskExp: /[0-9]/
});
/*
this.txtStart = new Common.UI.InputField({
el : $('#note-settings-txt-start'),
allowBlank : true,
validateOnChange: false,
style : 'width: 100px; vertical-align: middle;',
cls : 'masked-field',
maskExp : /[a-z]/,
value : 'a',
visible: false,
validation : function(value) {
if (this.options.maskExp.test(value)) {
} else
me.txtFieldNum.setValue('');
return true;
}
});
*/
this.cmbNumbering = new Common.UI.ComboBox({
el: $('#note-settings-combo-numbering'),
cls: 'input-group-nr',
@ -260,12 +243,10 @@ define([
val = props.get_NumFormat();
this.cmbFormat.setValue(val);
// this.spnStart.setVisible(val==1);
// this.txtStart.setVisible(val!=1);
this.onFormatSelect(this.cmbFormat, this.cmbFormat.getSelectedRecord());
val = props.get_NumStart();
this.spnStart.setValue(val);
// this.txtStart.setValue(val);
val = props.get_NumRestart();
this.cmbNumbering.setValue(val);
@ -320,44 +301,40 @@ define([
},
onFormatSelect: function(combo, record) {
return;
if (!record) return;
this.spnStart.setVisible(record.value == 1);
this.txtStart.setVisible(record.value != 1);
this.spnStart.setMask(record.maskExp);
if (record.value !== 1)
this.txtStart.setMask(record.maskExp);
var value = 0;
if (this.FormatType == 1) { // from 1,2,3,
this.StartValue = value = this.spnStart.getNumberValue();
if (record.value == 4 || record.value == 5) {
value = this._10toA(value);
this.txtStart.setValue((record.value == 5) ? value.toLocaleLowerCase() : value);
} else if (this.FormatType !== record.value)
this.txtStart.setValue(record.defValue);
} else if (this.FormatType == 4 || this.FormatType == 5) {
if (this.FormatType == 4 && record.value == 5)
this.txtStart.setValue(this.txtStart.getValue().toLocaleLowerCase());
else if (this.FormatType == 5 && record.value == 4)
this.txtStart.setValue(this.txtStart.getValue().toLocaleUpperCase());
else if (record.value == 1) {
value = this._Ato10((record.value == 5) ? this.txtStart.getValue().toLocaleLowerCase() : this.txtStart.getValue());
this.spnStart.setValue(value);
} else if (this.FormatType !== record.value)
this.txtStart.setValue(record.defValue);
} else if (this.FormatType !== record.value){
if (record.value==1)
this.spnStart.setValue(this.StartValue);
else
this.txtStart.setValue(record.defValue);
var me = this;
switch (record.value) {
case 3: // I, II, III, ...
this.spnStart.options.toCustomFormat = this._10toRome;
this.spnStart.options.fromCustomFormat = this._Rometo10;
break;
case 7: // i, ii, iii, ...
this.spnStart.options.toCustomFormat = function(value) { return me._10toRome(value).toLocaleLowerCase(); };
this.spnStart.options.fromCustomFormat = function(value) { return me._Rometo10(value.toLocaleUpperCase()); };
break;
case 4: // A, B, C, ...
this.spnStart.options.toCustomFormat = this._10toS;
this.spnStart.options.fromCustomFormat = this._Sto10;
break;
case 5: // a, b, c, ...
this.spnStart.options.toCustomFormat = function(value) { return me._10toS(value).toLocaleLowerCase(); };
this.spnStart.options.fromCustomFormat = function(value) { return me._Sto10(value.toLocaleUpperCase()); };
break;
default: // 1, 2, 3, ...
this.spnStart.options.toCustomFormat = function(value) { return value; };
this.spnStart.options.fromCustomFormat = function(value) { return value; };
break;
}
this.spnStart.setValue(this.spnStart.getValue());
this.FormatType = record.value;
},
_10toA: function(value) {
_10toS: function(value) {
value = parseInt(value);
var n = Math.ceil(value / 26),
code = String.fromCharCode((value-1) % 26 + "A".charCodeAt(0)) ,
result = '';
@ -368,14 +345,85 @@ define([
return result;
},
_Ato10: function(str) {
if ( (new RegExp('[^' + str.charAt(0) + ']')).test(str) ) return 1;
_Sto10: function(str) {
if ( str.length<1 || (new RegExp('[^' + str.charAt(0) + ']')).test(str) || !/[A-Z]/.test(str)) return 1;
var n = str.length-1,
value = str.charCodeAt(0) - "A".charCodeAt(0) + 1;
value += 26*n;
result = str.charCodeAt(0) - "A".charCodeAt(0) + 1;
result += 26*n;
return value;
return result;
},
_10toRome: function(value) {
value = parseInt(value);
var result = '',
digits = [
['M', 1000],
['CM', 900],
['D', 500],
['CD', 400],
['C', 100],
['XC', 90],
['L', 50],
['XL', 40],
['X', 10],
['IX', 9],
['V', 5],
['IV', 4],
['I', 1]
];
var val = digits[0][1],
div = Math.floor(value / val),
n = 0;
for (var i=0; i<div; i++)
result += digits[n][0];
value -= div * val;
n++;
while (value>0) {
val = digits[n][1];
div = value - val;
if (div>=0) {
result += digits[n][0];
value = div;
} else
n++;
}
return result;
},
_Rometo10: function(str) {
if ( !/[IVXLCDM]/.test(str) || str.length<1 ) return 1;
var digits = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
};
var n = str.length-1,
result = digits[str.charAt(n)],
prev = result;
for (var i=n-1; i>=0; i-- ) {
var val = digits[str.charAt(i)];
if (val<prev) {
if (prev/val>10) return 1;
val *= -1;
}
result += val;
}
return result;
},
textTitle: 'Notes Settings',