Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
8331ff01
Commit
8331ff01
authored
Jun 03, 2014
by
Kartik Visweswaran
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix #3196: Masked input widget revamped to use new plugin
parent
62fdaeec
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
197 additions
and
389 deletions
+197
-389
CHANGELOG.md
framework/CHANGELOG.md
+1
-0
jquery.inputmask.bundle.min.js
framework/assets/jquery.inputmask.bundle.min.js
+105
-0
jquery.maskedinput.js
framework/assets/jquery.maskedinput.js
+0
-338
MaskedInput.php
framework/widgets/MaskedInput.php
+88
-44
MaskedInputAsset.php
framework/widgets/MaskedInputAsset.php
+3
-7
No files found.
framework/CHANGELOG.md
View file @
8331ff01
...
@@ -51,6 +51,7 @@ Yii Framework 2 Change Log
...
@@ -51,6 +51,7 @@ Yii Framework 2 Change Log
-
Enh #3108: Added
`yii\debug\Module::enableDebugLogs`
to disable logging debug logs by default (qiangxue)
-
Enh #3108: Added
`yii\debug\Module::enableDebugLogs`
to disable logging debug logs by default (qiangxue)
-
Enh #3132:
`yii\rbac\PhpManager`
now supports more compact data file format (qiangxue)
-
Enh #3132:
`yii\rbac\PhpManager`
now supports more compact data file format (qiangxue)
-
Enh #3154: Added validation error display for
`GridView`
filters (ivan-kolmychek)
-
Enh #3154: Added validation error display for
`GridView`
filters (ivan-kolmychek)
-
Enh #3196: Masked input upgraded to use jquery.inputmask plugin with more features. (kartik-v)
-
Enh #3222: Added
`useTablePrefix`
option to the model generator for Gii (horizons2)
-
Enh #3222: Added
`useTablePrefix`
option to the model generator for Gii (horizons2)
-
Enh #3230: Added
`yii\filters\AccessControl::user`
to support access control with different actors (qiangxue)
-
Enh #3230: Added
`yii\filters\AccessControl::user`
to support access control with different actors (qiangxue)
-
Enh #3232: Added
`export()`
and
`exportAsString()`
methods to
`yii\helpers\BaseVarDumper`
(klimov-paul)
-
Enh #3232: Added
`export()`
and
`exportAsString()`
methods to
`yii\helpers\BaseVarDumper`
(klimov-paul)
...
...
framework/assets/jquery.inputmask.bundle.min.js
0 → 100644
View file @
8331ff01
/*
Input Mask plugin for jquery
http://github.com/RobinHerbots/jquery.inputmask
Copyright (c) 2010 - 2014 Robin Herbots
Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
Version: 3.0.31
Input Mask plugin for jquery
http://github.com/RobinHerbots/jquery.inputmask
Copyright (c) 2010 - 2014 Robin Herbots
Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
Version: 3.0.31
*/
(
function
(
d
){
if
(
void
0
===
d
.
fn
.
inputmask
){
var
a
=
function
(
a
){
var
d
=
document
.
createElement
(
"input"
);
a
=
"on"
+
a
;
var
f
=
a
in
d
;
f
||
(
d
.
setAttribute
(
a
,
"return;"
),
f
=
"function"
==
typeof
d
[
a
]);
return
f
},
c
=
function
(
a
,
n
,
f
){
return
(
a
=
f
.
aliases
[
a
])?(
a
.
alias
&&
c
(
a
.
alias
,
void
0
,
f
),
d
.
extend
(
!
0
,
f
,
a
),
d
.
extend
(
!
0
,
f
,
n
),
!
0
):
!
1
},
h
=
function
(
a
){
function
c
(
d
){
function
f
(
a
,
d
,
c
,
n
){
this
.
matches
=
[];
this
.
isGroup
=
a
||!
1
;
this
.
isOptional
=
d
||!
1
;
this
.
isQuantifier
=
c
||!
1
;
this
.
isAlternator
=
n
||!
1
;
this
.
quantifier
=
{
min
:
1
,
max
:
1
}}
function
n
(
d
,
f
,
c
){
var
b
=
a
.
definitions
[
f
],
e
=
0
==
d
.
matches
.
length
;
c
=
void
0
!=
c
?
c
:
d
.
matches
.
length
;
if
(
b
&&!
h
){
for
(
var
g
=
b
.
prevalidator
,
k
=
g
?
g
.
length
:
0
,
m
=
1
;
m
<
b
.
cardinality
;
m
++
){
var
p
=
k
>=
m
?
g
[
m
-
1
]:[],
G
=
p
.
validator
,
p
=
p
.
cardinality
;
d
.
matches
.
splice
(
c
++
,
0
,{
fn
:
G
?
"string"
==
typeof
G
?
RegExp
(
G
):
new
function
(){
this
.
test
=
G
}:
/./
,
cardinality
:
p
?
p
:
1
,
optionality
:
d
.
isOptional
,
newBlockMarker
:
e
,
casing
:
b
.
casing
,
def
:
b
.
definitionSymbol
||
f
})}
d
.
matches
.
splice
(
c
++
,
0
,{
fn
:
b
.
validator
?
"string"
==
typeof
b
.
validator
?
RegExp
(
b
.
validator
):
new
function
(){
this
.
test
=
b
.
validator
}:
/./
,
cardinality
:
b
.
cardinality
,
optionality
:
d
.
isOptional
,
newBlockMarker
:
e
,
casing
:
b
.
casing
,
def
:
b
.
definitionSymbol
||
f
})}
else
d
.
matches
.
splice
(
c
++
,
0
,{
fn
:
null
,
cardinality
:
0
,
optionality
:
d
.
isOptional
,
newBlockMarker
:
e
,
casing
:
null
,
def
:
f
}),
h
=!
1
}
for
(
var
b
=
/
(?:[
?*+
]
|
\{[
0-9
\+\*]
+
(?:
,
[
0-9
\+\*]
*
)?\})\??
|
[^
.?*+^${[
]()
|
\\
]+|./g
,
h
=!
1
,
e
=
new
f
,
g
,
p
=
[],
u
=
[];
g
=
b
.
exec
(
d
);)
switch
(
g
=
g
[
0
],
g
.
charAt
(
0
)){
case
a
.
optionalmarker
.
end
:
case
a
.
groupmarker
.
end
:
var
q
=
p
.
pop
();
0
<
p
.
length
?
p
[
p
.
length
-
1
].
matches
.
push
(
q
):
e
.
matches
.
push
(
q
);
break
;
case
a
.
optionalmarker
.
start
:
p
.
push
(
new
f
(
!
1
,
!
0
));
break
;
case
a
.
groupmarker
.
start
:
p
.
push
(
new
f
(
!
0
));
break
;
case
a
.
quantifiermarker
.
start
:
q
=
new
f
(
!
1
,
!
1
,
!
0
);
g
=
g
.
replace
(
/
[
{}
]
/g
,
""
);
var
r
=
g
.
split
(
","
);
g
=
isNaN
(
r
[
0
])?
r
[
0
]:
parseInt
(
r
[
0
]);
r
=
1
==
r
.
length
?
g
:
isNaN
(
r
[
1
])?
r
[
1
]:
parseInt
(
r
[
1
]);
if
(
"*"
==
r
||
"+"
==
r
)
g
=
"*"
==
r
?
0
:
1
;
q
.
quantifier
=
{
min
:
g
,
max
:
r
};
if
(
0
<
p
.
length
){
r
=
p
[
p
.
length
-
1
].
matches
;
g
=
r
.
pop
();
if
(
!
g
.
isGroup
){
var
v
=
new
f
(
!
0
);
v
.
matches
.
push
(
g
);
g
=
v
}
r
.
push
(
g
);
r
.
push
(
q
)}
else
g
=
e
.
matches
.
pop
(),
g
.
isGroup
||
(
v
=
new
f
(
!
0
),
v
.
matches
.
push
(
g
),
g
=
v
),
e
.
matches
.
push
(
g
),
e
.
matches
.
push
(
q
);
break
;
case
a
.
escapeChar
:
h
=!
0
;
break
;
case
a
.
alternatormarker
:
break
;
default
:
0
<
p
.
length
?
n
(
p
[
p
.
length
-
1
],
g
):(
0
<
e
.
matches
.
length
&&
(
q
=
e
.
matches
[
e
.
matches
.
length
-
1
],
q
.
isGroup
&&
(
q
.
isGroup
=!
1
,
n
(
q
,
a
.
groupmarker
.
start
,
0
),
n
(
q
,
a
.
groupmarker
.
end
))),
n
(
e
,
g
))}
0
<
e
.
matches
.
length
&&
u
.
push
(
e
);
return
u
}
function
f
(
f
,
b
){
if
(
a
.
numericInput
&&!
0
!==
a
.
multi
){
f
=
f
.
split
(
""
).
reverse
();
for
(
var
h
=
0
;
h
<
f
.
length
;
h
++
)
f
[
h
]
==
a
.
optionalmarker
.
start
?
f
[
h
]
=
a
.
optionalmarker
.
end
:
f
[
h
]
==
a
.
optionalmarker
.
end
?
f
[
h
]
=
a
.
optionalmarker
.
start
:
f
[
h
]
==
a
.
groupmarker
.
start
?
f
[
h
]
=
a
.
groupmarker
.
end
:
f
[
h
]
==
a
.
groupmarker
.
end
&&
(
f
[
h
]
=
a
.
groupmarker
.
start
);
f
=
f
.
join
(
""
)}
if
(
void
0
!=
f
&&
""
!=
f
){
if
(
0
<
a
.
repeat
||
"*"
==
a
.
repeat
||
"+"
==
a
.
repeat
)
f
=
a
.
groupmarker
.
start
+
f
+
a
.
groupmarker
.
end
+
a
.
quantifiermarker
.
start
+
(
"*"
==
a
.
repeat
?
0
:
"+"
==
a
.
repeat
?
1
:
a
.
repeat
)
+
","
+
a
.
repeat
+
a
.
quantifiermarker
.
end
;
void
0
==
d
.
inputmask
.
masksCache
[
f
]
&&
(
d
.
inputmask
.
masksCache
[
f
]
=
{
mask
:
f
,
maskToken
:
c
(
f
),
validPositions
:{},
_buffer
:
void
0
,
buffer
:
void
0
,
tests
:{},
metadata
:
b
});
return
d
.
extend
(
!
0
,{},
d
.
inputmask
.
masksCache
[
f
])}}
var
b
=
[];
d
.
isFunction
(
a
.
mask
)
&&
(
a
.
mask
=
a
.
mask
.
call
(
this
,
a
));
d
.
isArray
(
a
.
mask
)?
d
.
each
(
a
.
mask
,
function
(
a
,
d
){
void
0
!=
d
.
mask
?
b
.
push
(
f
(
d
.
mask
.
toString
(),
d
)):
b
.
push
(
f
(
d
.
toString
()))}):(
1
==
a
.
mask
.
length
&&!
1
==
a
.
greedy
&&
0
!=
a
.
repeat
&&
(
a
.
placeholder
=
""
),
b
=
void
0
!=
a
.
mask
.
mask
?
f
(
a
.
mask
.
mask
.
toString
(),
a
.
mask
):
f
(
a
.
mask
.
toString
()));
return
b
},
e
=
"function"
===
typeof
ScriptEngineMajorVersion
?
ScriptEngineMajorVersion
():
10
<=
(
new
Function
(
"/*@cc_on return @_jscript_version; @*/"
))(),
b
=
navigator
.
userAgent
,
g
=
null
!==
b
.
match
(
/iphone/i
),
q
=
null
!==
b
.
match
(
/android.*safari.*/i
),
w
=
null
!==
b
.
match
(
/android.*chrome.*/i
),
r
=
null
!==
b
.
match
(
/android.*firefox.*/i
),
I
=
/Kindle/i
.
test
(
b
)
||
/Silk/i
.
test
(
b
)
||
/KFTT/i
.
test
(
b
)
||
/KFOT/i
.
test
(
b
)
||
/KFJWA/i
.
test
(
b
)
||
/KFJWI/i
.
test
(
b
)
||
/KFSOWI/i
.
test
(
b
)
||
/KFTHWA/i
.
test
(
b
)
||
/KFTHWI/i
.
test
(
b
)
||
/KFAPWA/i
.
test
(
b
)
||
/KFAPWI/i
.
test
(
b
),
J
=
a
(
"paste"
)?
"paste"
:
a
(
"input"
)?
"input"
:
"propertychange"
,
v
=
function
(
a
,
c
,
f
){
function
b
(
a
,
d
,
h
){
d
=
d
||
0
;
var
e
=
[],
g
,
t
=
0
,
k
;
do
{
if
(
!
0
===
a
&&
c
.
validPositions
[
t
]){
var
l
=
c
.
validPositions
[
t
];
k
=
l
.
match
;
g
=
l
.
locator
.
slice
();
e
.
push
(
null
==
k
.
fn
?
k
.
def
:
!
0
===
h
?
l
.
input
:
f
.
placeholder
.
charAt
(
t
%
f
.
placeholder
.
length
))}
else
g
=
d
>
t
?
E
(
t
,
g
,
t
-
1
)[
0
]:
m
(
t
,
g
,
t
-
1
),
k
=
g
.
match
,
g
=
g
.
locator
.
slice
(),
e
.
push
(
null
==
k
.
fn
?
k
.
def
:
f
.
placeholder
.
charAt
(
t
%
f
.
placeholder
.
length
));
t
++
}
while
((
void
0
==
K
||
t
-
1
<
K
)
&&
null
!=
k
.
fn
||
null
==
k
.
fn
&&
""
!=
k
.
def
||
d
>=
t
);
e
.
pop
();
return
e
}
function
h
(
a
){
var
d
=
c
;
d
.
buffer
=
void
0
;
d
.
tests
=
{};
!
0
!==
a
&&
(
d
.
_buffer
=
void
0
,
d
.
validPositions
=
{},
d
.
p
=-
1
)}
function
v
(
a
){
var
C
=
c
,
b
=-
1
,
h
=
C
.
validPositions
;
if
(
d
.
isFunction
(
f
.
getLastValidPosition
))
b
=
f
.
getLastValidPosition
.
call
(
s
,
C
,
a
,
f
);
else
{
void
0
==
a
&&
(
a
=-
1
);
var
C
=
b
,
g
;
for
(
g
in
h
){
var
e
=
parseInt
(
g
);
if
(
-
1
==
a
||
null
!=
h
[
e
].
match
.
fn
)
e
<
a
&&
(
C
=
e
),
e
>=
a
&&
(
b
=
e
)}
b
=
1
<
a
-
C
||
b
<
a
?
C
:
b
}
return
b
}
function
k
(
a
,
b
,
h
){
if
(
f
.
insertMode
&&
void
0
!=
c
.
validPositions
[
a
]
&&
void
0
==
h
){
h
=
d
.
extend
(
!
0
,{},
c
.
validPositions
);
var
e
=
v
(),
g
;
for
(
g
=
a
;
g
<=
e
;
g
++
)
delete
c
.
validPositions
[
g
];
c
.
validPositions
[
a
]
=
b
;
b
=!
0
;
for
(
g
=
a
;
g
<=
e
;
g
++
){
a
=
h
[
g
];
if
(
void
0
!=
a
){
var
t
=
null
==
a
.
match
.
fn
?
g
+
1
:
z
(
g
);
b
=
Q
(
t
,
a
.
match
.
def
)?
b
&&!
1
!==
W
(
t
,
a
.
input
,
!
0
,
!
0
):
!
1
}
if
(
!
b
)
break
}
if
(
!
b
)
return
c
.
validPositions
=
d
.
extend
(
!
0
,{},
h
),
!
1
}
else
c
.
validPositions
[
a
]
=
b
;
return
!
0
}
function
m
(
a
,
c
,
d
){
a
=
E
(
a
,
c
,
d
);
var
b
;
for
(
c
=
0
;
c
<
a
.
length
&&
(
b
=
a
[
c
],
!
f
.
greedy
&&
(
!
b
.
match
||!
1
!==
b
.
match
.
optionality
&&!
1
!==
b
.
match
.
newBlockMarker
||!
0
===
b
.
match
.
optionalQuantifier
));
c
++
);
return
b
}
function
H
(
a
){
return
c
.
validPositions
[
a
]?
c
.
validPositions
[
a
].
match
:
E
(
a
)[
0
].
match
}
function
Q
(
a
,
c
){
for
(
var
d
=!
1
,
f
=
E
(
a
),
b
=
0
;
b
<
f
.
length
;
b
++
)
if
(
f
[
b
].
match
&&
f
[
b
].
match
.
def
==
c
){
d
=!
0
;
break
}
return
d
}
function
E
(
a
,
b
,
h
){
function
g
(
c
,
b
,
h
,
e
){
function
C
(
h
,
e
,
n
){
if
(
t
==
a
&&
void
0
==
h
.
matches
)
return
k
.
push
({
match
:
h
,
locator
:
e
.
reverse
()}),
!
0
;
if
(
void
0
!=
h
.
matches
)
if
(
h
.
isGroup
&&!
0
!==
n
){
if
(
h
=
C
(
c
.
matches
[
D
+
1
],
e
))
return
!
0
}
else
if
(
h
.
isOptional
){
var
m
=
h
;
if
(
h
=
g
(
h
,
b
,
e
,
n
))
h
=
k
[
k
.
length
-
1
].
match
,(
h
=
0
==
d
.
inArray
(
h
,
m
.
matches
))
&&
(
l
=!
0
),
t
=
a
}
else
{
if
(
!
h
.
isAlternator
)
if
(
h
.
isQuantifier
&&!
0
!==
n
)
for
(
m
=
h
,
f
.
greedy
=
f
.
greedy
&&!
isNaN
(
m
.
quantifier
.
max
),
n
=
0
<
b
.
length
&&!
0
!==
n
?
b
.
shift
():
0
;
n
<
(
isNaN
(
m
.
quantifier
.
max
)?
n
+
1
:
m
.
quantifier
.
max
)
&&
t
<=
a
;
n
++
){
var
p
=
c
.
matches
[
d
.
inArray
(
m
,
c
.
matches
)
-
1
];
if
(
h
=
C
(
p
,[
n
].
concat
(
e
),
!
0
))
if
(
h
=
k
[
k
.
length
-
1
].
match
,
h
.
optionalQuantifier
=
n
>
m
.
quantifier
.
min
-
1
,
h
=
0
==
d
.
inArray
(
h
,
p
.
matches
))
if
(
n
>
m
.
quantifier
.
min
-
1
){
l
=!
0
;
t
=
a
;
break
}
else
return
!
0
;
else
return
!
0
}
else
if
(
h
=
g
(
h
,
b
,
e
,
n
))
return
!
0
}
else
t
++
}
for
(
var
D
=
0
<
b
.
length
?
b
.
shift
():
0
;
D
<
c
.
matches
.
length
;
D
++
)
if
(
!
0
!==
c
.
matches
[
D
].
isQuantifier
){
var
n
=
C
(
c
.
matches
[
D
],[
D
].
concat
(
h
),
e
);
if
(
n
&&
t
==
a
)
return
n
;
if
(
t
>
a
)
break
}}
var
e
=
c
.
maskToken
,
t
=
b
?
h
:
0
;
h
=
b
||
[
0
];
var
k
=
[],
l
=!
1
;
if
(
void
0
==
b
){
b
=
a
-
1
;
for
(
var
m
;
void
0
==
(
m
=
c
.
validPositions
[
b
])
&&-
1
<
b
;)
b
--
;
if
(
void
0
!=
m
&&-
1
<
b
)
t
=
b
,
h
=
m
.
locator
.
slice
();
else
{
for
(
b
=
a
-
1
;
void
0
==
(
m
=
c
.
tests
[
b
])
&&-
1
<
b
;)
b
--
;
void
0
!=
m
&&-
1
<
b
&&
(
t
=
b
,
h
=
m
[
0
].
locator
.
slice
())}}
for
(
b
=
h
.
shift
();
b
<
e
.
length
&&!
(
g
(
e
[
b
],
h
,[
b
])
&&
t
==
a
||
t
>
a
);
b
++
);(
0
==
k
.
length
||
l
)
&&
k
.
push
({
match
:{
fn
:
null
,
cardinality
:
0
,
optionality
:
!
0
,
casing
:
null
,
def
:
""
},
locator
:[]});
return
c
.
tests
[
a
]
=
k
}
function
A
(){
void
0
==
c
.
_buffer
&&
(
c
.
_buffer
=
b
(
!
1
,
1
));
return
c
.
_buffer
}
function
u
(){
void
0
==
c
.
buffer
&&
(
c
.
buffer
=
b
(
!
0
,
v
(),
!
0
));
return
c
.
buffer
}
function
S
(
a
,
c
){
for
(
var
d
=
u
().
slice
(),
b
=
a
;
b
<
c
;
b
++
)
d
[
b
]
!=
R
(
b
)
&&
d
[
b
]
!=
f
.
skipOptionalPartCharacter
&&
W
(
b
,
d
[
b
],
!
0
,
!
0
)}
function
ha
(
a
,
c
){
switch
(
c
.
casing
){
case
"upper"
:
a
=
a
.
toUpperCase
();
break
;
case
"lower"
:
a
=
a
.
toLowerCase
()}
return
a
}
function
W
(
a
,
b
,
g
,
e
){
function
m
(
a
,
b
,
aa
,
g
){
var
e
=!
1
;
d
.
each
(
E
(
a
),
function
(
C
,
D
){
for
(
var
t
=
D
.
match
,
l
=
b
?
1
:
0
,
m
=
""
,
ia
=
u
(),
p
=
t
.
cardinality
;
p
>
l
;
p
--
)
m
+=
void
0
==
c
.
validPositions
[
a
-
(
p
-
1
)]?
R
(
a
-
(
p
-
1
)):
c
.
validPositions
[
a
-
(
p
-
1
)].
input
;
b
&&
(
m
+=
b
);
e
=
null
!=
t
.
fn
?
t
.
fn
.
test
(
m
,
ia
,
a
,
aa
,
f
):
b
!=
t
.
def
&&
b
!=
f
.
skipOptionalPartCharacter
||
""
==
t
.
def
?
!
1
:{
c
:
t
.
def
,
pos
:
a
};
if
(
!
1
!==
e
){
l
=
void
0
!=
e
.
c
?
e
.
c
:
b
;
l
=
l
==
f
.
skipOptionalPartCharacter
&&
null
===
t
.
fn
?
t
.
def
:
l
;
m
=
a
;
if
(
e
.
refreshFromBuffer
){
m
=
e
.
refreshFromBuffer
;
aa
=!
0
;
!
0
===
m
?(
c
.
validPositions
=
{},
c
.
tests
=
{},
S
(
0
,
u
().
length
)):
S
(
m
.
start
,
m
.
end
);
if
(
void
0
==
e
.
pos
&&
void
0
==
e
.
c
)
return
e
.
pos
=
v
(),
!
1
;
m
=
void
0
!=
e
.
pos
?
e
.
pos
:
a
;
D
=
E
(
m
)[
0
]}
else
!
0
!==
e
&&
e
.
pos
!=
a
&&
(
m
=
e
.
pos
,
S
(
a
,
m
),
D
=
E
(
m
)[
0
]);
0
<
C
&&
h
(
!
0
);
k
(
m
,
d
.
extend
({},
D
,{
input
:
ha
(
l
,
t
)}),
g
)
||
(
e
=!
1
);
return
!
1
}});
return
e
}
g
=!
0
===
g
;
var
t
=
m
(
a
,
b
,
g
,
e
);
if
(
!
g
&&!
1
===
t
){
var
l
=
c
.
validPositions
[
a
];
if
(
l
&&
null
==
l
.
match
.
fn
&&
(
l
.
match
.
def
==
b
||
b
==
f
.
skipOptionalPartCharacter
))
t
=
{
caret
:
z
(
a
)};
else
if
((
f
.
insertMode
||
void
0
==
c
.
validPositions
[
z
(
a
)])
&&!
N
(
a
))
for
(
var
l
=
a
+
1
,
p
=
z
(
a
);
l
<=
p
;
l
++
)
if
(
t
=
m
(
l
,
b
,
g
,
e
),
!
1
!==
t
){
a
=
l
;
break
}}
!
0
===
t
&&
(
t
=
{
pos
:
a
});
return
t
}
function
N
(
a
){
a
=
H
(
a
);
return
null
!=
a
.
fn
?
a
.
fn
:
!
1
}
function
O
(){
var
a
;
K
=
s
.
prop
(
"maxLength"
);
-
1
==
K
&&
(
K
=
void
0
);
if
(
!
1
==
f
.
greedy
){
var
b
;
b
=
v
();
a
=
c
.
validPositions
[
b
];
var
d
=
void
0
!=
a
?
a
.
locator
.
slice
():
void
0
;
for
(
b
+=
1
;
void
0
==
a
||
null
!=
a
.
match
.
fn
||
null
==
a
.
match
.
fn
&&
""
!=
a
.
match
.
def
;
b
++
)
a
=
m
(
b
,
d
,
b
-
1
),
d
=
a
.
locator
.
slice
();
a
=
b
}
else
a
=
u
().
length
;
return
void
0
==
K
||
a
<
K
?
a
:
K
}
function
z
(
a
){
var
c
=
O
();
if
(
a
>=
c
)
return
c
;
for
(;
++
a
<
c
&&!
N
(
a
)
&&
(
!
0
!==
f
.
nojumps
||
f
.
nojumpsThreshold
>
a
););
return
a
}
function
V
(
a
){
if
(
0
>=
a
)
return
0
;
for
(;
0
<--
a
&&!
N
(
a
););
return
a
}
function
B
(
a
,
c
,
b
){
a
.
_valueSet
(
c
.
join
(
""
));
void
0
!=
b
&&
x
(
a
,
b
)}
function
R
(
a
,
c
){
c
=
c
||
H
(
a
);
return
null
==
c
.
fn
?
c
.
def
:
f
.
placeholder
.
charAt
(
a
%
f
.
placeholder
.
length
)}
function
P
(
a
,
b
,
f
,
e
,
g
){
e
=
void
0
!=
e
?
e
.
slice
():
ga
(
a
.
_valueGet
()).
split
(
""
);
h
();
b
&&
a
.
_valueSet
(
""
);
d
.
each
(
e
,
function
(
b
,
h
){
if
(
!
0
===
g
){
var
e
=
c
.
p
,
e
=-
1
==
e
?
e
:
V
(
e
),
k
=-
1
==
e
?
b
:
z
(
e
);
-
1
==
d
.
inArray
(
h
,
A
().
slice
(
e
+
1
,
k
))
&&
Y
.
call
(
a
,
void
0
,
!
0
,
h
.
charCodeAt
(
0
),
!
1
,
f
,
b
)}
else
Y
.
call
(
a
,
void
0
,
!
0
,
h
.
charCodeAt
(
0
),
!
1
,
f
,
b
),
f
=
f
||
0
<
b
&&
b
>
c
.
p
});
b
&&
B
(
a
,
u
(),
d
(
a
).
is
(
":focus"
)?
z
(
v
(
0
)):
void
0
)}
function
$
(
a
){
return
d
.
inputmask
.
escapeRegex
.
call
(
this
,
a
)}
function
ga
(
a
){
return
a
.
replace
(
RegExp
(
"("
+
$
(
A
().
join
(
""
))
+
")*$"
),
""
)}
function
X
(
a
){
var
b
=
u
().
slice
(),
d
,
f
=
v
(),
h
=
{},
e
=
void
0
!=
c
.
validPositions
[
f
]?
c
.
validPositions
[
f
].
locator
.
slice
():
void
0
,
g
;
for
(
d
=
f
+
1
;
d
<
b
.
length
;
d
++
)
g
=
m
(
d
,
e
,
d
-
1
),
e
=
g
.
locator
.
slice
(),
h
[
d
]
=
g
;
for
(
d
=
b
.
length
-
1
;
d
>
f
;
d
--
)
if
(
g
=
h
[
d
].
match
,
g
.
optionality
&&
b
[
d
]
==
R
(
d
,
g
))
b
.
pop
();
else
break
;
B
(
a
,
b
)}
function
ba
(
a
,
b
){
if
(
!
a
.
data
(
"_inputmask"
)
||!
0
!==
b
&&
a
.
hasClass
(
"hasDatepicker"
))
return
a
[
0
].
_valueGet
();
var
h
=
[],
e
=
c
.
validPositions
,
g
;
for
(
g
in
e
)
e
[
g
].
match
&&
null
!=
e
[
g
].
match
.
fn
&&
h
.
push
(
e
[
g
].
input
);
h
=
(
y
?
h
.
reverse
():
h
).
join
(
""
);
e
=
(
y
?
u
().
reverse
():
u
()).
join
(
""
);
return
d
.
isFunction
(
f
.
onUnMask
)?
f
.
onUnMask
.
call
(
a
,
e
,
h
,
f
):
h
}
function
M
(
a
){
!
y
||
"number"
!=
typeof
a
||
f
.
greedy
&&
""
==
f
.
placeholder
||
(
a
=
u
().
length
-
a
);
return
a
}
function
x
(
a
,
c
,
b
){
a
=
a
.
jquery
&&
0
<
a
.
length
?
a
[
0
]:
a
;
if
(
"number"
==
typeof
c
){
c
=
M
(
c
);
b
=
M
(
b
);
b
=
"number"
==
typeof
b
?
b
:
c
;
var
h
=
d
(
a
).
data
(
"_inputmask"
)
||
{};
h
.
caret
=
{
begin
:
c
,
end
:
b
};
d
(
a
).
data
(
"_inputmask"
,
h
);
d
(
a
).
is
(
":visible"
)
&&
(
a
.
scrollLeft
=
a
.
scrollWidth
,
!
1
==
f
.
insertMode
&&
c
==
b
&&
b
++
,
a
.
setSelectionRange
?(
a
.
selectionStart
=
c
,
a
.
selectionEnd
=
b
):
a
.
createTextRange
&&
(
a
=
a
.
createTextRange
(),
a
.
collapse
(
!
0
),
a
.
moveEnd
(
"character"
,
b
),
a
.
moveStart
(
"character"
,
c
),
a
.
select
()))}
else
return
h
=
d
(
a
).
data
(
"_inputmask"
),
!
d
(
a
).
is
(
":visible"
)
&&
h
&&
void
0
!=
h
.
caret
?(
c
=
h
.
caret
.
begin
,
b
=
h
.
caret
.
end
):
a
.
setSelectionRange
?(
c
=
a
.
selectionStart
,
b
=
a
.
selectionEnd
):
document
.
selection
&&
document
.
selection
.
createRange
&&
(
a
=
document
.
selection
.
createRange
(),
c
=
0
-
a
.
duplicate
().
moveStart
(
"character"
,
-
1
E5
),
b
=
c
+
a
.
text
.
length
),
c
=
M
(
c
),
b
=
M
(
b
),{
begin
:
c
,
end
:
b
}}
function
T
(
a
){
if
(
d
.
isFunction
(
f
.
isComplete
))
return
f
.
isComplete
.
call
(
s
,
a
,
f
);
if
(
"*"
!=
f
.
repeat
){
var
c
=!
1
,
b
=
V
(
O
());
if
(
v
()
==
b
)
for
(
var
c
=!
0
,
h
=
0
;
h
<=
b
;
h
++
){
var
e
=
N
(
h
);
if
(
e
&&
(
void
0
==
a
[
h
]
||
a
[
h
]
==
R
(
h
))
||!
e
&&
a
[
h
]
!=
R
(
h
)){
c
=!
1
;
break
}}
return
c
}}
function
ja
(
a
){
a
=
d
.
_data
(
a
).
events
;
d
.
each
(
a
,
function
(
a
,
c
){
d
.
each
(
c
,
function
(
a
,
c
){
if
(
"inputmask"
==
c
.
namespace
&&
"setvalue"
!=
c
.
type
){
var
b
=
c
.
handler
;
c
.
handler
=
function
(
a
){
if
(
this
.
readOnly
||
this
.
disabled
)
a
.
preventDefault
;
else
return
b
.
apply
(
this
,
arguments
)}}})})}
function
ka
(
a
){
function
c
(
a
){
if
(
void
0
==
d
.
valHooks
[
a
]
||!
0
!=
d
.
valHooks
[
a
].
inputmaskpatch
){
var
b
=
d
.
valHooks
[
a
]
&&
d
.
valHooks
[
a
].
get
?
d
.
valHooks
[
a
].
get
:
function
(
a
){
return
a
.
value
},
h
=
d
.
valHooks
[
a
]
&&
d
.
valHooks
[
a
].
set
?
d
.
valHooks
[
a
].
set
:
function
(
a
,
c
){
a
.
value
=
c
;
return
a
};
d
.
valHooks
[
a
]
=
{
get
:
function
(
a
){
var
c
=
d
(
a
);
if
(
c
.
data
(
"_inputmask"
)){
if
(
c
.
data
(
"_inputmask"
).
opts
.
autoUnmask
)
return
c
.
inputmask
(
"unmaskedvalue"
);
a
=
b
(
a
);
c
=
(
c
=
c
.
data
(
"_inputmask"
).
maskset
.
_buffer
)?
c
.
join
(
""
):
""
;
return
a
!=
c
?
a
:
""
}
return
b
(
a
)},
set
:
function
(
a
,
c
){
var
b
=
d
(
a
),
f
=
h
(
a
,
c
);
b
.
data
(
"_inputmask"
)
&&
b
.
triggerHandler
(
"setvalue.inputmask"
);
return
f
},
inputmaskpatch
:
!
0
}}}
var
b
;
Object
.
getOwnPropertyDescriptor
&&
(
b
=
Object
.
getOwnPropertyDescriptor
(
a
,
"value"
));
if
(
b
&&
b
.
get
){
if
(
!
a
.
_valueGet
){
var
h
=
b
.
get
,
f
=
b
.
set
;
a
.
_valueGet
=
function
(){
return
y
?
h
.
call
(
this
).
split
(
""
).
reverse
().
join
(
""
):
h
.
call
(
this
)};
a
.
_valueSet
=
function
(
a
){
f
.
call
(
this
,
y
?
a
.
split
(
""
).
reverse
().
join
(
""
):
a
)};
Object
.
defineProperty
(
a
,
"value"
,{
get
:
function
(){
var
a
=
d
(
this
),
c
=
d
(
this
).
data
(
"_inputmask"
);
return
c
?
c
.
opts
.
autoUnmask
?
a
.
inputmask
(
"unmaskedvalue"
):
h
.
call
(
this
)
!=
A
().
join
(
""
)?
h
.
call
(
this
):
""
:
h
.
call
(
this
)},
set
:
function
(
a
){
f
.
call
(
this
,
a
);
d
(
this
).
triggerHandler
(
"setvalue.inputmask"
)}})}}
else
document
.
__lookupGetter__
&&
a
.
__lookupGetter__
(
"value"
)?
a
.
_valueGet
||
(
h
=
a
.
__lookupGetter__
(
"value"
),
f
=
a
.
__lookupSetter__
(
"value"
),
a
.
_valueGet
=
function
(){
return
y
?
h
.
call
(
this
).
split
(
""
).
reverse
().
join
(
""
):
h
.
call
(
this
)},
a
.
_valueSet
=
function
(
a
){
f
.
call
(
this
,
y
?
a
.
split
(
""
).
reverse
().
join
(
""
):
a
)},
a
.
__defineGetter__
(
"value"
,
function
(){
var
a
=
d
(
this
),
c
=
d
(
this
).
data
(
"_inputmask"
);
return
c
?
c
.
opts
.
autoUnmask
?
a
.
inputmask
(
"unmaskedvalue"
):
h
.
call
(
this
)
!=
A
().
join
(
""
)?
h
.
call
(
this
):
""
:
h
.
call
(
this
)}),
a
.
__defineSetter__
(
"value"
,
function
(
a
){
f
.
call
(
this
,
a
);
d
(
this
).
triggerHandler
(
"setvalue.inputmask"
)})):(
a
.
_valueGet
||
(
a
.
_valueGet
=
function
(){
return
y
?
this
.
value
.
split
(
""
).
reverse
().
join
(
""
):
this
.
value
},
a
.
_valueSet
=
function
(
a
){
this
.
value
=
y
?
a
.
split
(
""
).
reverse
().
join
(
""
):
a
}),
c
(
a
.
type
))}
function
ca
(
a
,
b
,
d
){
if
(
f
.
numericInput
||
y
){
switch
(
b
){
case
f
.
keyCode
.
BACKSPACE
:
b
=
f
.
keyCode
.
DELETE
;
break
;
case
f
.
keyCode
.
DELETE
:
b
=
f
.
keyCode
.
BACKSPACE
}
y
&&
(
a
=
d
.
end
,
d
.
end
=
d
.
begin
,
d
.
begin
=
a
)}
d
.
begin
==
d
.
end
?
b
==
f
.
keyCode
.
BACKSPACE
?
d
.
begin
=
V
(
d
.
begin
):
b
==
f
.
keyCode
.
DELETE
&&
d
.
end
++
:
1
!=
d
.
end
-
d
.
begin
||
f
.
insertMode
||
b
==
f
.
keyCode
.
BACKSPACE
&&
d
.
begin
--
;
a
=
d
.
begin
;
var
e
=
d
.
end
;
for
(
b
=
a
;
a
<
e
;
a
++
)
delete
c
.
validPositions
[
a
];
for
(
a
=
e
;
a
<=
v
();){
var
e
=
c
.
validPositions
[
a
],
g
=
c
.
validPositions
[
b
];
void
0
!=
e
&&
void
0
==
g
?(
Q
(
b
,
e
.
match
.
def
)
&&!
1
!==
W
(
b
,
e
.
input
,
!
0
)
&&
(
delete
c
.
validPositions
[
a
],
a
++
),
b
++
):
a
++
}
for
(
b
=
v
();
0
<
b
&&
(
void
0
==
c
.
validPositions
[
b
]
||
null
==
c
.
validPositions
[
b
].
match
.
fn
);)
delete
c
.
validPositions
[
b
],
b
--
;
h
(
!
0
);
b
=
z
(
-
1
);
v
()
<
b
?
c
.
p
=
b
:
c
.
p
=
d
.
begin
}
function
da
(
a
){
Z
=!
1
;
var
b
=
this
,
e
=
d
(
b
),
k
=
a
.
keyCode
,
m
=
x
(
b
);
k
==
f
.
keyCode
.
BACKSPACE
||
k
==
f
.
keyCode
.
DELETE
||
g
&&
127
==
k
||
a
.
ctrlKey
&&
88
==
k
?(
a
.
preventDefault
(),
88
==
k
&&
(
F
=
u
().
join
(
""
)),
ca
(
b
,
k
,
m
),
B
(
b
,
u
(),
c
.
p
),
b
.
_valueGet
()
==
A
().
join
(
""
)
&&
e
.
trigger
(
"cleared"
),
f
.
showTooltip
&&
e
.
prop
(
"title"
,
c
.
mask
)):
k
==
f
.
keyCode
.
END
||
k
==
f
.
keyCode
.
PAGE_DOWN
?
setTimeout
(
function
(){
var
c
=
z
(
v
());
f
.
insertMode
||
c
!=
O
()
||
a
.
shiftKey
||
c
--
;
x
(
b
,
a
.
shiftKey
?
m
.
begin
:
c
,
c
)},
0
):
k
==
f
.
keyCode
.
HOME
&&!
a
.
shiftKey
||
k
==
f
.
keyCode
.
PAGE_UP
?
x
(
b
,
0
,
a
.
shiftKey
?
m
.
begin
:
0
):
k
==
f
.
keyCode
.
ESCAPE
||
90
==
k
&&
a
.
ctrlKey
?(
P
(
b
,
!
0
,
!
1
,
F
.
split
(
""
)),
e
.
click
()):
k
!=
f
.
keyCode
.
INSERT
||
a
.
shiftKey
||
a
.
ctrlKey
?
!
1
!=
f
.
insertMode
||
a
.
shiftKey
||
(
k
==
f
.
keyCode
.
RIGHT
?
setTimeout
(
function
(){
var
a
=
x
(
b
);
x
(
b
,
a
.
begin
)},
0
):
k
==
f
.
keyCode
.
LEFT
&&
setTimeout
(
function
(){
var
a
=
x
(
b
);
x
(
b
,
a
.
begin
-
1
)},
0
)):(
f
.
insertMode
=!
f
.
insertMode
,
x
(
b
,
f
.
insertMode
||
m
.
begin
!=
O
()?
m
.
begin
:
m
.
begin
-
1
));
var
e
=
x
(
b
),
l
=
f
.
onKeyDown
.
call
(
this
,
a
,
u
(),
f
);
l
&&!
0
===
l
.
refreshFromBuffer
&&
(
c
.
validPositions
=
{},
c
.
tests
=
{},
S
(
0
,
u
().
length
),
h
(
!
0
),
B
(
b
,
u
()),
x
(
b
,
e
.
begin
,
e
.
end
));
ea
=-
1
!=
d
.
inArray
(
k
,
f
.
ignorables
)}
function
Y
(
a
,
b
,
e
,
g
,
l
,
p
){
if
(
void
0
==
e
&&
Z
)
return
!
1
;
Z
=!
0
;
var
Q
=
d
(
this
);
a
=
a
||
window
.
event
;
e
=
b
?
e
:
a
.
which
||
a
.
charCode
||
a
.
keyCode
;
if
(
!
(
!
0
===
b
||
a
.
ctrlKey
&&
a
.
altKey
)
&&
(
a
.
ctrlKey
||
a
.
metaKey
||
ea
))
return
!
0
;
if
(
e
){
!
0
!==
b
&&
46
==
e
&&!
1
==
a
.
shiftKey
&&
","
==
f
.
radixPoint
&&
(
e
=
44
);
var
H
;
e
=
String
.
fromCharCode
(
e
);
b
?(
p
=
l
?
p
:
v
()
+
1
,
p
=
{
begin
:
p
,
end
:
p
}):
p
=
x
(
this
);
var
q
=
y
?
1
<
p
.
begin
-
p
.
end
||
1
==
p
.
begin
-
p
.
end
&&
f
.
insertMode
:
1
<
p
.
end
-
p
.
begin
||
1
==
p
.
end
-
p
.
begin
&&
f
.
insertMode
;
q
&&
(
c
.
undoPositions
=
d
.
extend
(
!
0
,{},
c
.
validPositions
),
ca
(
this
,
f
.
keyCode
.
DELETE
,
p
),
f
.
insertMode
||
(
f
.
insertMode
=!
f
.
insertMode
,
k
(
p
.
begin
,
l
),
f
.
insertMode
=!
f
.
insertMode
),
q
=!
f
.
multi
);
c
.
writeOutBuffer
=!
0
;
var
r
=
p
.
begin
,
s
=
W
(
r
,
e
,
l
);
!
1
!==
s
&&
(
!
0
!==
s
&&
(
r
=
void
0
!=
s
.
pos
?
s
.
pos
:
r
,
e
=
void
0
!=
s
.
c
?
s
.
c
:
e
),
h
(
!
0
),
void
0
!=
s
.
caret
?
H
=
s
.
caret
:(
l
=
c
.
validPositions
,
H
=
void
0
!=
l
[
r
+
1
]
&&
m
(
p
+
1
,
l
[
r
].
locator
.
slice
(),
r
).
match
.
def
!=
l
[
r
+
1
].
match
.
def
?
r
+
1
:
z
(
r
)),
c
.
p
=
H
);
if
(
!
1
!==
g
){
var
A
=
this
;
setTimeout
(
function
(){
f
.
onKeyValidation
.
call
(
A
,
s
,
f
)},
0
);
if
(
c
.
writeOutBuffer
&&!
1
!==
s
){
var
E
=
u
();
B
(
this
,
E
,
b
?
void
0
:
f
.
numericInput
?
V
(
H
):
H
);
!
0
!==
b
&&
setTimeout
(
function
(){
!
0
===
T
(
E
)
&&
Q
.
trigger
(
"complete"
);
U
=!
0
;
Q
.
trigger
(
"input"
)},
0
)}
else
q
&&
(
c
.
buffer
=
void
0
,
c
.
validPositions
=
c
.
undoPositions
)}
else
q
&&
(
c
.
buffer
=
void
0
,
c
.
validPositions
=
c
.
undoPositions
);
f
.
showTooltip
&&
Q
.
prop
(
"title"
,
c
.
mask
);
a
&&!
0
!=
b
&&
(
a
.
preventDefault
?
a
.
preventDefault
():
a
.
returnValue
=!
1
)}}
function
la
(
a
){
var
b
=
d
(
this
),
e
=
a
.
keyCode
,
g
=
u
();(
a
=
f
.
onKeyUp
.
call
(
this
,
a
,
g
,
f
))
&&!
0
===
a
.
refreshFromBuffer
&&
(
c
.
validPositions
=
{},
c
.
tests
=
{},
S
(
0
,
u
().
length
),
h
(
!
0
),
B
(
this
,
u
()));
e
==
f
.
keyCode
.
TAB
&&
f
.
showMaskOnFocus
&&
(
b
.
hasClass
(
"focus.inputmask"
)
&&
0
==
this
.
_valueGet
().
length
?(
h
(),
g
=
u
(),
B
(
this
,
g
),
x
(
this
,
0
),
F
=
u
().
join
(
""
)):(
B
(
this
,
g
),
x
(
this
,
M
(
0
),
M
(
O
()))))}
function
fa
(
a
){
if
(
!
0
===
U
&&
"input"
==
a
.
type
)
return
U
=!
1
,
!
0
;
var
b
=
this
,
c
=
d
(
b
);
if
(
"propertychange"
==
a
.
type
&&
b
.
_valueGet
().
length
<=
O
())
return
!
0
;
setTimeout
(
function
(){
var
a
=
d
.
isFunction
(
f
.
onBeforePaste
)?
f
.
onBeforePaste
.
call
(
b
,
b
.
_valueGet
(),
f
):
b
.
_valueGet
();
P
(
b
,
!
0
,
!
1
,
a
.
split
(
""
),
!
0
);
!
0
===
T
(
u
())
&&
c
.
trigger
(
"complete"
);
c
.
click
()},
0
)}
function
ma
(
a
){
if
(
!
0
===
U
&&
"input"
==
a
.
type
)
return
U
=!
1
,
!
0
;
var
b
=
x
(
this
),
c
=
this
.
_valueGet
(),
c
=
c
.
replace
(
RegExp
(
"("
+
$
(
A
().
join
(
""
))
+
")*"
),
""
);
b
.
begin
>
c
.
length
&&
(
x
(
this
,
c
.
length
),
b
=
x
(
this
));
1
!=
u
().
length
-
c
.
length
||
c
.
charAt
(
b
.
begin
)
==
u
()[
b
.
begin
]
||
c
.
charAt
(
b
.
begin
+
1
)
==
u
()[
b
.
begin
]
||
N
(
b
.
begin
)
||
(
a
.
keyCode
=
f
.
keyCode
.
BACKSPACE
,
da
.
call
(
this
,
a
));
a
.
preventDefault
()}
function
na
(
a
){
s
=
d
(
a
);
if
(
s
.
is
(
":input"
)){
s
.
data
(
"_inputmask"
,{
maskset
:
c
,
opts
:
f
,
isRTL
:
!
1
});
f
.
showTooltip
&&
s
.
prop
(
"title"
,
c
.
mask
);
ka
(
a
);(
"rtl"
==
a
.
dir
||
f
.
rightAlign
)
&&
s
.
css
(
"text-align"
,
"right"
);
if
(
"rtl"
==
a
.
dir
||
f
.
numericInput
){
a
.
dir
=
"ltr"
;
s
.
removeAttr
(
"dir"
);
var
b
=
s
.
data
(
"_inputmask"
);
b
.
isRTL
=!
0
;
s
.
data
(
"_inputmask"
,
b
);
y
=!
0
}
s
.
unbind
(
".inputmask"
);
s
.
removeClass
(
"focus.inputmask"
);
s
.
closest
(
"form"
).
bind
(
"submit"
,
function
(){
F
!=
u
().
join
(
""
)
&&
s
.
change
()}).
bind
(
"reset"
,
function
(){
setTimeout
(
function
(){
s
.
trigger
(
"setvalue"
)},
0
)});
s
.
bind
(
"mouseenter.inputmask"
,
function
(){
!
d
(
this
).
hasClass
(
"focus.inputmask"
)
&&
f
.
showMaskOnHover
&&
this
.
_valueGet
()
!=
u
().
join
(
""
)
&&
B
(
this
,
u
())}).
bind
(
"blur.inputmask"
,
function
(){
var
a
=
d
(
this
);
if
(
a
.
data
(
"_inputmask"
)){
var
b
=
this
.
_valueGet
(),
c
=
u
();
a
.
removeClass
(
"focus.inputmask"
);
F
!=
u
().
join
(
""
)
&&
a
.
change
();
f
.
clearMaskOnLostFocus
&&
""
!=
b
&&
(
b
==
A
().
join
(
""
)?
this
.
_valueSet
(
""
):
X
(
this
));
!
1
===
T
(
c
)
&&
(
a
.
trigger
(
"incomplete"
),
f
.
clearIncomplete
&&
(
h
(),
f
.
clearMaskOnLostFocus
?
this
.
_valueSet
(
""
):(
c
=
A
().
slice
(),
B
(
this
,
c
))))}}).
bind
(
"focus.inputmask"
,
function
(){
var
a
=
d
(
this
),
b
=
this
.
_valueGet
();
f
.
showMaskOnFocus
&&!
a
.
hasClass
(
"focus.inputmask"
)
&&
(
!
f
.
showMaskOnHover
||
f
.
showMaskOnHover
&&
""
==
b
)
&&
this
.
_valueGet
()
!=
u
().
join
(
""
)
&&
B
(
this
,
u
(),
z
(
v
()));
a
.
addClass
(
"focus.inputmask"
);
F
=
u
().
join
(
""
)}).
bind
(
"mouseleave.inputmask"
,
function
(){
var
a
=
d
(
this
);
f
.
clearMaskOnLostFocus
&&
(
a
.
hasClass
(
"focus.inputmask"
)
||
this
.
_valueGet
()
==
a
.
attr
(
"placeholder"
)
||
(
this
.
_valueGet
()
==
A
().
join
(
""
)
||
""
==
this
.
_valueGet
()?
this
.
_valueSet
(
""
):
X
(
this
)))}).
bind
(
"click.inputmask"
,
function
(){
var
a
=
this
;
setTimeout
(
function
(){
var
b
=
x
(
a
);
u
();
if
(
b
.
begin
==
b
.
end
){
var
b
=
y
?
M
(
b
.
begin
):
b
.
begin
,
c
=
v
(
b
),
c
=
z
(
c
);
b
<
c
?
N
(
b
)?
x
(
a
,
b
):
x
(
a
,
z
(
b
)):
x
(
a
,
c
)}},
0
)}).
bind
(
"dblclick.inputmask"
,
function
(){
var
a
=
this
;
setTimeout
(
function
(){
x
(
a
,
0
,
z
(
v
()))},
0
)}).
bind
(
J
+
".inputmask dragdrop.inputmask drop.inputmask"
,
fa
).
bind
(
"setvalue.inputmask"
,
function
(){
P
(
this
,
!
0
);
F
=
u
().
join
(
""
);
this
.
_valueGet
()
==
A
().
join
(
""
)
&&
this
.
_valueSet
(
""
)}).
bind
(
"complete.inputmask"
,
f
.
oncomplete
).
bind
(
"incomplete.inputmask"
,
f
.
onincomplete
).
bind
(
"cleared.inputmask"
,
f
.
oncleared
);
s
.
bind
(
"keydown.inputmask"
,
da
).
bind
(
"keypress.inputmask"
,
Y
).
bind
(
"keyup.inputmask"
,
la
);
if
(
q
||
r
||
w
||
I
)
"input"
==
J
&&
s
.
unbind
(
J
+
".inputmask"
),
s
.
bind
(
"input.inputmask"
,
ma
);
e
&&
s
.
bind
(
"input.inputmask"
,
fa
);
b
=
d
.
isFunction
(
f
.
onBeforeMask
)?
f
.
onBeforeMask
.
call
(
a
,
a
.
_valueGet
(),
f
):
a
.
_valueGet
();
P
(
a
,
!
0
,
!
1
,
b
.
split
(
""
),
!
0
);
F
=
u
().
join
(
""
);
var
g
;
try
{
g
=
document
.
activeElement
}
catch
(
k
){}
g
===
a
?(
s
.
addClass
(
"focus.inputmask"
),
x
(
a
,
z
(
v
()))):
f
.
clearMaskOnLostFocus
?
u
().
join
(
""
)
==
A
().
join
(
""
)?
a
.
_valueSet
(
""
):
X
(
a
):
B
(
a
,
u
());
ja
(
a
)}}
var
y
=!
1
,
F
,
s
,
Z
=!
1
,
U
=!
1
,
ea
=!
1
,
K
;
if
(
void
0
!=
a
)
switch
(
a
.
action
){
case
"isComplete"
:
return
s
=
d
(
a
.
el
),
c
=
s
.
data
(
"_inputmask"
).
maskset
,
f
=
s
.
data
(
"_inputmask"
).
opts
,
T
(
a
.
buffer
);
case
"unmaskedvalue"
:
return
s
=
a
.
$input
,
c
=
s
.
data
(
"_inputmask"
).
maskset
,
f
=
s
.
data
(
"_inputmask"
).
opts
,
y
=
a
.
$input
.
data
(
"_inputmask"
).
isRTL
,
ba
(
a
.
$input
,
a
.
skipDatepickerCheck
);
case
"mask"
:
F
=
u
().
join
(
""
);
na
(
a
.
el
);
break
;
case
"format"
:
s
=
d
({});
s
.
data
(
"_inputmask"
,{
maskset
:
c
,
opts
:
f
,
isRTL
:
f
.
numericInput
});
f
.
numericInput
&&
(
y
=!
0
);
var
L
=
a
.
value
.
split
(
""
);
P
(
s
,
!
1
,
!
1
,
y
?
L
.
reverse
():
L
,
!
0
);
return
y
?
u
().
reverse
().
join
(
""
):
u
().
join
(
""
);
case
"isValid"
:
return
s
=
d
({}),
s
.
data
(
"_inputmask"
,{
maskset
:
c
,
opts
:
f
,
isRTL
:
f
.
numericInput
}),
f
.
numericInput
&&
(
y
=!
0
),
L
=
a
.
value
.
split
(
""
),
P
(
s
,
!
1
,
!
0
,
y
?
L
.
reverse
():
L
),
T
(
u
());
case
"getemptymask"
:
return
s
=
d
(
a
.
el
),
c
=
s
.
data
(
"_inputmask"
).
maskset
,
f
=
s
.
data
(
"_inputmask"
).
opts
,
A
();
case
"remove"
:
a
=
a
.
el
;
s
=
d
(
a
);
c
=
s
.
data
(
"_inputmask"
).
maskset
;
f
=
s
.
data
(
"_inputmask"
).
opts
;
a
.
_valueSet
(
ba
(
s
));
s
.
unbind
(
".inputmask"
);
s
.
removeClass
(
"focus.inputmask"
);
s
.
removeData
(
"_inputmask"
);
Object
.
getOwnPropertyDescriptor
&&
(
L
=
Object
.
getOwnPropertyDescriptor
(
a
,
"value"
));
L
&&
L
.
get
?
a
.
_valueGet
&&
Object
.
defineProperty
(
a
,
"value"
,{
get
:
a
.
_valueGet
,
set
:
a
.
_valueSet
}):
document
.
__lookupGetter__
&&
a
.
__lookupGetter__
(
"value"
)
&&
a
.
_valueGet
&&
(
a
.
__defineGetter__
(
"value"
,
a
.
_valueGet
),
a
.
__defineSetter__
(
"value"
,
a
.
_valueSet
));
try
{
delete
a
.
_valueGet
,
delete
a
.
_valueSet
}
catch
(
pa
){
a
.
_valueGet
=
void
0
,
a
.
_valueSet
=
void
0
}}};
d
.
inputmask
=
{
defaults
:{
placeholder
:
"_"
,
optionalmarker
:{
start
:
"["
,
end
:
"]"
},
quantifiermarker
:{
start
:
"{"
,
end
:
"}"
},
groupmarker
:{
start
:
"("
,
end
:
")"
},
alternatormarker
:
"|"
,
escapeChar
:
"
\
\"
,mask:null,oncomplete:d.noop,onincomplete:d.noop,oncleared:d.noop,repeat:0,greedy:!0,autoUnmask:!1,clearMaskOnLostFocus:!0,insertMode:!0,clearIncomplete:!1,aliases:{},onKeyUp:d.noop,onKeyDown:d.noop,onBeforeMask:void 0,onBeforePaste:void 0,onUnMask:void 0,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:d.noop,skipOptionalPartCharacter:"
",showTooltip:!1,numericInput:!1,getLastValidPosition:void 0,rightAlign:!1,radixPoint:"",
definitions:{9:{validator:"
[
0
-
9
]
",cardinality:1,definitionSymbol:"
*
"},a:{validator:"
[
A
-
Za
-
z
\
u0410
-
\
u044f
\
u0401
\
u0451
]
",cardinality:1,definitionSymbol:"
*
"},"
*
":{validator:"
[
A
-
Za
-
z
\
u0410
-
\
u044f
\
u0401
\
u04510
-
9
]
",cardinality:1}},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,
PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91},ignorables:[8,9,13,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123],isComplete:void 0},masksCache:{},escapeRegex:function(a){return a.replace(RegExp("
(
\\
/|
\\
.
|
\\
*|
\\
+|
\\
?
|
\\
||
\\
(
|
\\
)
|
\\
[
|
\\
]
|
\\
{
|
\\
}
|
\\\\
)
","
gim
"),"
\\
$1
")},format:function(a,b){var f=d.extend(!0,{},d.inputmask.defaults,b);c(f.alias,b,f);return v({action:"
format
",value:a},h(f),f)},isValid:function(a,b){var f=d.extend(!0,
{},d.inputmask.defaults,b);c(f.alias,b,f);return v({action:"
isValid
",value:a},h(f),f)}};d.fn.inputmask=function(a,b,f,e,g){function q(a,b){var c=d(a),h;for(h in b){var f=c.data("
inputmask
-
"+h.toLowerCase());void 0!=f&&(b[h]=f)}return b}f=f||v;e=e||"
_inputmask
";var k=d.extend(!0,{},d.inputmask.defaults,b),m;if("
string
"===typeof a)switch(a){case "
mask
":return c(k.alias,b,k),m=h(k),0==m.length?this:this.each(function(){f({action:"
mask
",el:this},d.extend(!0,{},m),q(this,k))});case "
unmaskedvalue
":return a=
d(this),a.data(e)?f({action:"
unmaskedvalue
",$input:a}):a.val();case "
remove
":return this.each(function(){d(this).data(e)&&f({action:"
remove
",el:this})});case "
getemptymask
":return this.data(e)?f({action:"
getemptymask
",el:this}):"";case "
hasMaskedValue
":return this.data(e)?!this.data(e).opts.autoUnmask:!1;case "
isComplete
":return this.data(e)?f({action:"
isComplete
",buffer:this[0]._valueGet().split(""),el:this}):!0;case "
getmetadata
":if(this.data(e))return m=this.data(e).maskset,m.metadata;break;case "
_detectScope
":return c(k.alias,
b,k),void 0==g||c(g,b,k)||-1!=d.inArray(g,"
mask
unmaskedvalue
remove
getemptymask
hasMaskedValue
isComplete
getmetadata
_detectScope
".split("
"))||(k.mask=g),d.isFunction(k.mask)&&(k.mask=k.mask.call(this,k)),d.isArray(k.mask);default:return c(a,b,k)||(k.mask=a),m=h(k),void 0==m?this:this.each(function(){f({action:"
mask
",el:this},d.extend(!0,{},m),q(this,k))})}else{if("
object
"==typeof a)return k=d.extend(!0,{},d.inputmask.defaults,a),c(k.alias,a,k),m=h(k),void 0==m?this:this.each(function(){f({action:"
mask
",
el:this},d.extend(!0,{},m),q(this,k))});if(void 0==a)return this.each(function(){var a=d(this).attr("
data
-
inputmask
");if(a&&""!=a)try{var a=a.replace(RegExp("
'","g"),'
"'),h=d.parseJSON("
{
"+a+"
}
");d.extend(!0,h,b);k=d.extend(!0,{},d.inputmask.defaults,h);c(k.alias,h,k);k.alias=void 0;d(this).inputmask("
mask
",k,f)}catch(e){}})}}}})(jQuery);
(function(d){if(void 0!=d.fn.inputmask){var a=function(a,h,e){function b(a){var b=document.createElement("
input
");a="
on
"+a;var c=a in b;c||(b.setAttribute(a,"
return
;
"),c="
function
"==typeof b[a]);return c}function g(a){if(void 0==d.valHooks[a]||!0!=d.valHooks[a].inputmaskmultipatch){var b=d.valHooks[a]&&d.valHooks[a].get?d.valHooks[a].get:function(a){return a.value},c=d.valHooks[a]&&d.valHooks[a].set?d.valHooks[a].set:function(a,b){a.value=b;return a};d.valHooks[a]={get:function(a){var c=d(a);return c.data("
_inputmask
-
multi
")?
(a=c.data("
_inputmask
-
multi
"),b(a.elmasks[a.activeMasksetIndex])):b(a)},set:function(a,b){var h=d(a),f=c(a,b);h.data("
_inputmask
-
multi
")&&h.triggerHandler("
setvalue
");return f},inputmaskmultipatch:!0}}}function q(a,b,c){a=a.jquery&&0<a.length?a[0]:a;if("
number
"==typeof b){b=w(b);c=w(c);c="
number
"==typeof c?c:b;if(a!=l){var h=d(a).data("
_inputmask
")||{};h.caret={begin:b,end:c};d(a).data("
_inputmask
",h)}d(a).is("
:
visible
")&&(a.scrollLeft=a.scrollWidth,!1==e.insertMode&&b==c&&c++,a.setSelectionRange?
(a.selectionStart=b,a.selectionEnd=c):a.createTextRange&&(a=a.createTextRange(),a.collapse(!0),a.moveEnd("
character
",c),a.moveStart("
character
",b),a.select()))}else return h=d(a).data("
_inputmask
"),!d(a).is("
:
visible
")&&h&&void 0!=h.caret?(b=h.caret.begin,c=h.caret.end):a.setSelectionRange?(b=a.selectionStart,c=a.selectionEnd):document.selection&&document.selection.createRange&&(a=document.selection.createRange(),b=0-a.duplicate().moveStart("
character
",-1E5),c=b+a.text.length),b=w(b),c=w(c),{begin:b,
end:c}}function w(a){!v||"
number
"!=typeof a||e.greedy&&""==e.placeholder||(a=l.value.length-a);return a}function r(a,b){if("
multiMaskScope
"!=a){if(d.isFunction(e.determineActiveMasksetIndex))p=e.determineActiveMasksetIndex.call(n,a,b);else{var c=-1,h=-1,f=-1;d.each(b,function(a,b){var e=d(b).data("
_inputmask
").maskset,g=-1,n=0,l=q(b).begin,m;for(m in e.validPositions)e=parseInt(m),e>g&&(g=e),n++;if(n>c||n==c&&h>l&&f>g||n==c&&h==l&&f<g)c=n,h=l,p=a,f=g})}var g=n.data("
_inputmask
-
multi
")||{activeMasksetIndex:0,
elmasks:b};g.activeMasksetIndex=p;n.data("
_inputmask
-
multi
",g)}-1==d.inArray(a,["
focus
"])&&l.value!=b[p]._valueGet()&&(g=""==d(b[p]).val()?b[p]._valueGet():d(b[p]).val(),l.value=g);-1==d.inArray(a,["
blur
","
focus
"])&&d(b[p]).hasClass("
focus
.
inputmask
")&&(g=q(b[p]),q(l,g.begin,g.end))}function I(a){l=a;n=d(l);v="
rtl
"==l.dir||e.numericInput;p=0;f=d.map(h,function(a,b){var c='<input type="
text
" ';n.attr("
value
")&&(c+='value="
'+n.attr("value")+'
" ');n.attr("
dir
")&&(c+='dir="
'+n.attr("dir")+'
" ');c=d(c+
"
/>
")[0];d(c).inputmask(d.extend({},e,{mask:a.mask}));return c});n.data("
_inputmask
-
multi
",{activeMasksetIndex:0,elmasks:f});("
rtl
"==l.dir||e.rightAlign)&&n.css("
text
-
align
","
right
");l.dir="
ltr
";n.removeAttr("
dir
");""!=n.attr("
value
")&&r("
init
",f);n.bind("
mouseenter
blur
focus
mouseleave
click
dblclick
keydown
keypress
keypress
",function(a){var b=q(l),c,h=!0;if("
keydown
"==a.type){c=a.keyCode;if(c==e.keyCode.DOWN&&p<f.length-1)return p++,r("
multiMaskScope
",f),!1;if(c==e.keyCode.UP&&0<p)return p--,
r("
multiMaskScope
",f),!1;if(a.ctrlKey||a.shiftKey||a.altKey)return!0}else if("
keypress
"==a.type&&(a.ctrlKey||a.shiftKey||a.altKey))return!0;d.each(f,function(f,g){if("
keydown
"==a.type){c=a.keyCode;if(c==e.keyCode.BACKSPACE&&g._valueGet().length<b.begin)return;if(c==e.keyCode.TAB)h=!1;else{if(c==e.keyCode.RIGHT){q(g,b.begin+1,b.end+1);h=!1;return}if(c==e.keyCode.LEFT){q(g,b.begin-1,b.end-1);h=!1;return}}}if(-1!=d.inArray(a.type,["
click
"])&&(q(g,w(b.begin),w(b.end)),b.begin!=b.end)){h=!1;return}-1!=
d.inArray(a.type,["
keydown
"])&&b.begin!=b.end&&q(g,b.begin,b.end);d(g).triggerHandler(a)});h&&setTimeout(function(){r(a.type,f)},0)});n.bind(J+"
dragdrop
drop
setvalue
",function(a){q(l);setTimeout(function(){d.each(f,function(b,c){c._valueSet(l.value);d(c).triggerHandler(a)});setTimeout(function(){r(a.type,f)},0)},0)});g(l.type)}var J=b("
paste
")?"
paste
":b("
input
")?"
input
":"
propertychange
",v,l,n,f,p;e.multi=!0;if(void 0!=a)switch(a.action){case "
isComplete
":return n=d(a.el),a=n.data("
_inputmask
-
multi
"),
a=a.elmasks[a.activeMasksetIndex],d(a).inputmask("
isComplete
");case "
unmaskedvalue
":return n=a.$input,a=n.data("
_inputmask
-
multi
"),a=a.elmasks[a.activeMasksetIndex],d(a).inputmask("
unmaskedvalue
");case "
mask
":I(a.el);break;case "
format
":return n=d({}),n.data("
_inputmask
",{maskset:maskset,opts:e,isRTL:e.numericInput}),e.numericInput&&(v=!0),a=a.value.split(""),checkVal(n,!1,!1,v?a.reverse():a,!0),v?getBuffer().reverse().join(""):getBuffer().join("");case "
isValid
":return n=d({}),n.data("
_inputmask
",
{maskset:maskset,opts:e,isRTL:e.numericInput}),e.numericInput&&(v=!0),a=a.value.split(""),checkVal(n,!1,!0,v?a.reverse():a),isComplete(getBuffer());case "
getemptymask
":return n=d(a.el),maskset=n.data("
_inputmask
").maskset,e=n.data("
_inputmask
").opts,getBufferTemplate();case "
remove
":l=a.el;n=d(l);maskset=n.data("
_inputmask
").maskset;e=n.data("
_inputmask
").opts;l._valueSet(unmaskedvalue(n));n.unbind("
.
inputmask
");n.removeClass("
focus
.
inputmask
");n.removeData("
_inputmask
");var G;Object.getOwnPropertyDescriptor&&
(G=Object.getOwnPropertyDescriptor(l,"
value
"));G&&G.get?l._valueGet&&Object.defineProperty(l,"
value
",{get:l._valueGet,set:l._valueSet}):document.__lookupGetter__&&l.__lookupGetter__("
value
")&&l._valueGet&&(l.__defineGetter__("
value
",l._valueGet),l.__defineSetter__("
value
",l._valueSet));try{delete l._valueGet,delete l._valueSet}catch(oa){l._valueGet=void 0,l._valueSet=void 0}}};d.extend(d.inputmask.defaults,{multi:!1,nojumps:!1,nojumpsThreshold:0,determineActiveMasksetIndex:void 0});d.inputmask._fn=
d.fn.inputmask;d.fn.inputmask=function(c,h){if("
string
"===typeof c)return d.inputmask._fn("
_detectScope
",h,void 0,void 0,c)?d.inputmask._fn.call(this,c,h,a,"
_inputmask
-
multi
"):d.inputmask._fn.call(this,c,h);if("
object
"==typeof c)return opts=d.extend(!0,{},d.inputmask.defaults,c),d.inputmask._fn("
_detectScope
",c)?d.inputmask._fn.call(this,c,h,a,"
_inputmask
-
multi
"):d.inputmask._fn.call(this,c,h);if(void 0==c)return d.inputmask._fn.call(this,c,h)}}})(jQuery);
(function(d){d.extend(d.inputmask.defaults.definitions,{A:{validator:"
[
A
-
Za
-
z
]
",cardinality:1,casing:"
upper
"},"
#
":{validator:"
[
A
-
Za
-
z
\
u0410
-
\
u044f
\
u0401
\
u04510
-
9
]
",cardinality:1,casing:"
upper
"}});d.extend(d.inputmask.defaults.aliases,{url:{mask:"
ir
",placeholder:"",separator:"",defaultPrefix:"
http
:
//",regex:{urlpre1:/[fh]/,urlpre2:/(ft|ht)/,urlpre3:/(ftp|htt)/,urlpre4:/(ftp:|http|ftps)/,urlpre5:/(ftp:\/|ftps:|http:|https)/,urlpre6:/(ftp:\/\/|ftps:\/|http:\/|https:)/,urlpre7:/(ftp:\/\/|ftps:\/\/|http:\/\/|https:\/)/,
urlpre8
:
/
(
ftp:
\/\/
|ftps:
\/\/
|http:
\/\/
|https:
\/\/)
/
},
definitions
:{
i
:{
validator
:
function
(
a
,
c
,
h
,
d
,
b
){
return
!
0
},
cardinality
:
8
,
prevalidator
:
function
(){
for
(
var
a
=
[],
c
=
0
;
8
>
c
;
c
++
)
a
[
c
]
=
function
(){
var
a
=
c
;
return
{
validator
:
function
(
c
,
b
,
d
,
q
,
w
){
if
(
w
.
regex
[
"urlpre"
+
(
a
+
1
)]){
var
r
=
c
;
0
<
a
+
1
-
c
.
length
&&
(
r
=
b
.
join
(
""
).
substring
(
0
,
a
+
1
-
c
.
length
)
+
""
+
r
);
c
=
w
.
regex
[
"urlpre"
+
(
a
+
1
)].
test
(
r
);
if
(
!
q
&&!
c
){
d
-=
a
;
for
(
q
=
0
;
q
<
w
.
defaultPrefix
.
length
;
q
++
)
b
[
d
]
=
w
.
defaultPrefix
[
q
],
d
++
;
for
(
q
=
0
;
q
<
r
.
length
-
1
;
q
++
)
b
[
d
]
=
r
[
q
],
d
++
;
return
{
pos
:
d
}}
return
c
}
return
!
1
},
cardinality
:
a
}}();
return
a
}()},
r
:{
validator
:
"."
,
cardinality
:
50
}},
insertMode
:
!
1
,
autoUnmask
:
!
1
},
ip
:{
mask
:
"i[i[i]].i[i[i]].i[i[i]].i[i[i]]"
,
definitions
:{
i
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
-
1
<
d
-
1
&&
"."
!=
c
[
d
-
1
]?(
a
=
c
[
d
-
1
]
+
a
,
a
=-
1
<
d
-
2
&&
"."
!=
c
[
d
-
2
]?
c
[
d
-
2
]
+
a
:
"0"
+
a
):
a
=
"00"
+
a
;
return
/25
[
0-5
]
|2
[
0-4
][
0-9
]
|
[
01
][
0-9
][
0-9
]
/
.
test
(
a
)},
cardinality
:
1
}}},
email
:{
mask
:
"*{1,20}[.*{1,20}][.*{1,20}][.*{1,20}]@*{1,20}.*{2,6}[.*{1,2}]"
,
greedy
:
!
1
}})})(
jQuery
);
(
function
(
d
){
d
.
extend
(
d
.
inputmask
.
defaults
.
definitions
,{
h
:{
validator
:
"[01][0-9]|2[0-3]"
,
cardinality
:
2
,
prevalidator
:[{
validator
:
"[0-2]"
,
cardinality
:
1
}]},
s
:{
validator
:
"[0-5][0-9]"
,
cardinality
:
2
,
prevalidator
:[{
validator
:
"[0-5]"
,
cardinality
:
1
}]},
d
:{
validator
:
"0[1-9]|[12][0-9]|3[01]"
,
cardinality
:
2
,
prevalidator
:[{
validator
:
"[0-3]"
,
cardinality
:
1
}]},
m
:{
validator
:
"0[1-9]|1[012]"
,
cardinality
:
2
,
prevalidator
:[{
validator
:
"[01]"
,
cardinality
:
1
}]},
y
:{
validator
:
"(19|20)
\\
d{2}"
,
cardinality
:
4
,
prevalidator
:[{
validator
:
"[12]"
,
cardinality
:
1
},{
validator
:
"(19|20)"
,
cardinality
:
2
},{
validator
:
"(19|20)
\\
d"
,
cardinality
:
3
}]}});
d
.
extend
(
d
.
inputmask
.
defaults
.
aliases
,{
"dd/mm/yyyy"
:{
mask
:
"1/2/y"
,
placeholder
:
"dd/mm/yyyy"
,
regex
:{
val1pre
:
/
[
0-3
]
/
,
val1
:
/0
[
1-9
]
|
[
12
][
0-9
]
|3
[
01
]
/
,
val2pre
:
function
(
a
){
a
=
d
.
inputmask
.
escapeRegex
.
call
(
this
,
a
);
return
RegExp
(
"((0[1-9]|[12][0-9]|3[01])"
+
a
+
"[01])"
)},
val2
:
function
(
a
){
a
=
d
.
inputmask
.
escapeRegex
.
call
(
this
,
a
);
return
RegExp
(
"((0[1-9]|[12][0-9])"
+
a
+
"(0[1-9]|1[012]))|(30"
+
a
+
"(0[13-9]|1[012]))|(31"
+
a
+
"(0[13578]|1[02]))"
)}},
leapday
:
"29/02/"
,
separator
:
"/"
,
yearrange
:{
minyear
:
1900
,
maxyear
:
2099
},
isInYearRange
:
function
(
a
,
c
,
d
){
if
(
isNaN
(
a
))
return
!
1
;
var
e
=
parseInt
(
a
.
concat
(
c
.
toString
().
slice
(
a
.
length
)));
a
=
parseInt
(
a
.
concat
(
d
.
toString
().
slice
(
a
.
length
)));
return
(
isNaN
(
e
)?
!
1
:
c
<=
e
&&
e
<=
d
)
||
(
isNaN
(
a
)?
!
1
:
c
<=
a
&&
a
<=
d
)},
determinebaseyear
:
function
(
a
,
c
,
d
){
var
e
=
(
new
Date
).
getFullYear
();
if
(
a
>
e
)
return
a
;
if
(
c
<
e
){
for
(
var
e
=
c
.
toString
().
slice
(
0
,
2
),
b
=
c
.
toString
().
slice
(
2
,
4
);
c
<
e
+
d
;)
e
--
;
c
=
e
+
b
;
return
a
>
c
?
a
:
c
}
return
e
},
onKeyUp
:
function
(
a
,
c
,
h
){
c
=
d
(
this
);
a
.
ctrlKey
&&
a
.
keyCode
==
h
.
keyCode
.
RIGHT
&&
(
a
=
new
Date
,
c
.
val
(
a
.
getDate
().
toString
()
+
(
a
.
getMonth
()
+
1
).
toString
()
+
a
.
getFullYear
().
toString
()))},
definitions
:{
1
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
var
g
=
b
.
regex
.
val1
.
test
(
a
);
return
e
||
g
||
a
.
charAt
(
1
)
!=
b
.
separator
&&-
1
==
"-./"
.
indexOf
(
a
.
charAt
(
1
))
||!
(
g
=
b
.
regex
.
val1
.
test
(
"0"
+
a
.
charAt
(
0
)))?
g
:(
c
[
d
-
1
]
=
"0"
,{
refreshFromBuffer
:{
start
:
d
-
1
,
end
:
d
},
pos
:
d
,
c
:
a
.
charAt
(
0
)})},
cardinality
:
2
,
prevalidator
:[{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
isNaN
(
c
[
d
+
1
])
||
(
a
+=
c
[
d
+
1
]);
var
g
=
1
==
a
.
length
?
b
.
regex
.
val1pre
.
test
(
a
):
b
.
regex
.
val1
.
test
(
a
);
return
e
||
g
||!
(
g
=
b
.
regex
.
val1
.
test
(
"0"
+
a
))?
g
:(
c
[
d
]
=
"0"
,
d
++
,{
pos
:
d
})},
cardinality
:
1
}]},
2
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
var
g
=
b
.
mask
.
indexOf
(
"2"
)
==
b
.
mask
.
length
-
1
?
c
.
join
(
""
).
substr
(
5
,
3
):
c
.
join
(
""
).
substr
(
0
,
3
);
-
1
!=
g
.
indexOf
(
b
.
placeholder
[
0
])
&&
(
g
=
"01"
+
b
.
separator
);
var
q
=
b
.
regex
.
val2
(
b
.
separator
).
test
(
g
+
a
);
if
(
!
(
e
||
q
||
a
.
charAt
(
1
)
!=
b
.
separator
&&-
1
==
"-./"
.
indexOf
(
a
.
charAt
(
1
)))
&&
(
q
=
b
.
regex
.
val2
(
b
.
separator
).
test
(
g
+
"0"
+
a
.
charAt
(
0
))))
return
c
[
d
-
1
]
=
"0"
,{
refreshFromBuffer
:{
start
:
d
-
1
,
end
:
d
},
pos
:
d
,
c
:
a
.
charAt
(
0
)};
if
(
b
.
mask
.
indexOf
(
"2"
)
==
b
.
mask
.
length
-
1
&&
q
){
if
(
c
.
join
(
""
).
substr
(
4
,
4
)
+
a
!=
b
.
leapday
)
return
!
0
;
a
=
parseInt
(
c
.
join
(
""
).
substr
(
0
,
4
),
10
);
return
0
===
a
%
4
?
0
===
a
%
100
?
0
===
a
%
400
?
!
0
:
!
1
:
!
0
:
!
1
}
return
q
},
cardinality
:
2
,
prevalidator
:[{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
isNaN
(
c
[
d
+
1
])
||
(
a
+=
c
[
d
+
1
]);
var
g
=
b
.
mask
.
indexOf
(
"2"
)
==
b
.
mask
.
length
-
1
?
c
.
join
(
""
).
substr
(
5
,
3
):
c
.
join
(
""
).
substr
(
0
,
3
);
-
1
!=
g
.
indexOf
(
b
.
placeholder
[
0
])
&&
(
g
=
"01"
+
b
.
separator
);
var
q
=
1
==
a
.
length
?
b
.
regex
.
val2pre
(
b
.
separator
).
test
(
g
+
a
):
b
.
regex
.
val2
(
b
.
separator
).
test
(
g
+
a
);
return
e
||
q
||!
(
q
=
b
.
regex
.
val2
(
b
.
separator
).
test
(
g
+
"0"
+
a
))?
q
:(
c
[
d
]
=
"0"
,
d
++
,{
pos
:
d
})},
cardinality
:
1
}]},
y
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
if
(
b
.
isInYearRange
(
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
)){
if
(
c
.
join
(
""
).
substr
(
0
,
6
)
!=
b
.
leapday
)
return
!
0
;
a
=
parseInt
(
a
,
10
);
return
0
===
a
%
4
?
0
===
a
%
100
?
0
===
a
%
400
?
!
0
:
!
1
:
!
0
:
!
1
}
return
!
1
},
cardinality
:
4
,
prevalidator
:[{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
var
g
=
b
.
isInYearRange
(
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
);
if
(
!
e
&&!
g
){
e
=
b
.
determinebaseyear
(
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
,
a
+
"0"
).
toString
().
slice
(
0
,
1
);
if
(
g
=
b
.
isInYearRange
(
e
+
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
))
return
c
[
d
++
]
=
e
[
0
],{
pos
:
d
};
e
=
b
.
determinebaseyear
(
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
,
a
+
"0"
).
toString
().
slice
(
0
,
2
);
if
(
g
=
b
.
isInYearRange
(
e
+
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
))
return
c
[
d
++
]
=
e
[
0
],
c
[
d
++
]
=
e
[
1
],{
pos
:
d
}}
return
g
},
cardinality
:
1
},{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
var
g
=
b
.
isInYearRange
(
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
);
if
(
!
e
&&!
g
){
e
=
b
.
determinebaseyear
(
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
,
a
).
toString
().
slice
(
0
,
2
);
if
(
g
=
b
.
isInYearRange
(
a
[
0
]
+
e
[
1
]
+
a
[
1
],
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
))
return
c
[
d
++
]
=
e
[
1
],{
pos
:
d
};
e
=
b
.
determinebaseyear
(
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
,
a
).
toString
().
slice
(
0
,
2
);
b
.
isInYearRange
(
e
+
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
)?
c
.
join
(
""
).
substr
(
0
,
6
)
!=
b
.
leapday
?
g
=!
0
:(
b
=
parseInt
(
a
,
10
),
g
=
0
===
b
%
4
?
0
===
b
%
100
?
0
===
b
%
400
?
!
0
:
!
1
:
!
0
:
!
1
):
g
=!
1
;
if
(
g
)
return
c
[
d
-
1
]
=
e
[
0
],
c
[
d
++
]
=
e
[
1
],
c
[
d
++
]
=
a
[
0
],{
refreshFromBuffer
:{
start
:
d
-
3
,
end
:
d
},
pos
:
d
}}
return
g
},
cardinality
:
2
},{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
return
b
.
isInYearRange
(
a
,
b
.
yearrange
.
minyear
,
b
.
yearrange
.
maxyear
)},
cardinality
:
3
}]}},
insertMode
:
!
1
,
autoUnmask
:
!
1
},
"mm/dd/yyyy"
:{
placeholder
:
"mm/dd/yyyy"
,
alias
:
"dd/mm/yyyy"
,
regex
:{
val2pre
:
function
(
a
){
a
=
d
.
inputmask
.
escapeRegex
.
call
(
this
,
a
);
return
RegExp
(
"((0[13-9]|1[012])"
+
a
+
"[0-3])|(02"
+
a
+
"[0-2])"
)},
val2
:
function
(
a
){
a
=
d
.
inputmask
.
escapeRegex
.
call
(
this
,
a
);
return
RegExp
(
"((0[1-9]|1[012])"
+
a
+
"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])"
+
a
+
"30)|((0[13578]|1[02])"
+
a
+
"31)"
)},
val1pre
:
/
[
01
]
/
,
val1
:
/0
[
1-9
]
|1
[
012
]
/
},
leapday
:
"02/29/"
,
onKeyUp
:
function
(
a
,
c
,
h
){
c
=
d
(
this
);
a
.
ctrlKey
&&
a
.
keyCode
==
h
.
keyCode
.
RIGHT
&&
(
a
=
new
Date
,
c
.
val
((
a
.
getMonth
()
+
1
).
toString
()
+
a
.
getDate
().
toString
()
+
a
.
getFullYear
().
toString
()))}},
"yyyy/mm/dd"
:{
mask
:
"y/1/2"
,
placeholder
:
"yyyy/mm/dd"
,
alias
:
"mm/dd/yyyy"
,
leapday
:
"/02/29"
,
onKeyUp
:
function
(
a
,
c
,
h
){
c
=
d
(
this
);
a
.
ctrlKey
&&
a
.
keyCode
==
h
.
keyCode
.
RIGHT
&&
(
a
=
new
Date
,
c
.
val
(
a
.
getFullYear
().
toString
()
+
(
a
.
getMonth
()
+
1
).
toString
()
+
a
.
getDate
().
toString
()))}},
"dd.mm.yyyy"
:{
mask
:
"1.2.y"
,
placeholder
:
"dd.mm.yyyy"
,
leapday
:
"29.02."
,
separator
:
"."
,
alias
:
"dd/mm/yyyy"
},
"dd-mm-yyyy"
:{
mask
:
"1-2-y"
,
placeholder
:
"dd-mm-yyyy"
,
leapday
:
"29-02-"
,
separator
:
"-"
,
alias
:
"dd/mm/yyyy"
},
"mm.dd.yyyy"
:{
mask
:
"1.2.y"
,
placeholder
:
"mm.dd.yyyy"
,
leapday
:
"02.29."
,
separator
:
"."
,
alias
:
"mm/dd/yyyy"
},
"mm-dd-yyyy"
:{
mask
:
"1-2-y"
,
placeholder
:
"mm-dd-yyyy"
,
leapday
:
"02-29-"
,
separator
:
"-"
,
alias
:
"mm/dd/yyyy"
},
"yyyy.mm.dd"
:{
mask
:
"y.1.2"
,
placeholder
:
"yyyy.mm.dd"
,
leapday
:
".02.29"
,
separator
:
"."
,
alias
:
"yyyy/mm/dd"
},
"yyyy-mm-dd"
:{
mask
:
"y-1-2"
,
placeholder
:
"yyyy-mm-dd"
,
leapday
:
"-02-29"
,
separator
:
"-"
,
alias
:
"yyyy/mm/dd"
},
datetime
:{
mask
:
"1/2/y h:s"
,
placeholder
:
"dd/mm/yyyy hh:mm"
,
alias
:
"dd/mm/yyyy"
,
regex
:{
hrspre
:
/
[
012
]
/
,
hrs24
:
/2
[
0-4
]
|1
[
3-9
]
/
,
hrs
:
/
[
01
][
0-9
]
|2
[
0-4
]
/
,
ampm
:
/^
[
a|p|A|P
][
m|M
]
/
},
timeseparator
:
":"
,
hourFormat
:
"24"
,
definitions
:{
h
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
if
(
"24"
==
b
.
hourFormat
&&
24
==
parseInt
(
a
,
10
))
return
c
[
d
-
1
]
=
"0"
,
c
[
d
]
=
"0"
,{
refreshFromBuffer
:{
start
:
d
-
1
,
end
:
d
},
c
:
"0"
};
var
g
=
b
.
regex
.
hrs
.
test
(
a
);
return
e
||
g
||
a
.
charAt
(
1
)
!=
b
.
timeseparator
&&
-
1
==
"-.:"
.
indexOf
(
a
.
charAt
(
1
))
||!
(
g
=
b
.
regex
.
hrs
.
test
(
"0"
+
a
.
charAt
(
0
)))?
g
&&
"24"
!==
b
.
hourFormat
&&
b
.
regex
.
hrs24
.
test
(
a
)?(
a
=
parseInt
(
a
,
10
),
c
[
d
+
5
]
=
24
==
a
?
"a"
:
"p"
,
c
[
d
+
6
]
=
"m"
,
a
-=
12
,
10
>
a
?(
c
[
d
]
=
a
.
toString
(),
c
[
d
-
1
]
=
"0"
):(
c
[
d
]
=
a
.
toString
().
charAt
(
1
),
c
[
d
-
1
]
=
a
.
toString
().
charAt
(
0
)),{
refreshFromBuffer
:{
start
:
d
-
1
,
end
:
d
+
6
},
c
:
c
[
d
]}):
g
:(
c
[
d
-
1
]
=
"0"
,
c
[
d
]
=
a
.
charAt
(
0
),
d
++
,{
refreshFromBuffer
:{
start
:
d
-
2
,
end
:
d
},
pos
:
d
,
c
:
b
.
timeseparator
})},
cardinality
:
2
,
prevalidator
:[{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
var
g
=
b
.
regex
.
hrspre
.
test
(
a
);
return
e
||
g
||!
(
g
=
b
.
regex
.
hrs
.
test
(
"0"
+
a
))?
g
:(
c
[
d
]
=
"0"
,
d
++
,{
pos
:
d
})},
cardinality
:
1
}]},
t
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
return
b
.
regex
.
ampm
.
test
(
a
+
"m"
)},
casing
:
"lower"
,
cardinality
:
1
}},
insertMode
:
!
1
,
autoUnmask
:
!
1
},
datetime12
:{
mask
:
"1/2/y h:s t
\\
m"
,
placeholder
:
"dd/mm/yyyy hh:mm xm"
,
alias
:
"datetime"
,
hourFormat
:
"12"
},
"hh:mm t"
:{
mask
:
"h:s t
\\
m"
,
placeholder
:
"hh:mm xm"
,
alias
:
"datetime"
,
hourFormat
:
"12"
},
"h:s t"
:{
mask
:
"h:s t
\\
m"
,
placeholder
:
"hh:mm xm"
,
alias
:
"datetime"
,
hourFormat
:
"12"
},
"hh:mm:ss"
:{
mask
:
"h:s:s"
,
autoUnmask
:
!
1
},
"hh:mm"
:{
mask
:
"h:s"
,
autoUnmask
:
!
1
},
date
:{
alias
:
"dd/mm/yyyy"
},
"mm/yyyy"
:{
mask
:
"1/y"
,
placeholder
:
"mm/yyyy"
,
leapday
:
"donotuse"
,
separator
:
"/"
,
alias
:
"mm/dd/yyyy"
}})})(
jQuery
);
(
function
(
d
){
d
.
extend
(
d
.
inputmask
.
defaults
.
aliases
,{
numeric
:{
mask
:
function
(
a
){
0
!==
a
.
repeat
&&
isNaN
(
a
.
integerDigits
)
&&
(
a
.
integerDigits
=
a
.
repeat
);
a
.
repeat
=
0
;
var
c
=
a
.
prefix
,
c
=
c
+
"[+]"
+
(
"~{1,"
+
a
.
integerDigits
+
"}"
);
void
0
!=
a
.
digits
&&
(
isNaN
(
a
.
digits
)
||
0
<
parseInt
(
a
.
digits
))
&&
(
c
=
a
.
digitsOptional
?
c
+
(
"["
+
a
.
radixPoint
+
"~{"
+
a
.
digits
+
"}]"
):
c
+
(
a
.
radixPoint
+
"~{"
+
a
.
digits
+
"}"
));
return
c
+=
a
.
suffix
},
placeholder
:
""
,
greedy
:
!
1
,
digits
:
"*"
,
digitsOptional
:
!
0
,
groupSeparator
:
""
,
radixPoint
:
"."
,
groupSize
:
3
,
autoGroup
:
!
1
,
allowPlus
:
!
0
,
allowMinus
:
!
0
,
integerDigits
:
"+"
,
defaultValue
:
""
,
prefix
:
""
,
suffix
:
""
,
skipRadixDance
:
!
1
,
getLastValidPosition
:
function
(
a
,
c
,
h
){
var
e
=-
1
,
b
=
a
.
validPositions
,
g
;
for
(
g
in
b
)
b
=
parseInt
(
g
),
b
>
e
&&
(
e
=
b
);
void
0
!=
c
&&
(
a
=
a
.
buffer
,
!
1
===
h
.
skipRadixDance
&&
""
!=
h
.
radixPoint
&&-
1
!=
d
.
inArray
(
h
.
radixPoint
,
a
)
&&
(
e
=
d
.
inArray
(
h
.
radixPoint
,
a
)));
return
e
},
rightAlign
:
!
0
,
postFormat
:
function
(
a
,
c
,
h
,
e
){
var
b
=!
1
;
if
(
""
==
e
.
groupSeparator
)
return
{
pos
:
c
};
var
g
=
a
.
slice
();
h
||
g
.
splice
(
c
,
0
,
"?"
);
g
=
g
.
join
(
""
);
if
(
e
.
autoGroup
||
h
&&-
1
!=
g
.
indexOf
(
e
.
groupSeparator
)){
var
q
=
d
.
inputmask
.
escapeRegex
.
call
(
this
,
e
.
groupSeparator
),
g
=
g
.
replace
(
RegExp
(
q
,
"g"
),
""
),
q
=
g
.
split
(
e
.
radixPoint
),
g
=
q
[
0
];
if
(
g
!=
e
.
prefix
+
"?0"
)
for
(
var
b
=!
0
,
w
=
RegExp
(
"([-+]?[
\\
d?]+)([
\\
d?]{"
+
e
.
groupSize
+
"})"
);
w
.
test
(
g
);)
g
=
g
.
replace
(
w
,
"$1"
+
e
.
groupSeparator
+
"$2"
),
g
=
g
.
replace
(
e
.
groupSeparator
+
e
.
groupSeparator
,
e
.
groupSeparator
);
1
<
q
.
length
&&
(
g
+=
e
.
radixPoint
+
q
[
1
])}
a
.
length
=
g
.
length
;
e
=
0
;
for
(
q
=
g
.
length
;
e
<
q
;
e
++
)
a
[
e
]
=
g
.
charAt
(
e
);
g
=
d
.
inArray
(
"?"
,
a
);
h
||
a
.
splice
(
g
,
1
);
return
{
pos
:
h
?
c
:
g
,
refreshFromBuffer
:
b
}},
onKeyDown
:
function
(
a
,
c
,
h
){
d
(
this
);
if
(
h
.
autoGroup
&&
a
.
keyCode
==
h
.
keyCode
.
DELETE
||
a
.
keyCode
==
h
.
keyCode
.
BACKSPACE
)
return
h
.
postFormat
(
c
,
0
,
!
0
,
h
)},
regex
:{
integerPart
:
function
(
a
){
return
/
[
-+
]?\d
+/
}},
definitions
:{
"~"
:{
validator
:
function
(
a
,
c
,
h
,
e
,
b
){
if
(
!
e
&&
"-"
===
a
){
var
g
=
c
.
join
(
""
).
match
(
b
.
regex
.
integerPart
(
b
));
if
(
0
<
g
.
length
)
return
"+"
==
c
[
g
.
index
]?(
c
.
splice
(
g
.
index
,
1
),{
pos
:
g
.
index
,
c
:
"-"
,
refreshFromBuffer
:
!
0
,
caret
:
h
}):
"-"
==
c
[
g
.
index
]?(
c
.
splice
(
g
.
index
,
1
),{
refreshFromBuffer
:
!
0
,
caret
:
h
-
1
}):{
pos
:
g
.
index
,
c
:
"-"
,
caret
:
h
+
1
}}
g
=
e
?
RegExp
(
"[0-9"
+
d
.
inputmask
.
escapeRegex
.
call
(
this
,
b
.
groupSeparator
)
+
"]"
).
test
(
a
):
/
[
0-9
]
/
.
test
(
a
);
return
!
1
==
g
||
e
||
a
==
b
.
radixPoint
||!
0
!==
b
.
autoGroup
?
g
:
b
.
postFormat
(
c
,
h
,
"-"
==
a
||
"+"
==
a
?
!
0
:
!
1
,
b
)},
cardinality
:
1
,
prevalidator
:
null
},
"+"
:{
validator
:
function
(
a
,
c
,
d
,
e
,
b
){
c
=
"["
;
!
0
===
b
.
allowMinus
&&
(
c
+=
"-"
);
!
0
===
b
.
allowPlus
&&
(
c
+=
"+"
);
return
RegExp
(
c
+
"]"
).
test
(
a
)},
cardinality
:
1
,
prevalidator
:
null
}},
insertMode
:
!
0
,
autoUnmask
:
!
1
},
decimal
:{
alias
:
"numeric"
},
integer
:{
alias
:
"numeric"
,
digits
:
"0"
}})})(
jQuery
);
(
function
(
d
){
d
.
extend
(
d
.
inputmask
.
defaults
.
aliases
,{
Regex
:{
mask
:
"r"
,
greedy
:
!
1
,
repeat
:
"*"
,
regex
:
null
,
regexTokens
:
null
,
tokenizer
:
/
\[\^?
]
?(?:[^\\\]]
+|
\\[\S\s]?)
*]
?
|
\\(?:
0
(?:[
0-3
][
0-7
]{0,2}
|
[
4-7
][
0-7
]?)?
|
[
1-9
][
0-9
]
*|x
[
0-9A-Fa-f
]{2}
|u
[
0-9A-Fa-f
]{4}
|c
[
A-Za-z
]
|
[\S\s]?)
|
\((?:\?[
:=!
]?)?
|
(?:[
?*+
]
|
\{[
0-9
]
+
(?:
,
[
0-9
]
*
)?\})\??
|
[^
.?*+^${[()|
\\]
+|./g
,
quantifierFilter
:
/
[
0-9
]
+
[^
,
]
/
,
isComplete
:
function
(
a
,
c
){
return
RegExp
(
c
.
regex
).
test
(
a
.
join
(
""
))},
definitions
:{
r
:{
validator
:
function
(
a
,
c
,
h
,
e
,
b
){
function
g
(
a
,
b
){
this
.
matches
=
[];
this
.
isGroup
=
a
||!
1
;
this
.
isQuantifier
=
b
||!
1
;
this
.
quantifier
=
{
min
:
1
,
max
:
1
};
this
.
repeaterPart
=
void
0
}
function
q
(){
var
a
=
new
g
,
c
,
d
=
[];
for
(
b
.
regexTokens
=
[];
c
=
b
.
tokenizer
.
exec
(
b
.
regex
);)
switch
(
c
=
c
[
0
],
c
.
charAt
(
0
)){
case
"("
:
d
.
push
(
new
g
(
!
0
));
break
;
case
")"
:
var
f
=
d
.
pop
();
0
<
d
.
length
?
d
[
d
.
length
-
1
].
matches
.
push
(
f
):
a
.
matches
.
push
(
f
);
break
;
case
"{"
:
case
"+"
:
case
"*"
:
var
e
=
new
g
(
!
1
,
!
0
);
c
=
c
.
replace
(
/
[
{}
]
/g
,
""
);
f
=
c
.
split
(
","
);
c
=
isNaN
(
f
[
0
])?
f
[
0
]:
parseInt
(
f
[
0
]);
f
=
1
==
f
.
length
?
c
:
isNaN
(
f
[
1
])?
f
[
1
]:
parseInt
(
f
[
1
]);
e
.
quantifier
=
{
min
:
c
,
max
:
f
};
if
(
0
<
d
.
length
){
var
h
=
d
[
d
.
length
-
1
].
matches
;
c
=
h
.
pop
();
c
.
isGroup
||
(
f
=
new
g
(
!
0
),
f
.
matches
.
push
(
c
),
c
=
f
);
h
.
push
(
c
);
h
.
push
(
e
)}
else
c
=
a
.
matches
.
pop
(),
c
.
isGroup
||
(
f
=
new
g
(
!
0
),
f
.
matches
.
push
(
c
),
c
=
f
),
a
.
matches
.
push
(
c
),
a
.
matches
.
push
(
e
);
break
;
default
:
0
<
d
.
length
?
d
[
d
.
length
-
1
].
matches
.
push
(
c
):
a
.
matches
.
push
(
c
)}
0
<
a
.
matches
.
length
&&
b
.
regexTokens
.
push
(
a
)}
function
w
(
a
,
b
){
var
c
=!
1
;
b
&&
(
r
+=
"("
,
I
++
);
for
(
var
f
=
0
;
f
<
a
.
matches
.
length
;
f
++
){
var
e
=
a
.
matches
[
f
];
if
(
!
0
==
e
.
isGroup
)
c
=
w
(
e
,
!
0
);
else
if
(
!
0
==
e
.
isQuantifier
){
var
g
=
d
.
inArray
(
e
,
a
.
matches
),
g
=
a
.
matches
[
g
-
1
],
h
=
r
;
if
(
isNaN
(
e
.
quantifier
.
max
)){
for
(;
e
.
repeaterPart
&&
e
.
repeaterPart
!=
r
&&
e
.
repeaterPart
.
length
>
r
.
length
&&!
(
c
=
w
(
g
,
!
0
)););(
c
=
c
||
w
(
g
,
!
0
))
&&
(
e
.
repeaterPart
=
r
);
r
=
h
+
e
.
quantifier
.
max
}
else
{
for
(
var
k
=
0
,
m
=
e
.
quantifier
.
max
-
1
;
k
<
m
&&!
(
c
=
w
(
g
,
!
0
));
k
++
);
r
=
h
+
"{"
+
e
.
quantifier
.
min
+
","
+
e
.
quantifier
.
max
+
"}"
}}
else
if
(
void
0
!=
e
.
matches
)
for
(
g
=
0
;
g
<
e
.
length
&&!
(
c
=
w
(
e
[
g
],
b
));
g
++
);
else
{
if
(
"["
==
e
[
0
]){
c
=
r
;
c
+=
e
;
for
(
k
=
0
;
k
<
I
;
k
++
)
c
+=
")"
;
c
=
RegExp
(
"^("
+
c
+
")$"
);
c
=
c
.
test
(
J
)}
else
for
(
g
=
0
,
h
=
e
.
length
;
g
<
h
;
g
++
)
if
(
"
\
\"
!=e[g]){c=r;c+=e.substr(0,g+1);c=c.replace(/
\
|$/,"");for(k=0;k<I;k++)c+="
)
";c=RegExp("
^
(
"+c+"
)
$
");if(c=c.test(J))break}r+=e}if(c)break}b&&(r+="
)
",I--);return c}null==b.regexTokens&&q();e=c.slice();var r="";c=!1;var I=0;e.splice(h,0,a);var J=e.join("");for(a=0;a<b.regexTokens.length&&!(g=b.regexTokens[a],c=w(g,g.isGroup));a++);return c},cardinality:1}}}})})(jQuery);
(function(d){d.extend(d.inputmask.defaults.aliases,{phone:{url:"
phone
-
codes
/
phone
-
codes
.
json
",mask:function(a){a.definitions={p:{validator:function(){return!1},cardinality:1},"
#
":{validator:"
[
0
-
9
]
",cardinality:1}};var c=[];d.ajax({url:a.url,async:!1,dataType:"
json
",success:function(a){c=a}});c.splice(0,0,"
+
p
(
ppp
)
ppp
-
pppp
");return c},nojumps:!0,nojumpsThreshold:1},phonebe:{url:"
phone
-
codes
/
phone
-
be
.
json
",mask:function(a){a.definitions={p:{validator:function(){return!1},cardinality:1},"
#
":{validator:"
[
0
-
9
]
",
cardinality:1}};var c=[];d.ajax({url:a.url,async:!1,dataType:"
json
",success:function(a){c=a}});c.splice(0,0,"
+
32
(
ppp
)
ppp
-
pppp
");return c},nojumps:!0,nojumpsThreshold:4}})})(jQuery);
framework/assets/jquery.maskedinput.js
deleted
100644 → 0
View file @
62fdaeec
/*
Masked Input plugin for jQuery
Copyright (c) 2007-2013 Josh Bush (digitalbush.com)
Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
Version: 1.3.1
*/
(
function
(
$
)
{
function
getPasteEvent
()
{
var
el
=
document
.
createElement
(
'input'
),
name
=
'onpaste'
;
el
.
setAttribute
(
name
,
''
);
return
(
typeof
el
[
name
]
===
'function'
)?
'paste'
:
'input'
;
}
var
pasteEventName
=
getPasteEvent
()
+
".mask"
,
ua
=
navigator
.
userAgent
,
iPhone
=
/iphone/i
.
test
(
ua
),
android
=
/android/i
.
test
(
ua
),
caretTimeoutId
;
$
.
mask
=
{
//Predefined character definitions
definitions
:
{
'9'
:
"[0-9]"
,
'a'
:
"[A-Za-z]"
,
'*'
:
"[A-Za-z0-9]"
},
dataName
:
"rawMaskFn"
,
placeholder
:
'_'
,
};
$
.
fn
.
extend
({
//Helper Function for Caret positioning
caret
:
function
(
begin
,
end
)
{
var
range
;
if
(
this
.
length
===
0
||
this
.
is
(
":hidden"
))
{
return
;
}
if
(
typeof
begin
==
'number'
)
{
end
=
(
typeof
end
===
'number'
)
?
end
:
begin
;
return
this
.
each
(
function
()
{
if
(
this
.
setSelectionRange
)
{
this
.
setSelectionRange
(
begin
,
end
);
}
else
if
(
this
.
createTextRange
)
{
range
=
this
.
createTextRange
();
range
.
collapse
(
true
);
range
.
moveEnd
(
'character'
,
end
);
range
.
moveStart
(
'character'
,
begin
);
range
.
select
();
}
});
}
else
{
if
(
this
[
0
].
setSelectionRange
)
{
begin
=
this
[
0
].
selectionStart
;
end
=
this
[
0
].
selectionEnd
;
}
else
if
(
document
.
selection
&&
document
.
selection
.
createRange
)
{
range
=
document
.
selection
.
createRange
();
begin
=
0
-
range
.
duplicate
().
moveStart
(
'character'
,
-
100000
);
end
=
begin
+
range
.
text
.
length
;
}
return
{
begin
:
begin
,
end
:
end
};
}
},
unmask
:
function
()
{
return
this
.
trigger
(
"unmask"
);
},
mask
:
function
(
mask
,
settings
)
{
var
input
,
defs
,
tests
,
partialPosition
,
firstNonMaskPos
,
len
;
if
(
!
mask
&&
this
.
length
>
0
)
{
input
=
$
(
this
[
0
]);
return
input
.
data
(
$
.
mask
.
dataName
)();
}
settings
=
$
.
extend
({
placeholder
:
$
.
mask
.
placeholder
,
// Load default placeholder
completed
:
null
},
settings
);
defs
=
$
.
mask
.
definitions
;
tests
=
[];
partialPosition
=
len
=
mask
.
length
;
firstNonMaskPos
=
null
;
$
.
each
(
mask
.
split
(
""
),
function
(
i
,
c
)
{
if
(
c
==
'?'
)
{
len
--
;
partialPosition
=
i
;
}
else
if
(
defs
[
c
])
{
tests
.
push
(
new
RegExp
(
defs
[
c
]));
if
(
firstNonMaskPos
===
null
)
{
firstNonMaskPos
=
tests
.
length
-
1
;
}
}
else
{
tests
.
push
(
null
);
}
});
return
this
.
trigger
(
"unmask"
).
each
(
function
()
{
var
input
=
$
(
this
),
buffer
=
$
.
map
(
mask
.
split
(
""
),
function
(
c
,
i
)
{
if
(
c
!=
'?'
)
{
return
defs
[
c
]
?
settings
.
placeholder
:
c
;
}
}),
focusText
=
input
.
val
();
function
seekNext
(
pos
)
{
while
(
++
pos
<
len
&&
!
tests
[
pos
]);
return
pos
;
}
function
seekPrev
(
pos
)
{
while
(
--
pos
>=
0
&&
!
tests
[
pos
]);
return
pos
;
}
function
shiftL
(
begin
,
end
)
{
var
i
,
j
;
if
(
begin
<
0
)
{
return
;
}
for
(
i
=
begin
,
j
=
seekNext
(
end
);
i
<
len
;
i
++
)
{
if
(
tests
[
i
])
{
if
(
j
<
len
&&
tests
[
i
].
test
(
buffer
[
j
]))
{
buffer
[
i
]
=
buffer
[
j
];
buffer
[
j
]
=
settings
.
placeholder
;
}
else
{
break
;
}
j
=
seekNext
(
j
);
}
}
writeBuffer
();
input
.
caret
(
Math
.
max
(
firstNonMaskPos
,
begin
));
}
function
shiftR
(
pos
)
{
var
i
,
c
,
j
,
t
;
for
(
i
=
pos
,
c
=
settings
.
placeholder
;
i
<
len
;
i
++
)
{
if
(
tests
[
i
])
{
j
=
seekNext
(
i
);
t
=
buffer
[
i
];
buffer
[
i
]
=
c
;
if
(
j
<
len
&&
tests
[
j
].
test
(
t
))
{
c
=
t
;
}
else
{
break
;
}
}
}
}
function
keydownEvent
(
e
)
{
var
k
=
e
.
which
,
pos
,
begin
,
end
;
//backspace, delete, and escape get special treatment
if
(
k
===
8
||
k
===
46
||
(
iPhone
&&
k
===
127
))
{
pos
=
input
.
caret
();
begin
=
pos
.
begin
;
end
=
pos
.
end
;
if
(
end
-
begin
===
0
)
{
begin
=
k
!==
46
?
seekPrev
(
begin
):(
end
=
seekNext
(
begin
-
1
));
end
=
k
===
46
?
seekNext
(
end
):
end
;
}
clearBuffer
(
begin
,
end
);
shiftL
(
begin
,
end
-
1
);
e
.
preventDefault
();
}
else
if
(
k
==
27
)
{
//escape
input
.
val
(
focusText
);
input
.
caret
(
0
,
checkVal
());
e
.
preventDefault
();
}
}
function
keypressEvent
(
e
)
{
var
k
=
e
.
which
,
pos
=
input
.
caret
(),
p
,
c
,
next
;
if
(
e
.
ctrlKey
||
e
.
altKey
||
e
.
metaKey
||
k
<
32
)
{
//Ignore
return
;
}
else
if
(
k
)
{
if
(
pos
.
end
-
pos
.
begin
!==
0
){
clearBuffer
(
pos
.
begin
,
pos
.
end
);
shiftL
(
pos
.
begin
,
pos
.
end
-
1
);
}
p
=
seekNext
(
pos
.
begin
-
1
);
if
(
p
<
len
)
{
c
=
String
.
fromCharCode
(
k
);
if
(
tests
[
p
].
test
(
c
))
{
shiftR
(
p
);
buffer
[
p
]
=
c
;
writeBuffer
();
next
=
seekNext
(
p
);
if
(
android
){
setTimeout
(
$
.
proxy
(
$
.
fn
.
caret
,
input
,
next
),
0
);
}
else
{
input
.
caret
(
next
);
}
if
(
settings
.
completed
&&
next
>=
len
)
{
settings
.
completed
.
call
(
input
);
}
}
}
e
.
preventDefault
();
}
}
function
clearBuffer
(
start
,
end
)
{
var
i
;
for
(
i
=
start
;
i
<
end
&&
i
<
len
;
i
++
)
{
if
(
tests
[
i
])
{
buffer
[
i
]
=
settings
.
placeholder
;
}
}
}
function
writeBuffer
()
{
input
.
val
(
buffer
.
join
(
''
));
}
function
checkVal
(
allow
)
{
//try to place characters where they belong
var
test
=
input
.
val
(),
lastMatch
=
-
1
,
i
,
c
;
for
(
i
=
0
,
pos
=
0
;
i
<
len
;
i
++
)
{
if
(
tests
[
i
])
{
buffer
[
i
]
=
settings
.
placeholder
;
while
(
pos
++
<
test
.
length
)
{
c
=
test
.
charAt
(
pos
-
1
);
if
(
tests
[
i
].
test
(
c
))
{
buffer
[
i
]
=
c
;
lastMatch
=
i
;
break
;
}
}
if
(
pos
>
test
.
length
)
{
break
;
}
}
else
if
(
buffer
[
i
]
===
test
.
charAt
(
pos
)
&&
i
!==
partialPosition
)
{
pos
++
;
lastMatch
=
i
;
}
}
if
(
allow
)
{
writeBuffer
();
}
else
if
(
lastMatch
+
1
<
partialPosition
)
{
input
.
val
(
""
);
clearBuffer
(
0
,
len
);
}
else
{
writeBuffer
();
input
.
val
(
input
.
val
().
substring
(
0
,
lastMatch
+
1
));
}
return
(
partialPosition
?
i
:
firstNonMaskPos
);
}
input
.
data
(
$
.
mask
.
dataName
,
function
(){
return
$
.
map
(
buffer
,
function
(
c
,
i
)
{
return
tests
[
i
]
&&
c
!=
settings
.
placeholder
?
c
:
null
;
}).
join
(
''
);
});
if
(
!
input
.
attr
(
"readonly"
))
input
.
one
(
"unmask"
,
function
()
{
input
.
unbind
(
".mask"
)
.
removeData
(
$
.
mask
.
dataName
);
})
.
bind
(
"focus.mask"
,
function
()
{
clearTimeout
(
caretTimeoutId
);
var
pos
,
moveCaret
;
focusText
=
input
.
val
();
pos
=
checkVal
();
caretTimeoutId
=
setTimeout
(
function
(){
writeBuffer
();
if
(
pos
==
mask
.
length
)
{
input
.
caret
(
0
,
pos
);
}
else
{
input
.
caret
(
pos
);
}
},
10
);
})
.
bind
(
"blur.mask"
,
function
()
{
checkVal
();
if
(
input
.
val
()
!=
focusText
)
input
.
change
();
})
.
bind
(
"keydown.mask"
,
keydownEvent
)
.
bind
(
"keypress.mask"
,
keypressEvent
)
.
bind
(
pasteEventName
,
function
()
{
setTimeout
(
function
()
{
var
pos
=
checkVal
(
true
);
input
.
caret
(
pos
);
if
(
settings
.
completed
&&
pos
==
input
.
val
().
length
)
settings
.
completed
.
call
(
input
);
},
0
);
});
checkVal
();
//Perform initial check for existing values
});
}
});
})(
jQuery
);
framework/widgets/MaskedInput.php
View file @
8331ff01
...
@@ -11,13 +11,13 @@ use yii\base\InvalidConfigException;
...
@@ -11,13 +11,13 @@ use yii\base\InvalidConfigException;
use
yii\helpers\Html
;
use
yii\helpers\Html
;
use
yii\helpers\Json
;
use
yii\helpers\Json
;
use
yii\web\JsExpression
;
use
yii\web\JsExpression
;
use
yii\web\View
;
/**
/**
* MaskedInput generates a masked text input.
* MaskedInput generates a masked text input.
*
*
* MaskedInput is similar to [[Html::textInput()]] except that
* MaskedInput is similar to [[Html::textInput()]] except that an input mask will be used to force users to enter
* an input mask will be used to force users to enter properly formatted data,
* properly formatted data, such as phone numbers, social security numbers.
* such as phone numbers, social security numbers.
*
*
* To use MaskedInput, you must set the [[mask]] property. The following example
* To use MaskedInput, you must set the [[mask]] property. The following example
* shows how to use MaskedInput to collect phone numbers:
* shows how to use MaskedInput to collect phone numbers:
...
@@ -29,38 +29,54 @@ use yii\web\JsExpression;
...
@@ -29,38 +29,54 @@ use yii\web\JsExpression;
* ]);
* ]);
* ~~~
* ~~~
*
*
* The masked text field is implemented based on the [jQuery masked input plugin](http://digitalbush.com/projects/masked-input-plugin).
* The masked text field is implemented based on the
* [jQuery input mask plugin](https://github.com/RobinHerbots/jquery.inputmask).
*
*
* @author
Qiang Xue <qiang.xue
@gmail.com>
* @author
Kartik Visweswaran <kartikv2
@gmail.com>
* @since 2.0
* @since 2.0
*/
*/
class
MaskedInput
extends
InputWidget
class
MaskedInput
extends
InputWidget
{
{
const
PLUGIN_NAME
=
'inputmask'
;
/**
/**
* @var string the input mask (e.g. '99/99/9999' for date input). The following characters are predefined:
* @var string|array|JsExpression the input mask (e.g. '99/99/9999' for date input). The following characters
* can be used in the mask and are predefined:
*
*
* - `a`: represents an alpha character (A-Z, a-z)
* - `a`: represents an alpha character (A-Z, a-z)
* - `9`: represents a numeric character (0-9)
* - `9`: represents a numeric character (0-9)
* - `*`: represents an alphanumeric character (A-Z, a-z, 0-9)
* - `*`: represents an alphanumeric character (A-Z, a-z, 0-9)
* - `?`: anything listed after '?' within the mask is considered optional user input
* - `[` and `]`: anything entered between the square brackets is considered optional user input. This is
* based on the `optionalmarker` setting in `clientOptions`.
*
*
* Additional
characters can be defined by specifying the [[charMap]]
property.
* Additional
definitions can be set through definitions
property.
*/
*/
public
$mask
;
public
$mask
;
/**
/**
* @var array the mapping between mask characters and the corresponding patterns.
* @var array custom mask definitions to use. Should be configured as `$maskSymbol => $settings`, where:
* For example, `['~' => '[+-]']` specifies that the '~' character expects '+' or '-' input.
* - `maskSymbol`: string, a character to identify your mask definition
* Defaults to null, meaning using the map as described in [[mask]].
* - `settings`: array, consisiting of the following entries:
* - `validator`: string, a JS regular expression or a JS function.
* - `cardinality`: int, specifies how many characters are represented and validated for the definition.
* - `prevalidator`: array, validate the characters before the definition cardinality is reached.
* - `definitionSymbol`: string, allows shifting values from other definitions, with this `definitionSymbol`.
*/
*/
public
$charMap
;
public
$definitions
;
/**
/**
* @var string the character prompting for user input. Defaults to underscore '_'.
* @var array custom aliases to use. Should be configured as `$maskAlias` => $settings`, where:
* - `maskAlias`: string, a text to identify your mask alias definition (e.g. 'phone')
* - `settings`: array settings for the mask symbol, exactly similar to parameters as passed in `clientOptions`
*/
*/
public
$placeholder
;
public
$aliases
;
/**
/**
* @var string a JavaScript function callback that will be invoked when user finishes the input.
* @var array the JQuery plugin options for the input mask plugin.
* @see https://github.com/RobinHerbots/jquery.inputmask
*/
*/
public
$completed
;
public
$clientOptions
=
[];
/**
/**
* @var array the HTML attributes for the input tag.
* @var array the HTML attributes for the input tag.
* @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
* @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
...
@@ -68,19 +84,28 @@ class MaskedInput extends InputWidget
...
@@ -68,19 +84,28 @@ class MaskedInput extends InputWidget
public
$options
=
[
'class'
=>
'form-control'
];
public
$options
=
[
'class'
=>
'form-control'
];
/**
/**
* @var string the hashed variable to store the pluginOptions
*/
protected
$_hashVar
;
/**
* Initializes the widget.
* Initializes the widget.
*
* @throws InvalidConfigException if the "mask" property is not set.
* @throws InvalidConfigException if the "mask" property is not set.
*/
*/
public
function
init
()
public
function
init
()
{
{
parent
::
init
();
parent
::
init
();
if
(
empty
(
$this
->
mask
))
{
if
(
empty
(
$this
->
mask
)
&&
empty
(
$this
->
clientOptions
[
'alias'
])
)
{
throw
new
InvalidConfigException
(
'The "mask" property must be set.'
);
throw
new
InvalidConfigException
(
"Either the 'mask' property or the 'clientOptions[
\"
alias
\"
]' property must be set."
);
}
}
}
}
/**
/**
*
* Runs the widget.
* Runs the widget.
*
* @return string|void
*/
*/
public
function
run
()
public
function
run
()
{
{
...
@@ -93,41 +118,60 @@ class MaskedInput extends InputWidget
...
@@ -93,41 +118,60 @@ class MaskedInput extends InputWidget
}
}
/**
/**
* Registers the needed JavaScript.
* Generates a hashed variable to store the plugin `clientOptions`. Helps in reusing the variable for similar
* options passed for other widgets on the same page. The following special data attributes will also be
* setup for the input widget, that can be accessed through javascript:
* - 'data-plugin-options' will store the hashed variable storing the plugin options.
* - 'data-plugin-name' the name of the plugin
*
* @param View $view the view instance
*/
*/
p
ublic
function
registerClientScript
(
)
p
rotected
function
hashPluginOptions
(
$view
)
{
{
$options
=
$this
->
getClientOptions
();
$encOptions
=
empty
(
$this
->
clientOptions
)
?
'{}'
:
Json
::
encode
(
$this
->
clientOptions
);
$options
=
empty
(
$options
)
?
''
:
','
.
Json
::
encode
(
$options
);
$this
->
_hashVar
=
self
::
PLUGIN_NAME
.
'_'
.
hash
(
'crc32'
,
$encOptions
);
$js
=
''
;
$this
->
options
[
'data-plugin-name'
]
=
self
::
PLUGIN_NAME
;
if
(
is_array
(
$this
->
charMap
)
&&
!
empty
(
$this
->
charMap
))
{
$this
->
options
[
'data-plugin-options'
]
=
$this
->
_hashVar
;
$js
.=
'jQuery.mask.definitions='
.
Json
::
encode
(
$this
->
charMap
)
.
";
\n
"
;
$view
->
registerJs
(
"var
{
$this
->
_hashVar
}
=
{
$encOptions
}
;
\n
"
,
View
::
POS_HEAD
);
}
$id
=
$this
->
options
[
'id'
];
$js
.=
"jQuery(
\"
#
{
$id
}
\"
).mask(
\"
{
$this
->
mask
}
\"
{
$options
}
);"
;
$view
=
$this
->
getView
();
MaskedInputAsset
::
register
(
$view
);
$view
->
registerJs
(
$js
);
}
}
/**
/**
*
@return array the options for the text field
*
Initializes client options
*/
*/
protected
function
ge
tClientOptions
()
protected
function
ini
tClientOptions
()
{
{
$options
=
[];
$options
=
$this
->
clientOptions
;
if
(
$this
->
placeholder
!==
null
)
{
foreach
(
$options
as
$key
=>
$value
)
{
$options
[
'placeholder'
]
=
$this
->
placeholder
;
if
(
in_array
(
$key
,
[
'oncomplete'
,
'onincomplete'
,
'oncleared'
,
'onKeyUp'
,
'onKeyDown'
,
'onBeforeMask'
,
}
'onBeforePaste'
,
'onUnMask'
,
'isComplete'
,
'determineActiveMasksetIndex'
])
&&
!
$value
instanceof
JsExpression
)
{
if
(
$this
->
completed
!==
null
)
{
$options
[
$key
]
=
new
JsExpression
(
$value
);
if
(
$this
->
completed
instanceof
JsExpression
)
{
$options
[
'completed'
]
=
$this
->
completed
;
}
else
{
$options
[
'completed'
]
=
new
JsExpression
(
$this
->
completed
);
}
}
}
}
$this
->
clientOptions
=
$options
;
}
return
$options
;
/**
* Registers the needed client script and options.
*/
public
function
registerClientScript
()
{
$js
=
''
;
$view
=
$this
->
getView
();
$this
->
initClientOptions
();
if
(
!
empty
(
$this
->
mask
))
{
$this
->
clientOptions
[
'mask'
]
=
$this
->
mask
;
}
$this
->
hashPluginOptions
(
$view
);
if
(
is_array
(
$this
->
definitions
)
&&
!
empty
(
$this
->
definitions
))
{
$js
.=
'$.extend($.'
.
self
::
PLUGIN_NAME
.
'.defaults.definitions, '
.
Json
::
encode
(
$this
->
definitions
)
.
");
\n
"
;
}
if
(
is_array
(
$this
->
aliases
)
&&
!
empty
(
$this
->
aliases
))
{
$js
.=
'$.extend($.'
.
self
::
PLUGIN_NAME
.
'.defaults.aliases, '
.
Json
::
encode
(
$this
->
aliases
)
.
");
\n
"
;
}
$id
=
$this
->
options
[
'id'
];
$js
.=
'$("#'
.
$id
.
'").'
.
self
::
PLUGIN_NAME
.
"("
.
$this
->
_hashVar
.
");
\n
"
;
MaskedInputAsset
::
register
(
$view
);
$view
->
registerJs
(
$js
);
}
}
}
}
framework/widgets/MaskedInputAsset.php
View file @
8331ff01
...
@@ -10,16 +10,12 @@ namespace yii\widgets;
...
@@ -10,16 +10,12 @@ namespace yii\widgets;
use
yii\web\AssetBundle
;
use
yii\web\AssetBundle
;
/**
/**
* @author
Qiang Xue <qiang.xue
@gmail.com>
* @author
Kartik Visweswaran <kartikv2
@gmail.com>
* @since 2.0
* @since 2.0
*/
*/
class
MaskedInputAsset
extends
AssetBundle
class
MaskedInputAsset
extends
AssetBundle
{
{
public
$sourcePath
=
'@yii/assets'
;
public
$sourcePath
=
'@yii/assets'
;
public
$js
=
[
public
$js
=
[
'jquery.inputmask.bundle.min.js'
];
'jquery.maskedinput.js'
,
public
$depends
=
[
'yii\web\YiiAsset'
];
];
public
$depends
=
[
'yii\web\YiiAsset'
,
];
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment