@@ -16,6 +16,7 @@ ngUserControls['maskedit'] = {
16
16
ControlsGroup : 'Core' ,
17
17
18
18
OnInit : function ( ) {
19
+ var ns = this ;
19
20
20
21
/* Class: ngMaskEdit
21
22
* Standard mask edit control (based on <ngToolBar>).
@@ -234,7 +235,7 @@ ngUserControls['maskedit'] = {
234
235
var edits = c . GetParts ( - 1 , true ) ;
235
236
if ( edits . length == 0 ) return ;
236
237
237
- var parts = c . textToParts ( text ) ;
238
+ var parts = ns . TextToParts ( text , c . GetParts ( ) ) ;
238
239
if ( parts . length == 0 ) { edits [ 0 ] . Control . SetText ( text ) ; return ; }
239
240
240
241
var nParts = new Array ( ) ;
@@ -442,52 +443,7 @@ ngUserControls['maskedit'] = {
442
443
if ( typeof ( mask ) === 'undefined' ) return false ;
443
444
c . Mask = mask ;
444
445
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 ) ;
491
447
for ( var i = 0 ; i < parts . regexp . length ; i ++ ) parts . regexp [ i ] = '^' + parts . regexp [ i ] + '$' ;
492
448
493
449
//Vytvoreni komponent
@@ -885,9 +841,11 @@ ngUserControls['maskedit'] = {
885
841
c . IsValid = function ( text , asArray ) {
886
842
asArray = ngVal ( asArray , false ) ;
887
843
888
- var parts = ( ng_typeString ( text ) ? c . textToParts ( text ) : c . GetParts ( ) ) ;
844
+ var parts = c . GetParts ( ) ;
889
845
if ( parts . length == 0 ) return false ;
890
846
847
+ if ( ng_typeString ( text ) ) parts = ns . TextToParts ( text , parts ) ;
848
+
891
849
var result = new Array ( ) ;
892
850
var re , test ;
893
851
for ( var i = 0 ; i < parts . length ; i ++ )
@@ -1066,45 +1024,6 @@ ngUserControls['maskedit'] = {
1066
1024
1067
1025
//===== HELPER METHODS =====
1068
1026
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
-
1108
1027
c . handleEnterLeave = function ( o , e , type ) {
1109
1028
if ( ( typeof ( o ) === 'undefined' ) || ( typeof ( e ) === 'undefined' ) || ( typeof ( type ) === 'undefined' ) ) return false ;
1110
1029
type = type . toLowerCase ( ) ;
@@ -1192,5 +1111,94 @@ ngUserControls['maskedit'] = {
1192
1111
return c ;
1193
1112
} ) ;
1194
1113
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 ;
1195
1203
}
1196
1204
} ;
0 commit comments