Skip to content

Commit a76e2fb

Browse files
Updated "ngMaskEdit" control:
- moved parts building from "ngMaskEdit.SetMask" to "ngUserControls['maskedit'].MaskToParts" method - moved "ngMaskEdit.textToParts" method to "ngUserControls['maskedit'].TextToParts"
1 parent 7792255 commit a76e2fb

File tree

1 file changed

+95
-87
lines changed

1 file changed

+95
-87
lines changed

src/ng_controls/ui/maskedit.js

Lines changed: 95 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ ngUserControls['maskedit'] = {
1616
ControlsGroup: 'Core',
1717

1818
OnInit: function() {
19+
var ns = this;
1920

2021
/* Class: ngMaskEdit
2122
* Standard mask edit control (based on <ngToolBar>).
@@ -234,7 +235,7 @@ ngUserControls['maskedit'] = {
234235
var edits = c.GetParts(-1, true);
235236
if (edits.length==0) return;
236237

237-
var parts = c.textToParts(text);
238+
var parts = ns.TextToParts(text,c.GetParts());
238239
if (parts.length==0) { edits[0].Control.SetText(text); return; }
239240

240241
var nParts = new Array();
@@ -442,52 +443,7 @@ ngUserControls['maskedit'] = {
442443
if (typeof(mask)==='undefined') return false;
443444
c.Mask = mask;
444445

445-
mask = mask.split('');
446-
447-
//Zakladni nastaveni
448-
var editChars = new Array('0', '9', 'C', 'X', 'A', 'a', 'Z', 'z', '!', '?');
449-
var metaChars = new Array('\\', '^', '$', '.', '[', ']', '|', '(', ')', '?', '*', '+', '{', '}');
450-
var parts = new Object({ mask: new Array(), type: new Array(), regexp: new Array() });
451-
var regExps = new Object();
452-
453-
regExps['0'] = '[0-9]{1}';
454-
regExps['9'] = '[0-9]?';
455-
456-
regExps['C'] = '[A-Za-z]{1}';
457-
regExps['X'] = '[A-Za-z]?';
458-
459-
regExps['A'] = '[A-Z]{1}';
460-
regExps['a'] = '[a-z]{1}';
461-
regExps['Z'] = '[A-Z]?';
462-
regExps['z'] = '[a-z]?';
463-
464-
regExps['!'] = '.{1}';
465-
regExps['?'] = '.?';
466-
467-
//Parsovani masky
468-
var escapeNext = false;
469-
470-
var part = '';
471-
var lastPart = '';
472-
var lastIdx = 0;
473-
for (var i=0;i<mask.length;i++)
474-
{
475-
if ((mask[i]=='\\') && (!escapeNext)) { escapeNext = true; continue; }
476-
477-
if ((ng_inArray(mask[i], editChars)) && (!escapeNext)) part = 'Edit';
478-
else part = 'Static';
479-
480-
if (lastPart=='') { parts.mask.push(''); parts.type.push(part); parts.regexp.push(''); }
481-
482-
if ((lastPart!='') && (lastPart!=part)) { lastIdx = parts.mask.push('')-1; parts.type.push(part); parts.regexp.push(''); }
483-
parts.mask[lastIdx] += mask[i];
484-
if (part=='Edit') parts.regexp[lastIdx] += regExps[mask[i]];
485-
else parts.regexp[lastIdx] += (!ng_inArray(mask[i], metaChars) ? mask[i] : '\\'+mask[i]);
486-
487-
lastPart = part;
488-
escapeNext = false;
489-
}
490-
446+
var parts = ns.MaskToParts(mask);
491447
for (var i=0;i<parts.regexp.length;i++) parts.regexp[i] = '^' + parts.regexp[i] + '$';
492448

493449
//Vytvoreni komponent
@@ -885,9 +841,11 @@ ngUserControls['maskedit'] = {
885841
c.IsValid = function (text, asArray) {
886842
asArray = ngVal(asArray, false);
887843

888-
var parts = (ng_typeString(text) ? c.textToParts(text) : c.GetParts());
844+
var parts = c.GetParts();
889845
if (parts.length==0) return false;
890846

847+
if(ng_typeString(text)) parts = ns.TextToParts(text,parts);
848+
891849
var result = new Array();
892850
var re, test;
893851
for (var i=0;i<parts.length;i++)
@@ -1066,45 +1024,6 @@ ngUserControls['maskedit'] = {
10661024

10671025
//===== HELPER METHODS =====
10681026

1069-
c.textToParts = function (text) {
1070-
if (typeof(text)==='undefined') return false;
1071-
1072-
var parts = c.GetParts();
1073-
if (parts.length==0) return false;
1074-
1075-
var regExps = new Array();
1076-
1077-
regExps[0] = '';
1078-
for (var i=0;i<parts.length;i++) regExps[0] += '('+parts[i].RegExp.substring(1, parts[i].RegExp.length-1)+')';
1079-
1080-
var regExp;
1081-
for (var i=parts.length-1;i>=0;i-=2)
1082-
{
1083-
regExp = '';
1084-
for (var j=0;j<=i;j++) regExp += (parts[j].Type=='Edit' ? '(.*)' : '('+parts[j].RegExp.substring(1, parts[j].RegExp.length-1)+')');
1085-
1086-
if ((i==parts.length-1) && (parts[i].Type!='Edit')) i++;
1087-
if ((i>0) || (regExp!='(.*)')) regExps.push(regExp);
1088-
}
1089-
1090-
var re, result;
1091-
for (var i=0;i<regExps.length;i++)
1092-
{
1093-
regExps[i] = '^'+regExps[i]+'$';
1094-
1095-
re = new RegExp(regExps[i], 'g');
1096-
result = re.exec(text);
1097-
if (result) break;
1098-
}
1099-
1100-
if (!result) return new Array();
1101-
1102-
result.shift();
1103-
for (var i=0;i<parts.length;i++) parts[i].Text = result[i];
1104-
1105-
return parts;
1106-
}
1107-
11081027
c.handleEnterLeave = function (o, e, type) {
11091028
if ((typeof(o)==='undefined') || (typeof(e)==='undefined') || (typeof(type)==='undefined')) return false;
11101029
type = type.toLowerCase();
@@ -1192,5 +1111,94 @@ ngUserControls['maskedit'] = {
11921111
return c;
11931112
});
11941113

1114+
},
1115+
1116+
MaskToParts: function(mask){
1117+
//Zakladni nastaveni
1118+
var editChars = new Array('0', '9', 'C', 'X', 'A', 'a', 'Z', 'z', '!', '?');
1119+
var metaChars = new Array('\\', '^', '$', '.', '[', ']', '|', '(', ')', '?', '*', '+', '{', '}');
1120+
var parts = new Object({ mask: new Array(), type: new Array(), regexp: new Array() });
1121+
var regExps = new Object();
1122+
1123+
regExps['0'] = '[0-9]{1}';
1124+
regExps['9'] = '[0-9]?';
1125+
1126+
regExps['C'] = '[A-Za-z]{1}';
1127+
regExps['X'] = '[A-Za-z]?';
1128+
1129+
regExps['A'] = '[A-Z]{1}';
1130+
regExps['a'] = '[a-z]{1}';
1131+
regExps['Z'] = '[A-Z]?';
1132+
regExps['z'] = '[a-z]?';
1133+
1134+
regExps['!'] = '.{1}';
1135+
regExps['?'] = '.?';
1136+
1137+
if(ng_typeString(mask)) {
1138+
mask = mask.split('');
1139+
1140+
//Parsovani masky
1141+
var escapeNext = false;
1142+
1143+
var part = '';
1144+
var lastPart = '';
1145+
var lastIdx = 0;
1146+
for (var i=0;i<mask.length;i++)
1147+
{
1148+
if ((mask[i]=='\\') && (!escapeNext)) { escapeNext = true; continue; }
1149+
1150+
if ((ng_inArray(mask[i], editChars)) && (!escapeNext)) part = 'Edit';
1151+
else part = 'Static';
1152+
1153+
if (lastPart=='') { parts.mask.push(''); parts.type.push(part); parts.regexp.push(''); }
1154+
1155+
if ((lastPart!='') && (lastPart!=part)) { lastIdx = parts.mask.push('')-1; parts.type.push(part); parts.regexp.push(''); }
1156+
parts.mask[lastIdx] += mask[i];
1157+
if (part=='Edit') parts.regexp[lastIdx] += regExps[mask[i]];
1158+
else parts.regexp[lastIdx] += (!ng_inArray(mask[i], metaChars) ? mask[i] : '\\'+mask[i]);
1159+
1160+
lastPart = part;
1161+
escapeNext = false;
1162+
}
1163+
}
1164+
1165+
return parts;
1166+
},
1167+
1168+
TextToParts: function (text,parts) {
1169+
if (typeof(text)==='undefined') return false;
1170+
if ((!ng_typeArray(parts)) || (parts.length==0)) return false;
1171+
1172+
var regExps = new Array();
1173+
1174+
regExps[0] = '';
1175+
for (var i=0;i<parts.length;i++) regExps[0] += '('+parts[i].RegExp.substring(1, parts[i].RegExp.length-1)+')';
1176+
1177+
var regExp;
1178+
for (var i=parts.length-1;i>=0;i-=2)
1179+
{
1180+
regExp = '';
1181+
for (var j=0;j<=i;j++) regExp += (parts[j].Type=='Edit' ? '(.*)' : '('+parts[j].RegExp.substring(1, parts[j].RegExp.length-1)+')');
1182+
1183+
if ((i==parts.length-1) && (parts[i].Type!='Edit')) i++;
1184+
if ((i>0) || (regExp!='(.*)')) regExps.push(regExp);
1185+
}
1186+
1187+
var re, result;
1188+
for (var i=0;i<regExps.length;i++)
1189+
{
1190+
regExps[i] = '^'+regExps[i]+'$';
1191+
1192+
re = new RegExp(regExps[i], 'g');
1193+
result = re.exec(text);
1194+
if (result) break;
1195+
}
1196+
1197+
if (!result) return new Array();
1198+
1199+
result.shift();
1200+
for (var i=0;i<parts.length;i++) parts[i].Text = result[i];
1201+
1202+
return parts;
11951203
}
11961204
};

0 commit comments

Comments
 (0)