From a00921902676644b6af30df59337781f804f2c8d Mon Sep 17 00:00:00 2001 From: ivan deng Date: Wed, 13 Dec 2017 13:09:05 +0800 Subject: [PATCH] add ui and widget --- app_odoo_customize/i18n/zh_CN.po | 2 +- .../models/app_theme_config_settings.py | 1 + app_ui_enhance/__openerp__.py | 23 +- app_ui_enhance/static/description/index.html | 33 + .../description/web_bg_color_change.png | Bin 0 -> 90365 bytes .../static/src/css/web_list_bg_color.css | 7 + .../static/src/js/web_list_bg_color.js | 57 + .../views/web_list_bg_color_view.xml | 11 + app_widget_extra/__init__.py | 0 app_widget_extra/__manifest__.py | 117 + app_widget_extra/static/description/icon.png | Bin 0 -> 79390 bytes .../static/description/main_screenshot.png | Bin 0 -> 11089 bytes .../jquery.inputmask.bundle.js | 2710 +++++++++++++++++ .../static/src/js/inputmask_widget.js | 113 + .../static/src/xml/inputmask_widget.xml | 23 + .../views/inputmask_templates.xml | 11 + 16 files changed, 3106 insertions(+), 2 deletions(-) create mode 100644 app_ui_enhance/static/description/web_bg_color_change.png create mode 100644 app_ui_enhance/static/src/css/web_list_bg_color.css create mode 100644 app_ui_enhance/static/src/js/web_list_bg_color.js create mode 100644 app_ui_enhance/views/web_list_bg_color_view.xml create mode 100644 app_widget_extra/__init__.py create mode 100644 app_widget_extra/__manifest__.py create mode 100644 app_widget_extra/static/description/icon.png create mode 100644 app_widget_extra/static/description/main_screenshot.png create mode 100644 app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js create mode 100644 app_widget_extra/static/src/js/inputmask_widget.js create mode 100644 app_widget_extra/static/src/xml/inputmask_widget.xml create mode 100644 app_widget_extra/views/inputmask_templates.xml diff --git a/app_odoo_customize/i18n/zh_CN.po b/app_odoo_customize/i18n/zh_CN.po index 37ea6c6a..cb69ae95 100644 --- a/app_odoo_customize/i18n/zh_CN.po +++ b/app_odoo_customize/i18n/zh_CN.po @@ -89,7 +89,7 @@ msgstr "删除所有生产单" #. module: app_odoo_customize #: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings msgid "Delete All Message" -msgstr "删除所有消息" +msgstr "删除所有消息与关注" #. module: app_odoo_customize #: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings diff --git a/app_odoo_customize/models/app_theme_config_settings.py b/app_odoo_customize/models/app_theme_config_settings.py index 187ec605..07eec402 100644 --- a/app_odoo_customize/models/app_theme_config_settings.py +++ b/app_odoo_customize/models/app_theme_config_settings.py @@ -398,6 +398,7 @@ class AppThemeConfigSettings(models.TransientModel): to_removes = [ # 清除消息数据 ['mail.message', ], + ['mail.followers', ], ] try: for line in to_removes : diff --git a/app_ui_enhance/__openerp__.py b/app_ui_enhance/__openerp__.py index d140ce38..7f1ac25b 100644 --- a/app_ui_enhance/__openerp__.py +++ b/app_ui_enhance/__openerp__.py @@ -25,7 +25,27 @@ 'summary': 'UI Enhance for Odoo', 'description': """ -Search by date or number range in List view and Pivot view +1.Search by date or number range in List view and Pivot view +-------------------------------------------------- +2.Instructions for Activating List background color property + +Just add tree attribute like style and colors with condition you want. + +bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')" + + +eg. + + + demo.tree + demo.model + + + + + + + -------------------------------------------------- """, @@ -33,6 +53,7 @@ Search by date or number range in List view and Pivot view 'data': [ 'views/app_ui_config_settings_view.xml', 'views/template_view.xml', + 'views/web_list_bg_color_view.xml', # data 'data/ir_config_parameter.xml', ], diff --git a/app_ui_enhance/static/description/index.html b/app_ui_enhance/static/description/index.html index 46a72c23..3653b5df 100644 --- a/app_ui_enhance/static/description/index.html +++ b/app_ui_enhance/static/description/index.html @@ -62,6 +62,39 @@ +
+
+
+

Web list View Background Color

+
+

This module changes the line color of records based on condition like state of a record and helps distinguish between different sets of + records based on condition.

+ + +

Set Backgroud color to filed in list view based on condition same as colors and style attributes of tree view.

+
+

# Instructions for Activating List background color property

+

+ Just add tree attribute like style and colors with condition you want. +

+
bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')"
+

eg.

+
+    <record id="view_demo_tree" model="ir.ui.view">
+        <field name="name">demo.tree</field>
+        <field name="model">demo.model</field>
+        <field name="arch" type="xml">
+            <tree bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')" name="demo_tree">
+                <field name="name" string="Appointment" />
+                <field name="state" />
+            </tree>
+        </field>
+    </record>
+                
+
+
+
+
diff --git a/app_ui_enhance/static/description/web_bg_color_change.png b/app_ui_enhance/static/description/web_bg_color_change.png new file mode 100644 index 0000000000000000000000000000000000000000..cecd5f37d42b3adc7aa56f05753e53f405369e3a GIT binary patch literal 90365 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 literal 0 HcmV?d00001 diff --git a/app_ui_enhance/static/src/css/web_list_bg_color.css b/app_ui_enhance/static/src/css/web_list_bg_color.css new file mode 100644 index 00000000..2afb2614 --- /dev/null +++ b/app_ui_enhance/static/src/css/web_list_bg_color.css @@ -0,0 +1,7 @@ + +.oe_list_field_bg_color div{ + display: inline-block; + height: 100%; + position: relative; + width: 100%; +} diff --git a/app_ui_enhance/static/src/js/web_list_bg_color.js b/app_ui_enhance/static/src/js/web_list_bg_color.js new file mode 100644 index 00000000..0778f211 --- /dev/null +++ b/app_ui_enhance/static/src/js/web_list_bg_color.js @@ -0,0 +1,57 @@ +odoo.define('app_ui_enhance.list_bg_color', function (require) { +"use strict"; + +var core = require('web.core'); +var common = require('web.form_common'); +var Model = require('web.Model'); +var time = require('web.time'); +var ListView = require('web.ListView'); +var session = require('web.session'); +var compatibility = require('web.compatibility'); + + ListView.include({ + willStart: function() { + if (this.fields_view.arch.attrs.bg_colors) { + this.bg_colors = _(this.fields_view.arch.attrs.bg_colors.split(';')).chain() + .compact() + .map(function(color_pair) { + var pair = color_pair.split(':'), + color = pair[0], + expr = pair[1]; + return [color, py.parse(py.tokenize(expr)), expr]; + }).value(); + + if (!this.colors) { this.colors = [] } + } + return this._super(); + }, + + style_for: function (record) { + var len, style= ''; + + var context = _.extend({}, record.attributes, { + uid: session.uid, + current_date: moment().format('YYYY-MM-DD') + // TODO: time, datetime, relativedelta + }); + + var i; + var pair; + var expression; + style = this._super(record); + + if (!this.bg_colors) { return style; } + for(i=0, len=this.bg_colors.length; i + + + + + diff --git a/app_widget_extra/__init__.py b/app_widget_extra/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app_widget_extra/__manifest__.py b/app_widget_extra/__manifest__.py new file mode 100644 index 00000000..ebd1d4ed --- /dev/null +++ b/app_widget_extra/__manifest__.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- + +# Created on 2017-11-05 +# author: 广州尚鹏,http://www.sunpop.cn +# email: 300883@qq.com +# resource of Sunpop +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +# Odoo在线中文用户手册(长期更新) +# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# http://www.sunpop.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# http://www.sunpop.cn/odoo10_developer_document_offline/ +# description: + +# base on 'author': "Gilvan Leal", +# website': "https://gilvanleal.github.io/odoowidgets/", +{ + 'name': "App widget extra(Inputmask Widget)", + 'author': "Sunpop.cn", + 'website': 'http://www.sunpop.cn', + + 'summary': """ + A Widget to make masks on form fields""", + + 'description': """ +================ +Inputmask Widget +================ + +Based on jquery.inputmask 3.x `Docs in GitHub +`_. + +| An Inputmask Widget helps the user with the input by ensuring a predefined format. +| This can be useful for dates, numerics, phone numbers, ... + +Instructions: +------------- + +- Just add attribute *widget="mask"* and *data-inputmask[-]=""* to **** on form, tree and kanban + + Some examples:: + + + + + + + Or:: + + + + + + + **Note:** Use *contenteditable="true"* for apply mask in others HTML tags: span, div, etc. **Improve** + + +- Just add attribute *widget="mask_regex"* and *data-inputmask[-regex]=""* to **** + + With the regex extension you can use any regular expression as a mask. Currently this does only input restriction. There is no further masking visualization. + + Example email validation:: + + + +- Masking definition: + + :9: Numeric value + :a: Alphabetical value + :\*: Alphanumeric value + :A: Alphabetical uppercasing + :&: Alfanumeric uppercasing - (Use **&** for escape **&** in XML file) + :#: Hexadecimal + +- Attributes: + + :mask: The mask to use. + :repeat: Mask repeat function. Repeat the mask definition x-times. + :greedy: Toggle to allocate as much possible or the opposite. Non-greedy repeat function. + :placeholder: Change the mask placeholder. Default: "_" + :autounmask: Automatically unmask the value when retrieved. Default: false. + :removemaskonsubmit: Remove the mask before submitting the form.Default: false + :clearmaskonlostfocus: Remove the empty mask on blur or when not empty removes the optional trailing part Default: true + :insertmode: Toggle to insert or overwrite input. Default: true. + :clearincomplete: Clear the incomplete input on blur. + :alias: The alias to use. + +- Aliases: + + Some aliases found in the extensions are: email, currency, decimal, integer, date, datetime, dd/mm/yyyy, url, ip, etc. + + Docs: + + * `Date and Datetime `_ + * `Numeric `_ + * `Regex `_ + * `Phone `_ + * `Other `_""", + + + # Categories can be used to filter modules in modules listing + # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml + # for the full list + 'category': 'Extra Tools', + 'version': '1.0', + + # any module necessary for this one to work correctly + 'depends': ['web'], + + # always loaded + "data": ['views/inputmask_templates.xml'], + "qweb": ['static/src/xml/*.xml'], + 'images': ['static/description/main_screenshot.png'] +} diff --git a/app_widget_extra/static/description/icon.png b/app_widget_extra/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c57f61179fe4d43c2a23f85bc86ce181aa7404d GIT binary patch literal 79390 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 kPar(JKzDz$z z2^wgfdFh=jsSGYz>Yqmek>0Gh5Gr!j8&vV8#f7m!09EqG+BAM%27C9%Yh3fAe)5nn=f?x3#i9e5i5`)){?2uZ*_^m2G( zY;)cnAY7qlxaZe*v2y{5g|JIuQpH>3_d5Ki!i~TBWkBHdCQ_GFU}kr9tcz#bNSOo5 zwxTR$!JS-$Yo_{4x#N-A;*J;V+6alI(F;MZ!CY0)8Pf@(LEP- zUyZ?ZV}UCLISKXYhj~MBsh|cYLUa`30)WK{5eYByexZruP@gQG_Fu7^0V)%tvV@IXXBD;;4!T z3F)uMlJ?oZ=IFE`QO-_4%Cwhsw2-MJ2fF3Zp%CS+Fs7(IeU z*?$|lJb7w#MJy6%ZI@x@DGwcM)=jAg9sb!wdpgbQQTxVuox5W{YtFNsh-&qKr={$0 zaEHa{Pr!3zf*L7btc&h)VOd^i^T@2M`C6GK*-`1SLK|uA!Vb81Pi(*-DUjn)DUYfO0Agpcfhdd$i2iY#4k z#X10wGT8dMoIvtG7DFj_;MMx;|JOogf)3^OYTTc=5R+wBA2;`QL@L4#U}|t2_&4w(n|F@6o16zv zo^kEH$5h_=#U!8w6DZiki2ff*FjNW<5}=}v7gGOMb0x+M03-nmx%6D*+KzW9!6*5I zygG@mVc8jZ_sd$$e`jWCv|+;1uAZK4F|GT9_J|05&kZ%6v@_vD2){vlrjpaT_4OY? zWvwnbdFi0VK~|1la|Oxe_|!mbZk$LBOh0td-B7Dmg5HJ}HzvzJEevJPHwl6e`&Gnf zU~rU3Hk&d7vA!1M$SuwES`DPy+7UF8KRMECqOoGZ9L1jiRDA{X*1y#`QQIak!w^SN z+rDYW?PY;PuEu&ikQMk`$BYlSPZ&@+(K?^J0*Fe$WbzJuyPTV6zSW&6z&eXcn7bxwm!ZxX(v zPn#UASd0oZZFAm>3HNACG9=$orf3}jqRc~VpMwDv{zjt9{y5uOqI8<%VvYZb8$VgO zUU`1@(pP5_*3`kdloDW2aI2tlKIm6S*rjMCvQ*=uR4p?JDiHGM-C6QT?dUYWhv)hN z4D=C?@?@sxI6@z_bPhjU%f;)V5)x5anVw)ztN^RZl^AMm##Fl1yXfQr7Rth!pkWd+p=AudTA_<|OChfORhN zKasFiQU~v{h-}b)&*^?cU2tzFUBf8@Bb|ZS9Rqy{{ro(p%oe@fyw(8=ZhqBC&P_bP z0h|8m#;143Q2Kbg-O~QrA@79m-Y4(gGu>4e0#LvAw`X<@W4z-j(oXzl@%ya1TX)=C z7n|C%$Y#WHZc;CWNORuZO)l?S_(cQ6GSTw(=N`ijRyi&iwbxZ~C-};)_OET%MR$jy zdrK~R7pj*6>JToDDG+*q4{-Z|JM8a8EJH0!F?t6G3^3uis2`qd4E>=*SV!qo?mE~g z;Sn(=@Hh{DT*JTDyQr(H~qZeKr3_5Z|DXU<+L2-kW0ldyc5W!zhYW8 zw!#%fjr=ubG|70KPP5A{sq}M@;NQwH;lFeg*Do#(;|^~Vwo{(E??-2A{(UX5n^YaO z^G;LtKTThw%DM1qkkKo^p5Z46jrLV!4F|2+<1kGN-nEP`NP64pHAEBc?7QP1bJ;>L zF-4r@r*YUfZEvzkIp;4KeqC%S7r0HY7nLV&dUGGrYI-fZnLM0bXQ;Q z5Yh8N#K|_-P>+!OHYE44g%wxUf~)uz%>s=nvCh(3Q?Ab}h3j}%o*m5m^bGaH9!pGf zp6!7Lc=Vtw;lYZl`xIw>Z0| zn1;+u2rx2xh6~7|3ys}Y_9_EMm7ovzT7X6`uzczI_PSwdC9^@h>DjgjeXYH)897Ri z?Kd@CRpVqEc5(9upusvxPbtsA$Vm|#+v%dQ6uF;|DgBtvO5_VlJdI^CE9)_?;l@{dmkbwMS?%q3gvw` ztfTze?6;esV;!8+YzY+_!cn;I& z5&0+AwDsiSr5~6H#!G~Y@XU&^wCbH5&24OuRgvV}v-yIu5&!@o07*naR4iDc={cYG zB&#|Ddp1Z(U@@S`$tCv0jemqL9J_6f#(69pWK6RQ<{d4sy&b_2HHLnnyC6aN0D}~z z{akU-pZA6IhS=T<#^g*HWT|HSf%D6z<#++WWWXijEq}jQ-~0(0FwuY8bAl)Dhaajb zxci-rf8QP75?$XqG~>i%-i?1c3~{V*R7uETp2ME+ezgG)0KyL@(S1{%`;CR<0ia&j zyBQfR+c5e@xXS_(H)Dw7!9t8MfpACw;1yGktZLaaIHN2jd8+Ox+e;<|6Xl549bm9f zfOzvt?Y9=W3&$3Y&9&#my44SRgcl9@M&XgCJr5vGHNrr70NJl@_n*eJ8)WVo)v|~N z9HN#!IA54!w@s{h0eA$7?zwxicMLkyCYr4@`E$>yL(FC)<0M@N|AxCoS`SnfC(#3@Y^x`a6)=CE!@GF8pST3YLTvPT5yy)^xV$j^CB6 zvANk7EqP5tA9!=*IS+sK_2|rJDhCDEM8`khenZ^kFaYG+x(6Dz?aeV{cY>KbReU3s z01_{E$ytuBZr$bsF9J;4FXRB+8VCzh%Dk9&ZM<5^7)6@Cm1U~ zjSOFqe#R|?SqL!z^xeumQhKqwG^q7t`35RHPYC}5V|naxT+FODfeAnDBwt*ist8iY7q$_e_epc@|&LpmE%!%mub9jyf zdbRLt4X`9&+qQANwzF0D30LNQ>PZ>)7+iqDf&480M<bygZ}i6fuli72$P7nvH<__&Ty%>7ytr+ znurmICO+(n&eI96OR~^vls?yF#Z5sFQty7xHg5L!qAr9I4s&hMeRXX$W%-pUQu>d6 z5CAaYheJt^9*zqV{yYfK$2zP()Egjh;T$P*^~Im~JxQt&VVj>+w%t$o6qQr$hGfnDm(gkOzUyQ&lJHfGUHgX>+arJf z6L&iSJH?2j%tWeb$8sBr?#Qr#E-Btk71^Dn6UmGSW#d|s#Jaf($+Cp7s0Vfx+%m7? z;Ykjds9+611~6Iw0Q>*PL4a_;0nh}*|MgkZ-k3PFtUm1UU9+)L(hN@F5@CLJ$`>CF zK2=lg2sOhRagd+|JYvDHw=KsWxV}agt&5Nj1Ii68uAc>>?j+}?c1vBjmWYR zw#?F!DWxeGm|^MykyHyr;rM7#JJMjlENTD(8Oc|jG#CH?2ENivAs)kuZt#*2>HF+U z<9Rmyn#v`nYUe4Zn-nAm)h&?3bBvo{-|KN*R)}_E)`+U&b0;)^UVqKmW*}Ue1eIl@ zQ|?&+in*|3X{MIDV)H+q+qb%NkBAtFxRh+r=xsynfK;XG6)EHt%rWH<)$TaL5o5>WMZgLuN%5 z+fo9Foy9pH^nQ_P8nf&QAQkCA1wka7rbrz|dJgLb8hyomRW&!`ecMTH&{5wXOq&Q} zCZV1QjGA25EH!g14-9~TWQso>>HU8XJn)q2CMQyY#QrCr8Y8_dM`8O^MMj3kh(+x; zef0Z6NAC%F>xmA!_jf(fK?Z@-e05da?rVDf@d=rk$*X^Krq6Ubw|sGB&*eU6qeooc znfP*zbM=A;3&=;C=eY$W1UBTliz4b?LmrGkA~t2KF*G598<{DV?eF!h+z-Fcq|Bnc zApPjP`(I?>p4jf4!MZWNp?-Vjk-1?%hvTKQ9ue3RYPw?4UH`rQ1&X+FnM1yNsV=Zb zk(@GT8|h$|Cq;)lMFbqh90R~c*rJxeD+VAQVC5op*M|}B27P&5{I!BfgT(rBwbsyd z;ww-T&IolFuEJ#*8(3O;+33GL3oSP%>GSq|wzzJ?S%qSXq;kXp1&KCmL)(yhTkdRk z7rdD^=LzrcG9hr0`$Y#ek)c^c1J@w2_;E4oRB+`oFgeBvhzG{_gKBd7zZ8T4$MHNu z+;^THvr=Uk=o7=5E`fC60Hv{^DV*Rogi9_O;#1OYwBrjSo4)ciu77dua}RhPex5r$ zjKo&Uzc?fe*6uQrmWK<{#YoisbX#4Qb)| z!@Hjxkwy`+(sA%TbZtA$zcATA7??#Z&IF(scm_HG9)Nt~k1`d0B0bolwcoSx@t5k} zidgFSl;OfrFR3{$zPZE9aAR?G`;JXro1=+6>-P;|!!AJ_2LS6Ds{ecS?~7B*Zk+Il zTTY?OiHSft27!*Y_a2h!zls=|ZSaX%=il8-Qr}&sCrs*bs3nb=BR9TNnzM@%FUD;P zyW%u;Y{CU$cXx@DoQQq$s*-<4N(ThuK$Q#12eq@7VBFzTx;^!AV1eH9HKk|8rM8c+@u?y|n75w@U@oK!bx5+ z0n{Zp)tcmISNGO5q$~Gfqj6Wo%i*tc&W!e$HM7yMsjWf)B z+q->(laS6ygi0c4j7Uf@IFJB1fGAjkijndYd-XUm0$LD2t&Ox=mI1=i?l3$qEFljF z0OdK;_VhNTy7I26IBQ_)074CnxRzMm7hNCLw5<*&qNDRprVN?PF!f0Ap7Vk$-!me* z80;~&tcIG+q0$TAU7L^y4+0GV6mfgb^1N$+T@)P~P34(LBg+^tHrXTNNCNYZENciS zb{0ER{y5~$>&MLO4K0isTsuy8JsC+_8N+-$2}Ko>_+-c_ti`lz|=)B)+|4Vp4AbZAb1c6bL z`>{=sFTh<|T=DlaM#>O0Nz!H~4A z1`{7=!C^$n_U30LcQ}$RKw_+USL%+Xca>*P9W?x=ZEWHTP0A4A;~ab27m>7&IXm_^ z+kIp~`Gt3${`S_)VPHgcCirFUnH-icX&C)S?2~}@Q=&uv+rXHG5XRI1%mdVrJl*XK=G`0?q>B4;&Zoj14s zgbuN!u1%}!?xlr}i(1&1wy8V{I@Q{AW$26{FHg&zc4E;bH*FgIMPD8dyd;EpTUmJD z!gZaU=amjq1ON({LoZi1{^rdcFRg1|y0vFyu`kmh|0o0dQR*(9m3>maD;w}Jh@~DE zBm@8sApk%K3*S2K6buHYgq?n8;kMSrI|Dn%r%f$LE!QKzXKk;Un=EAMqChReIEEaj zg1dZOW#Q`1z@RQ>A49)5CHSyCO@ED(*VEv*aOtbN{<)@j_&>xMJ;H2#&4`_rcgu(& z>pSGSSfn#7?jeJ>suPy>R%)r+mKOO}4M+jduBk3lwHUE9V#~)Z)6&MwO3Jt{ zB^mUAOI9h#d|+#Hf>==wSssz=L-g<{A242#dk~4Rqg>t$j1x+#*#OL;o`M-A@`84$K}!C{U8?t=Nrj69Uf)ssYrl z354~&MpSlv-lf;y_?ws3HQlpq&%XcCd{}TrAaU=o2gttD_U`oUP>LbJmRk6f;rWH$ zjyk;)kj4|YC7L_b(K{kgXuD5Fz*!ct9Ip88M+Yte!0=BLnpgRP8d0h&z zVm8H8EpW!I=3xqTA|Wg>KBiMqk#Yuj`!r&>kftM9 z&3JQZ%M#qzij}IEIBstmDXP`-dIQO^?4>*0-tMl8PD~q_?T{T2XQ^@YxYVV*aP_R)BFjpqz5^s4H}%t*TF8L6av{k~g>8S0K? z*ij2-*d3rm*^cFn)iX;*m*hDU?-)Jf1ER)~SH-K5_~10tXG{Or(iRuWblBT#3%}Ik zP7QFB3u05hEPZ;Jv&5v9a2yOP2x;n;_ErGc($N~y)E_;@BP&(@EC8s=$nwa?#hjDx z0U>8e#%-dQY*_X0bq#pB^-K`>QBIU3h^u>A@@#LB5!>Xz2(jl1fj7m3HZ4bdh4PpZ z#9?5F6QYvcmao2c?UGMk-%(@72@t&lGtQne$+f<+V0Zn5vn|@wZhz&Yh#Cvtd3n-3 zv+^HWygjCovW(=r&d5`Q|Islbv=GQ!Qs5OTCh?AY5BwuUOp6fWlmz~;x~#{_9n}!X zs@bZVofg5W(YpVu9r2b|);#uk;1nK+CEE)pC!MpQc&5Bc@5HSoKCRuyJiBm4JeDk%YuTZ-Q zUXOCZDBsGpeO-Os!LY5mz141;?d(PNicby@9cxYNw)MP#()5|5SC2<%YBKUzJX{H ziF}CVOEI5&AnT8qWM^NrN7eFO@?f9$Fy5I%CLu9_6Mk*|D*_n+@_ZNSX0JtP?tW(Q ztER=TuYaU5vUhy`$(L8%QJ7o-#4vbr%Zi6;BD;|*Gpef(FMDiS&X^O@*M!=p_EoGA znjGwncXW1~LsPw{0UsLC%CfFCV#Gx6N4Dp>2H$f1&iIov&JW0t>fxQhfKtoS4N&ZddW#MW^LK5lZm3<+xcA^# z_dTp=tXt6tufbXX@W{%fg5uew6_fLe^SsBVou9HO0;ykb7Evw@8RZ^lk^rA~iy8Xz zEV5Zg=}04z$gk;rXSyT~9+s=evfuU#e~iYL>6yHxOqHsu@ckRLZp4>Ts&gDemMx%h zEe7*5Te|r=rKdSXpVKDxOI}7mADk>QV^^xL5WvkCAZ8lW5-=|)MOMaezS*m4j4VKXA<5v}XRUZ3}j7J93u@Y3hP+FHz;s zx_R8>*`<|7*=0pY0ZjxMQ){(E<6Ck<}7EMYyfySxJv@D0k8r#2`JaT^2 zh;3`}KE*dsdz=!{BZfp~NZ$M;Wa~}z5e0!6tH^NWaC{I)P1O=KAU4s8bcd_o5gqA{ z@v{I)8>9Ok*!=p9C6`YwtYlO`LVprc+<&w+roI3uLCLK}qx$JK{S!{zd@F%;8Ho z1c?A+F_We-&ICwuW>3$ZW&eD2Vy3i;VVTDr^Tx#^V`9<5 z9Xq21L)5`hAwAguAm6In99dL1)Xm+rX2Gs)Kefj@LfF#Ldie)$-YU<#dEAs+#!WeD zR7Ak{N0ku*0P&Pme!Cjq-Kj`erD$wI9!FwZ6@d~OJ-OuC69?U?8tqXlh^fp)AM&ZM zQ2~$%+sypSnyVujU6sa@DU^5mdN0lkYNDYgLM5IHnaxiPtMiH9#+H8w3^K2Mn7`on zmk*qsZ%co8_2cg~<~=a>))c`@se!Qw%);KO8~`J_YN>WWz}vtCled1f1i!x(xH8#s zByP?jn$yPA31nmo=59UxS~2s6+C}E@!k=x-uB+5 z0_R{NOQa&PRVT8+Uvix%ca#y>##7E#Jo5RqFFzbwxupFo0pX(bfkcxWlGF>GtGC~S z9bbxBpGwZPT6kzQk{;;{%$V#w=VX^nKC;oykfy$~ZQ~hlzWDU2?)kMVHOs2X$ddV^9^<9Pcn_MDB@K7u3v(T3mX8wkwdJX?5xLp9&PceY8YyWR z_OZN_Y!^HqcP6fBcx+dE^d3EHVfP%yyfX)#b!9=cFZ89rItg}<^k0@^o5|PyQ?HrV zyI`Kn$q{13k(xT~H`GWJ`0~#kaMG6G-v8b>uiRUh?o2@lA%rn70E95Fn|upnZrX1d z03Y>0z#;V$nhXSFZ0aIk?P!=(mNhutxxZPbj4&YFkCinOrUQ~tbcxwLL$m}#Cc4Qx zv7M;FL{f<>eZ2+_iLte1I1`^v-Re3&ug%$>_2)(1dDD*o}L$0nqm+!1M7Uh{BU@O@55vZyHF zfE+)mF!WMUUU2p)LW;)=5Cd==iFj2=Q=j^J`O{x7Kgy=>7vYhWCr>-;vY|&?#M&@I zqNo610HLPi!Pefl0o!y21e??(ChHuL_C|i{$f9cM8N!3pw+l*AKet=7nN8D^XOQFDi7(B0s;VWXc`@wmiNQnNsKtlG(mt?ts$XV z13Ux1dx=9508puf`p%9=KM+mkK!!;ua~0a9JEA&T*12qwFDam{v7y3*5i&$^aMoXP z?W1xf00HLJ%>B6GvlPe~oRO3wBf|`1rM-<+=5OBMi!PKB8C}$ z_Uk+6IiG3>w&h6iQb&5+Vm3aOV6MSA=0n#i01AK!zyr7rd)3l$OTT`EH1+Zi-h6G- z+7Bm65)>1yb4~ku6|zmHIN|iU#wI*_2p(}OKmA(Wf@UMOCu|Goal6r* z<4JOH$S(^33;-xF40K5X9&Lqd(=CiO0M9Qj`$*t0@SZVhFj@MsL?7-4q(yLLF1|eAF=Zj#~buLWC0iQ5H z;ayH;h$0SYAX*Q4uf(hqxC~PaUunh`>v_E(progXRD}^1fjT_zN!GJFQP71vIljzu zQ%0UX=r{Y{gu}?d`Mb8=x@cZgFmSlu@JJ)1sb{?T!jq?-b<4OP9}9WpATXETdHSO6 z`F3~3rRld)L$g5FEOWBY%r1%eQ+bEozPHbPiTl>)ohR>%jjZslKF1YZ(TXvR%(MwL zaqZoeFO{X9HD|z0q8TugD>x}VVTP(37t{rJ)y0>do%cybavlH>lbC`fGtQ)@fccMl z>6(Bz+@qi9b`ki|arZ|9N4$XBXG>MXdKyiiJ>sJ5{XEis#4OqpPqfE0-6V=2^k*qn zwr`+dP0AiF@E%3<6A+LEAc#EXd5+uETHP3^uZe8w?D%X&)2l<%{HJG!bM%K_Q?tK7 zQ%;DlP*|%@J%ytl7%}{mmC?z)cruSVDB(;N$Fj)5ggn%FUD@S-s=R$v-UVHQ#hj{U=$lyU_#x_3jZm(6aKIB)mT0;%3 zGbF>x7$Mb_Ck>jCyb0Q_=O`;-gC6(YIzn7~p|s`xT)b8P(oFn|DQ{yfX0c=h0L+M~ z1yQj7d+Nl|J|F}LFpg<}4(CQ_?xr=jemw90M*4k+xtrDiz^ijEI+_=?7`>(Hsy%_w zj+lm!;xJ8&g+G3L1Qsqf*Vu60p zQ@9TuN1TM12MjWg000;z-%0VrExNle+-XrPD2x&+a(kmOJA=W=9?nt*rsM*EX$G{| z!|ue3U$m)n_oO!Kyg)<;X!wHljPC`J@;bUM(Q!oGEjrm6=?VjgNs`6)6`LjHV zt;(PI-5+y3zUEM0ztbC1)h!*ZP2jPW^Z)=L07*naRKdP29j%90b~AU=nmn)XzG*WK z!_p4`79)&MftSjX(xPf#hiS%<;h;E!mueH?MTQ7A>96zd*^%yled-BC`Z`M7A~C>V z7Blp+-;|{lENl$kYZsQJ6)VJf(!f$PfhosE`$wcf`R}*YE{!G?*j#@sqE%iofnq#J z0thaQAI!vKMU^7{7%~u!dhKX`I>ZDJVus#l8X!4&!!mfwu2TzyHp?optTPM7WcYHM zL!UkM<;^s<@4BH$AGA2O$9pnu4g>jura&2h4NqOy?BC1yKMFVXBe1T;a71a06h0P!1u3KTKl@svGLgc=LtBYXJKz zKWCR#RQa>qKOMKs_4slxut9Z(m<4hz0GLclYIw#mo>9W`GmGY+%iB zVvB-iakgVxrGNA;&cH$#GthxCgn$@`0>;cl00Of|aNI_K8VIArp!5NtzPx0^Z`ZWD z5%GN1d&&7DCWgQIQ;*R~OewC1shl>aM;llDK`2L&ryx!U5d-rE%o08Z_rH6Us`~b! z65iJvA5^?Iw8BA54+ja=1li}-@2>EqDm(xP7yu5B8GP#N<+m=HcUayE0IK|1mkk>| zyR_mvY8?dJvT}N9#p$ILPn~ww+)ZomU%KcZz94S>cwUu1>nPNJ3*Uz8I1o7=2Kt2} zp!3_-zuo-zfN#**8y4JF{luBqejG?m&D9$ihb@jU?9RdEz(HFt{O);}txvm3cya*k z{5n{1>ocv--Q{%qjSCjswlBVum$Q+&GhchG%KcBksXU0#9}34J^pA@{^uU+On045D z4v!`YDPY_CfspR2U5L0Wr?d&q>G zlZVY7vL)JRH;iZZENoi&??-Ancw~z;nJ!|HWJ-}_F^f^a0&LxR>J$II*CjSshMSK$ zhbQ%gOKdrV#X`i+9Ux3dKAd95Ax*vY<9P>dZT5#pRxTSh`m&*;EB%L4beZBntWs85+x&0}`%{TtxFs|o7U{Q-ld}Gf>k&nv8fZtcYeA7j*eOhv&-GrMm z1}b`{(B3e-%~ZDE0=dIKtNC4bM_#RahS~FEfmO3hp3ohoAFXgqnYytl(#qRXk;N=e zTD=;n?`}=b@bntp$#NFJ|I8}v?@J=Y;JBaE%VShSSODOT#5|d!M?wrDAd#{JfCk9t zvOyNn;~k*#2sp}H38J94`|Mvt#D5e1&7}MKWF?%t&g3A~HSAofVkLE~Efo+v6Gpuo zo-jlf_lhp+Hfkx#3h-3t6+yF16HR${!;M@pz}u5JDQdbw3X;lJ^Wk%xIX(fb#9`Ds z4{7R@7oR@#rU#F#+%j&;E#s#AjL&(9aLdYl(`L*rt(^Vl3%@FBvZbT-fn|%2+UBqy zJm$d!O)}hk+9dz!H_c32Wq!$3zn+{_Iko66Z|_-Z-F?ZLX`&vsqp>*JkmY)96CS?V zF{&uOHtxQ`t3qQ}aJH1@Ns>ZQ-Nqvl(`AP@FEw{z&HLMXzWU?De>NBiEEHC%9)nO(^?xMb9N`rd~MrwIsJC3yx-a@ zIc3?91OjP_&RG&tu$9CM0E}?*FR$^y&=d?DIs-kj^3-W_g7^OIzG*X#90R{Yr9X4a zjeq#H?&bZ<79Ztor$tQ==-KJB{x$yjJBl40#v;CHiCyh!Zh!xZm(Gqq_k`OrC0@JkSykzYN}W@rSvbKXu&!be3TeqC*7+8 zWAEs=a>HjU*QA~>y;vBY9a<3TR%~sSA#pg3XugR3!OzaX5{pDdMHe*ks(CY{T1Cvrvu(hY1+_hli z!{-(irF#Eegl}v}d=Qc?g~y5Tt651_=gV6<=l1#BHl8;vWqqQ|nKb31l41D^iN@?A zmR^kss|*d)(EQp~cQS18JhZKJ4X_|kiIb8m%}LWH-V9&^0SU~4wI&8J<)=Jf$3Vy#p&RuE7pfOf8SqlO;Eh zacyGd&3~^?{B^s^%RH6LI}3~-->NVJAp`(sVlfHa$!KlD_^aLbhi|urhrt~^QWY}@ z=$anmqIKl)TI1vPL}!9kBvB3-hy+OQ4V)gKwj|m4cgA}#C%(L)=^yj9Glz3VS-KLd zJ$v(Y1AE_dBG(zkWmWX`y*)3=-t?4CD``&lz(T+i<5L=a6UPBu0|n(&1O@|&4o9uq zks~2m8D+23TisE8U);W|!>m=cIoWnZnpxm)qR4aZm#AYr2Npswe{*1UeRo9XFCFE= zE6z7sKd)keGXft>Djl^|UB(jaN*~I3uF<Uh8#+G&Mz|zPOh-)N+?P>-m(f@F1UCO%ogP zvy=Zi>AJG?lkyy++pK6hid|H8);$w%$QJw*D93S!!oa3rV9axmA2b7R88_u9_X_=cq-nLr`ufC`#KtORhi@FRUkE3S~ITZj? zY7s;aQL-YWsb{?T;=wVnKLmQ|&{2o7fFp$ar_Gq$@bm#5Ja^ODqnxYwCW&t`N(mPE zogJ-CmE&3b*|uljRaa%$a?Z^=t03)NvwcNX&1FRDB{YTM@WL%G#5&vVo&KUr@RWP= z3C-6s$Cw?T-EEg!P5*w- zMqnYJ8BWK#X1z}RYK?d6%L$@8R!Q~_niwESMtx6ilx3bWMrh9kQIaxBX4ys!mc{u} z&8ORg5|)fnl2HW>9;@p&C<35PJ2>{#?uSF73C8tV)7 zHbtRNqy#vQ0OPQ!f`g}xqVU|-I+*|Y^Dk7vpBqJ6!S`CMN^mzPYI+ zOL}&~c+Yww~}APs=(?V(hZci5Va_Y3WiH| zHYPd@E5;y!kpdRh0r8CIfieE8p1|OD-+uhluedKhX}R(tX{B+iW7rK$P0=%l+0VKz zZR%-`QKtdu0K)v`U5~sR`eI!OBME^M08D0T)Pf&$SBM+}0E{?5NWmPB4@0@jfxd;c zpB~iW#-(Sxb?rIt+`OrG7XX;_=j#Ua=Q`Nq0RxzkuOzN@6CR65Fc6oZOyzkVV?nbb zZ#TTpYc5IPKq8njW@PgAjYz2Hu$v|r&q!}y-rY~RA78XO8r_No#llI0%hx=T_Qzx+ zL0D3ew0A+-xid#EdJSDR&;3{5xtDV%oReS_0N5e84O==|Z~gdSDzpD@VITmwW#zz) zTXn;+B%z2oOcBEvV~h}IU}jn@MOIEMKQ9qS8ixQgJEF{>e%_i{a%E@zQ*Cj($8C8$ zJaFnKA9uQeiE=0zL(-Xdr~hdl^`!!cZ!Ze}|2^ zt-%6_H*St@_*^s91CN_X(aAEoN3FzahijB^Id}D=*)ccY$z0lEQcfU{MMLADp6J zfBEu31Y-`7f&JZpO~Jm9nrI63Rr#|#vhq`E_D#V+Q?Tz4UBt=x#Rtx=Egh}LN>_il zYe+7iR;xFV7 zq9kwc+taFw_pf|=diKc4xno3#F)D7WCqbRhw9{V1efR~PG6cL{TRidvM|wr)1K*>F zRkx|@k@Ky_dik>3axQ+5f`Q>sHQEo9g#3Pv@2sj*HwNmnGBQso91s0<4L>}Anf)We z4M^ORZ9CJ)&GICCq62_z*dgw2?0DwhLXIKIaaQvlY1d-e%Iv8Q2sIJoWYR1vT5hSE%`&IQQg&;`^q~*q?79O`Y=6-@iM) zzsDBZ08I6V92@SguZ^J{>$nUNARxbT*;QwdxL}K4I zXstyi@J-uw1`;|9QxXp50i8K;>fqFJr>rC?PWY*=1VjO#MUDM++n*<q3t3guG_qwmkF{&qt4&;@IycUn5C@X$aE5zSLN5oc%c0052? zWc0MrcSWM-G&$*0EINQ$CNibbGi>MHsWt7ipLqv&m^#7_(n{ocQ-A&dgHX^ub#wM! zHTqv0p5}>kcHvAy89}t747;4Lszw>k=JmaLmwuci^6>|+ZCZQar#!H1adWWm)j1bcH`G1# z_3{HbWpe&6IIC`1$@3;1AiIuomg0vP;VrFP_E|@5C+090jD%i!kj%{WC3Tz{biK}G zUI~)~o#-nHX?bUE8X4kD7>eq=>GtSd05TKpDv9z~kP<1H+;+~Qclv72G|jM{)%4rS zGCN04occ}fjW7$_$MfR5dgyvnUm=O7GN1@Vu=~81KO#{b@L^NLI3mebZ5?^SH zzsYolvEJIjbw(3ywoOi_SOnsOdq1+2bYS9kMxV-^TF!~LwNyOWcO_5&-CBow-yfd> zKndXl{*Z3a!3m|!zxe83Rg*n`*S5<)c;g^0)Ni5>JWx5iwDK2^$@BUSkc7vBhE-tO zN-GvKQh310$SeL=oSA! zT!_BW%`>1t4UUrx6H{wSvoVoWEVwmvZIK+f?iSu=n0^R#jK~_}b;P+spJm zFar!_7>a;&L=z(xR4^J*Ax2|j!^9-EBx=;CiEmJ2i!m0A(TIwQ1q*^wRgm6chUxwG z)6d@DKSp_p0^U0e33-3N=MTk?`<%PaiymCP zJkwA4-;Yb%RSw8XI;Hw2l%DQeVU-l4k3mW}oT)SpzKS!=Au|H+UHOaY3w7=L&W8`V zLZnsn0y2RSj<}0~Oub3lutX{=)|~^JMt7M5lcMH+w{B?Bw3)wAn)kFVc`i8lTt^9t zR3b>gSO%~;SP07mBmh9j2Vk4b!5|@E1UU!^HmAovp{Z|3C}Dwfj(RGu7zJ|^;b4eh zGncHXKQ9|KF#AkF>`8}k1`Nsas3EAayxjT%2uC8qENMpukJSduV&S*jQhUd^h5mA( zrm09I+;&>kWEiVNAdF%iIY{FaV`eg{B4koWHnF8M+Z87XIOb4QFS^Cd9XT$2O-xUZ z-G5uGKh3~tO@2|Df`p!#!T(w0o^^F&{dQirDK>Jp>CMTSGD8Rj&F)R8Wq19be{X%d ztZ4K5vnKw2qdivVHgKZA{uf3r{N09vRZZQGoYr|UwxHE-DY{_EL*n;ppLzBzd_iBc zp3UzFUHrR4B%zcu6JZ1ZoEr#90FkF1kC*YzeV9XJ^4wjQFHmH^C)o|% zJEGjG&L4RBs7s&S{P#)a6R#dV>x+iG7US_E)MVT4fV*%+-keeaol^|Y>_;XiUG+}<;Y4sprQC}AU%s^ZKyz1Km4meQ zls+~f27|w7c;a%tYZ(-~BkR{*vSylo=6!FCxHg}7=NGI#t?=BcewY09)8Ea?dCb`! zU}}K5qb4Ar*^&2ef!#I~fc5z&!g(qjQYnJ*mw!fI`JCjKtKq(h-oLUGivU0nqL=~z z2L}NGW??Kyz8h`39+Dd3vvBhAjxlLpu_*`a z4m4d@;I)~#L*?J`)2pj!;Mk&7QC++JgSRrh>X})Wq#2C)_cIXEwuJw6sAWQTs6vdj z35=*zs%!sHZoLTa>f(||Ff}_6_Wt;h8wb|>G7Rx#ePQTylb=Z}#!QFvseSQqg6A_VVV(H`cB^yXLaV zrDp>GkSv=00{AyMz>!!309)&mw?EPuQ7IPj>K)7mZN{l?&Qs#R>ge6eo0{T+8evYT z!t-{v`o~<_5wI3f^JXl%O2pDlEe(Hu|8I9qzh+=~%+90}uuzv{@3Qn=-Qsuh;Nps) zVw7z2F@H@J#+BzvS0`RHnub^SoKl*NrHo! z!~bL8U>k{P)-N_kam+|18A*rt_te%$inSw*wQSKYl! zk7CPTBV95e?=gs~PSj(OE)pK=w6!{R0weBsw}|XKCow*SX79Aea5I&1EMOcs0ZQG- ztn|7S)djNK!P9+?H{B&n_ zXR@8j-sv9a`a#N=#`jO!@x;LW-3@scqQO^rkqdwU#*S%Gu{U2+&jh86E~&{cO24$H z7j+ml`9*)4asHvEY)X0MWh2L?f291@-}gI&J_yV(CpTDB6e^9Y(UPpu1Yr&g zBf$X{HH{XF4R8wt2vL}d5?<;d*np&j+yJ5i47RCJ)z%#wN^`S^!BW=hm?GueVn_;D z@4WJlNoHG)U+iiarbKlH0FZS4-sTyD)?C+c2~%ZkqymXecF0eLT){YC1gN*kiC&n& zXJ%cJ=E`}Cp3gKAGk4^;!%l+;$V&Rg?cY7u<=+LvFp52HoAbR%9&zLy^ z_L^`&a_6OlDWf=)+=*Me>!yxvSZ6M__ZNxiRM{!`Y`6Q$qX}qW7D&(@6h^jZJUD=-Yker{d&7O#V z(7KoY~`mZ0#OHpC*m&oo@Ya6%DnI{JnHnpts8w~W*{4g@7G*D!;C%ZQePg! zFBEcDQC#uOJ@jEK?!LK8ma8bM^2@)Qo)R$I(SxGdkt8d-f~OSlvaqz^=kWUbwrQX# zW989Rz!|5&voWqJ%-P-Ab^615VzCL&&Fw!rxQ}9R7&PF{rF9 zr1q9(>%;b)-zWCxp2~AdUvHN3vMtN8EC$>H05Av;oZ)k2Y6b(ca(jA?XfNt8j?Tc1 zEse4CwtDml7GFd9O)dh;36xPpfCaJI2wyBDo;4#1E+^ruG>356{7z}G?2%7)zOcMu z$;zx7FKC=Ff^FO7`)qB{<4;LQjBDh*^+v(Sgn<>wP8t19sjZn@j2(t7%qSH{(VVBi z{EcOALD&NT7H9$}+~x><+1H{Eo8kAdVuo`aA$fb-f_QSzxPE`g_0s2BjZ+FF)pGJf z^0gNc1{eTLM+0OzvNEMWZs_X1BliEU}Bz| z$a~+Ke!rgN+pWS>w-LuuF)6qy=ecGnk67m1+|)FG&;-W?gn`5}Z^@de8NB_}8EL-X znbu*<99(_$nPlm^wHcYgy6At+Fw?ICNr}}}k=H?qCp{L#L|_`U@Wo{}&YUrL%8PGz zM(ysqUblY|Z)#E>l&j8U4Oeg;lzFSyCvr*f7@#wUiCw8EB!#Sy3skes=59*8R4jGG zQpy=YU$$UGU)JMT02V->MQHk%gci3pHQdn}T6SdlLIS`%*?&#M*h4TEW8{Rlj_xH{Lj_H~=P@Qq+L_Bct znc=|0myNjc@9UjN$8)R7Zk+X#?ee{~;e}e`t;Y5XMhU8b9g86Z1avMV#U;^AP4_g# zKL~45xlqc+MDZDq!F5;Fj#oh=-Y!@y*maRI2H+M(3e?hc!W z8?)-yMj}kM-6`Mg#pho&?u(T>-!_p+iQ?ehQ}lVVh)+@GNcaNa79aqGN#=v*GB$(h zIihuuu1p88JUwg9x5~#}Py0Zak&G^V1A77r+`Q8-*id!$H4lCk2^+xWrJC?w!O;Ez zeAmjzZtPPgoZ4OAVD8$7W2fIWY4)Sb{t(OhXZfH}*PL4uS5g~P)vXYb$^HD2MD&!_ zRJMC}d8a0;@1+C*`3l6WF~00mz+L8W2Qh;n88BJjymm*&$CJxvl=y}m`~LfegpBJ5 z(S*KNz<5l_6Iq^d00u$SFOunnLc3-32UntTCu`n|awTXsoc%jE0Mj^e+hti2fI|cz zmd_%ptfg!#7^Kk)pZ;X|E?ty-CQ&uq^_K%*6zzJ}FGpQ^$TS%eP&ukKHM=hUX>Q+R1OHpYg3mCVi@8WCk;G1Wv&0KLL1t#inGkLy$xS zNv0*|FE*?pBldIy2sjVFF{bnbON{o*xwI_jd-t4s*GExfOm5=c&3m7EziqFs7l%B* zI<2%QUo^Ndw%?z+Q2D;@7D#0w5dU+I|u+%eHl~YP9s7ImuP8NM%E^PQBa)orxR( zUpyx8=tqUoE(;VQBc@vZlXKP&6F1+v`3J=9b{q}cF6u&i>dl4A!ne#ItptnIL^h2G zwgW8a#2B}5Z?!THu3Dba`ZUd8Pv7|TZ(EaJl+K+OZ{L*W4X5@Skp8D{%J63>{l)(V zZ~z2MlqAdKZV5SDF)`U5VGt)s$tWX{j|YZHiw-4zx4P2r2*{{WJ%xX|AG)wiD6@}ap%N7LQ{ad88W$u5l0rYh}+m5DeO`O0h<^Qv8liW&fSXKzt;?e zOkQiq#0+Mt0{_#DwA82R9|$u_(`V$1o@f#r1OR}4P}9FO6iRVRr$(*^vP(-v0AR^7 zd!b5^CT6>ENj%a1;kHKs*l?nKvU9&ZdI)t(0!GwlCmFr*wf%`mJ+>0uwj=;I-Dx@-@Z8`Pb|&GWY2C`mr?oo%)!;^_;^uW+tkvO&JEKnUpk2N z^Aj}%CtOsf2OGEAVYLvDtS9jK6GEE@=B;dw5+_TreGXCG@lZ5*ithcr;|c+gb&Xu# zwvSXxys}i>wbL?#n9{bc+W31ndC&M0c&h<`9HDIs065Gzt>WC%D$WG}&Q*ktm50Zv z1Gky7QLV;^BUkt>fpQQ)=8|pMKqv+Y2yn(ZcA4fX-aeNbjgkmE<@4@W27l6S4a%}d zhCMGM8;J(kGLyMsXdvaBMVAeE^b=)Q9d--t<8lJ0om-JVUlenDy~|9yiO!!eEuCeV z#$(bngXtUXOe-fc@N!Q`9o(KK^`+&iH<^{?qB`|D+wH;qot2z8;M7VN%kZMK|L5JQ zMB$X;>Cn$w@+jry;0vRDJEUNlr38?sGL}0nv?bTvV5DrxivW1sz&=R_ILtsxf+Ya3 z?Ifk1V`m`r6$v@F0T4n&=P4Pvm(;Td_gTADuq|s|MeMGjSsVa?NoCP&SV|k-Gb+v( zbH)<@#a;=d5xk+eaK?G<3-+qw&-CHOLpG__-XQ1Q5eN*WmBVTmx$Z_f924CO4IU_T8*~qbJp0bWphHzs`WBTsE z2^f_DfK-wtbxV+_V|i>xYK@>jReG4$^VeO`Mmi~_zdE#I=&959UeW(%`iC1E8@dJ* z=I4g*X~TJPyp-R(Z9n>P>Fn?3PhZhxv~N14O>e*Utm*lm?QW{=!ucd8+VaT6?yI{7 zwC!sFNdfE(>*qbcoLMYa5VCCt*0!;=Q3OfjjYhVr+j?xc+b@C8cZ1fyhIC1Y)0lw4 zxXBUZ5R~guC7F)&2d*lEGx9(OOF{zUskTyKtT6RbkB<@MqF zx88lmv)M`x=Tc`ZArV&|X^k^)fgJeRcf%;zaiD&eNqRIx&VeAU^Mr8H*%R5rfunEj z$$vOx)J(c87(OQr64ph!G75@L?N^zm8Qj>?cp#eA$t~0JrRDo~r@8V(m4kDyOZ(+K z_v3=|sd$x;y~JU@CEMtmJOBRE>Kh+E>7GY7b~KD9C0?!$oWT1P?sJ;*@&}(k`<$UP z|AjT#k*==tlF+O%MTH+5PAZ2>;X(nPo#47{qrJS%8@IHbUBog?kos~0%-4`E3DMzJ zGG^gJCJbW)DUK%;*ei3~fU%n(0Z|jU%n=|WAW9?khTy@>qW!Jh#$7>6iVLN(VgZ-7 zx2*fi$_2Nc@*tw>h|yWuu{&-Z^1x@cqZ@|&nSax70F>S&>y>x5ReB~ITJZwkq0 zmY&}`2114h!ZhE%Oxwn!-xTBcWeC&%9{RjUzmI?bd?h(hGvoO+YnM4jk(*hf+n)sb z;QGInl$>(L#OWSy8*oj`tuFihd#`PNx_`x#s@%d74tJc{51<@?0Ptk8K?)7vf)4=< zaLfOkz#1ZYJ(Kc1VwNNrJk=*HMh}bLq$oIO-Kq7RiFJU!)(Bj5BSq(egh_x33=rdv z08~c=)H=5NIc6T8k!iZpy!Hnqp7A;*G(kC`jq@}vTH)1;QPKu>ingyn6V_mrukvj z0QaVovrpU76B4 z0~j(RVb8$CxK^Ju_nEd6OYY$z8v*Ufs8IA}lu|k*T-nn0#gE!@-wyoXw?p}_lnt&| zF0qj9w1`dHr1OVG*K`KjRBDJkq9-T%h6Tmo>^f^%N7iWn{f&}W(PJu?)|oQj`P{9m zZjc6s*B2KBV)lECvK(a*BnLyb30%zFBhBpOmY!|NsE044o$!DRLo%6^FJ*9oJyCtp zFCh@m_`GSK)x8V;V#1S{*@h?vCD(fgir@Wc_pYY4#sO8Unkf)FB>DY#)@W_bC|CdW zw(-ZPc5#mXosI2RJ+V^9qRU-IvOiDNpED?6g#_qv6~Aoc3HG;?$Q{B!+hG_J1R8>G z|Le%q9pwN}7?@ESxTH96dQs>s1eC+krYqh9Q{MKU3Do^zXZ?owlb;U`#}uRtxnd2u zb7^fdBqd^|s_Bt_qHEsRI}mkQIss$tdgkI%NMlN_f~LFTukCpjF%mRUql@k+A@Oi{ zUt4rp)2A44FBk|JMrG1;!!jcF!9fw};5g;+(*M;6$jS*j=M(@;W+Fsq)Lb=oz{Ty@ zOnC{$wnuBCh5?pvSs6js*aW9eE0q(=+H78atDV)*onzq$t4-@N^gmnY*I^ zV97#WP3fHuPkpJ6;Z6?`9DtqC7{X+*&jSF!6HO|9y%R)}Thxv19cI^>#w>4>&tDmc zoK%2fSz{{X$v<~M&X`WMvw6cWaMve-tym?q?ws(8dAY745`Wr4A~rc? zG7ph>vy@7Rq9KXEv{PL%x ztM%AluAJO3eQapu*74b{^F2AUP56O#0PhXK? z3z_uUlD=9EGRfm*q^+AfD%}9me+rzLh8gvBx6e-wSxd8Lm;JdpnBysfR8_*YWbM5N z{+xIJCL^o=<@0X4yng^*K1UeAw{>(W_EZd}#8 zV?sfd!z>#MXx}ULmVcmvk@m>z#BVT$a|bve%u_~ebzNJ$lhlVC)nGnFvUo~JBcgLO z5+aOtG^Lp>>5_)FU+=u%kB}G9&%2_#+FQ8Cg1hkSpF3v*;{34|tEoxEmT6cP_`JWy&t28NxL(GrxwiA}J>|2;W6&jw zp3%H^dA_Gh_1i9`1-NYH3M{d@{(sIGbjG=Zrhl+++4#Ic7zZJifXhw=gn0Hnh}I0^|JJ7E&}xV-W~BrKs)m(e?W%&r7~;ynqVuO!&K~1V!MkS`Hmw_3 zbuJ@G1Rj%HVun=|>Fbpt?LzX5e9?fcq+bwpJPw4Pp-Ina(~D$PI1J* z3?Tw=AP9pbiWsMvjPnyB$UMoQGid?{ld@rEu69!iyQe_g7wg{DDF%as1lK7V`AKD9 zavTb}jEK+iSeD^S>{dZ7Ebx0hLBx1Ku%?y&u)OUokCWn@P!pL}eY<37yPi!ntyaBW zqjd{(@3jCjWgukOPbFOvW-_5+cqSbpjz<79eTn&hg&8yv;tmrztZUu)v$en6RsSat z2xbBTq)MVU=m#Q5HqxkUQb8;Gu1X!7=-iCxaRx-kATWk(4nV+0mIYon7boVAV7-Jok-5 zZ>vMfG2~T&`!j#$3<>k?8N#TpW!R-A z-PgJ<(v_xKE&cMPj820mz8M4n#RP|-Pukb~V#5Owr!gCCE{`kCuJJ*@3kD8hNtu&*KZflSH-j!c|1Sy!$+DMzfb1;7p>1R=Fk zv{kU(4snB~i9(oBSDz1~I3fvk4l-y1ivqV51ptm5oc&iw1Q&^lYB0w!O?)WgAtQ0&IuF^4CHSaaAL2_Q5Cy^U%Zs+#6Av0$7|1JPL*Hquu z!QOg795;o^K67Q<|K1KNg*>yF0cHvYPUeCBe#ULgXoiWF^a+!u8O$is1DO=3r!T=t zv(m3;ENPneynXr^C%zd309(Kmp(l4e7sUsPSfPp|C5e{{;)|$HX@2{*hgQt&pIct+ zyxt*ayY$QMG-Wz;o>~4KLCF6kQk!i>!p2_1iE=DZUS8q5P7(up_a1^x78s&>{i1@s zx}!=-+v}3@MhUp@W!y(3Aw~e80DujEIm2lWqbc+I8}z7Q8^8$y+YO>lm~A9dPv7BP zv)niS`z_~Q|3!x_1=K>Hbj#4|Rm-l8Z6BVUJY<^g~XT9H45gviF-M%`xK zJVx45?m(7yJ7H?gmj4jgko3^8A#{a!i_tH#Ng(fa! zNaNhKzH`e*^()V+IAx%3;E;fKdjeAg02BkbfHc2wi?;9q%>$(`uMakS(m3OZm zAHJDBCmGd2L^E&hls^9B?fud}5T>)$jOL#{Gi%O?tW!G_7ITnIZGk%&i(Kc969g$G znWmxoT!CrRaplQYUO}5INo!UJtqm`%Z+IUOv?VomasA58v3)UobKT#ZWGxrw~#>tQ?sPHX*feE&ld5v!06!q3?tqXSi`Q!FawyOId z8~eKwuN;tVfiec9r&XiWw!#1X62nwGR%?Ox-YhE_lBoXu$6Z}v>I&i&3T|%aLAPTD z6t-;3i%-5V#)FbJvH-atiSvWrVZN@tu4P}4E|2a$z`kplp-r8!H(I>aK^-z|vlG=a z>$IKDvP|bpq{;2&`}d^TY#Y)r+C9Tb)4bcgIx(!s+*z$7GkCx#~dBf5y%0><0` zZZJIyDt|P4L{YI}b$RyJ>Yps9a{QgMF1ouZ<^G^kdNbA`GwY1v3&#bg=}wnNVtIeN z%eU^YIj0pkSmxZsfE@tjDKkK_h`UN8{)iiFhW-Fh6!BDQSK7;{vw zAlZO90OyVqZ;%H>B|Rb$S1Q+uH-VT{zAa|Ox*e=odz|{`8-h*PH8(5`P?AAUx7T6F zqZH&z75#WX4hKq_);jk@W7|r>D@mHmeot}#Y;xhC3yN*a_G-lRrBUm65Sir?l)j&X z)w73mq;Q#5JRW_)xzGP4O-D4Nv8N{jY)7X=zIxzgqTRiuZJFkn4#X@Tp?}Mxu?YiSDw46GAq}=Wlt=@ov3Iu7-lh%YGv{CQ8oYu z6N3l<0_st6qeI1LOIzRH6y1|_5{nz&7!v+j@Altkjh?1wkDZ=-G9X~U5vF$i+gxiC zi_S_=m#jsInj*wWCOW&%pJ0smXD1H_9oVUFeysL^0wH*L*=ZxPc1Xm#dd+m|x#IfE zEr*Hi&Bo>xp7(cdOxD!;#URqT!>Az|l({yx?%Wcs8x|OV9D~y1VyrSkrbowbwZ>6h zoBHH}^nFnPI1ueVk}3IK@OCs zqJx^ivhCbrr6?o}E_6?rGJ9Y2%>V%|I4QNjtz1y<0SM&oh}qlore&RSPGIBft*cVV z0AbuYCB7^K03ezScDJ;91D;a%*I%}i0;AvetTAlg$j}JZ+YX|ALqZ1(P8r?I+c?beOfz>9WPxG6Z2{-FlD!_>O9-w%s&PWfJTk%f`T zooIkBYKp)1j<>xztFErwZn4#nDhm!`4kOeQWzh5(k)yy&8vqz3eLq0F7sxb-x_tkh zsIDF9z}dsV^!1`&UUh`C?))W-(y#ZQKVjO5TrF`VPyiE9SQbw5ny)82ut*&TheE75 zOHti=`Fdk;k^BCuBoUKNv-E*a#XPx#yNWlc^1|4o4-Ef#aiG*A=m|MLIe$^^yZ08o z_J}Zfs_&9tGx}vpfFQny*>c1RQtw z2*S|H-8%pPAOJ~3K~#P!nr7Q4sOc@GP+`mCi+T* z27mzoxJN|ZCr{C91mw)DaZJ}1torD%EuNm)uy+2ES2D7JJy@{%qpwwFM0IW6qJ`;a z8t0B2muBCBU;rp{!91pfmmkG2XYNd@MLj z(qrnDQ_*kW^WpmbH%a9jbkeV{QXWs4zi?6Boq+FG-|Eb|>+yYms>f#3*f>T0%Yx!H zIU)yWGLn~r@Eo`%XZi@em>U1B=!O4w$A@o6HFf@kX+1vV^8I_3*Y0^{{o2FoW6FZz zZ`HW;q#t@Rdr@6`X8qdqQ-bhqLlIAKSYQi?e%7|{)BUTS8FAiAZYasp0AvTpemuquI(r1jqERq7)Q26yS6DM-Xtn_ zJ3She9uHFjF-}wMs&2YHVqd50`;3GL1mKR0K#OkCWH+TIwPevU5fTA_04M;a)7~9h z?g&J25|$vz2?4qCqE>r*)8F$nhirMYp{vn&?M+$WNiGV+uH5kC*HC)-3m% z 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 XY@858s%f*x00000NkvXXu0mjfBS&&e literal 0 HcmV?d00001 diff --git a/app_widget_extra/static/description/main_screenshot.png b/app_widget_extra/static/description/main_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ea045220464403e4f3a0d35194dc43c7f1fe3778 GIT binary patch literal 11089 zcmeHtXH=8R`fspPq$*uXXaWM#qzTy@5Co+6E+8d95_*%OQUno^-a$Z=UJV_hARt}3 zKthpT5_)JM+}C~fIcNXRUH7haKHLv?tvw%-nR%Xh-kIM!^R#)RbhK2jlQENlK%nbt z50&*mAd*&~o_p;A@GHfrsSNzR3@|Y9(zEg9aPvSoKwa%Qy!_qlIqdzQ4j_=%zG_2gm14cj8G3Jv-XYb=X*(@vxw1h0SGNe5;|~@u7kRLWrVfV^!o!|JLRdohuFwNNsE-&}fsEt6#}fxxJ!O?Y zMF1^%u#=aUo2-b4udlDLuedP6!%;+3Mn*>Du9%3Jm=M4r0hX#_eB4o{*olC2D5RrH-<^e&O@~zWn`={|e*3 z;rbh{{|bTsiuv!|^*3Dq6$1Yi^WVGc|1Y@6{_Wh^!vT-Z7jWH1Zw)yEZr?>uMKyzK z*RD;^YtMl|93VC2-wphxuo!;}I$t7W+gD8O;lpdH*Ek%dm5ZO{=~OuvA@#gn%u!f4 zW*j*^J~g!-jKMZcW0%&0>&|LRP_TkpGh=fX%aXCJ;^|kmzdxY<{Z8b!7_<~8^|vqF zC-e5MdT#)MS%aeoUQlqT6NL=>fDK6ig zE99|pjwzxti`?3m-}9im(xgajT2=W1NzC3`nfv399pnNYp{rk7{1mXMPuLKqBUf?L zN-4-(W>c67y26-0looGxaxiHIKW>`Xa!<&^2VhwHN~VuAN$Z-uJNEfGv+;-YW6+!* znf*fS0c*k#s-m-&r-P&0v1f~GYeUa*gRcGjrDG@l4jugdSi&> z=-pD%^{2K3I96YJQdm%A)cIE4-Xs6hq@`E2S3g{ynl(4cN1n0YeGx^1ODiY~N1B11 zhnZV@TALkyAC1`)>&-I?|zh&@nOxQD;IfP zIlKS$^<&$2a&?>3Spi(VFS%&4%3SNrD$vu#;OQA6C(jgRJlVDh#%%h#FhhROY^MjkVE2=1NUL)8HmAom$81vj8~mch%S- zTsR|(>}mPIeUOx?*X}~uVaMhDv=i+V_BVgRFDi(dB3AL z?X^zjBI0BH0o5#(8QysJ@kB+&YXP; zoxXoN$n`up?<)~3Tw5IO))!6_A37|OnQz6t*;=XofP<~wG%bM1cLsywBg5R82McNx z9bX@^oxJtgPt7Jsmz3wnHXSSL{Qwpa8a;W4pda-*@qfLLJeXJ~lXzc$1}7ogKsnNr zoZY3+w>aK>tkaiQL=yPC*y!xT=x|>=y|@bxI8MjyX;_bwLq$?*Mr=|6y~O%SpT$pY z#*Y*`$?W`2+~Dx&+h;LPH+$JdoQXdT3~kDi<>HwU$3Y_(g8g51KH%og`>4vigVFXGiC4q51XtT}mbmaSF9Y1nku?*kR^T>U`qrAQHSOx-auB%MY)vl|rx!W^mBfco-Q1Gbw?kDoYM#%>4KFaHL;S!q zLG_LIKYQ1DI0<%v=4fj20h|9CGs`svW4*OTwqgM6h}_S94`B`AftakC^-X}`Vs$>FOAnO^#h zXt}}3mF4gE0zJDqrTiH-nuz-cm&<*M+!~5+irf?@V~D$;|8tJM#G5v*E~D3T4~!t! zx#xw49T|%ndl$Q|@gs0i+lJCNvgy|kj+%}trJFNf(TrdNb};Gx5rgPMb50-@W~U)@H0yd$MAvZ zof?y}qRTPX*{ywL_jiLXGW__g8qvHF$G6wz0%qk5`j((dj@Ay)4a>S? z>Y*8N$w0)ys|Ff!-c!1vxEG!MT|MZ2ZjX&tCOjd#4BYgqjDDbE2cmOA;u3~LbM=&vtz-YxM!+`tR2VAko~ z>?VJ)ck9izk7vW^_oR3;S!pm;R*8tq`ttcz;!|SSH}@VD*lg|ot1tQI49-o&ID5I~ z=T_w|^ePWd8Vu{!&jae~8#T3+*BCNHMt!iv{ySh<%PD-utpiUKx8SqFJkLe8 zY&OErLHI&4-<5jfy7l9eWf9uYi93}Aut#rItqfJ6c2YD+_of7%bsSg{_L}jJ_hBUJ z!b-D&w;gt@wcR#E#(dp}{Qcj}Fsv>${={8_`yXd+lOxT_5AlkYDP!uCTy`OHdb|C{ zSKyO_N+(|`7M6tjzE?PTM0OEtkQUy^`roBweuTyj6y;iR&g|+Sn~M##m1UM-`jXiU zSG>Js3#6)5$ypkfbdZ4~38WV1c3~B^>X9phQrTXGF>HM$HD`9Dm-)4M-Mr`BtUIvt z#RVB!ds)4;u`#92@UPbVbO`@|Mzb|VWny;qkQ?@5H}q{3UOml&AuFptz*}4Qa_nar)Rc#O7K{T`Ir-2NKXkqn(0wFs%f17u3l7C(htW)V&tIPnl6kOjfIW<{XhN3f`x0Uy z$EE@{o5g*$ALRxQjh&m9m=O)-gUx(R4!t|Oua>jFSf&xMm-Pt^HumGTmZ#qH=WLCP zA9pg@=7Ss)2TMtvKgx~ByZtUp)3WDeQD~+RpF+LLqtDNcmFEQulnz;uVb_@>5#_K9 z#`%`hefx5%s;(b{zEPBzA^!%$L6NShpwH4{@30G0;b-5H^fjjxh@Lw-!SYg{Zu{EY z(5uQY`09IEVuQjjrOl+soA{eRN7B#?TN7)8du9pFf5&$7{Vtpm2dxr@fB&VVWYYvHOAJddZCuK@&br~7a2Cd=H;0%&nd(0cQ)#KK@3VY zCOf?0Ra1}Ig-%Z*r(>kbwn{eBXPzf7>-&a7?rF4Jt9qTXqr6Xya#%M-{ntjV=rW8a zQOWTa6gQ5fmG{B@FBv1U)7CuQ>n7GX0R1Gkftzm zYT?aCGe&73!vmg&ktkhnyKPzFTG!GgvA?hF+th|Ao|bk*CSDHmnf9lUwG4tlooh6M-kUpRLR$y8N0)@9-6|kr+X~M_&@zsB zu)L+Ed-4qV%|~}DsB#{rLMHE-jpd0GkAE9_=;QhVr6)iyYjBaS&Cn-mQ##kt_F0qP zHyLf3R%6-pL1QZY^8?S69dVM~;s}1$O`#Q$rTf;HHQt*t1mrqJYBOo%fJ?FS+FG4U zZi>|5d#XnYv6Q=W5nhHDmHMWv#I5bXc`uk@A7>V~!(Ln7#C190m`-7a16KN|v+OO1 z`9`G-m9e{}D*IuIja0rB_l+Och6Peq2mYV!cL3w`(~+OG>ATme#o4ydwcN*gbB3Yf zqF>nX4A;=~b2#dKrMmH3Y}I=PhOwA(tHO<8tDx=67hX}-@OT4;Cwxke0&od=iVqH&9 zOLx5CT zYDT#JaN)E^b0$LUYCr?!%&WEspNMhYy%3r9{=$&Mxek8jir*@1TA%uPM1BnNMmQ`Q zh8`)B@PzrhdoI9+ikNt10qaPFK9|!rq|vohoz-V|Ja;xKOld2q&)uk@OA3Xg0nV(u z{+m)GGvwJOu$5yEJxjJWr~QkIi+bHl3C1-_$1Oqr#>DE$Tyefaz^Vb>nIoS-%vmyB ziW%`Jc1ub)Lq!=sOYvD#vIYI&eCZZ5L6PM3&?wMr~YgyTTNmmzV=3PiG+$Uj-+h6 zs}NJ;c98zXdNO3uZ1q7C*~{L>_qOxJ&wKG_^7iU!sVx4G%vm>S)bmKTG#c;?4mq1g z_kLuNZ6~&%yaaM+^+fl^+pD-5sk0&@v(xE_3oW_4mm5(5=gJ>RI}f{qLri;-OOBd4 zs2yujO3Sy+K%g3NbV3C_@zy)~q$ARL{S+F|@%@yZW%CQlElH79#z}qCs|h!7m%Zbm zO3n?vp{uc7u>|Akafn!WQ=2n4v0ggBUGeQmQy``wBPV?zq@YTfJCHDNx7m&asg<$H z;fs)33pXn>LeP?32JCM`0wEd0wCuJv4@Akg1hW#~J>B})7fog%oqh*%gH$2frteY&eZTTjO$>EMZ+o6P_iv&; z8o#%8g^x3ZU3eZl%p=;?)ZE~>J@Kwy?LkP0Lnp4ZcQ&&Eg&v>NJ&1PO-uJ2yM@K57)RaKS&|iTKwsQ>PKokIy809*m7aP!XEaf$ z8@nf>XbrXMtuBpkj4osoAYI2>lY|@|eK%e>6DEQPM1z2NaWgsp9+8kTy{~*@zGSX- z=pqQI1ntr{O-6)u8?O*&psaLb{gykX#NYw0y_k=i7%%PUY}j z>9tf|DUquSHXcYZ^@^F?0#Y}O`5&B{kKDKQdCDkjB%_=FP0{_O(7R2O3KdCuuJ*gY zgr+w4r4oy*89CqhEf*@4h1(>~S)ey?avhwR{Dw~OSyfwSPcoZj#iWvO6s1=Phk}z& zB6HVO`1J``*e&2%*9Y`RHt1LO=|8ha|7bHN_4KH-Uiw$gC_-wz;#@lLXnT%6N9T4R z@pwh`h=Mmkje|O}!e)}P{5NX+%%?T<8*vliAhOC2F3n+ z%S;pzA}E5#M7d>lb~ZWv9Y6e}qwXPL&CtjwB7FWM4@vNp*+-q*H^{>AQV+m1G&dO- zActsA3vSsisoc64+&BTx3%M!I6zsjgjfa&Zx7q!36F5EOL5P9eq8 zTnDq|frWggK^3hEh_#wD+0LWKCOe-ScD@R&5K5E$J%7lFmL64K*S1QC>)d3ZlOU~F zVsWP?xsG>P$6|T%*4Nh)6K}L~&Q4FCu6@jbPuB{Gi|=jEx6jPXu!j(;GBQ{wPx`<3 zxntWpt|qCucfM-;EGRhZPv{^l-umdnEnrU7TJLx83g!+KY`^LV$JbJ%L?t!~ohDJm zCrYP2GyACD+S*DR#jT*A!1t@H9PKPT#c!^yt(l^N&zk-B-muE-rl1G~Wo58);+gbM zsp~1*NvGrkxbw&MnZq6B%u~!q+k!5%W5SEHse~u-jgqJ_wT^1Zh5TrDMDtfM1?g9 zI`Sd(Div*YxY2lJt1 zx|Zv;jbHf^czMfSmmGnS@OPx=Qwv+46q@tjH=c~1Y>!S@-T(2*j>7J~Y}9JQO162G zZO2k?3hHEC5O~IQmV03l5v_+aPszf6?hQgj1O?4o1CK9K-TzHl(6}7fcu*)5&CORY zvsOK8x)XPjBt?In7}xtM)S8h&o@qr92xq&?tXWIv;{AT6W6n<&yQ74apLbJr>1K_b z2z=ITBeQ$-;6aDeE0%#XPKD*QJE848iC67#L?t5z--Ym_w||t&{7Xh9xvSVTPEO9a zOrR?b!QdVXSJO5pTb7F^PS-dEbr>DUbvdtva&;q2G(K~(q9u9C%-7BPMW;hse2Y)J zd|A(^I@f% zLNmx7_gQ6CF1{O3=(h{pAj`lS6|&ESthY#~3~iADIuS^iJ5^r%BRBt7?MOkQ|8xG; z(L`&<@6R$G;!chWy)S^!5_c;+`@S@5fkyvBnf`Ce)w6OCavr!ckR|;Ah_=b#!zT8F>vnRfk}2zpIfV++lMWr2H`-(0|n>CB4D@z)@%lJoaGK z1a1N-dG6eC1+=2_=;-Kvk6?xCOtb&a&kp6U)tgeYf%@j=ER2kPTP=rT6iUi~j_rDL zYh=xB2K} zKG~>;+_W^hj~_pFb#+x!Q+xVUj%I9Ztc7^8VevdOGqY|cpro?WZLHWZpe5V<_`4F- z8SxNRQCRq+$_{v_TzwLtl6G*ICM88hN>=I0;IjZ6i`qTJOtXD2y@K9+r|s~DNrT?K zpSz`2j`0Ha6mMA3%*1}1yf<&&B>qu=<#+;GhDao$Q+6Udeo{dQcje`S0Ar*2hPBG% z&c;NAqp8m+9?QhU1WXX9$b}H^A94eAKw}|LXSI{AS{fQ7&d9CSQ(PD+9Wblfpi?|x zPXJpmM}c|UFqxX+^HZ-5dV@;zQ>M0@Zn2&F_TxtrvPd&59y=YbnEUc&m!&V}fUq~{ znWPgE5>l?l#>Qr4WMpJ$XlP{>4B)Jys!BIBq7BK4i*v_sPCk1E0;_9j8Qs1CU~ZAG zASE^NL=3QKN-rt9mpqcxy?1^-$joKYw${W?jz631R-gqN8OJ4<>P*9Ub4#oju~Ah( zml%@4(eb9_f!V{&WeC5!%6mR8D$U3eNV@4etv7p5zWFnO*IoJs70id6E8qT561QLe zq$8uGe3G77x;J*~3b@Gl$EUO%60yed4_LuQE==7JjA8DovZIN~k8Js;5ke04GNK+9 z8F)zDB)e>E2juIs$DEf`uz-2aN=oV|^YZrYU}_xrG4P^K@l_hrMmI%iy}@^!q|i_T zC)g6|U{&J0oVN&4G0!AgI%LnDi3b+8aMV0x_gV>cS8%n1Pj&ZQICvqgtwK*N*UEtn z)Ev#!VXD&Vt&H)Xyt(~J8rkNxHL1M`_nO1c+bJjG^pvM0wja( zj%OqEl=w_{bK0pkI)wCy^E#epcV{O~y&yb19Nquo#Rc%NlY|!e)vH(OhF;wi^!TIT zahRv8-#IgLH~LFm5EE$?%0;z#FNTAPu8o|`7^F()Mvx(pQ%h)jgP7>HdB<8!Ff<>^Vzhvi(e8X^enwK*wbW-k@4@; zzNkkq7C6MSk64x2XCbD7QL0sl{7K=@RK?zJBvQlM3N%vSm_~2lc-Yw3T%}~)-rvuJ zgakV{EYGz8J7Z{Q$h-~?b9MD{cR$8YBR*L-W%g(=3PP+RxJU53xMZg5Vojyn^%O(+`fHVN-D)1 zzrSzMMsGqN!(O=ZP4vxn#{=Q*^gu6WY9ETp>N+Nr>H7j zGP7qqb$k*P_Vq4>jFuCvnBq!?!*PAe6^x8Nkf{DOi{LynK6EL!M?qMmWF%9>qIy9* zC)l<_FJiwIFU7TU!#v&V3fWs~8kg@G+#aM#iVdl-vFWMW4^|hW#%#?g(kM!G?%bq{ z%1W{^k+EC9_hSmP45w2=f8|cr2zMxZ&LgArH67^?ug;?-CA9OpX^X+V7BgY|+HY2+ z%93CXvaFc_xoN((SW=1bnZ8Wvf$S`+D=ln|{WfZN=9j*_bwZ=fO8 zt}6p*C~B1;mAbASWd1HQt8Z|hFvNcC*%dkTJ~zpT?V_ZAK~{doqLZ_X^>-{ph^&DW zh!OYHTmU6k`;}`!6$KsZw literal 0 HcmV?d00001 diff --git a/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js b/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js new file mode 100644 index 00000000..7e02a74c --- /dev/null +++ b/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js @@ -0,0 +1,2710 @@ +/*! +* jquery.inputmask.bundle.js +* https://github.com/RobinHerbots/jquery.inputmask +* Copyright (c) 2010 - 2017 Robin Herbots +* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) +* Version: 3.3.5-34 +*/ +!function($) { + function Inputmask(alias, options, internal) { + return this instanceof Inputmask ? (this.el = void 0, this.events = {}, this.maskset = void 0, + this.refreshValue = !1, void (internal !== !0 && ($.isPlainObject(alias) ? options = alias : (options = options || {}, + options.alias = alias), this.opts = $.extend(!0, {}, this.defaults, options), this.noMasksCache = options && void 0 !== options.definitions, + this.userOptions = options || {}, this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts)))) : new Inputmask(alias, options, internal); + } + function resolveAlias(aliasStr, options, opts) { + var aliasDefinition = Inputmask.prototype.aliases[aliasStr]; + return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), + $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), + !1); + } + function generateMaskSet(opts, nocache) { + function generateMask(mask, metadata, opts) { + if (null !== mask && "" !== mask) { + if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""), + opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) { + var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat; + mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end; + } + var masksetDefinition; + return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = { + mask: mask, + maskToken: Inputmask.prototype.analyseMask(mask, opts), + validPositions: {}, + _buffer: void 0, + buffer: void 0, + tests: {}, + metadata: metadata, + maskLength: void 0 + }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition, + masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]), + masksetDefinition; + } + } + var ms; + if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) { + if (opts.mask.length > 1) { + opts.keepStatic = null === opts.keepStatic || opts.keepStatic; + var altMask = opts.groupmarker.start; + return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) { + altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start), + altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask; + }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts); + } + opts.mask = opts.mask.pop(); + } + return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)), + ms; + } + function maskScope(actionObj, maskset, opts) { + function getMaskTemplate(baseOnInput, minimalPos, includeMode) { + minimalPos = minimalPos || 0; + var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition(); + maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0); + do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], + test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), + test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))), + pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || "" !== test.def) || minimalPos > pos); + return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1, + maskTemplate; + } + function getMaskSet() { + return maskset; + } + function resetMaskSet(soft) { + var maskset = getMaskSet(); + maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {}, + maskset.p = 0); + } + function getLastValidPosition(closestTo, strict, validPositions) { + var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions; + void 0 === closestTo && (closestTo = -1); + for (var posNdx in valids) { + var psNdx = parseInt(posNdx); + valids[psNdx] && (strict || valids[psNdx].generatedInput !== !0) && (psNdx <= closestTo && (before = psNdx), + psNdx >= closestTo && (after = psNdx)); + } + return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after; + } + function stripValidPositions(start, end, nocheck, strict) { + function IsEnclosedStatic(pos) { + var posMatch = getMaskSet().validPositions[pos]; + if (void 0 !== posMatch && null === posMatch.match.fn) { + var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1]; + return void 0 !== prevMatch && void 0 !== nextMatch; + } + return !1; + } + var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1; + for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]); + for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) { + for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++; + if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else { + var t = getTestTemplate(i); + needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), + getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], + i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], + i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++; + } + } + resetMaskSet(!0); + } + function determineTestTemplate(tests, guessNextBest) { + for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], + !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ; + return testPos; + } + function getTestTemplate(pos, ndxIntlzr, tstPs) { + return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs)); + } + function getTest(pos) { + return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0]; + } + function positionCanMatchDefinition(pos, def) { + for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) { + valid = !0; + break; + } + return valid; + } + function getTests(pos, ndxIntlzr, tstPs) { + function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) { + function handleMatch(match, loopNdx, quantifierRecurse) { + function isFirstMatch(latestMatch, tokenGroup) { + var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches); + return firstMatch || $.each(tokenGroup.matches, function(ndx, match) { + if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1; + }), firstMatch; + } + function resolveNdxInitializer(pos, alternateNdx, targetAlternation) { + var bestMatch, indexPos; + return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) { + var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1; + (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt, + indexPos = ndxPos); + }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0; + } + function staticCanMatchDefinition(source, target) { + return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1); + } + if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask; + if (testPos === pos && void 0 === match.matches) return matches.push({ + match: match, + locator: loopNdx.reverse(), + cd: cacheDependency + }), !0; + if (void 0 !== match.matches) { + if (match.isGroup && quantifierRecurse !== match) { + if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0; + } else if (match.isOptional) { + var optionalToken = match; + if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) { + if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0; + insertStop = !0, testPos = pos; + } + } else if (match.isAlternator) { + var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1; + if (altIndex === -1 || "string" == typeof altIndex) { + var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = []; + if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx); + for (var ndx = 0; ndx < altIndexArr.length; ndx++) { + if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(), + match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, + match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) { + var ntndx = $.inArray(match, maskToken.matches) + 1; + maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), + match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) { + lmnt.alternation = loopNdx.length - 1; + }))); + } + maltMatches = matches.slice(), testPos = currentPos, matches = []; + for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) { + var altMatch = maltMatches[ndx1], hasMatch = !1; + altMatch.alternation = altMatch.alternation || loopNdxCnt; + for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) { + var altMatch2 = malternateMatches[ndx2]; + if (("string" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) { + hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + "," + altMatch.locator[altMatch.alternation], + altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(), + altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + "," + altMatch.locator[altMatch.alternation]))); + break; + } + } + hasMatch || malternateMatches.push(altMatch); + } + } + "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) { + if (isFinite(ndx)) { + var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(","); + lmnt.locator[alternation] = void 0, lmnt.alternation = void 0; + for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1, + mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",", + lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), + lmnt.alternation = alternation); + if (void 0 !== lmnt.locator[alternation]) return lmnt; + } + })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0, + ndxInitializer = ndxInitializerClone.slice(); + } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse); + if (match) return !0; + } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) { + var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1]; + if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) { + if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, + isFirstMatch(latestMatch, tokenGroup)) { + if (qndx > qt.quantifier.min - 1) { + insertStop = !0, testPos = pos; + break; + } + return !0; + } + return !0; + } + } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0; + } else testPos++; + } + for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) { + var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse); + if (match && testPos === pos) return match; + if (testPos > pos) break; + } + } + function mergeLocators(tests) { + var locator = []; + return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(), + 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) { + if ("" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += "," + tst.locator[i]); + })), locator; + } + function filterTests(tests) { + return opts.keepStatic && pos > 0 && tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests; + } + var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : ""; + if (pos > -1) { + if (void 0 === ndxIntlzr) { + for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--; + void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(""), + testPos = previousPos); + } + if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]); + for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) { + var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]); + if (match && testPos === pos || testPos > pos) break; + } + } + return (0 === matches.length || insertStop) && matches.push({ + match: { + fn: null, + cardinality: 0, + optionality: !0, + casing: null, + def: "", + placeholder: "" + }, + locator: [], + cd: cacheDependency + }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches), + filterTests(getMaskSet().tests[pos])); + } + function getBufferTemplate() { + return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1), + void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer; + } + function getBuffer(noCache) { + return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), + getMaskSet().buffer; + } + function refreshFromBuffer(start, end, buffer) { + var i; + if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i]; + for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0); + } + function casing(elem, test, pos) { + switch (opts.casing || test.casing) { + case "upper": + elem = elem.toUpperCase(); + break; + + case "lower": + elem = elem.toLowerCase(); + break; + + case "title": + var posBefore = getMaskSet().validPositions[pos - 1]; + elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase(); + } + return elem; + } + function checkAlternationMatch(altArr1, altArr2, na) { + for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = void 0 !== na ? na.split(",") : [], i = 0; i < naArr.length; i++) (naNdx = altArr1.indexOf(naArr[i])) !== -1 && altArr1.splice(naNdx, 1); + for (var alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) { + isMatch = !0; + break; + } + return isMatch; + } + function isValid(pos, c, strict, fromSetValid, fromAlternate) { + function isSelection(posObj) { + var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode; + return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? "full" : selection; + } + function _isValid(position, c, strict) { + var rslt = !1; + return $.each(getTests(position), function(ndx, tst) { + for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1)); + if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && "" !== test.def && { + c: getPlaceholder(position, test, !0) || test.def, + pos: position + }, rslt !== !1) { + var elem = void 0 !== rslt.c ? rslt.c : c; + elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem; + var validatedPos = position, possibleModifiedBuffer = getBuffer(); + if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), + $.each(rslt.remove.sort(function(a, b) { + return b - a; + }), function(ndx, lmnt) { + stripValidPositions(lmnt, lmnt + 1, !0); + })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), + $.each(rslt.insert.sort(function(a, b) { + return a - b; + }), function(ndx, lmnt) { + isValid(lmnt.pos, lmnt.c, !0, fromSetValid); + })), rslt.refreshFromBuffer) { + var refresh = rslt.refreshFromBuffer; + if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), + void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), + !1; + if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), + !1; + } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, + refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), + !1; + return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0), + setValidPosition(validatedPos, $.extend({}, tst, { + input: casing(elem, test, validatedPos) + }), fromSetValid, isSelection(pos)) || (rslt = !1), !1); + } + }), rslt; + } + function alternate(pos, c, strict) { + var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition(); + for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos], + altPos && void 0 !== altPos.alternation) { + if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation, + prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break; + prevAltPos = altPos; + } + if (void 0 !== alternation) { + decisionPos = parseInt(lastAlt); + var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0]; + decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]); + var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1]; + $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) { + altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(",") : []; + for (var mndx = 0; mndx < altNdxs.length; mndx++) { + var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1; + if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(",")) === -1)) { + getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test); + var possibilities = getMaskSet().validPositions[decisionPos].locator; + for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]), + null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0, + possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)), + staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def), + getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input, + i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], + validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++, + delete getMaskSet().validPositions[i]; + for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(), + resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) { + var input = validInputs.shift(); + if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break; + } + if (isValidRslt) { + getMaskSet().validPositions[decisionPos].locator = possibilities; + var targetLvp = getLastValidPosition(pos) + 1; + for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], + (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++; + pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0); + } + if (isValidRslt) return !1; + resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone); + } + } + }); + } + return isValidRslt; + } + function trackbackAlternations(originalPos, newPos) { + var vp = getMaskSet().validPositions[newPos]; + if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) { + var tests = getTests(ps).slice(), bestMatch = determineTestTemplate(tests, !0), equality = -1; + "" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) { + for (var i = 0; i < tll; i++) { + if (void 0 === tst.locator[i] || !checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","), tst.na)) { + var targetAI = targetLocator[i], bestMatchAI = bestMatch.locator[i], tstAI = tst.locator[i]; + targetAI - bestMatchAI > Math.abs(targetAI - tstAI) && (bestMatch = tst); + break; + } + equality < i && (equality = i, bestMatch = tst); + } + }), bestMatch = $.extend({}, bestMatch, { + input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def + }), bestMatch.generatedInput = !0, setValidPosition(ps, bestMatch, !0), getMaskSet().validPositions[newPos] = void 0, + _isValid(newPos, vp.input, !0); + } + } + function setValidPosition(pos, validTest, fromSetValid, isSelection) { + if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) { + var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0); + for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i]; + getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest); + var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength; + for (i = j = pos; i <= lvp; i++) { + var t = positionsClone[i]; + if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) { + if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), + getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch), + j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) { + var result = isValid(posMatch, t.input, !0, !0); + valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, + needsValidation = !0; + } else if (valid = t.generatedInput === !0, !valid && posMatch >= getMaskSet().maskLength - 1) break; + if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength), + valid) break; + } + if (!valid) break; + } + if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), + resetMaskSet(!0), !1; + } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest); + return resetMaskSet(!0), !0; + } + function fillMissingNonMask(maskPos) { + for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ; + var testTemplate, testsFromPos; + for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(), + "" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos), + testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, getPlaceholder(pndx, testTemplate.match, !0) || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0), + result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0))); + } + strict = strict === !0; + var maskPos = pos; + void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin); + var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions); + if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), + maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict), + (!strict || fromSetValid === !0) && result === !1)) { + var currentPosValid = getMaskSet().validPositions[maskPos]; + if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) { + if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict), + result !== !1) { + trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos; + break; + } + } else result = { + caret: seekNext(maskPos) + }; + } + return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)), + result === !0 && (result = { + pos: maskPos + }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result), + void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), + getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result; + } + function isMask(pos, strict) { + var test; + if (strict ? (test = getTestTemplate(pos).match, "" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match, + null != test.fn) return test.fn; + if (strict !== !0 && pos > -1) { + var tests = getTests(pos); + return tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0); + } + return !1; + } + function seekNext(pos, newBlock) { + var maskL = getMaskSet().maskLength; + if (pos >= maskL) return maskL; + for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ; + return position; + } + function seekPrevious(pos, newBlock) { + var tests, position = pos; + if (position <= 0) return 0; + for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position), + tests.length < 2 || 2 === tests.length && "" === tests[1].match.def)); ) ; + return position; + } + function getBufferElement(position) { + return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input; + } + function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) { + if (event && $.isFunction(opts.onBeforeWrite)) { + var result = opts.onBeforeWrite(event, buffer, caretPos, opts); + if (result) { + if (result.refreshFromBuffer) { + var refresh = result.refreshFromBuffer; + refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), + buffer = getBuffer(!0); + } + void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos); + } + } + input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos), + triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input")); + } + function getPlaceholder(pos, test, returnPL) { + if (test = test || getTest(pos).match, void 0 !== test.placeholder || returnPL === !0) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder; + if (null === test.fn) { + if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) { + var prevTest, tests = getTests(pos), staticAlternations = []; + if (tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), + null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length); + } + return test.def; + } + return opts.placeholder.charAt(pos % opts.placeholder.length); + } + function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) { + function isTemplateMatch() { + var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes); + if (charCodeNdx !== -1 && !isMask(initialNdx)) { + isMatch = !0; + for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) { + isMatch = !1; + break; + } + } + return isMatch; + } + var inputValue = nptvl.slice(), charCodes = "", initialNdx = 0, result = void 0; + if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) { + var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g")); + matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), + initialNdx = seekNext(initialNdx)); + } else initialNdx = seekNext(initialNdx); + if ($.each(inputValue, function(ndx, charCode) { + if (void 0 !== charCode) { + var keypress = new $.Event("keypress"); + keypress.which = charCode.charCodeAt(0), charCodes += charCode; + var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp); + if (!isTemplateMatch() || strict || opts.autoUnmask) { + var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p; + result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos), + initialNdx = pos + 1, charCodes = ""; + } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1); + if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), + result && result.refreshFromBuffer)) { + var refresh = result.refreshFromBuffer; + refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), + resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret); + } + } + }), writeOut) { + var caretPos = void 0, lvp = getLastValidPosition(); + document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin, + initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))), + result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)), + writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event("checkval")); + } + } + function unmaskedvalue(input) { + if (input) { + if (void 0 === input.inputmask) return input.value; + input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input); + } + var umValue = [], vps = getMaskSet().validPositions; + for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input); + var unmaskedValue = 0 === umValue.length ? "" : (isRTL ? umValue.reverse() : umValue).join(""); + if ($.isFunction(opts.onUnMask)) { + var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(""); + unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue; + } + return unmaskedValue; + } + function caret(input, begin, end, notranslate) { + function translatePosition(pos) { + if (notranslate !== !0 && isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) { + var bffrLght = getBuffer().join("").length; + pos = bffrLght - pos; + } + return pos; + } + var range; + if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, + end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), + range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset, + end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), + begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length), + end = begin + range.text.length), { + begin: translatePosition(begin), + end: translatePosition(end) + }; + begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin; + var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end; + if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, + input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) { + if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) { + var textNode = document.createTextNode(""); + input.appendChild(textNode); + } + range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), + range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), + range.collapse(!0); + var sel = window.getSelection(); + sel.removeAllRanges(), sel.addRange(range); + } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), + range.moveEnd("character", end), range.moveStart("character", begin), range.select()); + renderColorMask(input, void 0, { + begin: begin, + end: end + }); + } + function determineLastRequiredPosition(returnDefinition) { + var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0; + for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), + ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos); + var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0; + for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--; + return returnDefinition ? { + l: bl, + def: positions[bl] ? positions[bl].match : void 0 + } : bl; + } + function clearOptionalTail(buffer) { + for (var validPos, rl = determineLastRequiredPosition(), bl = buffer.length; rl < bl && !isMask(rl + 1) && (validPos = getTest(rl + 1)) && validPos.match.optionality !== !0 && validPos.match.optionalQuantifier !== !0; ) rl++; + for (;(validPos = getTest(rl - 1)) && validPos.match.optionality && validPos.input === opts.skipOptionalPartCharacter; ) rl--; + return buffer.splice(rl), buffer; + } + function isComplete(buffer) { + if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts); + if ("*" !== opts.repeat) { + var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l); + if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) { + complete = !0; + for (var i = 0; i <= aml; i++) { + var test = getTestTemplate(i).match; + if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) { + complete = !1; + break; + } + } + } + return complete; + } + } + function handleRemove(input, k, pos, strict) { + function generalize() { + if (opts.keepStatic) { + for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) { + var altPos = getMaskSet().validPositions[lastAlt]; + if (altPos) { + if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input), + delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break; + prevAltPos = altPos; + } + } + if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) { + var keypress = new $.Event("keypress"); + keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p); + } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone); + } + } + if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), + isRTL)) { + var pend = pos.end; + pos.end = pos.begin, pos.begin = pend; + } + k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), + void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1, + void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), + stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize(); + var lvp = getLastValidPosition(pos.begin, !0); + lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin); + } + function initializeColorMask(input) { + function findCaretPos(clientx) { + var caretPos, e = document.createElement("span"); + for (var style in computedStyle) isNaN(style) && style.indexOf("font") !== -1 && (e.style[style] = computedStyle[style]); + e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing, + e.style.position = "absolute", e.style.height = "auto", e.style.width = "auto", + e.style.visibility = "hidden", e.style.whiteSpace = "nowrap", document.body.appendChild(e); + var itl, inputText = input.inputmask._valueGet(), previousWidth = 0; + for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) { + if (e.innerHTML += inputText.charAt(caretPos) || "_", e.offsetWidth >= clientx) { + var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx; + e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos; + break; + } + previousWidth = e.offsetWidth; + } + return document.body.removeChild(e), caretPos; + } + function position() { + colorMask.style.position = "absolute", colorMask.style.top = offset.top + "px", + colorMask.style.left = offset.left + "px", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + "px", + colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + "px", + colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1, + colorMask.style.webkitAppearance = "textfield", colorMask.style.mozAppearance = "textfield", + colorMask.style.Appearance = "textfield"; + } + var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null); + input.parentNode; + colorMask = document.createElement("div"), document.body.appendChild(colorMask); + for (var style in computedStyle) isNaN(style) && "cssText" !== style && style.indexOf("webkit") == -1 && (colorMask.style[style] = computedStyle[style]); + input.style.backgroundColor = "transparent", input.style.color = "transparent", + input.style.webkitAppearance = "caret", input.style.mozAppearance = "caret", input.style.Appearance = "caret", + position(), $(window).on("resize", function(e) { + offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), + position(); + }), $(input).on("click", function(e) { + return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]); + }), $(input).on("keydown", function(e) { + e.shiftKey || opts.insertMode === !1 || setTimeout(function() { + renderColorMask(input); + }, 0); + }); + } + function renderColorMask(input, buffer, caretPos) { + function handleStatic() { + isStatic || null !== test.fn && void 0 !== testPos.input ? isStatic && null !== test.fn && void 0 !== testPos.input && (isStatic = !1, + maskTemplate += "") : (isStatic = !0, maskTemplate += ""); + } + if (void 0 !== colorMask) { + buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = { + begin: caretPos, + end: caretPos + }); + var maskTemplate = "", isStatic = !1; + if ("" != buffer) { + var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition(); + do pos === caretPos.begin && document.activeElement === input && (maskTemplate += ""), + getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], + test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), + test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(), + maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || "" !== test.def) || lvp > pos); + } + colorMask.innerHTML = maskTemplate; + } + } + function mask(elem) { + function isElementTypeSupported(input, opts) { + function patchValueProperty(npt) { + function patchValhook(type) { + if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) { + var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) { + return elem.value; + }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) { + return elem.value = value, elem; + }; + $.valHooks[type] = { + get: function(elem) { + if (elem.inputmask) { + if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue(); + var result = valhookGet(elem); + return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : ""; + } + return valhookGet(elem); + }, + set: function(elem, value) { + var result, $elem = $(elem); + return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"), + result; + }, + inputmaskpatch: !0 + }; + } + } + function getter() { + return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this); + } + function setter(value) { + valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue"); + } + function installNativeValueSetFallback(npt) { + EventRuler.on(npt, "mouseenter", function(event) { + var $input = $(this), input = this, value = input.inputmask._valueGet(); + value !== getBuffer().join("") && $input.trigger("setvalue"); + }); + } + var valueGet, valueSet; + if (!npt.inputmask.__valueGet) { + if (opts.noValuePatching !== !0) { + if (Object.getOwnPropertyDescriptor) { + "function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" == typeof "test".__proto__ ? function(object) { + return object.__proto__; + } : function(object) { + return object.constructor.prototype; + }); + var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : void 0; + valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, + valueSet = valueProperty.set, Object.defineProperty(npt, "value", { + get: getter, + set: setter, + configurable: !0 + })) : "INPUT" !== npt.tagName && (valueGet = function() { + return this.textContent; + }, valueSet = function(value) { + this.textContent = value; + }, Object.defineProperty(npt, "value", { + get: getter, + set: setter, + configurable: !0 + })); + } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"), + valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter), + npt.__defineSetter__("value", setter)); + npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet; + } + npt.inputmask._valueGet = function(overruleRTL) { + return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el); + }, npt.inputmask._valueSet = function(value, overruleRTL) { + valueSet.call(this.el, null === value || void 0 === value ? "" : overruleRTL !== !0 && isRTL ? value.split("").reverse().join("") : value); + }, void 0 === valueGet && (valueGet = function() { + return this.value; + }, valueSet = function(value) { + this.value = value; + }, patchValhook(npt.type), installNativeValueSetFallback(npt)); + } + } + var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || "TEXTAREA" === input.tagName; + if (!isSupported) if ("INPUT" === input.tagName) { + var el = document.createElement("input"); + el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null; + } else isSupported = "partial"; + return isSupported !== !1 && patchValueProperty(input), isSupported; + } + EventRuler.off(el); + var isSupported = isElementTypeSupported(elem, opts); + if (isSupported !== !1 && (el = elem, $el = $(el), ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"), + ("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", el.removeAttribute("dir"), + el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el), + android && (el.hasOwnProperty("inputmode") && (el.inputmode = opts.inputmode, el.setAttribute("inputmode", opts.inputmode)), + "rtfm" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el), + el.type = "password")), isSupported === !0 && (EventRuler.on(el, "submit", EventHandlers.submitEvent), + EventRuler.on(el, "reset", EventHandlers.resetEvent), EventRuler.on(el, "mouseenter", EventHandlers.mouseenterEvent), + EventRuler.on(el, "blur", EventHandlers.blurEvent), EventRuler.on(el, "focus", EventHandlers.focusEvent), + EventRuler.on(el, "mouseleave", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, "click", EventHandlers.clickEvent), + EventRuler.on(el, "dblclick", EventHandlers.dblclickEvent), EventRuler.on(el, "paste", EventHandlers.pasteEvent), + EventRuler.on(el, "dragdrop", EventHandlers.pasteEvent), EventRuler.on(el, "drop", EventHandlers.pasteEvent), + EventRuler.on(el, "cut", EventHandlers.cutEvent), EventRuler.on(el, "complete", opts.oncomplete), + EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), + android && opts.inputEventOnly === !0 || (EventRuler.on(el, "keydown", EventHandlers.keydownEvent), + EventRuler.on(el, "keypress", EventHandlers.keypressEvent)), EventRuler.on(el, "compositionstart", $.noop), + EventRuler.on(el, "compositionupdate", $.noop), EventRuler.on(el, "compositionend", $.noop), + EventRuler.on(el, "keyup", $.noop), EventRuler.on(el, "input", EventHandlers.inputFallBackEvent), + EventRuler.on(el, "beforeinput", $.noop)), EventRuler.on(el, "setvalue", EventHandlers.setValueEvent), + getBufferTemplate(), "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) { + var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet(); + checkVal(el, !0, !1, initialValue.split("")); + var buffer = getBuffer().slice(); + undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), + opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)), + writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition())); + } + } + maskset = maskset || this.maskset, opts = opts || this.opts; + var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = { + on: function(input, eventName, eventHandler) { + var ev = function(e) { + if (void 0 === this.inputmask && "FORM" !== this.nodeName) { + var imOpts = $.data(this, "_inputmask_opts"); + imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this); + } else { + if ("setvalue" === e.type || "FORM" === this.nodeName || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) { + switch (e.type) { + case "input": + if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault(); + break; + + case "keydown": + skipKeyPressEvent = !1, skipInputEvent = !1; + break; + + case "keypress": + if (skipKeyPressEvent === !0) return e.preventDefault(); + skipKeyPressEvent = !0; + break; + + case "click": + if (iemobile || iphone) { + var that = this, args = arguments; + return setTimeout(function() { + eventHandler.apply(that, args); + }, 0), !1; + } + } + var returnVal = eventHandler.apply(this, arguments); + return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal; + } + e.preventDefault(); + } + }; + input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), + $.inArray(eventName, [ "submit", "reset" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev); + }, + off: function(input, event) { + if (input.inputmask && input.inputmask.events) { + var events; + event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, + $.each(events, function(eventName, evArr) { + for (;evArr.length > 0; ) { + var ev = evArr.pop(); + $.inArray(eventName, [ "submit", "reset" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev); + } + delete input.inputmask.events[eventName]; + }); + } + } + }, EventHandlers = { + keydownEvent: function(e) { + function isInputEventSupported(eventName) { + var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el; + return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]), + el = null, isSupported; + } + var input = this, $input = $(input), k = e.keyCode, pos = caret(input); + if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(), + handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join("")), + input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) { + e.preventDefault(); + var caretPos = seekNext(getLastValidPosition()); + opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--, + caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0); + } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), + caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")), + $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)), + pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), + pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--), + pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() { + var caretPos = caret(input); + caret(input, caretPos.begin); + }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() { + var caretPos = caret(input); + caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1); + }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1)); + opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = $.inArray(k, opts.ignorables) !== -1; + }, + keypressEvent: function(e, checkval, writeOut, strict, ndx) { + var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode; + if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""), + setTimeout(function() { + $input.trigger("change"); + }, 0)), !0; + if (k) { + 46 === k && e.shiftKey === !1 && "" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0)); + var forwardPosition, pos = checkval ? { + begin: ndx, + end: ndx + } : caret(input), c = String.fromCharCode(k); + getMaskSet().writeOutBuffer = !0; + var valResult = isValid(pos, c, strict); + if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos), + getMaskSet().p = forwardPosition), writeOut !== !1) { + var self = this; + if (setTimeout(function() { + opts.onKeyValidation.call(self, k, valResult, opts); + }, 0), getMaskSet().writeOutBuffer && valResult !== !1) { + var buffer = getBuffer(); + writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), + checkval !== !0 && setTimeout(function() { + isComplete(buffer) === !0 && $input.trigger("complete"); + }, 0); + } + } + if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition, + valResult; + } + }, + pasteEvent: function(e) { + var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input); + isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue); + var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length); + if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), + valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), + isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), + window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret; else { + if (!ev.clipboardData || !ev.clipboardData.getData) return !0; + inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret; + } + var pasteValue = inputValue; + if ($.isFunction(opts.onBeforePaste)) { + if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault(); + pasteValue || (pasteValue = inputValue); + } + return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")), + writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join("")), + isComplete(getBuffer()) === !0 && $input.trigger("complete"), e.preventDefault(); + }, + inputFallBackEvent: function(e) { + var input = this, inputValue = input.inputmask._valueGet(); + if (getBuffer().join("") !== inputValue) { + var caretPos = caret(input); + if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""), + iemobile) { + var inputChar = inputValue.replace(getBuffer().join(""), ""); + if (1 === inputChar.length) { + var keypress = new $.Event("keypress"); + return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), + !1; + } + } + if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), + getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) { + for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(""); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1); + inputValue = inputValue.replace(bufferTemplate, ""), inputValue = inputValue.split(""), + checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger("complete"); + } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e); + e.preventDefault(); + } + }, + setValueEvent: function(e) { + this.inputmask.refreshValue = !1; + var input = this, value = input.inputmask._valueGet(); + checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split("")), + undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet(""); + }, + focusEvent: function(e) { + var input = this, nptValue = input.inputmask._valueGet(); + opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join("") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))), + opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]), + undoValue = getBuffer().join(""); + }, + mouseleaveEvent: function(e) { + var input = this; + if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) { + var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet(); + nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer), + writeBuffer(input, buffer)); + } + }, + clickEvent: function(e, tabbed) { + function doRadixFocus(clickPos) { + if ("" !== opts.radixPoint) { + var vps = getMaskSet().validPositions; + if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) { + if (clickPos < seekNext(-1)) return !0; + var radixPos = $.inArray(opts.radixPoint, getBuffer()); + if (radixPos !== -1) { + for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1; + return !0; + } + } + } + return !1; + } + var input = this; + setTimeout(function() { + if (document.activeElement === input) { + var selectedCaret = caret(input); + if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) { + case "none": + break; + + case "radixFocus": + if (doRadixFocus(selectedCaret.begin)) { + var radixPos = $.inArray(opts.radixPoint, getBuffer().join("")); + caret(input, opts.numericInput ? seekNext(radixPos) : radixPos); + break; + } + + default: + var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition); + if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else { + var placeholder = getPlaceholder(lastPosition); + ("" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)), + caret(input, lastPosition); + } + } + } + }, 0); + }, + dblclickEvent: function(e) { + var input = this; + setTimeout(function() { + caret(input, 0, seekNext(getLastValidPosition())); + }, 0); + }, + cutEvent: function(e) { + var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end); + clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")), + document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos), + writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), + input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared"); + }, + blurEvent: function(e) { + var $input = $(this), input = this; + if (input.inputmask) { + var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice(); + undoValue !== buffer.join("") && setTimeout(function() { + $input.trigger("change"), undoValue = buffer.join(""); + }, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), + isComplete(buffer) === !1 && (setTimeout(function() { + $input.trigger("incomplete"); + }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), + writeBuffer(input, buffer, void 0, e)); + } + }, + mouseenterEvent: function(e) { + var input = this; + mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer()); + }, + submitEvent: function(e) { + undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""), + opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), + setTimeout(function() { + writeBuffer(el, getBuffer()); + }, 0)); + }, + resetEvent: function(e) { + el.inputmask.refreshValue = !0, setTimeout(function() { + $el.trigger("setvalue"); + }, 0); + } + }; + if (void 0 !== actionObj) switch (actionObj.action) { + case "isComplete": + return el = actionObj.el, isComplete(getBuffer()); + + case "unmaskedvalue": + return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value, + valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(""), + checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), + unmaskedvalue(el); + + case "mask": + mask(el); + break; + + case "format": + return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(""), + checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), + actionObj.metadata ? { + value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""), + metadata: maskScope.call(this, { + action: "getmetadata" + }, maskset, opts) + } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""); + + case "isValid": + actionObj.value ? (valueBuffer = actionObj.value.split(""), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join(""); + for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ; + return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join(""); + + case "getemptymask": + return getBufferTemplate().join(""); + + case "remove": + if (el) { + $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el); + var valueProperty; + Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value"), + valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, "value", { + get: el.inputmask.__valueGet, + set: el.inputmask.__valueSet, + configurable: !0 + })) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet), + el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0; + } + return el; + + case "getmetadata": + if ($.isArray(maskset.metadata)) { + var maskTarget = getMaskTemplate(!0, 0, !1).join(""); + return $.each(maskset.metadata, function(ndx, mtdt) { + if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1; + }), maskTarget; + } + return maskset.metadata; + } + } + var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile; + return Inputmask.prototype = { + dataAttribute: "data-inputmask", + defaults: { + placeholder: "_", + optionalmarker: { + start: "[", + end: "]" + }, + quantifiermarker: { + start: "{", + end: "}" + }, + groupmarker: { + start: "(", + end: ")" + }, + alternatormarker: "|", + escapeChar: "\\", + mask: null, + oncomplete: $.noop, + onincomplete: $.noop, + oncleared: $.noop, + repeat: 0, + greedy: !0, + autoUnmask: !1, + removeMaskOnSubmit: !1, + clearMaskOnLostFocus: !0, + insertMode: !0, + clearIncomplete: !1, + alias: null, + onKeyDown: $.noop, + onBeforeMask: null, + onBeforePaste: function(pastedValue, opts) { + return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue; + }, + onBeforeWrite: null, + onUnMask: null, + showMaskOnFocus: !0, + showMaskOnHover: !0, + onKeyValidation: $.noop, + skipOptionalPartCharacter: " ", + numericInput: !1, + rightAlign: !1, + undoOnEscape: !0, + radixPoint: "", + radixPointDefinitionSymbol: void 0, + groupSeparator: "", + keepStatic: null, + positionCaretOnTab: !0, + tabThrough: !1, + supportsInputType: [ "text", "tel", "password" ], + 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, 0, 229 ], + isComplete: null, + canClearPosition: $.noop, + postValidation: null, + staticDefinitionSymbol: void 0, + jitMasking: !1, + nullable: !0, + inputEventOnly: !1, + noValuePatching: !1, + positionCaretOnClick: "lvp", + casing: null, + inputmode: "verbatim", + colorMask: !1, + androidHack: !1 + }, + definitions: { + "9": { + validator: "[0-9]", + cardinality: 1, + definitionSymbol: "*" + }, + a: { + validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", + cardinality: 1, + definitionSymbol: "*" + }, + "*": { + validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", + cardinality: 1 + } + }, + aliases: {}, + masksCache: {}, + mask: function(elems) { + function importAttributeOptions(npt, opts, userOptions, dataAttribute) { + function importOption(option, optionData) { + optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + "-" + option), + null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), + userOptions[option] = optionData); + } + var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute); + if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'), + dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) { + optionData = void 0; + for (p in dataoptions) if ("alias" === p.toLowerCase()) { + optionData = dataoptions[p]; + break; + } + } + importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts); + for (option in opts) { + if (dataoptions) { + optionData = void 0; + for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) { + optionData = dataoptions[p]; + break; + } + } + importOption(option, optionData); + } + return $.extend(!0, opts, userOptions), opts; + } + var that = this; + return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), + elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) { + var scopedOpts = $.extend(!0, {}, that.opts); + importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute); + var maskset = generateMaskSet(scopedOpts, that.noMasksCache); + void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask((void 0), (void 0), (!0)), + el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), + el.inputmask.isRTL = that.isRTL, el.inputmask.el = el, el.inputmask.maskset = maskset, + $.data(el, "_inputmask_opts", scopedOpts), maskScope.call(el.inputmask, { + action: "mask" + })); + }), elems && elems[0] ? elems[0].inputmask || this : this; + }, + option: function(options, noremask) { + return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.userOptions, options), + this.el && noremask !== !0 && this.mask(this.el), this) : void 0; + }, + unmaskedvalue: function(value) { + return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), + maskScope.call(this, { + action: "unmaskedvalue", + value: value + }); + }, + remove: function() { + return maskScope.call(this, { + action: "remove" + }); + }, + getemptymask: function() { + return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), + maskScope.call(this, { + action: "getemptymask" + }); + }, + hasMaskedValue: function() { + return !this.opts.autoUnmask; + }, + isComplete: function() { + return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), + maskScope.call(this, { + action: "isComplete" + }); + }, + getmetadata: function() { + return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), + maskScope.call(this, { + action: "getmetadata" + }); + }, + isValid: function(value) { + return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), + maskScope.call(this, { + action: "isValid", + value: value + }); + }, + format: function(value, metadata) { + return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), + maskScope.call(this, { + action: "format", + value: value, + metadata: metadata + }); + }, + analyseMask: function(mask, opts) { + function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) { + this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1, + this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, + this.quantifier = { + min: 1, + max: 1 + }; + } + function insertTestDefinition(mtoken, element, position) { + var maskdef = (opts.definitions ? opts.definitions[element] : void 0) || Inputmask.prototype.definitions[element]; + position = void 0 !== position ? position : mtoken.matches.length; + var prevMatch = mtoken.matches[position - 1]; + if (maskdef && !escaped) { + for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) { + var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality; + mtoken.matches.splice(position++, 0, { + fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() { + this.test = validator; + }() : new RegExp("."), + cardinality: cardinality ? cardinality : 1, + optionality: mtoken.isOptional, + newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element), + casing: maskdef.casing, + def: maskdef.definitionSymbol || element, + placeholder: maskdef.placeholder, + nativeDef: element + }), prevMatch = mtoken.matches[position - 1]; + } + mtoken.matches.splice(position++, 0, { + fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() { + this.test = maskdef.validator; + }() : new RegExp("."), + cardinality: maskdef.cardinality, + optionality: mtoken.isOptional, + newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element), + casing: maskdef.casing, + def: maskdef.definitionSymbol || element, + placeholder: maskdef.placeholder, + nativeDef: element + }); + } else mtoken.matches.splice(position++, 0, { + fn: null, + cardinality: 0, + optionality: mtoken.isOptional, + newBlockMarker: void 0 === prevMatch || prevMatch.def !== element, + casing: null, + def: opts.staticDefinitionSymbol || element, + placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0, + nativeDef: element + }), escaped = !1; + } + function verifyGroupMarker(maskToken) { + maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) { + var nextToken = maskToken.matches[ndx + 1]; + (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1, + insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)), + verifyGroupMarker(token); + }); + } + function defaultCase() { + if (openenings.length > 0) { + if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m), + currentOpeningToken.isAlternator) { + alternator = openenings.pop(); + for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1; + openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], + currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator); + } + } else insertTestDefinition(currentToken, m); + } + function reverseTokens(maskToken) { + function reverseStatic(st) { + return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), + st; + } + maskToken.matches = maskToken.matches.reverse(); + for (var match in maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) { + var intMatch = parseInt(match); + if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) { + var qt = maskToken.matches[match]; + maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt); + } + void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]); + } + return maskToken; + } + for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], + escaped) defaultCase(); else switch (m.charAt(0)) { + case opts.escapeChar: + escaped = !0; + break; + + case opts.optionalmarker.end: + case opts.groupmarker.end: + if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) { + if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), + currentOpeningToken.isAlternator) { + alternator = openenings.pop(); + for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1; + openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], + currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator); + } + } else currentToken.matches.push(openingToken); else defaultCase(); + break; + + case opts.optionalmarker.start: + openenings.push(new MaskToken((!1), (!0))); + break; + + case opts.groupmarker.start: + openenings.push(new MaskToken((!0))); + break; + + case opts.quantifiermarker.start: + var quantifier = new MaskToken((!1), (!1), (!0)); + m = m.replace(/[{}]/g, ""); + var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]); + if ("*" !== mq1 && "+" !== mq1 || (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = { + min: mq0, + max: mq1 + }, openenings.length > 0) { + var matches = openenings[openenings.length - 1].matches; + match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match), + match = groupToken), matches.push(match), matches.push(quantifier); + } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), + groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), + currentToken.matches.push(quantifier); + break; + + case opts.alternatormarker: + openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], + lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), + lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)), + alternator.matches.push(lastMatch), openenings.push(alternator)); + break; + + default: + defaultCase(); + } + for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken); + return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)), + opts.numericInput && reverseTokens(maskTokens[0]), maskTokens; + } + }, Inputmask.extendDefaults = function(options) { + $.extend(!0, Inputmask.prototype.defaults, options); + }, Inputmask.extendDefinitions = function(definition) { + $.extend(!0, Inputmask.prototype.definitions, definition); + }, Inputmask.extendAliases = function(alias) { + $.extend(!0, Inputmask.prototype.aliases, alias); + }, Inputmask.format = function(value, options, metadata) { + return Inputmask(options).format(value, metadata); + }, Inputmask.unmask = function(value, options) { + return Inputmask(options).unmaskedvalue(value); + }, Inputmask.isValid = function(value, options) { + return Inputmask(options).isValid(value); + }, Inputmask.remove = function(elems) { + $.each(elems, function(ndx, el) { + el.inputmask && el.inputmask.remove(); + }); + }, Inputmask.escapeRegex = function(str) { + var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ]; + return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1"); + }, Inputmask.keyCode = { + ALT: 18, + BACKSPACE: 8, + BACKSPACE_SAFARI: 127, + 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, + X: 88 + }, window.Inputmask = Inputmask, Inputmask; +}(jQuery), function($, Inputmask) { + return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) { + var nptmask, input = this[0]; + if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) { + case "unmaskedvalue": + return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val(); + + case "remove": + return this.each(function() { + this.inputmask && this.inputmask.remove(); + }); + + case "getemptymask": + return input && input.inputmask ? input.inputmask.getemptymask() : ""; + + case "hasMaskedValue": + return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue(); + + case "isComplete": + return !input || !input.inputmask || input.inputmask.isComplete(); + + case "getmetadata": + return input && input.inputmask ? input.inputmask.getmetadata() : void 0; + + case "setvalue": + $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler("setvalue"); + break; + + case "option": + if ("string" != typeof options) return this.each(function() { + if (void 0 !== this.inputmask) return this.inputmask.option(options); + }); + if (input && void 0 !== input.inputmask) return input.inputmask.option(options); + break; + + default: + return options.alias = fn, nptmask = new Inputmask(options), this.each(function() { + nptmask.mask(this); + }); + } else { + if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() { + return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this); + }) : this.each(function() { + nptmask.mask(this); + }); + if (void 0 === fn) return this.each(function() { + nptmask = new Inputmask(options), nptmask.mask(this); + }); + } + }), $.fn.inputmask; +}(jQuery, Inputmask), function($, Inputmask) { + function isLeapYear(year) { + return isNaN(year) || 29 === new Date(year, 2, 0).getDate(); + } + return Inputmask.extendAliases({ + "dd/mm/yyyy": { + mask: "1/2/y", + placeholder: "dd/mm/yyyy", + regex: { + val1pre: new RegExp("[0-3]"), + val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), + val2pre: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])"); + }, + val2: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))"); + } + }, + leapday: "29/02/", + separator: "/", + yearrange: { + minyear: 1900, + maxyear: 2099 + }, + isInYearRange: function(chrs, minyear, maxyear) { + if (isNaN(chrs)) return !1; + var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length))); + return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear); + }, + determinebaseyear: function(minyear, maxyear, hint) { + var currentyear = new Date().getFullYear(); + if (minyear > currentyear) return minyear; + if (maxyear < currentyear) { + for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--; + var maxxYear = maxYearPrefix + maxYearPostfix; + return minyear > maxxYear ? minyear : maxxYear; + } + if (minyear <= currentyear && currentyear <= maxyear) { + for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--; + var currentYearAndHint = currentYearPrefix + hint; + return currentYearAndHint < minyear ? minyear : currentYearAndHint; + } + return currentyear; + }, + onKeyDown: function(e, buffer, caretPos, opts) { + var $input = $(this); + if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { + var today = new Date(); + $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), + $input.trigger("setvalue"); + } + }, + getFrontValue: function(mask, buffer, opts) { + for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) { + var definition = opts.definitions[mask.charAt(i)]; + definition ? (start += length, length = definition.cardinality) : length++; + } + return buffer.join("").substr(start, length); + }, + postValidation: function(buffer, currentResult, opts) { + var dayMonthValue, year, bufferStr = buffer.join(""); + return 0 === opts.mask.indexOf("y") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11), + dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year)); + }, + definitions: { + "1": { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.regex.val1.test(chrs); + return strict || isValid || chrs.charAt(1) !== opts.separator && "-./".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0", + { + refreshFromBuffer: { + start: pos - 1, + end: pos + }, + pos: pos, + c: chrs.charAt(0) + }); + }, + cardinality: 2, + prevalidator: [ { + validator: function(chrs, maskset, pos, strict, opts) { + var pchrs = chrs; + isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]); + var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs); + if (!strict && !isValid) { + if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs, + maskset.buffer[++pos] = "0", { + pos: pos, + c: "0" + }; + if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0", + pos++, { + pos: pos + }; + } + return isValid; + }, + cardinality: 1 + } ] + }, + "2": { + validator: function(chrs, maskset, pos, strict, opts) { + var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts); + frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = "01" + opts.separator); + var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs); + return strict || isValid || chrs.charAt(1) !== opts.separator && "-./".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0", + { + refreshFromBuffer: { + start: pos - 1, + end: pos + }, + pos: pos, + c: chrs.charAt(0) + }); + }, + cardinality: 2, + prevalidator: [ { + validator: function(chrs, maskset, pos, strict, opts) { + isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]); + var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts); + frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = "01" + opts.separator); + var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs); + return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", + pos++, { + pos: pos + }); + }, + cardinality: 1 + } ] + }, + y: { + validator: function(chrs, maskset, pos, strict, opts) { + return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); + }, + cardinality: 4, + prevalidator: [ { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); + if (!strict && !isValid) { + var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1); + if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), + { + pos: pos + }; + if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2), + isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), + maskset.buffer[pos++] = yearPrefix.charAt(1), { + pos: pos + }; + } + return isValid; + }, + cardinality: 1 + }, { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); + if (!strict && !isValid) { + var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2); + if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), + { + pos: pos + }; + if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), + isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), + maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0), + { + refreshFromBuffer: { + start: pos - 3, + end: pos + }, + pos: pos + }; + } + return isValid; + }, + cardinality: 2 + }, { + validator: function(chrs, maskset, pos, strict, opts) { + return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); + }, + cardinality: 3 + } ] + } + }, + insertMode: !1, + autoUnmask: !1 + }, + "mm/dd/yyyy": { + placeholder: "mm/dd/yyyy", + alias: "dd/mm/yyyy", + regex: { + val2pre: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); + }, + val2: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); + }, + val1pre: new RegExp("[01]"), + val1: new RegExp("0[1-9]|1[012]") + }, + leapday: "02/29/", + onKeyDown: function(e, buffer, caretPos, opts) { + var $input = $(this); + if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { + var today = new Date(); + $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), + $input.trigger("setvalue"); + } + } + }, + "yyyy/mm/dd": { + mask: "y/1/2", + placeholder: "yyyy/mm/dd", + alias: "mm/dd/yyyy", + leapday: "/02/29", + onKeyDown: function(e, buffer, caretPos, opts) { + var $input = $(this); + if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { + var today = new Date(); + $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), + $input.trigger("setvalue"); + } + } + }, + "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: new RegExp("[012]"), + hrs24: new RegExp("2[0-4]|1[3-9]"), + hrs: new RegExp("[01][0-9]|2[0-4]"), + ampm: new RegExp("^[a|p|A|P][m|M]"), + mspre: new RegExp("[0-5]"), + ms: new RegExp("[0-5][0-9]") + }, + timeseparator: ":", + hourFormat: "24", + definitions: { + h: { + validator: function(chrs, maskset, pos, strict, opts) { + if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0", + maskset.buffer[pos] = "0", { + refreshFromBuffer: { + start: pos - 1, + end: pos + }, + c: "0" + }; + var isValid = opts.regex.hrs.test(chrs); + if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", + maskset.buffer[pos] = chrs.charAt(0), pos++, { + refreshFromBuffer: { + start: pos - 2, + end: pos + }, + pos: pos, + c: opts.timeseparator + }; + if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) { + var tmp = parseInt(chrs, 10); + return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p", + maskset.buffer[pos + 6] = "m"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(), + maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1), + maskset.buffer[pos - 1] = tmp.toString().charAt(0)), { + refreshFromBuffer: { + start: pos - 1, + end: pos + 6 + }, + c: maskset.buffer[pos] + }; + } + return isValid; + }, + cardinality: 2, + prevalidator: [ { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.regex.hrspre.test(chrs); + return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", + pos++, { + pos: pos + }); + }, + cardinality: 1 + } ] + }, + s: { + validator: "[0-5][0-9]", + cardinality: 2, + prevalidator: [ { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.regex.mspre.test(chrs); + return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", + pos++, { + pos: pos + }); + }, + cardinality: 1 + } ] + }, + t: { + validator: function(chrs, maskset, pos, strict, opts) { + return opts.regex.ampm.test(chrs + "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" + }, + "mm/dd/yyyy hh:mm xm": { + mask: "1/2/y h:s t\\m", + placeholder: "mm/dd/yyyy hh:mm xm", + alias: "datetime12", + regex: { + val2pre: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); + }, + val2: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); + }, + val1pre: new RegExp("[01]"), + val1: new RegExp("0[1-9]|1[012]") + }, + leapday: "02/29/", + onKeyDown: function(e, buffer, caretPos, opts) { + var $input = $(this); + if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { + var today = new Date(); + $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), + $input.trigger("setvalue"); + } + } + }, + "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", + placeholder: "hh:mm:ss", + alias: "datetime", + autoUnmask: !1 + }, + "hh:mm": { + mask: "h:s", + placeholder: "hh:mm", + alias: "datetime", + autoUnmask: !1 + }, + date: { + alias: "dd/mm/yyyy" + }, + "mm/yyyy": { + mask: "1/y", + placeholder: "mm/yyyy", + leapday: "donotuse", + separator: "/", + alias: "mm/dd/yyyy" + }, + shamsi: { + regex: { + val2pre: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])"); + }, + val2: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)"); + }, + val1pre: new RegExp("[01]"), + val1: new RegExp("0[1-9]|1[012]") + }, + yearrange: { + minyear: 1300, + maxyear: 1499 + }, + mask: "y/1/2", + leapday: "/12/30", + placeholder: "yyyy/mm/dd", + alias: "mm/dd/yyyy", + clearIncomplete: !0 + }, + "yyyy-mm-dd hh:mm:ss": { + mask: "y-1-2 h:s:s", + placeholder: "yyyy-mm-dd hh:mm:ss", + alias: "datetime", + separator: "-", + leapday: "-02-29", + regex: { + val2pre: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); + }, + val2: function(separator) { + var escapedSeparator = Inputmask.escapeRegex.call(this, separator); + return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); + }, + val1pre: new RegExp("[01]"), + val1: new RegExp("0[1-9]|1[012]") + }, + onKeyDown: function(e, buffer, caretPos, opts) {} + } + }), Inputmask; +}(jQuery, Inputmask), function($, Inputmask) { + return Inputmask.extendDefinitions({ + A: { + validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", + cardinality: 1, + casing: "upper" + }, + "&": { + validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", + cardinality: 1, + casing: "upper" + }, + "#": { + validator: "[0-9A-Fa-f]", + cardinality: 1, + casing: "upper" + } + }), Inputmask.extendAliases({ + url: { + definitions: { + i: { + validator: ".", + cardinality: 1 + } + }, + mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}", + insertMode: !1, + autoUnmask: !1, + inputmode: "url" + }, + ip: { + mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]", + definitions: { + i: { + validator: function(chrs, maskset, pos, strict, opts) { + return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, + chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs, + new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs); + }, + cardinality: 1 + } + }, + onUnMask: function(maskedValue, unmaskedValue, opts) { + return maskedValue; + }, + inputmode: "numeric" + }, + email: { + mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]", + greedy: !1, + onBeforePaste: function(pastedValue, opts) { + return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", ""); + }, + definitions: { + "*": { + validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]", + cardinality: 1, + casing: "lower" + }, + "-": { + validator: "[0-9A-Za-z-]", + cardinality: 1, + casing: "lower" + } + }, + onUnMask: function(maskedValue, unmaskedValue, opts) { + return maskedValue; + }, + inputmode: "email" + }, + mac: { + mask: "##:##:##:##:##:##" + }, + vin: { + mask: "V{13}9{4}", + definitions: { + V: { + validator: "[A-HJ-NPR-Za-hj-npr-z\\d]", + cardinality: 1, + casing: "upper" + } + }, + clearIncomplete: !0, + autoUnmask: !0 + } + }), Inputmask; +}(jQuery, Inputmask), function($, Inputmask) { + return Inputmask.extendAliases({ + numeric: { + mask: function(opts) { + function autoEscape(txt) { + for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? "\\" + txt.charAt(i) : txt.charAt(i); + return escapedTxt; + } + if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), + opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""), + " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator, + opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), + isFinite(opts.integerDigits))) { + var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize; + opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), + opts.integerDigits < 1 && (opts.integerDigits = "*"); + } + opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), + "radixFocus" === opts.positionCaretOnClick && "" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = "lvp"), + opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~", + opts.numericInput === !0 && (opts.positionCaretOnClick = "radixFocus" === opts.positionCaretOnClick ? "lvp" : opts.positionCaretOnClick, + opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1); + var mask = "[+]"; + if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}", + void 0 !== opts.digits) { + opts.radixPointDefinitionSymbol = opts.decimalProtect ? ":" : opts.radixPoint; + var dq = opts.digits.toString().split(","); + isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? "[" + opts.radixPointDefinitionSymbol + ";{1," + opts.digits + "}]" : opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}"); + } + return mask += autoEscape(opts.suffix), mask += "[-]", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), + "," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, "."))), + null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), + "," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, "."))), + mask; + }, + placeholder: "", + greedy: !1, + digits: "*", + digitsOptional: !0, + radixPoint: ".", + positionCaretOnClick: "radixFocus", + groupSize: 3, + groupSeparator: "", + autoGroup: !1, + allowPlus: !0, + allowMinus: !0, + negationSymbol: { + front: "-", + back: "" + }, + integerDigits: "+", + integerOptional: !0, + prefix: "", + suffix: "", + rightAlign: !0, + decimalProtect: !0, + min: null, + max: null, + step: 1, + insertMode: !0, + autoUnmask: !1, + unmaskAsNumber: !1, + inputmode: "numeric", + postFormat: function(buffer, pos, opts) { + opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1)); + var i, l; + pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos; + var charAtPos = buffer[pos], cbuf = buffer.slice(); + charAtPos === opts.groupSeparator && pos > opts.prefix.length && pos < buffer.length - opts.suffix.length && (cbuf.splice(pos--, 1), + charAtPos = cbuf[pos]); + var isNegative = cbuf.join("").match(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front))); + isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = "!"); + var bufVal = cbuf.join(""), bufValOrigin = cbuf.join(); + if (isNegative && (bufVal = bufVal.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), ""), + bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")), + bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + "$"), ""), + bufVal = bufVal.replace(new RegExp("^" + Inputmask.escapeRegex(opts.prefix)), ""), + bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) { + var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator); + bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), ""); + var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? "!" : opts.radixPoint); + if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace("!", "?")), + bufVal.length > opts.groupSize) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal) && "" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"), + bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator); + bufVal = bufVal.replace("?", "!"), "" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? "!" : opts.radixPoint) + radixSplit[1]); + } + bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back); + var needsRefresh = bufValOrigin !== bufVal.split("").join(), newPos = $.inArray("!", bufVal); + if (newPos === -1 && (newPos = pos), needsRefresh) { + for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i); + buffer[newPos] = charAtPos; + } + return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos, + opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)), + { + pos: newPos, + refreshFromBuffer: needsRefresh, + buffer: buffer, + isNegative: isNegative + }; + }, + onBeforeWrite: function(e, buffer, caretPos, opts) { + var rslt; + if (e && ("blur" === e.type || "checkval" === e.type || "keydown" === e.type)) { + var maskedValue = opts.numericInput ? buffer.slice().reverse().join("") : buffer.join(""), processValue = maskedValue.replace(opts.prefix, ""); + processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), + "," === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, ".")); + var isNegative = processValue.match(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g")); + if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""), + processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""), + isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")), + processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue, + "" !== processValue && isFinite(processValue)) { + var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue; + if ("blur" === e.type && (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), + isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), + isNegative = opts.max < 0, maskedValue = void 0)), processValue = floatValue.toString().replace(".", opts.radixPoint).split(""), + isFinite(opts.digits)) { + var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue); + radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1); + for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = "0"; + processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1]; + } + if (floatValue.toString() !== processValue && floatValue.toString() + "." !== processValue || isNegative) return processValue = (opts.prefix + processValue.join("")).split(""), + !isNegative || 0 === floatValue && "blur" === e.type || (processValue.unshift(opts.negationSymbol.front), + processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()), + rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), + rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join("") !== buffer.join("")), + rslt; + } + } + if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), + rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1, + rslt; + }, + regex: { + integerPart: function(opts) { + return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+"); + }, + integerNPart: function(opts) { + return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+"); + } + }, + signHandler: function(chrs, maskset, pos, strict, opts) { + if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) { + var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts)); + if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? { + pos: 0, + c: opts.negationSymbol.front, + remove: 0, + caret: pos, + insert: { + pos: maskset.buffer.length - 1, + c: opts.negationSymbol.back + } + } : { + pos: 0, + c: opts.negationSymbol.front, + remove: 0, + caret: pos + } : "" !== opts.negationSymbol.back ? { + pos: 0, + c: "+", + remove: [ 0, maskset.buffer.length - 1 ], + caret: pos + } : { + pos: 0, + c: "+", + remove: 0, + caret: pos + } : maskset.buffer[0] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? { + remove: [ 0, maskset.buffer.length - 1 ], + caret: pos - 1 + } : { + remove: 0, + caret: pos - 1 + } : "-" === chrs ? "" !== opts.negationSymbol.back ? { + pos: 0, + c: opts.negationSymbol.front, + caret: pos + 1, + insert: { + pos: maskset.buffer.length, + c: opts.negationSymbol.back + } + } : { + pos: 0, + c: opts.negationSymbol.front, + caret: pos + 1 + } : { + pos: 0, + c: chrs, + caret: pos + 1 + }; + } + return !1; + }, + radixHandler: function(chrs, maskset, pos, strict, opts) { + if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) { + var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts)); + if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? { + caret: radixPos + 1 + } : { + pos: integerValue.index, + c: integerValue[0], + caret: radixPos + 1 + }; + if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0", + { + pos: (integerValue ? integerValue.index : pos) + 1, + c: opts.radixPoint + }; + } + return !1; + }, + leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) { + if (!strict) { + var initialPos = pos, buffer = opts.numericInput === !0 ? maskset.buffer.slice("").reverse() : maskset.buffer.slice(""); + opts.numericInput && (pos = buffer.join("").length - pos - 1), buffer.splice(0, opts.prefix.length), + buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), pos -= opts.prefix.length; + var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join("").match(opts.regex.integerNPart(opts)); + if (matchRslt && (radixPosition === -1 || pos <= radixPosition || opts.numericInput)) { + var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join("")), leadingZero = 0 === matchRslt[0].indexOf("" !== opts.placeholder ? opts.placeholder.charAt(0) : "0"); + if (opts.numericInput) { + if (leadingZero && 0 !== decimalPart && isSelection !== !0) return maskset.buffer.splice(buffer.length - matchRslt.index - 1 + opts.suffix.length, 1), + { + pos: initialPos, + remove: buffer.length - matchRslt.index - 1 + opts.suffix.length + }; + } else { + if (leadingZero && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1), + { + pos: matchRslt.index + opts.prefix.length, + remove: matchRslt.index + opts.prefix.length + }; + if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1; + } + } + } + return !0; + }, + definitions: { + "~": { + validator: function(chrs, maskset, pos, strict, opts, isSelection) { + var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); + if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), + !isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs), + isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), + isValid === !0 && opts.numericInput !== !0)))) { + var radixPosition = $.inArray(opts.radixPoint, maskset.buffer); + isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? { + pos: pos, + remove: pos + } : { + pos: pos + }; + } + return isValid; + }, + cardinality: 1 + }, + "+": { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); + return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = !(!strict && "-" === chrs) || ("" !== opts.negationSymbol.back ? { + pos: pos, + c: "-" === chrs ? opts.negationSymbol.front : "+", + caret: pos + 1, + insert: { + pos: maskset.buffer.length, + c: opts.negationSymbol.back + } + } : { + pos: pos, + c: "-" === chrs ? opts.negationSymbol.front : "+", + caret: pos + 1 + })), isValid; + }, + cardinality: 1, + placeholder: "" + }, + "-": { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); + return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), + isValid; + }, + cardinality: 1, + placeholder: "" + }, + ":": { + validator: function(chrs, maskset, pos, strict, opts) { + var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); + if (!isValid) { + var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]"; + isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = { + caret: pos + 1 + }); + } + return isValid; + }, + cardinality: 1, + placeholder: function(opts) { + return opts.radixPoint; + } + } + }, + onUnMask: function(maskedValue, unmaskedValue, opts) { + if ("" === unmaskedValue && opts.nullable === !0) return unmaskedValue; + var processValue = maskedValue.replace(opts.prefix, ""); + return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), + opts.unmaskAsNumber ? ("" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")), + Number(processValue)) : processValue; + }, + isComplete: function(buffer, opts) { + var maskedValue = buffer.join(""), bufClone = buffer.slice(); + if (opts.postFormat(bufClone, 0, opts), bufClone.join("") !== maskedValue) return !1; + var processValue = maskedValue.replace(opts.prefix, ""); + return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), + "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")), + isFinite(processValue); + }, + onBeforeMask: function(initialValue, opts) { + if (initialValue = initialValue.toString(), opts.numericInput === !0 && (initialValue = initialValue.split("").reverse().join("")), + "" !== opts.radixPoint && isFinite(initialValue)) { + var vs = initialValue.split("."), groupSize = "" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0; + 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.replace(".", opts.radixPoint)); + } + var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g); + if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""), + initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""), + initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), + 0 === opts.digits && (initialValue.indexOf(".") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : initialValue.indexOf(",") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))), + "" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) { + var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0]; + if (parseInt(opts.digits) < decPart.toString().length) { + var digitsFactor = Math.pow(10, parseInt(opts.digits)); + initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."), + initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, + initialValue = initialValue.toString().replace(".", opts.radixPoint); + } + } + return opts.numericInput === !0 && (initialValue = initialValue.split("").reverse().join("")), + initialValue; + }, + canClearPosition: function(maskset, position, lvp, strict, opts) { + var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back; + return canClear; + }, + onKeyDown: function(e, buffer, caretPos, opts) { + var $input = $(this); + if (e.ctrlKey) switch (e.keyCode) { + case Inputmask.keyCode.UP: + $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue"); + break; + + case Inputmask.keyCode.DOWN: + $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue"); + } + } + }, + currency: { + prefix: "$ ", + groupSeparator: ",", + alias: "numeric", + placeholder: "0", + autoGroup: !0, + digits: 2, + digitsOptional: !1, + clearMaskOnLostFocus: !1 + }, + decimal: { + alias: "numeric" + }, + integer: { + alias: "numeric", + digits: 0, + radixPoint: "" + }, + percentage: { + alias: "numeric", + digits: 2, + radixPoint: ".", + placeholder: "0", + autoGroup: !1, + min: 0, + max: 100, + suffix: " %", + allowPlus: !1, + allowMinus: !1 + } + }), Inputmask; +}(jQuery, Inputmask), function($, Inputmask) { + function maskSort(a, b) { + var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskas = (a.mask || a).split("#")[0], maskbs = (b.mask || b).split("#")[0]; + return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb); + } + var analyseMaskBase = Inputmask.prototype.analyseMask; + return Inputmask.prototype.analyseMask = function(mask, opts) { + function reduceVariations(masks, previousVariation, previousmaskGroup) { + previousVariation = previousVariation || "", previousmaskGroup = previousmaskGroup || maskGroups, + "" !== previousVariation && (previousmaskGroup[previousVariation] = {}); + for (var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i], + variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [], + maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1); + for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup); + } + function rebuild(maskGroup) { + var mask = "", submasks = []; + for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx])); + return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end; + } + var maskGroups = {}; + opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2), + reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)), + mask = rebuild(maskGroups)), mask = mask.replace(/9/g, "\\9")); + var mt = analyseMaskBase.call(this, mask, opts); + return mt; + }, Inputmask.extendAliases({ + abstractphone: { + groupmarker: { + start: "<", + end: ">" + }, + countrycode: "", + phoneCodes: [], + mask: function(opts) { + return opts.definitions = { + "#": Inputmask.prototype.definitions[9] + }, opts.phoneCodes.sort(maskSort); + }, + keepStatic: !0, + onBeforeMask: function(value, opts) { + var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, ""); + return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = "+" + opts.countrycode + processedValue), + processedValue; + }, + onUnMask: function(maskedValue, unmaskedValue, opts) { + return unmaskedValue; + }, + inputmode: "tel" + } + }), Inputmask; +}(jQuery, Inputmask), function($, Inputmask) { + return Inputmask.extendAliases({ + 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(buffer, opts) { + return new RegExp(opts.regex, opts.casing ? "i" : "").test(buffer.join("")); + }, + definitions: { + r: { + validator: function(chrs, maskset, pos, strict, opts) { + function RegexToken(isGroup, isQuantifier) { + this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, + this.quantifier = { + min: 1, + max: 1 + }, this.repeaterPart = void 0; + } + function analyseRegex() { + var match, m, currentToken = new RegexToken(), opengroups = []; + for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], + m.charAt(0)) { + case "(": + opengroups.push(new RegexToken((!0))); + break; + + case ")": + groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken); + break; + + case "{": + case "+": + case "*": + var quantifierToken = new RegexToken((!1), (!0)); + m = m.replace(/[{}]/g, ""); + var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]); + if (quantifierToken.quantifier = { + min: mq0, + max: mq1 + }, opengroups.length > 0) { + var matches = opengroups[opengroups.length - 1].matches; + match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match), + match = groupToken), matches.push(match), matches.push(quantifierToken); + } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), + groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), + currentToken.matches.push(quantifierToken); + break; + + default: + opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m); + } + currentToken.matches.length > 0 && opts.regexTokens.push(currentToken); + } + function validateRegexToken(token, fromGroup) { + var isvalid = !1; + fromGroup && (regexPart += "(", openGroupCount++); + for (var mndx = 0; mndx < token.matches.length; mndx++) { + var matchToken = token.matches[mndx]; + if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) { + var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart; + if (isNaN(matchToken.quantifier.max)) { + for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ; + isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), + regexPart = regexPartBak + matchToken.quantifier.max; + } else { + for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ; + regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}"; + } + } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else { + var testExp; + if ("[" == matchToken.charAt(0)) { + testExp = regexPart, testExp += matchToken; + for (var j = 0; j < openGroupCount; j++) testExp += ")"; + var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : ""); + isvalid = exp.test(bufferStr); + } else for (var l = 0, tl = matchToken.length; l < tl; l++) if ("\\" !== matchToken.charAt(l)) { + testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, ""); + for (var j = 0; j < openGroupCount; j++) testExp += ")"; + var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : ""); + if (isvalid = exp.test(bufferStr)) break; + } + regexPart += matchToken; + } + if (isvalid) break; + } + return fromGroup && (regexPart += ")", openGroupCount--), isvalid; + } + var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0; + null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join(""); + for (var i = 0; i < opts.regexTokens.length; i++) { + var regexToken = opts.regexTokens[i]; + if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break; + } + return isValid; + }, + cardinality: 1 + } + } + } + }), Inputmask; +}(jQuery, Inputmask); \ No newline at end of file diff --git a/app_widget_extra/static/src/js/inputmask_widget.js b/app_widget_extra/static/src/js/inputmask_widget.js new file mode 100644 index 00000000..c2114dea --- /dev/null +++ b/app_widget_extra/static/src/js/inputmask_widget.js @@ -0,0 +1,113 @@ +odoo.define('web.inputmask_widget', function (require) { + "use strict"; + var core = require('web.core'); + var formats = require('web.formats'); + var form_widgets = require('web.form_widgets'); + var kanban_widgets = require('web_kanban.widgets'); + var utils = require('web.utils'); + var list_widget_registry = core.list_widget_registry; + var QWeb = core.qweb; + + function mask_attrs(attrs) { + var keyMask = 'data-inputmask'; + var attributes = {}; + if (keyMask in attrs) + attributes[keyMask] = attrs[keyMask]; + else + attributes = Object.keys(attrs).reduce(function (filtered, key) { + if (key.indexOf(keyMask) !== -1) + filtered[key] = attrs[key]; + return filtered; + }, {}); + if (!attributes) + console.warn("The widget Mask expects the 'data-inputmask[-attribute]' attributes!") + return attributes; + } + + var FieldMask = form_widgets.FieldChar.extend({ + template: "FieldMask", + attributes: {}, + init: function (field_manager, node) { + this._super(field_manager, node) + this.attributes = mask_attrs(node.attrs); + }, + render_value: function (mask) { + this._super(); + if (this.attributes) { + if (this.$input !== undefined) + this.$input.inputmask(mask); + else if ('contenteditable' in this.node.attrs) + this.$el.inputmask(mask); + } + }, + //在前端验证输入值是否符合inputmask + is_valid: function () { + var musk = this.attributes['data-inputmask-regex'] ? this.attributes['data-inputmask-regex'] : this.attributes['data-inputmask'] ; + var reg = new RegExp (musk,"g"); + var value = this.$input.val(); + if (!this.get('required') && this.is_false()) { + return true; + } else if (reg.test(value)) { + return true; + } else { + return false; + } + }, + }); + + var FieldMaskRegex = FieldMask.extend({ + render_value: function () { + this._super("Regex"); + } + }); + + var ColumnMask = list_widget_registry.get('field.char').extend({ + attributes: {}, + $mask: undefined, + init: function (id, tag, attrs) { + this._super(id, tag, attrs); + this.attributes = mask_attrs(attrs); + if (this.attributes) + this.$mask = $(jQuery.parseHTML(QWeb.render('Widget.mask', {widget: this}))).inputmask(undefined, { + placeholder: '', + greedy: false + }); + }, + format: function (row_data, options) { + var value = this._super(row_data, options); + if (this.$mask) { + this.$mask.val(value); + value = this.$mask.val(); + } + return value; + } + }); + + var MaskWidget = kanban_widgets.AbstractField.extend({ + tagName: 'span', + attributes: {}, + init: function (parent, field, $node) { + this._super(parent, field, $node); + this.attributes = mask_attrs(field.__attrs); + if (this.attributes) + this.$mask = $(jQuery.parseHTML(QWeb.render('Widget.mask', {widget: this}))).inputmask(undefined, { + placeholder: '', + greedy: false + }); + }, + renderElement: function () { + var value = this.field.raw_value; + if (this.$mask) + this.$mask.val(value); + value = this.$mask.val(); + this.$el.text(value); + } + }); + + core.form_widget_registry.add('mask', FieldMask); + core.form_widget_registry.add('mask_regex', FieldMaskRegex); + list_widget_registry.add('field.mask', ColumnMask); + kanban_widgets.registry.add("mask", MaskWidget); + + return {FieldMask: FieldMask, FieldMaskRegex: FieldMaskRegex, MaskWidget: MaskWidget}; +}); diff --git a/app_widget_extra/static/src/xml/inputmask_widget.xml b/app_widget_extra/static/src/xml/inputmask_widget.xml new file mode 100644 index 00000000..aeb0d6c8 --- /dev/null +++ b/app_widget_extra/static/src/xml/inputmask_widget.xml @@ -0,0 +1,23 @@ + + + + + + + + + \ No newline at end of file diff --git a/app_widget_extra/views/inputmask_templates.xml b/app_widget_extra/views/inputmask_templates.xml new file mode 100644 index 00000000..b2a0aca9 --- /dev/null +++ b/app_widget_extra/views/inputmask_templates.xml @@ -0,0 +1,11 @@ + + + + + +