Nuiton-js-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- 636 discussions
r139 - in sandbox/nuiton-js-angular: . src/main/resources/META-INF/nuiton-js src/main/resources/nuiton-js-angular src/main/resources/nuiton-js-angular/extra src/main/resources/nuiton-js-angular/i18n src/site/rst
by bpoussin@users.nuiton.org 09 Jul '13
by bpoussin@users.nuiton.org 09 Jul '13
09 Jul '13
Author: bpoussin
Date: 2013-07-09 11:21:17 +0200 (Tue, 09 Jul 2013)
New Revision: 139
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/139
Log:
add extra and i18n angular js
Added:
sandbox/nuiton-js-angular/generate-extra-group.sh
sandbox/nuiton-js-angular/generate-i18n-group.sh
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-cookies.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-loader.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-mobile.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-resource.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-sanitize.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-na.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-za.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am-et.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-001.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ae.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-bh.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-dz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-eg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-iq.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-jo.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-kw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-lb.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ly.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ma.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-om.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-qa.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sa.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sd.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sy.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-tn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ye.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg-bg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-bd.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-ad.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-es.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_chr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs-cz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cy.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da-dk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-at.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-be.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-ch.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-de.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-li.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-lu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-cy.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-gr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-polyton.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-as.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-au.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bb.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-be.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bm.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ca.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt-us.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-fm.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gb.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gy.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-hk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ie.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-iso.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-jm.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mh.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mp.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-na.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-nz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ph.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-sg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tc.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-um.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-us.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-za.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-419.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ar.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-bo.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-co.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-do.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ea.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ec.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-es.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gq.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-hn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ic.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-mx.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ni.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pa.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pe.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-py.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-sv.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-us.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-uy.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ve.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et-ee.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu-es.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-af.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-ir.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi-fi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil-ph.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-be.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bf.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bj.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ca.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cd.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cf.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ch.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ci.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cm.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-dj.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-fr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ga.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gf.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gp.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gq.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-km.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-lu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mc.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mf.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ml.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mq.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ne.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-re.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-rw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-sn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-td.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-tg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-yt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl-es.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw-ch.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_haw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he-il.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr-hr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu-hu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id-id.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is-is.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-ch.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-it.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-sm.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_iw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja-jp.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko-kr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cd.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt-lt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv-lv.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mo.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-bn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-my.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt-mt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-aw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-be.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-cw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-nl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-sx.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_no.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl-pl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-ao.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-br.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-gw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-mz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-pt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-st.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-md.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-ro.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-md.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ru.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ua.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk-sk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl-si.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq-al.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-ba.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-me.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-rs.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-ba.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-me.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-rs.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-rs.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-fi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-se.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-ke.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-tz.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-lk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th-th.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl-ph.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr-tr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk-ua.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-in.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-pk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi-vn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-cn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-cn.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-hk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-mo.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-sg.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-hk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-mo.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-tw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hk.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-tw.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu-za.js
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu.js
Modified:
sandbox/nuiton-js-angular/src/main/resources/META-INF/nuiton-js/wro-angular.xml
sandbox/nuiton-js-angular/src/site/rst/index.rst.vm
Added: sandbox/nuiton-js-angular/generate-extra-group.sh
===================================================================
--- sandbox/nuiton-js-angular/generate-extra-group.sh (rev 0)
+++ sandbox/nuiton-js-angular/generate-extra-group.sh 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Permet de genere le code XML necessaire pour la declaration des extras
+# il faut ensuite mettre ce qui est genere dans le fichier META-INF/nuiton-js/nuiton-js-angular.xml
+#
+for t in src/main/resources/nuiton-js-angular/extra/*.js; do
+ f=$(basename $t)
+ n=$(basename $t .js)
+ echo -e " <group name='$n'>\n <css>classpath:nuiton-js-angular/extra/$f</css>\n </group>\n"
+done
Property changes on: sandbox/nuiton-js-angular/generate-extra-group.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: sandbox/nuiton-js-angular/generate-i18n-group.sh
===================================================================
--- sandbox/nuiton-js-angular/generate-i18n-group.sh (rev 0)
+++ sandbox/nuiton-js-angular/generate-i18n-group.sh 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Permet de genere le code XML necessaire pour la declaration i18n
+# il faut ensuite mettre ce qui est genere dans le fichier META-INF/nuiton-js/nuiton-js-angular.xml
+#
+for t in src/main/resources/nuiton-js-angular/i18n/*.js; do
+ f=$(basename $t)
+ n=$(basename $t .js | sed 's/angular-locale_//g')
+ echo -e " <group name='angular-$n'>\n <css>classpath:nuiton-js-angular/i18n/$f</css>\n </group>\n"
+done
Property changes on: sandbox/nuiton-js-angular/generate-i18n-group.sh
___________________________________________________________________
Added: svn:executable
+ *
Modified: sandbox/nuiton-js-angular/src/main/resources/META-INF/nuiton-js/wro-angular.xml
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/META-INF/nuiton-js/wro-angular.xml 2013-07-07 15:46:51 UTC (rev 138)
+++ sandbox/nuiton-js-angular/src/main/resources/META-INF/nuiton-js/wro-angular.xml 2013-07-09 09:21:17 UTC (rev 139)
@@ -25,4 +25,1173 @@
<group name='angular'>
<js>classpath:nuiton-js-angular/*.js</js>
</group>
+
+ <group name='angular-cookies'>
+ <css>classpath:nuiton-js-angular/extra/angular-cookies.js</css>
+ </group>
+
+ <group name='angular-loader'>
+ <css>classpath:nuiton-js-angular/extra/angular-loader.js</css>
+ </group>
+
+ <group name='angular-mobile'>
+ <css>classpath:nuiton-js-angular/extra/angular-mobile.js</css>
+ </group>
+
+ <group name='angular-resource'>
+ <css>classpath:nuiton-js-angular/extra/angular-resource.js</css>
+ </group>
+
+ <group name='angular-sanitize'>
+ <css>classpath:nuiton-js-angular/extra/angular-sanitize.js</css>
+ </group>
+
+ <group name='angular-af-na'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_af-na.js</css>
+ </group>
+
+ <group name='angular-af-za'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_af-za.js</css>
+ </group>
+
+ <group name='angular-af'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_af.js</css>
+ </group>
+
+ <group name='angular-am-et'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_am-et.js</css>
+ </group>
+
+ <group name='angular-am'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_am.js</css>
+ </group>
+
+ <group name='angular-ar-001'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-001.js</css>
+ </group>
+
+ <group name='angular-ar-ae'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-ae.js</css>
+ </group>
+
+ <group name='angular-ar-bh'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-bh.js</css>
+ </group>
+
+ <group name='angular-ar-dz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-dz.js</css>
+ </group>
+
+ <group name='angular-ar-eg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-eg.js</css>
+ </group>
+
+ <group name='angular-ar-iq'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-iq.js</css>
+ </group>
+
+ <group name='angular-ar-jo'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-jo.js</css>
+ </group>
+
+ <group name='angular-ar-kw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-kw.js</css>
+ </group>
+
+ <group name='angular-ar-lb'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-lb.js</css>
+ </group>
+
+ <group name='angular-ar-ly'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-ly.js</css>
+ </group>
+
+ <group name='angular-ar-ma'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-ma.js</css>
+ </group>
+
+ <group name='angular-ar-om'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-om.js</css>
+ </group>
+
+ <group name='angular-ar-qa'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-qa.js</css>
+ </group>
+
+ <group name='angular-ar-sa'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-sa.js</css>
+ </group>
+
+ <group name='angular-ar-sd'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-sd.js</css>
+ </group>
+
+ <group name='angular-ar-sy'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-sy.js</css>
+ </group>
+
+ <group name='angular-ar-tn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-tn.js</css>
+ </group>
+
+ <group name='angular-ar-ye'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar-ye.js</css>
+ </group>
+
+ <group name='angular-ar'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ar.js</css>
+ </group>
+
+ <group name='angular-bg-bg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_bg-bg.js</css>
+ </group>
+
+ <group name='angular-bg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_bg.js</css>
+ </group>
+
+ <group name='angular-bn-bd'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_bn-bd.js</css>
+ </group>
+
+ <group name='angular-bn-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_bn-in.js</css>
+ </group>
+
+ <group name='angular-bn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_bn.js</css>
+ </group>
+
+ <group name='angular-ca-ad'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ca-ad.js</css>
+ </group>
+
+ <group name='angular-ca-es'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ca-es.js</css>
+ </group>
+
+ <group name='angular-ca'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ca.js</css>
+ </group>
+
+ <group name='angular-chr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_chr.js</css>
+ </group>
+
+ <group name='angular-cs-cz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_cs-cz.js</css>
+ </group>
+
+ <group name='angular-cs'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_cs.js</css>
+ </group>
+
+ <group name='angular-cy'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_cy.js</css>
+ </group>
+
+ <group name='angular-da-dk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_da-dk.js</css>
+ </group>
+
+ <group name='angular-da'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_da.js</css>
+ </group>
+
+ <group name='angular-de-at'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de-at.js</css>
+ </group>
+
+ <group name='angular-de-be'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de-be.js</css>
+ </group>
+
+ <group name='angular-de-ch'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de-ch.js</css>
+ </group>
+
+ <group name='angular-de-de'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de-de.js</css>
+ </group>
+
+ <group name='angular-de-li'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de-li.js</css>
+ </group>
+
+ <group name='angular-de-lu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de-lu.js</css>
+ </group>
+
+ <group name='angular-de'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_de.js</css>
+ </group>
+
+ <group name='angular-el-cy'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_el-cy.js</css>
+ </group>
+
+ <group name='angular-el-gr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_el-gr.js</css>
+ </group>
+
+ <group name='angular-el-polyton'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_el-polyton.js</css>
+ </group>
+
+ <group name='angular-el'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_el.js</css>
+ </group>
+
+ <group name='angular-en-as'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-as.js</css>
+ </group>
+
+ <group name='angular-en-au'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-au.js</css>
+ </group>
+
+ <group name='angular-en-bb'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-bb.js</css>
+ </group>
+
+ <group name='angular-en-be'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-be.js</css>
+ </group>
+
+ <group name='angular-en-bm'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-bm.js</css>
+ </group>
+
+ <group name='angular-en-bw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-bw.js</css>
+ </group>
+
+ <group name='angular-en-bz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-bz.js</css>
+ </group>
+
+ <group name='angular-en-ca'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-ca.js</css>
+ </group>
+
+ <group name='angular-en-dsrt-us'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-dsrt-us.js</css>
+ </group>
+
+ <group name='angular-en-dsrt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-dsrt.js</css>
+ </group>
+
+ <group name='angular-en-fm'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-fm.js</css>
+ </group>
+
+ <group name='angular-en-gb'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-gb.js</css>
+ </group>
+
+ <group name='angular-en-gu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-gu.js</css>
+ </group>
+
+ <group name='angular-en-gy'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-gy.js</css>
+ </group>
+
+ <group name='angular-en-hk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-hk.js</css>
+ </group>
+
+ <group name='angular-en-ie'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-ie.js</css>
+ </group>
+
+ <group name='angular-en-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-in.js</css>
+ </group>
+
+ <group name='angular-en-iso'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-iso.js</css>
+ </group>
+
+ <group name='angular-en-jm'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-jm.js</css>
+ </group>
+
+ <group name='angular-en-mh'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-mh.js</css>
+ </group>
+
+ <group name='angular-en-mp'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-mp.js</css>
+ </group>
+
+ <group name='angular-en-mt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-mt.js</css>
+ </group>
+
+ <group name='angular-en-mu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-mu.js</css>
+ </group>
+
+ <group name='angular-en-na'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-na.js</css>
+ </group>
+
+ <group name='angular-en-nz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-nz.js</css>
+ </group>
+
+ <group name='angular-en-ph'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-ph.js</css>
+ </group>
+
+ <group name='angular-en-pk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-pk.js</css>
+ </group>
+
+ <group name='angular-en-pr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-pr.js</css>
+ </group>
+
+ <group name='angular-en-pw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-pw.js</css>
+ </group>
+
+ <group name='angular-en-sg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-sg.js</css>
+ </group>
+
+ <group name='angular-en-tc'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-tc.js</css>
+ </group>
+
+ <group name='angular-en-tt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-tt.js</css>
+ </group>
+
+ <group name='angular-en-um'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-um.js</css>
+ </group>
+
+ <group name='angular-en-us'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-us.js</css>
+ </group>
+
+ <group name='angular-en-vg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-vg.js</css>
+ </group>
+
+ <group name='angular-en-vi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-vi.js</css>
+ </group>
+
+ <group name='angular-en-za'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-za.js</css>
+ </group>
+
+ <group name='angular-en-zw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-zw.js</css>
+ </group>
+
+ <group name='angular-en-zz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en-zz.js</css>
+ </group>
+
+ <group name='angular-en'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_en.js</css>
+ </group>
+
+ <group name='angular-es-419'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-419.js</css>
+ </group>
+
+ <group name='angular-es-ar'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-ar.js</css>
+ </group>
+
+ <group name='angular-es-bo'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-bo.js</css>
+ </group>
+
+ <group name='angular-es-cl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-cl.js</css>
+ </group>
+
+ <group name='angular-es-co'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-co.js</css>
+ </group>
+
+ <group name='angular-es-cr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-cr.js</css>
+ </group>
+
+ <group name='angular-es-do'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-do.js</css>
+ </group>
+
+ <group name='angular-es-ea'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-ea.js</css>
+ </group>
+
+ <group name='angular-es-ec'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-ec.js</css>
+ </group>
+
+ <group name='angular-es-es'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-es.js</css>
+ </group>
+
+ <group name='angular-es-gq'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-gq.js</css>
+ </group>
+
+ <group name='angular-es-gt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-gt.js</css>
+ </group>
+
+ <group name='angular-es-hn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-hn.js</css>
+ </group>
+
+ <group name='angular-es-ic'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-ic.js</css>
+ </group>
+
+ <group name='angular-es-mx'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-mx.js</css>
+ </group>
+
+ <group name='angular-es-ni'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-ni.js</css>
+ </group>
+
+ <group name='angular-es-pa'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-pa.js</css>
+ </group>
+
+ <group name='angular-es-pe'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-pe.js</css>
+ </group>
+
+ <group name='angular-es-pr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-pr.js</css>
+ </group>
+
+ <group name='angular-es-py'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-py.js</css>
+ </group>
+
+ <group name='angular-es-sv'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-sv.js</css>
+ </group>
+
+ <group name='angular-es-us'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-us.js</css>
+ </group>
+
+ <group name='angular-es-uy'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-uy.js</css>
+ </group>
+
+ <group name='angular-es-ve'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es-ve.js</css>
+ </group>
+
+ <group name='angular-es'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_es.js</css>
+ </group>
+
+ <group name='angular-et-ee'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_et-ee.js</css>
+ </group>
+
+ <group name='angular-et'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_et.js</css>
+ </group>
+
+ <group name='angular-eu-es'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_eu-es.js</css>
+ </group>
+
+ <group name='angular-eu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_eu.js</css>
+ </group>
+
+ <group name='angular-fa-af'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fa-af.js</css>
+ </group>
+
+ <group name='angular-fa-ir'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fa-ir.js</css>
+ </group>
+
+ <group name='angular-fa'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fa.js</css>
+ </group>
+
+ <group name='angular-fi-fi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fi-fi.js</css>
+ </group>
+
+ <group name='angular-fi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fi.js</css>
+ </group>
+
+ <group name='angular-fil-ph'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fil-ph.js</css>
+ </group>
+
+ <group name='angular-fil'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fil.js</css>
+ </group>
+
+ <group name='angular-fr-be'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-be.js</css>
+ </group>
+
+ <group name='angular-fr-bf'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-bf.js</css>
+ </group>
+
+ <group name='angular-fr-bi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-bi.js</css>
+ </group>
+
+ <group name='angular-fr-bj'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-bj.js</css>
+ </group>
+
+ <group name='angular-fr-bl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-bl.js</css>
+ </group>
+
+ <group name='angular-fr-ca'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-ca.js</css>
+ </group>
+
+ <group name='angular-fr-cd'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-cd.js</css>
+ </group>
+
+ <group name='angular-fr-cf'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-cf.js</css>
+ </group>
+
+ <group name='angular-fr-cg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-cg.js</css>
+ </group>
+
+ <group name='angular-fr-ch'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-ch.js</css>
+ </group>
+
+ <group name='angular-fr-ci'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-ci.js</css>
+ </group>
+
+ <group name='angular-fr-cm'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-cm.js</css>
+ </group>
+
+ <group name='angular-fr-dj'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-dj.js</css>
+ </group>
+
+ <group name='angular-fr-fr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-fr.js</css>
+ </group>
+
+ <group name='angular-fr-ga'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-ga.js</css>
+ </group>
+
+ <group name='angular-fr-gf'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-gf.js</css>
+ </group>
+
+ <group name='angular-fr-gn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-gn.js</css>
+ </group>
+
+ <group name='angular-fr-gp'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-gp.js</css>
+ </group>
+
+ <group name='angular-fr-gq'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-gq.js</css>
+ </group>
+
+ <group name='angular-fr-km'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-km.js</css>
+ </group>
+
+ <group name='angular-fr-lu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-lu.js</css>
+ </group>
+
+ <group name='angular-fr-mc'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-mc.js</css>
+ </group>
+
+ <group name='angular-fr-mf'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-mf.js</css>
+ </group>
+
+ <group name='angular-fr-mg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-mg.js</css>
+ </group>
+
+ <group name='angular-fr-ml'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-ml.js</css>
+ </group>
+
+ <group name='angular-fr-mq'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-mq.js</css>
+ </group>
+
+ <group name='angular-fr-ne'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-ne.js</css>
+ </group>
+
+ <group name='angular-fr-re'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-re.js</css>
+ </group>
+
+ <group name='angular-fr-rw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-rw.js</css>
+ </group>
+
+ <group name='angular-fr-sn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-sn.js</css>
+ </group>
+
+ <group name='angular-fr-td'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-td.js</css>
+ </group>
+
+ <group name='angular-fr-tg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-tg.js</css>
+ </group>
+
+ <group name='angular-fr-yt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr-yt.js</css>
+ </group>
+
+ <group name='angular-fr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_fr.js</css>
+ </group>
+
+ <group name='angular-gl-es'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_gl-es.js</css>
+ </group>
+
+ <group name='angular-gl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_gl.js</css>
+ </group>
+
+ <group name='angular-gsw-ch'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_gsw-ch.js</css>
+ </group>
+
+ <group name='angular-gsw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_gsw.js</css>
+ </group>
+
+ <group name='angular-gu-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_gu-in.js</css>
+ </group>
+
+ <group name='angular-gu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_gu.js</css>
+ </group>
+
+ <group name='angular-haw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_haw.js</css>
+ </group>
+
+ <group name='angular-he-il'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_he-il.js</css>
+ </group>
+
+ <group name='angular-he'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_he.js</css>
+ </group>
+
+ <group name='angular-hi-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_hi-in.js</css>
+ </group>
+
+ <group name='angular-hi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_hi.js</css>
+ </group>
+
+ <group name='angular-hr-hr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_hr-hr.js</css>
+ </group>
+
+ <group name='angular-hr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_hr.js</css>
+ </group>
+
+ <group name='angular-hu-hu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_hu-hu.js</css>
+ </group>
+
+ <group name='angular-hu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_hu.js</css>
+ </group>
+
+ <group name='angular-id-id'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_id-id.js</css>
+ </group>
+
+ <group name='angular-id'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_id.js</css>
+ </group>
+
+ <group name='angular-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_in.js</css>
+ </group>
+
+ <group name='angular-is-is'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_is-is.js</css>
+ </group>
+
+ <group name='angular-is'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_is.js</css>
+ </group>
+
+ <group name='angular-it-ch'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_it-ch.js</css>
+ </group>
+
+ <group name='angular-it-it'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_it-it.js</css>
+ </group>
+
+ <group name='angular-it-sm'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_it-sm.js</css>
+ </group>
+
+ <group name='angular-it'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_it.js</css>
+ </group>
+
+ <group name='angular-iw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_iw.js</css>
+ </group>
+
+ <group name='angular-ja-jp'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ja-jp.js</css>
+ </group>
+
+ <group name='angular-ja'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ja.js</css>
+ </group>
+
+ <group name='angular-kn-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_kn-in.js</css>
+ </group>
+
+ <group name='angular-kn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_kn.js</css>
+ </group>
+
+ <group name='angular-ko-kr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ko-kr.js</css>
+ </group>
+
+ <group name='angular-ko'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ko.js</css>
+ </group>
+
+ <group name='angular-ln-cd'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ln-cd.js</css>
+ </group>
+
+ <group name='angular-ln-cg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ln-cg.js</css>
+ </group>
+
+ <group name='angular-ln'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ln.js</css>
+ </group>
+
+ <group name='angular-lt-lt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_lt-lt.js</css>
+ </group>
+
+ <group name='angular-lt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_lt.js</css>
+ </group>
+
+ <group name='angular-lv-lv'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_lv-lv.js</css>
+ </group>
+
+ <group name='angular-lv'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_lv.js</css>
+ </group>
+
+ <group name='angular-ml-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ml-in.js</css>
+ </group>
+
+ <group name='angular-ml'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ml.js</css>
+ </group>
+
+ <group name='angular-mo'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_mo.js</css>
+ </group>
+
+ <group name='angular-mr-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_mr-in.js</css>
+ </group>
+
+ <group name='angular-mr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_mr.js</css>
+ </group>
+
+ <group name='angular-ms-bn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ms-bn.js</css>
+ </group>
+
+ <group name='angular-ms-my'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ms-my.js</css>
+ </group>
+
+ <group name='angular-ms'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ms.js</css>
+ </group>
+
+ <group name='angular-mt-mt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_mt-mt.js</css>
+ </group>
+
+ <group name='angular-mt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_mt.js</css>
+ </group>
+
+ <group name='angular-nl-aw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_nl-aw.js</css>
+ </group>
+
+ <group name='angular-nl-be'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_nl-be.js</css>
+ </group>
+
+ <group name='angular-nl-cw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_nl-cw.js</css>
+ </group>
+
+ <group name='angular-nl-nl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_nl-nl.js</css>
+ </group>
+
+ <group name='angular-nl-sx'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_nl-sx.js</css>
+ </group>
+
+ <group name='angular-nl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_nl.js</css>
+ </group>
+
+ <group name='angular-no'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_no.js</css>
+ </group>
+
+ <group name='angular-or-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_or-in.js</css>
+ </group>
+
+ <group name='angular-or'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_or.js</css>
+ </group>
+
+ <group name='angular-pl-pl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pl-pl.js</css>
+ </group>
+
+ <group name='angular-pl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pl.js</css>
+ </group>
+
+ <group name='angular-pt-ao'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt-ao.js</css>
+ </group>
+
+ <group name='angular-pt-br'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt-br.js</css>
+ </group>
+
+ <group name='angular-pt-gw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt-gw.js</css>
+ </group>
+
+ <group name='angular-pt-mz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt-mz.js</css>
+ </group>
+
+ <group name='angular-pt-pt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt-pt.js</css>
+ </group>
+
+ <group name='angular-pt-st'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt-st.js</css>
+ </group>
+
+ <group name='angular-pt'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_pt.js</css>
+ </group>
+
+ <group name='angular-ro-md'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ro-md.js</css>
+ </group>
+
+ <group name='angular-ro-ro'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ro-ro.js</css>
+ </group>
+
+ <group name='angular-ro'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ro.js</css>
+ </group>
+
+ <group name='angular-ru-md'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ru-md.js</css>
+ </group>
+
+ <group name='angular-ru-ru'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ru-ru.js</css>
+ </group>
+
+ <group name='angular-ru-ua'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ru-ua.js</css>
+ </group>
+
+ <group name='angular-ru'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ru.js</css>
+ </group>
+
+ <group name='angular-sk-sk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sk-sk.js</css>
+ </group>
+
+ <group name='angular-sk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sk.js</css>
+ </group>
+
+ <group name='angular-sl-si'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sl-si.js</css>
+ </group>
+
+ <group name='angular-sl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sl.js</css>
+ </group>
+
+ <group name='angular-sq-al'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sq-al.js</css>
+ </group>
+
+ <group name='angular-sq'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sq.js</css>
+ </group>
+
+ <group name='angular-sr-cyrl-ba'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-cyrl-ba.js</css>
+ </group>
+
+ <group name='angular-sr-cyrl-me'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-cyrl-me.js</css>
+ </group>
+
+ <group name='angular-sr-cyrl-rs'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-cyrl-rs.js</css>
+ </group>
+
+ <group name='angular-sr-cyrl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-cyrl.js</css>
+ </group>
+
+ <group name='angular-sr-latn-ba'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-latn-ba.js</css>
+ </group>
+
+ <group name='angular-sr-latn-me'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-latn-me.js</css>
+ </group>
+
+ <group name='angular-sr-latn-rs'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-latn-rs.js</css>
+ </group>
+
+ <group name='angular-sr-latn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-latn.js</css>
+ </group>
+
+ <group name='angular-sr-rs'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr-rs.js</css>
+ </group>
+
+ <group name='angular-sr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sr.js</css>
+ </group>
+
+ <group name='angular-sv-fi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sv-fi.js</css>
+ </group>
+
+ <group name='angular-sv-se'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sv-se.js</css>
+ </group>
+
+ <group name='angular-sv'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sv.js</css>
+ </group>
+
+ <group name='angular-sw-ke'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sw-ke.js</css>
+ </group>
+
+ <group name='angular-sw-tz'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sw-tz.js</css>
+ </group>
+
+ <group name='angular-sw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_sw.js</css>
+ </group>
+
+ <group name='angular-ta-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ta-in.js</css>
+ </group>
+
+ <group name='angular-ta-lk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ta-lk.js</css>
+ </group>
+
+ <group name='angular-ta'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ta.js</css>
+ </group>
+
+ <group name='angular-te-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_te-in.js</css>
+ </group>
+
+ <group name='angular-te'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_te.js</css>
+ </group>
+
+ <group name='angular-th-th'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_th-th.js</css>
+ </group>
+
+ <group name='angular-th'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_th.js</css>
+ </group>
+
+ <group name='angular-tl-ph'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_tl-ph.js</css>
+ </group>
+
+ <group name='angular-tl'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_tl.js</css>
+ </group>
+
+ <group name='angular-tr-tr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_tr-tr.js</css>
+ </group>
+
+ <group name='angular-tr'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_tr.js</css>
+ </group>
+
+ <group name='angular-uk-ua'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_uk-ua.js</css>
+ </group>
+
+ <group name='angular-uk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_uk.js</css>
+ </group>
+
+ <group name='angular-ur-in'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ur-in.js</css>
+ </group>
+
+ <group name='angular-ur-pk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ur-pk.js</css>
+ </group>
+
+ <group name='angular-ur'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_ur.js</css>
+ </group>
+
+ <group name='angular-vi-vn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_vi-vn.js</css>
+ </group>
+
+ <group name='angular-vi'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_vi.js</css>
+ </group>
+
+ <group name='angular-zh-cn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-cn.js</css>
+ </group>
+
+ <group name='angular-zh-hans-cn'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hans-cn.js</css>
+ </group>
+
+ <group name='angular-zh-hans-hk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hans-hk.js</css>
+ </group>
+
+ <group name='angular-zh-hans-mo'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hans-mo.js</css>
+ </group>
+
+ <group name='angular-zh-hans-sg'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hans-sg.js</css>
+ </group>
+
+ <group name='angular-zh-hans'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hans.js</css>
+ </group>
+
+ <group name='angular-zh-hant-hk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hant-hk.js</css>
+ </group>
+
+ <group name='angular-zh-hant-mo'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hant-mo.js</css>
+ </group>
+
+ <group name='angular-zh-hant-tw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hant-tw.js</css>
+ </group>
+
+ <group name='angular-zh-hant'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hant.js</css>
+ </group>
+
+ <group name='angular-zh-hk'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-hk.js</css>
+ </group>
+
+ <group name='angular-zh-tw'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh-tw.js</css>
+ </group>
+
+ <group name='angular-zh'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zh.js</css>
+ </group>
+
+ <group name='angular-zu-za'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zu-za.js</css>
+ </group>
+
+ <group name='angular-zu'>
+ <css>classpath:nuiton-js-angular/i18n/angular-locale_zu.js</css>
+ </group>
+
</groups>
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-cookies.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-cookies.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-cookies.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,185 @@
+/**
+ * @license AngularJS v1.1.5
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name ngCookies
+ */
+
+
+angular.module('ngCookies', ['ng']).
+ /**
+ * @ngdoc object
+ * @name ngCookies.$cookies
+ * @requires $browser
+ *
+ * @description
+ * Provides read/write access to browser's cookies.
+ *
+ * Only a simple Object is exposed and by adding or removing properties to/from
+ * this object, new cookies are created/deleted at the end of current $eval.
+ *
+ * @example
+ <doc:example>
+ <doc:source>
+ <script>
+ function ExampleController($cookies) {
+ // Retrieving a cookie
+ var favoriteCookie = $cookies.myFavorite;
+ // Setting a cookie
+ $cookies.myFavorite = 'oatmeal';
+ }
+ </script>
+ </doc:source>
+ </doc:example>
+ */
+ factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) {
+ var cookies = {},
+ lastCookies = {},
+ lastBrowserCookies,
+ runEval = false,
+ copy = angular.copy,
+ isUndefined = angular.isUndefined;
+
+ //creates a poller fn that copies all cookies from the $browser to service & inits the service
+ $browser.addPollFn(function() {
+ var currentCookies = $browser.cookies();
+ if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
+ lastBrowserCookies = currentCookies;
+ copy(currentCookies, lastCookies);
+ copy(currentCookies, cookies);
+ if (runEval) $rootScope.$apply();
+ }
+ })();
+
+ runEval = true;
+
+ //at the end of each eval, push cookies
+ //TODO: this should happen before the "delayed" watches fire, because if some cookies are not
+ // strings or browser refuses to store some cookies, we update the model in the push fn.
+ $rootScope.$watch(push);
+
+ return cookies;
+
+
+ /**
+ * Pushes all the cookies from the service to the browser and verifies if all cookies were stored.
+ */
+ function push() {
+ var name,
+ value,
+ browserCookies,
+ updated;
+
+ //delete any cookies deleted in $cookies
+ for (name in lastCookies) {
+ if (isUndefined(cookies[name])) {
+ $browser.cookies(name, undefined);
+ }
+ }
+
+ //update all cookies updated in $cookies
+ for(name in cookies) {
+ value = cookies[name];
+ if (!angular.isString(value)) {
+ if (angular.isDefined(lastCookies[name])) {
+ cookies[name] = lastCookies[name];
+ } else {
+ delete cookies[name];
+ }
+ } else if (value !== lastCookies[name]) {
+ $browser.cookies(name, value);
+ updated = true;
+ }
+ }
+
+ //verify what was actually stored
+ if (updated){
+ updated = false;
+ browserCookies = $browser.cookies();
+
+ for (name in cookies) {
+ if (cookies[name] !== browserCookies[name]) {
+ //delete or reset all cookies that the browser dropped from $cookies
+ if (isUndefined(browserCookies[name])) {
+ delete cookies[name];
+ } else {
+ cookies[name] = browserCookies[name];
+ }
+ updated = true;
+ }
+ }
+ }
+ }
+ }]).
+
+
+ /**
+ * @ngdoc object
+ * @name ngCookies.$cookieStore
+ * @requires $cookies
+ *
+ * @description
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
+ * Objects put or retrieved from this storage are automatically serialized or
+ * deserialized by angular's toJson/fromJson.
+ * @example
+ */
+ factory('$cookieStore', ['$cookies', function($cookies) {
+
+ return {
+ /**
+ * @ngdoc method
+ * @name ngCookies.$cookieStore#get
+ * @methodOf ngCookies.$cookieStore
+ *
+ * @description
+ * Returns the value of given cookie key
+ *
+ * @param {string} key Id to use for lookup.
+ * @returns {Object} Deserialized cookie value.
+ */
+ get: function(key) {
+ var value = $cookies[key];
+ return value ? angular.fromJson(value) : value;
+ },
+
+ /**
+ * @ngdoc method
+ * @name ngCookies.$cookieStore#put
+ * @methodOf ngCookies.$cookieStore
+ *
+ * @description
+ * Sets a value for given cookie key
+ *
+ * @param {string} key Id for the `value`.
+ * @param {Object} value Value to be stored.
+ */
+ put: function(key, value) {
+ $cookies[key] = angular.toJson(value);
+ },
+
+ /**
+ * @ngdoc method
+ * @name ngCookies.$cookieStore#remove
+ * @methodOf ngCookies.$cookieStore
+ *
+ * @description
+ * Remove given cookie
+ *
+ * @param {string} key Id of the key-value pair to delete.
+ */
+ remove: function(key) {
+ delete $cookies[key];
+ }
+ };
+
+ }]);
+
+
+})(window, window.angular);
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-loader.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-loader.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-loader.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,304 @@
+/**
+ * @license AngularJS v1.1.5
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+
+(
+
+/**
+ * @ngdoc interface
+ * @name angular.Module
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+ function ensure(obj, name, factory) {
+ return obj[name] || (obj[name] = factory());
+ }
+
+ return ensure(ensure(window, 'angular', Object), 'module', function() {
+ /** @type {Object.<string, angular.Module>} */
+ var modules = {};
+
+ /**
+ * @ngdoc function
+ * @name angular.module
+ * @description
+ *
+ * The `angular.module` is a global place for creating and registering Angular modules. All
+ * modules (angular core or 3rd party) that should be available to an application must be
+ * registered using this mechanism.
+ *
+ *
+ * # Module
+ *
+ * A module is a collocation of services, directives, filters, and configuration information. Module
+ * is used to configure the {@link AUTO.$injector $injector}.
+ *
+ * <pre>
+ * // Create a new module
+ * var myModule = angular.module('myModule', []);
+ *
+ * // register a new service
+ * myModule.value('appName', 'MyCoolApp');
+ *
+ * // configure existing services inside initialization blocks.
+ * myModule.config(function($locationProvider) {
+'use strict';
+ * // Configure existing providers
+ * $locationProvider.hashPrefix('!');
+ * });
+ * </pre>
+ *
+ * Then you can create an injector and load your modules like this:
+ *
+ * <pre>
+ * var injector = angular.injector(['ng', 'MyModule'])
+ * </pre>
+ *
+ * However it's more likely that you'll just use
+ * {@link ng.directive:ngApp ngApp} or
+ * {@link angular.bootstrap} to simplify this process for you.
+ *
+ * @param {!string} name The name of the module to create or retrieve.
+ * @param {Array.<string>=} requires If specified then new module is being created. If unspecified then the
+ * the module is being retrieved for further configuration.
+ * @param {Function} configFn Optional configuration function for the module. Same as
+ * {@link angular.Module#config Module#config()}.
+ * @returns {module} new module with the {@link angular.Module} api.
+ */
+ return function module(name, requires, configFn) {
+ if (requires && modules.hasOwnProperty(name)) {
+ modules[name] = null;
+ }
+ return ensure(modules, name, function() {
+ if (!requires) {
+ throw Error('No module: ' + name);
+ }
+
+ /** @type {!Array.<Array.<*>>} */
+ var invokeQueue = [];
+
+ /** @type {!Array.<Function>} */
+ var runBlocks = [];
+
+ var config = invokeLater('$injector', 'invoke');
+
+ /** @type {angular.Module} */
+ var moduleInstance = {
+ // Private state
+ _invokeQueue: invokeQueue,
+ _runBlocks: runBlocks,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#requires
+ * @propertyOf angular.Module
+ * @returns {Array.<string>} List of module names which must be loaded before this module.
+ * @description
+ * Holds the list of modules which the injector will load before the current module is loaded.
+ */
+ requires: requires,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#name
+ * @propertyOf angular.Module
+ * @returns {string} Name of the module.
+ * @description
+ */
+ name: name,
+
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#provider
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {Function} providerType Construction function for creating new instance of the service.
+ * @description
+ * See {@link AUTO.$provide#provider $provide.provider()}.
+ */
+ provider: invokeLater('$provide', 'provider'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#factory
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {Function} providerFunction Function for creating new instance of the service.
+ * @description
+ * See {@link AUTO.$provide#factory $provide.factory()}.
+ */
+ factory: invokeLater('$provide', 'factory'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#service
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {Function} constructor A constructor function that will be instantiated.
+ * @description
+ * See {@link AUTO.$provide#service $provide.service()}.
+ */
+ service: invokeLater('$provide', 'service'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#value
+ * @methodOf angular.Module
+ * @param {string} name service name
+ * @param {*} object Service instance object.
+ * @description
+ * See {@link AUTO.$provide#value $provide.value()}.
+ */
+ value: invokeLater('$provide', 'value'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#constant
+ * @methodOf angular.Module
+ * @param {string} name constant name
+ * @param {*} object Constant value.
+ * @description
+ * Because the constant are fixed, they get applied before other provide methods.
+ * See {@link AUTO.$provide#constant $provide.constant()}.
+ */
+ constant: invokeLater('$provide', 'constant', 'unshift'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#animation
+ * @methodOf angular.Module
+ * @param {string} name animation name
+ * @param {Function} animationFactory Factory function for creating new instance of an animation.
+ * @description
+ *
+ * Defines an animation hook that can be later used with {@link ng.directive:ngAnimate ngAnimate}
+ * alongside {@link ng.directive:ngAnimate#Description common ng directives} as well as custom directives.
+ * <pre>
+ * module.animation('animation-name', function($inject1, $inject2) {
+ * return {
+ * //this gets called in preparation to setup an animation
+ * setup : function(element) { ... },
+ *
+ * //this gets called once the animation is run
+ * start : function(element, done, memo) { ... }
+ * }
+ * })
+ * </pre>
+ *
+ * See {@link ng.$animationProvider#register $animationProvider.register()} and
+ * {@link ng.directive:ngAnimate ngAnimate} for more information.
+ */
+ animation: invokeLater('$animationProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#filter
+ * @methodOf angular.Module
+ * @param {string} name Filter name.
+ * @param {Function} filterFactory Factory function for creating new instance of filter.
+ * @description
+ * See {@link ng.$filterProvider#register $filterProvider.register()}.
+ */
+ filter: invokeLater('$filterProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#controller
+ * @methodOf angular.Module
+ * @param {string} name Controller name.
+ * @param {Function} constructor Controller constructor function.
+ * @description
+ * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+ */
+ controller: invokeLater('$controllerProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#directive
+ * @methodOf angular.Module
+ * @param {string} name directive name
+ * @param {Function} directiveFactory Factory function for creating new instance of
+ * directives.
+ * @description
+ * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+ */
+ directive: invokeLater('$compileProvider', 'directive'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#config
+ * @methodOf angular.Module
+ * @param {Function} configFn Execute this function on module load. Useful for service
+ * configuration.
+ * @description
+ * Use this method to register work which needs to be performed on module loading.
+ */
+ config: config,
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#run
+ * @methodOf angular.Module
+ * @param {Function} initializationFn Execute this function after injector creation.
+ * Useful for application initialization.
+ * @description
+ * Use this method to register work which should be performed when the injector is done
+ * loading all modules.
+ */
+ run: function(block) {
+ runBlocks.push(block);
+ return this;
+ }
+ };
+
+ if (configFn) {
+ config(configFn);
+ }
+
+ return moduleInstance;
+
+ /**
+ * @param {string} provider
+ * @param {string} method
+ * @param {String=} insertMethod
+ * @returns {angular.Module}
+ */
+ function invokeLater(provider, method, insertMethod) {
+ return function() {
+ invokeQueue[insertMethod || 'push']([provider, method, arguments]);
+ return moduleInstance;
+ }
+ }
+ });
+ };
+ });
+
+}
+
+)(window);
+
+/**
+ * Closure compiler type information
+ *
+ * @typedef { {
+ * requires: !Array.<string>,
+ * invokeQueue: !Array.<Array.<*>>,
+ *
+ * service: function(string, Function):angular.Module,
+ * factory: function(string, Function):angular.Module,
+ * value: function(string, *):angular.Module,
+ *
+ * filter: function(string, Function):angular.Module,
+ *
+ * init: function(Function):angular.Module
+ * } }
+ */
+angular.Module;
+
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-mobile.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-mobile.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-mobile.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,460 @@
+/**
+ * @license AngularJS v1.1.5
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name ngMobile
+ * @description
+ * Touch events and other mobile helpers.
+ * Based on jQuery Mobile touch event handling (jquerymobile.com)
+ */
+
+// define ngMobile module
+var ngMobile = angular.module('ngMobile', []);
+
+/**
+ * @ngdoc directive
+ * @name ngMobile.directive:ngClick
+ *
+ * @description
+ * A more powerful replacement for the default ngClick designed to be used on touchscreen
+ * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending
+ * the click event. This version handles them immediately, and then prevents the
+ * following click event from propagating.
+ *
+ * This directive can fall back to using an ordinary click event, and so works on desktop
+ * browsers as well as mobile.
+ *
+ * This directive also sets the CSS class `ng-click-active` while the element is being held
+ * down (by a mouse click or touch) so you can restyle the depressed element if you wish.
+ *
+ * @element ANY
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate
+ * upon tap. (Event object is available as `$event`)
+ *
+ * @example
+ <doc:example>
+ <doc:source>
+ <button ng-click="count = count + 1" ng-init="count=0">
+ Increment
+ </button>
+ count: {{ count }}
+ </doc:source>
+ </doc:example>
+ */
+
+ngMobile.config(['$provide', function($provide) {
+ $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
+ // drop the default ngClick directive
+ $delegate.shift();
+ return $delegate;
+ }]);
+}]);
+
+ngMobile.directive('ngClick', ['$parse', '$timeout', '$rootElement',
+ function($parse, $timeout, $rootElement) {
+ var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.
+ var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.
+ var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click
+ var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.
+
+ var ACTIVE_CLASS_NAME = 'ng-click-active';
+ var lastPreventedTime;
+ var touchCoordinates;
+
+
+ // TAP EVENTS AND GHOST CLICKS
+ //
+ // Why tap events?
+ // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're
+ // double-tapping, and then fire a click event.
+ //
+ // This delay sucks and makes mobile apps feel unresponsive.
+ // So we detect touchstart, touchmove, touchcancel and touchend ourselves and determine when
+ // the user has tapped on something.
+ //
+ // What happens when the browser then generates a click event?
+ // The browser, of course, also detects the tap and fires a click after a delay. This results in
+ // tapping/clicking twice. So we do "clickbusting" to prevent it.
+ //
+ // How does it work?
+ // We attach global touchstart and click handlers, that run during the capture (early) phase.
+ // So the sequence for a tap is:
+ // - global touchstart: Sets an "allowable region" at the point touched.
+ // - element's touchstart: Starts a touch
+ // (- touchmove or touchcancel ends the touch, no click follows)
+ // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold
+ // too long) and fires the user's tap handler. The touchend also calls preventGhostClick().
+ // - preventGhostClick() removes the allowable region the global touchstart created.
+ // - The browser generates a click event.
+ // - The global click handler catches the click, and checks whether it was in an allowable region.
+ // - If preventGhostClick was called, the region will have been removed, the click is busted.
+ // - If the region is still there, the click proceeds normally. Therefore clicks on links and
+ // other elements without ngTap on them work normally.
+ //
+ // This is an ugly, terrible hack!
+ // Yeah, tell me about it. The alternatives are using the slow click events, or making our users
+ // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular
+ // encapsulates this ugly logic away from the user.
+ //
+ // Why not just put click handlers on the element?
+ // We do that too, just to be sure. The problem is that the tap event might have caused the DOM
+ // to change, so that the click fires in the same position but something else is there now. So
+ // the handlers are global and care only about coordinates and not elements.
+
+ // Checks if the coordinates are close enough to be within the region.
+ function hit(x1, y1, x2, y2) {
+ return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;
+ }
+
+ // Checks a list of allowable regions against a click location.
+ // Returns true if the click should be allowed.
+ // Splices out the allowable region from the list after it has been used.
+ function checkAllowableRegions(touchCoordinates, x, y) {
+ for (var i = 0; i < touchCoordinates.length; i += 2) {
+ if (hit(touchCoordinates[i], touchCoordinates[i+1], x, y)) {
+ touchCoordinates.splice(i, i + 2);
+ return true; // allowable region
+ }
+ }
+ return false; // No allowable region; bust it.
+ }
+
+ // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick
+ // was called recently.
+ function onClick(event) {
+ if (Date.now() - lastPreventedTime > PREVENT_DURATION) {
+ return; // Too old.
+ }
+
+ var touches = event.touches && event.touches.length ? event.touches : [event];
+ var x = touches[0].clientX;
+ var y = touches[0].clientY;
+ // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label
+ // and on the input element). Depending on the exact browser, this second click we don't want
+ // to bust has either (0,0) or negative coordinates.
+ if (x < 1 && y < 1) {
+ return; // offscreen
+ }
+
+ // Look for an allowable region containing this click.
+ // If we find one, that means it was created by touchstart and not removed by
+ // preventGhostClick, so we don't bust it.
+ if (checkAllowableRegions(touchCoordinates, x, y)) {
+ return;
+ }
+
+ // If we didn't find an allowable region, bust the click.
+ event.stopPropagation();
+ event.preventDefault();
+ }
+
+
+ // Global touchstart handler that creates an allowable region for a click event.
+ // This allowable region can be removed by preventGhostClick if we want to bust it.
+ function onTouchStart(event) {
+ var touches = event.touches && event.touches.length ? event.touches : [event];
+ var x = touches[0].clientX;
+ var y = touches[0].clientY;
+ touchCoordinates.push(x, y);
+
+ $timeout(function() {
+ // Remove the allowable region.
+ for (var i = 0; i < touchCoordinates.length; i += 2) {
+ if (touchCoordinates[i] == x && touchCoordinates[i+1] == y) {
+ touchCoordinates.splice(i, i + 2);
+ return;
+ }
+ }
+ }, PREVENT_DURATION, false);
+ }
+
+ // On the first call, attaches some event handlers. Then whenever it gets called, it creates a
+ // zone around the touchstart where clicks will get busted.
+ function preventGhostClick(x, y) {
+ if (!touchCoordinates) {
+ $rootElement[0].addEventListener('click', onClick, true);
+ $rootElement[0].addEventListener('touchstart', onTouchStart, true);
+ touchCoordinates = [];
+ }
+
+ lastPreventedTime = Date.now();
+
+ checkAllowableRegions(touchCoordinates, x, y);
+ }
+
+ // Actual linking function.
+ return function(scope, element, attr) {
+ var clickHandler = $parse(attr.ngClick),
+ tapping = false,
+ tapElement, // Used to blur the element after a tap.
+ startTime, // Used to check if the tap was held too long.
+ touchStartX,
+ touchStartY;
+
+ function resetState() {
+ tapping = false;
+ element.removeClass(ACTIVE_CLASS_NAME);
+ }
+
+ element.bind('touchstart', function(event) {
+ tapping = true;
+ tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.
+ // Hack for Safari, which can target text nodes instead of containers.
+ if(tapElement.nodeType == 3) {
+ tapElement = tapElement.parentNode;
+ }
+
+ element.addClass(ACTIVE_CLASS_NAME);
+
+ startTime = Date.now();
+
+ var touches = event.touches && event.touches.length ? event.touches : [event];
+ var e = touches[0].originalEvent || touches[0];
+ touchStartX = e.clientX;
+ touchStartY = e.clientY;
+ });
+
+ element.bind('touchmove', function(event) {
+ resetState();
+ });
+
+ element.bind('touchcancel', function(event) {
+ resetState();
+ });
+
+ element.bind('touchend', function(event) {
+ var diff = Date.now() - startTime;
+
+ var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches :
+ ((event.touches && event.touches.length) ? event.touches : [event]);
+ var e = touches[0].originalEvent || touches[0];
+ var x = e.clientX;
+ var y = e.clientY;
+ var dist = Math.sqrt( Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2) );
+
+ if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {
+ // Call preventGhostClick so the clickbuster will catch the corresponding click.
+ preventGhostClick(x, y);
+
+ // Blur the focused element (the button, probably) before firing the callback.
+ // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.
+ // I couldn't get anything to work reliably on Android Chrome.
+ if (tapElement) {
+ tapElement.blur();
+ }
+
+ scope.$apply(function() {
+ // TODO(braden): This is sending the touchend, not a tap or click. Is that kosher?
+ clickHandler(scope, {$event: event});
+ });
+ }
+
+ resetState();
+ });
+
+ // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click
+ // something else nearby.
+ element.onclick = function(event) { };
+
+ // Fallback click handler.
+ // Busted clicks don't get this far, and adding this handler allows ng-tap to be used on
+ // desktop as well, to allow more portable sites.
+ element.bind('click', function(event) {
+ scope.$apply(function() {
+ clickHandler(scope, {$event: event});
+ });
+ });
+
+ element.bind('mousedown', function(event) {
+ element.addClass(ACTIVE_CLASS_NAME);
+ });
+
+ element.bind('mousemove mouseup', function(event) {
+ element.removeClass(ACTIVE_CLASS_NAME);
+ });
+
+ };
+}]);
+
+/**
+ * @ngdoc directive
+ * @name ngMobile.directive:ngSwipeLeft
+ *
+ * @description
+ * Specify custom behavior when an element is swiped to the left on a touchscreen device.
+ * A leftward swipe is a quick, right-to-left slide of the finger.
+ * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag too.
+ *
+ * @element ANY
+ * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate
+ * upon left swipe. (Event object is available as `$event`)
+ *
+ * @example
+ <doc:example>
+ <doc:source>
+ <div ng-show="!showActions" ng-swipe-left="showActions = true">
+ Some list content, like an email in the inbox
+ </div>
+ <div ng-show="showActions" ng-swipe-right="showActions = false">
+ <button ng-click="reply()">Reply</button>
+ <button ng-click="delete()">Delete</button>
+ </div>
+ </doc:source>
+ </doc:example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngMobile.directive:ngSwipeRight
+ *
+ * @description
+ * Specify custom behavior when an element is swiped to the right on a touchscreen device.
+ * A rightward swipe is a quick, left-to-right slide of the finger.
+ * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag too.
+ *
+ * @element ANY
+ * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate
+ * upon right swipe. (Event object is available as `$event`)
+ *
+ * @example
+ <doc:example>
+ <doc:source>
+ <div ng-show="!showActions" ng-swipe-left="showActions = true">
+ Some list content, like an email in the inbox
+ </div>
+ <div ng-show="showActions" ng-swipe-right="showActions = false">
+ <button ng-click="reply()">Reply</button>
+ <button ng-click="delete()">Delete</button>
+ </div>
+ </doc:source>
+ </doc:example>
+ */
+
+function makeSwipeDirective(directiveName, direction) {
+ ngMobile.directive(directiveName, ['$parse', function($parse) {
+ // The maximum vertical delta for a swipe should be less than 75px.
+ var MAX_VERTICAL_DISTANCE = 75;
+ // Vertical distance should not be more than a fraction of the horizontal distance.
+ var MAX_VERTICAL_RATIO = 0.3;
+ // At least a 30px lateral motion is necessary for a swipe.
+ var MIN_HORIZONTAL_DISTANCE = 30;
+ // The total distance in any direction before we make the call on swipe vs. scroll.
+ var MOVE_BUFFER_RADIUS = 10;
+
+ function getCoordinates(event) {
+ var touches = event.touches && event.touches.length ? event.touches : [event];
+ var e = (event.changedTouches && event.changedTouches[0]) ||
+ (event.originalEvent && event.originalEvent.changedTouches &&
+ event.originalEvent.changedTouches[0]) ||
+ touches[0].originalEvent || touches[0];
+
+ return {
+ x: e.clientX,
+ y: e.clientY
+ };
+ }
+
+ return function(scope, element, attr) {
+ var swipeHandler = $parse(attr[directiveName]);
+ var startCoords, valid;
+ var totalX, totalY;
+ var lastX, lastY;
+
+ function validSwipe(event) {
+ // Check that it's within the coordinates.
+ // Absolute vertical distance must be within tolerances.
+ // Horizontal distance, we take the current X - the starting X.
+ // This is negative for leftward swipes and positive for rightward swipes.
+ // After multiplying by the direction (-1 for left, +1 for right), legal swipes
+ // (ie. same direction as the directive wants) will have a positive delta and
+ // illegal ones a negative delta.
+ // Therefore this delta must be positive, and larger than the minimum.
+ if (!startCoords) return false;
+ var coords = getCoordinates(event);
+ var deltaY = Math.abs(coords.y - startCoords.y);
+ var deltaX = (coords.x - startCoords.x) * direction;
+ return valid && // Short circuit for already-invalidated swipes.
+ deltaY < MAX_VERTICAL_DISTANCE &&
+ deltaX > 0 &&
+ deltaX > MIN_HORIZONTAL_DISTANCE &&
+ deltaY / deltaX < MAX_VERTICAL_RATIO;
+ }
+
+ element.bind('touchstart mousedown', function(event) {
+ startCoords = getCoordinates(event);
+ valid = true;
+ totalX = 0;
+ totalY = 0;
+ lastX = startCoords.x;
+ lastY = startCoords.y;
+ });
+
+ element.bind('touchcancel', function(event) {
+ valid = false;
+ });
+
+ element.bind('touchmove mousemove', function(event) {
+ if (!valid) return;
+
+ // Android will send a touchcancel if it thinks we're starting to scroll.
+ // So when the total distance (+ or - or both) exceeds 10px in either direction,
+ // we either:
+ // - On totalX > totalY, we send preventDefault() and treat this as a swipe.
+ // - On totalY > totalX, we let the browser handle it as a scroll.
+
+ // Invalidate a touch while it's in progress if it strays too far away vertically.
+ // We don't want a scroll down and back up while drifting sideways to be a swipe just
+ // because you happened to end up vertically close in the end.
+ if (!startCoords) return;
+ var coords = getCoordinates(event);
+
+ if (Math.abs(coords.y - startCoords.y) > MAX_VERTICAL_DISTANCE) {
+ valid = false;
+ return;
+ }
+
+ totalX += Math.abs(coords.x - lastX);
+ totalY += Math.abs(coords.y - lastY);
+
+ lastX = coords.x;
+ lastY = coords.y;
+
+ if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {
+ return;
+ }
+
+ // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.
+ if (totalY > totalX) {
+ valid = false;
+ return;
+ } else {
+ event.preventDefault();
+ }
+ });
+
+ element.bind('touchend mouseup', function(event) {
+ if (validSwipe(event)) {
+ // Prevent this swipe from bubbling up to any other elements with ngSwipes.
+ event.stopPropagation();
+ scope.$apply(function() {
+ swipeHandler(scope, {$event:event});
+ });
+ }
+ });
+ };
+ }]);
+}
+
+// Left is negative X-coordinate, right is positive.
+makeSwipeDirective('ngSwipeLeft', -1);
+makeSwipeDirective('ngSwipeRight', 1);
+
+
+
+})(window, window.angular);
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-resource.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-resource.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-resource.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,537 @@
+/**
+ * @license AngularJS v1.1.5
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name ngResource
+ * @description
+ */
+
+/**
+ * @ngdoc object
+ * @name ngResource.$resource
+ * @requires $http
+ *
+ * @description
+ * A factory which creates a resource object that lets you interact with
+ * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
+ *
+ * The returned resource object has action methods which provide high-level behaviors without
+ * the need to interact with the low level {@link ng.$http $http} service.
+ *
+ * # Installation
+ * To use $resource make sure you have included the `angular-resource.js` that comes in Angular
+ * package. You can also find this file on Google CDN, bower as well as at
+ * {@link http://code.angularjs.org/ code.angularjs.org}.
+ *
+ * Finally load the module in your application:
+ *
+ * angular.module('app', ['ngResource']);
+ *
+ * and you are ready to get started!
+ *
+ * @param {string} url A parametrized URL template with parameters prefixed by `:` as in
+ * `/user/:username`. If you are using a URL with a port number (e.g.
+ * `http://example.com:8080/api`), you'll need to escape the colon character before the port
+ * number, like this: `$resource('http://example.com\\:8080/api')`.
+ *
+ * If you are using a url with a suffix, just add the suffix, like this:
+ * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')
+ * or even `$resource('http://example.com/resource/:resource_id.:format')`
+ * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
+ * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you
+ * can escape it with `/\.`.
+ *
+ * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
+ * `actions` methods. If any of the parameter value is a function, it will be executed every time
+ * when a param value needs to be obtained for a request (unless the param was overridden).
+ *
+ * Each key value in the parameter object is first bound to url template if present and then any
+ * excess keys are appended to the url search query after the `?`.
+ *
+ * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
+ * URL `/path/greet?salutation=Hello`.
+ *
+ * If the parameter value is prefixed with `@` then the value of that parameter is extracted from
+ * the data object (useful for non-GET operations).
+ *
+ * @param {Object.<Object>=} actions Hash with declaration of custom action that should extend the
+ * default set of resource actions. The declaration should be created in the format of {@link
+ * ng.$http#Parameters $http.config}:
+ *
+ * {action1: {method:?, params:?, isArray:?, headers:?, ...},
+ * action2: {method:?, params:?, isArray:?, headers:?, ...},
+ * ...}
+ *
+ * Where:
+ *
+ * - **`action`** – {string} – The name of action. This name becomes the name of the method on your
+ * resource object.
+ * - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, `DELETE`,
+ * and `JSONP`.
+ * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of the
+ * parameter value is a function, it will be executed every time when a param value needs to be
+ * obtained for a request (unless the param was overridden).
+ * - **`url`** – {string} – action specific `url` override. The url templating is supported just like
+ * for the resource-level urls.
+ * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, see
+ * `returns` section.
+ * - **`transformRequest`** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+ * transform function or an array of such functions. The transform function takes the http
+ * request body and headers and returns its transformed (typically serialized) version.
+ * - **`transformResponse`** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+ * transform function or an array of such functions. The transform function takes the http
+ * response body and headers and returns its transformed (typically deserialized) version.
+ * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
+ * GET request, otherwise if a cache instance built with
+ * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
+ * caching.
+ * - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that
+ * should abort the request when resolved.
+ * - **`withCredentials`** - `{boolean}` - whether to to set the `withCredentials` flag on the
+ * XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5
+ * requests with credentials} for more information.
+ * - **`responseType`** - `{string}` - see {@link
+ * https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}.
+ *
+ * @returns {Object} A resource "class" object with methods for the default set of resource actions
+ * optionally extended with custom `actions`. The default set contains these actions:
+ *
+ * { 'get': {method:'GET'},
+ * 'save': {method:'POST'},
+ * 'query': {method:'GET', isArray:true},
+ * 'remove': {method:'DELETE'},
+ * 'delete': {method:'DELETE'} };
+ *
+ * Calling these methods invoke an {@link ng.$http} with the specified http method,
+ * destination and parameters. When the data is returned from the server then the object is an
+ * instance of the resource class. The actions `save`, `remove` and `delete` are available on it
+ * as methods with the `$` prefix. This allows you to easily perform CRUD operations (create,
+ * read, update, delete) on server-side data like this:
+ * <pre>
+ var User = $resource('/user/:userId', {userId:'@id'});
+ var user = User.get({userId:123}, function() {
+ user.abc = true;
+ user.$save();
+ });
+ </pre>
+ *
+ * It is important to realize that invoking a $resource object method immediately returns an
+ * empty reference (object or array depending on `isArray`). Once the data is returned from the
+ * server the existing reference is populated with the actual data. This is a useful trick since
+ * usually the resource is assigned to a model which is then rendered by the view. Having an empty
+ * object results in no rendering, once the data arrives from the server then the object is
+ * populated with the data and the view automatically re-renders itself showing the new data. This
+ * means that in most case one never has to write a callback function for the action methods.
+ *
+ * The action methods on the class object or instance object can be invoked with the following
+ * parameters:
+ *
+ * - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])`
+ * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
+ * - non-GET instance actions: `instance.$action([parameters], [success], [error])`
+ *
+ *
+ * The Resource instances and collection have these additional properties:
+ *
+ * - `$then`: the `then` method of a {@link ng.$q promise} derived from the underlying
+ * {@link ng.$http $http} call.
+ *
+ * The success callback for the `$then` method will be resolved if the underlying `$http` requests
+ * succeeds.
+ *
+ * The success callback is called with a single object which is the {@link ng.$http http response}
+ * object extended with a new property `resource`. This `resource` property is a reference to the
+ * result of the resource action — resource object or array of resources.
+ *
+ * The error callback is called with the {@link ng.$http http response} object when an http
+ * error occurs.
+ *
+ * - `$resolved`: true if the promise has been resolved (either with success or rejection);
+ * Knowing if the Resource has been resolved is useful in data-binding.
+ *
+ * @example
+ *
+ * # Credit card resource
+ *
+ * <pre>
+ // Define CreditCard class
+ var CreditCard = $resource('/user/:userId/card/:cardId',
+ {userId:123, cardId:'@id'}, {
+ charge: {method:'POST', params:{charge:true}}
+ });
+
+ // We can retrieve a collection from the server
+ var cards = CreditCard.query(function() {
+ // GET: /user/123/card
+ // server returns: [ {id:456, number:'1234', name:'Smith'} ];
+
+ var card = cards[0];
+ // each item is an instance of CreditCard
+ expect(card instanceof CreditCard).toEqual(true);
+ card.name = "J. Smith";
+ // non GET methods are mapped onto the instances
+ card.$save();
+ // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
+ // server returns: {id:456, number:'1234', name: 'J. Smith'};
+
+ // our custom method is mapped as well.
+ card.$charge({amount:9.99});
+ // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
+ });
+
+ // we can create an instance as well
+ var newCard = new CreditCard({number:'0123'});
+ newCard.name = "Mike Smith";
+ newCard.$save();
+ // POST: /user/123/card {number:'0123', name:'Mike Smith'}
+ // server returns: {id:789, number:'01234', name: 'Mike Smith'};
+ expect(newCard.id).toEqual(789);
+ * </pre>
+ *
+ * The object returned from this function execution is a resource "class" which has "static" method
+ * for each action in the definition.
+ *
+ * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and `headers`.
+ * When the data is returned from the server then the object is an instance of the resource type and
+ * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
+ * operations (create, read, update, delete) on server-side data.
+
+ <pre>
+ var User = $resource('/user/:userId', {userId:'@id'});
+ var user = User.get({userId:123}, function() {
+ user.abc = true;
+ user.$save();
+ });
+ </pre>
+ *
+ * It's worth noting that the success callback for `get`, `query` and other method gets passed
+ * in the response that came from the server as well as $http header getter function, so one
+ * could rewrite the above example and get access to http headers as:
+ *
+ <pre>
+ var User = $resource('/user/:userId', {userId:'@id'});
+ User.get({userId:123}, function(u, getResponseHeaders){
+ u.abc = true;
+ u.$save(function(u, putResponseHeaders) {
+ //u => saved user object
+ //putResponseHeaders => $http header getter
+ });
+ });
+ </pre>
+
+ * # Buzz client
+
+ Let's look at what a buzz client created with the `$resource` service looks like:
+ <doc:example>
+ <doc:source jsfiddle="false">
+ <script>
+ function BuzzController($resource) {
+ this.userId = 'googlebuzz';
+ this.Activity = $resource(
+ 'https://www.googleapis.com/buzz/v1/activities/:userId/:visibility/:activity…',
+ {alt:'json', callback:'JSON_CALLBACK'},
+ {get:{method:'JSONP', params:{visibility:'@self'}}, replies: {method:'JSONP', params:{visibility:'@self', comments:'@comments'}}}
+ );
+ }
+
+ BuzzController.prototype = {
+ fetch: function() {
+ this.activities = this.Activity.get({userId:this.userId});
+ },
+ expandReplies: function(activity) {
+ activity.replies = this.Activity.replies({userId:this.userId, activityId:activity.id});
+ }
+ };
+ BuzzController.$inject = ['$resource'];
+ </script>
+
+ <div ng-controller="BuzzController">
+ <input ng-model="userId"/>
+ <button ng-click="fetch()">fetch</button>
+ <hr/>
+ <div ng-repeat="item in activities.data.items">
+ <h1 style="font-size: 15px;">
+ <img src="{{item.actor.thumbnailUrl}}" style="max-height:30px;max-width:30px;"/>
+ <a href="{{item.actor.profileUrl}}">{{item.actor.name}}</a>
+ <a href ng-click="expandReplies(item)" style="float: right;">Expand replies: {{item.links.replies[0].count}}</a>
+ </h1>
+ {{item.object.content | html}}
+ <div ng-repeat="reply in item.replies.data.items" style="margin-left: 20px;">
+ <img src="{{reply.actor.thumbnailUrl}}" style="max-height:30px;max-width:30px;"/>
+ <a href="{{reply.actor.profileUrl}}">{{reply.actor.name}}</a>: {{reply.content | html}}
+ </div>
+ </div>
+ </div>
+ </doc:source>
+ <doc:scenario>
+ </doc:scenario>
+ </doc:example>
+ */
+angular.module('ngResource', ['ng']).
+ factory('$resource', ['$http', '$parse', function($http, $parse) {
+ var DEFAULT_ACTIONS = {
+ 'get': {method:'GET'},
+ 'save': {method:'POST'},
+ 'query': {method:'GET', isArray:true},
+ 'remove': {method:'DELETE'},
+ 'delete': {method:'DELETE'}
+ };
+ var noop = angular.noop,
+ forEach = angular.forEach,
+ extend = angular.extend,
+ copy = angular.copy,
+ isFunction = angular.isFunction,
+ getter = function(obj, path) {
+ return $parse(path)(obj);
+ };
+
+ /**
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ * segment = *pchar
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ * / "*" / "+" / "," / ";" / "="
+ */
+ function encodeUriSegment(val) {
+ return encodeUriQuery(val, true).
+ replace(/%26/gi, '&').
+ replace(/%3D/gi, '=').
+ replace(/%2B/gi, '+');
+ }
+
+
+ /**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ * query = *( pchar / "/" / "?" )
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ * / "*" / "+" / "," / ";" / "="
+ */
+ function encodeUriQuery(val, pctEncodeSpaces) {
+ return encodeURIComponent(val).
+ replace(/%40/gi, '@').
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+ }
+
+ function Route(template, defaults) {
+ this.template = template;
+ this.defaults = defaults || {};
+ this.urlParams = {};
+ }
+
+ Route.prototype = {
+ setUrlParams: function(config, params, actionUrl) {
+ var self = this,
+ url = actionUrl || self.template,
+ val,
+ encodedVal;
+
+ var urlParams = self.urlParams = {};
+ forEach(url.split(/\W/), function(param){
+ if (param && (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
+ urlParams[param] = true;
+ }
+ });
+ url = url.replace(/\\:/g, ':');
+
+ params = params || {};
+ forEach(self.urlParams, function(_, urlParam){
+ val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
+ if (angular.isDefined(val) && val !== null) {
+ encodedVal = encodeUriSegment(val);
+ url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), encodedVal + "$1");
+ } else {
+ url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
+ leadingSlashes, tail) {
+ if (tail.charAt(0) == '/') {
+ return tail;
+ } else {
+ return leadingSlashes + tail;
+ }
+ });
+ }
+ });
+
+ // strip trailing slashes and set the url
+ url = url.replace(/\/+$/, '');
+ // then replace collapse `/.` if found in the last URL path segment before the query
+ // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
+ url = url.replace(/\/\.(?=\w+($|\?))/, '.');
+ // replace escaped `/\.` with `/.`
+ config.url = url.replace(/\/\\\./, '/.');
+
+
+ // set params - delegate param encoding to $http
+ forEach(params, function(value, key){
+ if (!self.urlParams[key]) {
+ config.params = config.params || {};
+ config.params[key] = value;
+ }
+ });
+ }
+ };
+
+
+ function ResourceFactory(url, paramDefaults, actions) {
+ var route = new Route(url);
+
+ actions = extend({}, DEFAULT_ACTIONS, actions);
+
+ function extractParams(data, actionParams){
+ var ids = {};
+ actionParams = extend({}, paramDefaults, actionParams);
+ forEach(actionParams, function(value, key){
+ if (isFunction(value)) { value = value(); }
+ ids[key] = value && value.charAt && value.charAt(0) == '@' ? getter(data, value.substr(1)) : value;
+ });
+ return ids;
+ }
+
+ function Resource(value){
+ copy(value || {}, this);
+ }
+
+ forEach(actions, function(action, name) {
+ action.method = angular.uppercase(action.method);
+ var hasBody = action.method == 'POST' || action.method == 'PUT' || action.method == 'PATCH';
+ Resource[name] = function(a1, a2, a3, a4) {
+ var params = {};
+ var data;
+ var success = noop;
+ var error = null;
+ var promise;
+
+ switch(arguments.length) {
+ case 4:
+ error = a4;
+ success = a3;
+ //fallthrough
+ case 3:
+ case 2:
+ if (isFunction(a2)) {
+ if (isFunction(a1)) {
+ success = a1;
+ error = a2;
+ break;
+ }
+
+ success = a2;
+ error = a3;
+ //fallthrough
+ } else {
+ params = a1;
+ data = a2;
+ success = a3;
+ break;
+ }
+ case 1:
+ if (isFunction(a1)) success = a1;
+ else if (hasBody) data = a1;
+ else params = a1;
+ break;
+ case 0: break;
+ default:
+ throw "Expected between 0-4 arguments [params, data, success, error], got " +
+ arguments.length + " arguments.";
+ }
+
+ var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data));
+ var httpConfig = {},
+ promise;
+
+ forEach(action, function(value, key) {
+ if (key != 'params' && key != 'isArray' ) {
+ httpConfig[key] = copy(value);
+ }
+ });
+ httpConfig.data = data;
+ route.setUrlParams(httpConfig, extend({}, extractParams(data, action.params || {}), params), action.url);
+
+ function markResolved() { value.$resolved = true; }
+
+ promise = $http(httpConfig);
+ value.$resolved = false;
+
+ promise.then(markResolved, markResolved);
+ value.$then = promise.then(function(response) {
+ var data = response.data;
+ var then = value.$then, resolved = value.$resolved;
+
+ if (data) {
+ if (action.isArray) {
+ value.length = 0;
+ forEach(data, function(item) {
+ value.push(new Resource(item));
+ });
+ } else {
+ copy(data, value);
+ value.$then = then;
+ value.$resolved = resolved;
+ }
+ }
+
+ (success||noop)(value, response.headers);
+
+ response.resource = value;
+ return response;
+ }, error).then;
+
+ return value;
+ };
+
+
+ Resource.prototype['$' + name] = function(a1, a2, a3) {
+ var params = extractParams(this),
+ success = noop,
+ error;
+
+ switch(arguments.length) {
+ case 3: params = a1; success = a2; error = a3; break;
+ case 2:
+ case 1:
+ if (isFunction(a1)) {
+ success = a1;
+ error = a2;
+ } else {
+ params = a1;
+ success = a2 || noop;
+ }
+ case 0: break;
+ default:
+ throw "Expected between 1-3 arguments [params, success, error], got " +
+ arguments.length + " arguments.";
+ }
+ var data = hasBody ? this : undefined;
+ Resource[name].call(this, params, data, success, error);
+ };
+ });
+
+ Resource.bind = function(additionalParamDefaults){
+ return ResourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
+ };
+
+ return Resource;
+ }
+
+ return ResourceFactory;
+ }]);
+
+
+})(window, window.angular);
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-sanitize.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-sanitize.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/extra/angular-sanitize.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,558 @@
+/**
+ * @license AngularJS v1.1.5
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name ngSanitize
+ * @description
+ */
+
+/*
+ * HTML Parser By Misko Hevery (misko(a)hevery.com)
+ * based on: HTML Parser By John Resig (ejohn.org)
+ * Original code by Erik Arvidsson, Mozilla Public License
+ * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
+ *
+ * // Use like so:
+ * htmlParser(htmlString, {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * });
+ *
+ */
+
+
+/**
+ * @ngdoc service
+ * @name ngSanitize.$sanitize
+ * @function
+ *
+ * @description
+ * The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are
+ * then serialized back to properly escaped html string. This means that no unsafe input can make
+ * it into the returned string, however, since our parser is more strict than a typical browser
+ * parser, it's possible that some obscure input, which would be recognized as valid HTML by a
+ * browser, won't make it through the sanitizer.
+ *
+ * @param {string} html Html input.
+ * @returns {string} Sanitized html.
+ *
+ * @example
+ <doc:example module="ngSanitize">
+ <doc:source>
+ <script>
+ function Ctrl($scope) {
+ $scope.snippet =
+ '<p style="color:blue">an html\n' +
+ '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
+ 'snippet</p>';
+ }
+ </script>
+ <div ng-controller="Ctrl">
+ Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+ <table>
+ <tr>
+ <td>Filter</td>
+ <td>Source</td>
+ <td>Rendered</td>
+ </tr>
+ <tr id="html-filter">
+ <td>html filter</td>
+ <td>
+ <pre><div ng-bind-html="snippet"><br/></div></pre>
+ </td>
+ <td>
+ <div ng-bind-html="snippet"></div>
+ </td>
+ </tr>
+ <tr id="escaped-html">
+ <td>no filter</td>
+ <td><pre><div ng-bind="snippet"><br/></div></pre></td>
+ <td><div ng-bind="snippet"></div></td>
+ </tr>
+ <tr id="html-unsafe-filter">
+ <td>unsafe html filter</td>
+ <td><pre><div ng-bind-html-unsafe="snippet"><br/></div></pre></td>
+ <td><div ng-bind-html-unsafe="snippet"></div></td>
+ </tr>
+ </table>
+ </div>
+ </doc:source>
+ <doc:scenario>
+ it('should sanitize the html snippet ', function() {
+ expect(using('#html-filter').element('div').html()).
+ toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
+ });
+
+ it('should escape snippet without any filter', function() {
+ expect(using('#escaped-html').element('div').html()).
+ toBe("<p style=\"color:blue\">an html\n" +
+ "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
+ "snippet</p>");
+ });
+
+ it('should inline raw snippet if filtered as unsafe', function() {
+ expect(using('#html-unsafe-filter').element("div").html()).
+ toBe("<p style=\"color:blue\">an html\n" +
+ "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
+ "snippet</p>");
+ });
+
+ it('should update', function() {
+ input('snippet').enter('new <b>text</b>');
+ expect(using('#html-filter').binding('snippet')).toBe('new <b>text</b>');
+ expect(using('#escaped-html').element('div').html()).toBe("new <b>text</b>");
+ expect(using('#html-unsafe-filter').binding("snippet")).toBe('new <b>text</b>');
+ });
+ </doc:scenario>
+ </doc:example>
+ */
+var $sanitize = function(html) {
+ var buf = [];
+ htmlParser(html, htmlSanitizeWriter(buf));
+ return buf.join('');
+};
+
+
+// Regular Expressions for parsing tags and attributes
+var START_TAG_REGEXP = /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,
+ END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/,
+ ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
+ BEGIN_TAG_REGEXP = /^</,
+ BEGING_END_TAGE_REGEXP = /^<\s*\//,
+ COMMENT_REGEXP = /<!--(.*?)-->/g,
+ CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
+ URI_REGEXP = /^((ftp|https?):\/\/|mailto:|tel:|#)/,
+ NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Match everything outside of normal chars and " (quote character)
+
+
+// Good source of info about elements and attributes
+// http://dev.w3.org/html5/spec/Overview.html#semantics
+// http://simon.html5.org/html-elements
+
+// Safe Void Elements - HTML5
+// http://dev.w3.org/html5/spec/Overview.html#void-elements
+var voidElements = makeMap("area,br,col,hr,img,wbr");
+
+// Elements that you can, intentionally, leave open (and which close themselves)
+// http://dev.w3.org/html5/spec/Overview.html#optional-tags
+var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
+ optionalEndTagInlineElements = makeMap("rp,rt"),
+ optionalEndTagElements = angular.extend({}, optionalEndTagInlineElements, optionalEndTagBlockElements);
+
+// Safe Block Elements - HTML5
+var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article,aside," +
+ "blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6," +
+ "header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"));
+
+// Inline Elements - HTML5
+var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b,bdi,bdo," +
+ "big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small," +
+ "span,strike,strong,sub,sup,time,tt,u,var"));
+
+
+// Special Elements (can contain anything)
+var specialElements = makeMap("script,style");
+
+var validElements = angular.extend({}, voidElements, blockElements, inlineElements, optionalEndTagElements);
+
+//Attributes that have href and hence need to be sanitized
+var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap");
+var validAttrs = angular.extend({}, uriAttrs, makeMap(
+ 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+
+ 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+
+ 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+
+ 'scope,scrolling,shape,span,start,summary,target,title,type,'+
+ 'valign,value,vspace,width'));
+
+function makeMap(str) {
+ var obj = {}, items = str.split(','), i;
+ for (i = 0; i < items.length; i++) obj[items[i]] = true;
+ return obj;
+}
+
+
+/**
+ * @example
+ * htmlParser(htmlString, {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * });
+ *
+ * @param {string} html string
+ * @param {object} handler
+ */
+function htmlParser( html, handler ) {
+ var index, chars, match, stack = [], last = html;
+ stack.last = function() { return stack[ stack.length - 1 ]; };
+
+ while ( html ) {
+ chars = true;
+
+ // Make sure we're not in a script or style element
+ if ( !stack.last() || !specialElements[ stack.last() ] ) {
+
+ // Comment
+ if ( html.indexOf("<!--") === 0 ) {
+ index = html.indexOf("-->");
+
+ if ( index >= 0 ) {
+ if (handler.comment) handler.comment( html.substring( 4, index ) );
+ html = html.substring( index + 3 );
+ chars = false;
+ }
+
+ // end tag
+ } else if ( BEGING_END_TAGE_REGEXP.test(html) ) {
+ match = html.match( END_TAG_REGEXP );
+
+ if ( match ) {
+ html = html.substring( match[0].length );
+ match[0].replace( END_TAG_REGEXP, parseEndTag );
+ chars = false;
+ }
+
+ // start tag
+ } else if ( BEGIN_TAG_REGEXP.test(html) ) {
+ match = html.match( START_TAG_REGEXP );
+
+ if ( match ) {
+ html = html.substring( match[0].length );
+ match[0].replace( START_TAG_REGEXP, parseStartTag );
+ chars = false;
+ }
+ }
+
+ if ( chars ) {
+ index = html.indexOf("<");
+
+ var text = index < 0 ? html : html.substring( 0, index );
+ html = index < 0 ? "" : html.substring( index );
+
+ if (handler.chars) handler.chars( decodeEntities(text) );
+ }
+
+ } else {
+ html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), function(all, text){
+ text = text.
+ replace(COMMENT_REGEXP, "$1").
+ replace(CDATA_REGEXP, "$1");
+
+ if (handler.chars) handler.chars( decodeEntities(text) );
+
+ return "";
+ });
+
+ parseEndTag( "", stack.last() );
+ }
+
+ if ( html == last ) {
+ throw "Parse Error: " + html;
+ }
+ last = html;
+ }
+
+ // Clean up any remaining tags
+ parseEndTag();
+
+ function parseStartTag( tag, tagName, rest, unary ) {
+ tagName = angular.lowercase(tagName);
+ if ( blockElements[ tagName ] ) {
+ while ( stack.last() && inlineElements[ stack.last() ] ) {
+ parseEndTag( "", stack.last() );
+ }
+ }
+
+ if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) {
+ parseEndTag( "", tagName );
+ }
+
+ unary = voidElements[ tagName ] || !!unary;
+
+ if ( !unary )
+ stack.push( tagName );
+
+ var attrs = {};
+
+ rest.replace(ATTR_REGEXP, function(match, name, doubleQuotedValue, singleQoutedValue, unqoutedValue) {
+ var value = doubleQuotedValue
+ || singleQoutedValue
+ || unqoutedValue
+ || '';
+
+ attrs[name] = decodeEntities(value);
+ });
+ if (handler.start) handler.start( tagName, attrs, unary );
+ }
+
+ function parseEndTag( tag, tagName ) {
+ var pos = 0, i;
+ tagName = angular.lowercase(tagName);
+ if ( tagName )
+ // Find the closest opened tag of the same type
+ for ( pos = stack.length - 1; pos >= 0; pos-- )
+ if ( stack[ pos ] == tagName )
+ break;
+
+ if ( pos >= 0 ) {
+ // Close all the open elements, up the stack
+ for ( i = stack.length - 1; i >= pos; i-- )
+ if (handler.end) handler.end( stack[ i ] );
+
+ // Remove the open elements from the stack
+ stack.length = pos;
+ }
+ }
+}
+
+/**
+ * decodes all entities into regular string
+ * @param value
+ * @returns {string} A string with decoded entities.
+ */
+var hiddenPre=document.createElement("pre");
+function decodeEntities(value) {
+ hiddenPre.innerHTML=value.replace(/</g,"<");
+ return hiddenPre.innerText || hiddenPre.textContent || '';
+}
+
+/**
+ * Escapes all potentially dangerous characters, so that the
+ * resulting string can be safely inserted into attribute or
+ * element text.
+ * @param value
+ * @returns escaped text
+ */
+function encodeEntities(value) {
+ return value.
+ replace(/&/g, '&').
+ replace(NON_ALPHANUMERIC_REGEXP, function(value){
+ return '&#' + value.charCodeAt(0) + ';';
+ }).
+ replace(/</g, '<').
+ replace(/>/g, '>');
+}
+
+/**
+ * create an HTML/XML writer which writes to buffer
+ * @param {Array} buf use buf.jain('') to get out sanitized html string
+ * @returns {object} in the form of {
+ * start: function(tag, attrs, unary) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * }
+ */
+function htmlSanitizeWriter(buf){
+ var ignore = false;
+ var out = angular.bind(buf, buf.push);
+ return {
+ start: function(tag, attrs, unary){
+ tag = angular.lowercase(tag);
+ if (!ignore && specialElements[tag]) {
+ ignore = tag;
+ }
+ if (!ignore && validElements[tag] == true) {
+ out('<');
+ out(tag);
+ angular.forEach(attrs, function(value, key){
+ var lkey=angular.lowercase(key);
+ if (validAttrs[lkey]==true && (uriAttrs[lkey]!==true || value.match(URI_REGEXP))) {
+ out(' ');
+ out(key);
+ out('="');
+ out(encodeEntities(value));
+ out('"');
+ }
+ });
+ out(unary ? '/>' : '>');
+ }
+ },
+ end: function(tag){
+ tag = angular.lowercase(tag);
+ if (!ignore && validElements[tag] == true) {
+ out('</');
+ out(tag);
+ out('>');
+ }
+ if (tag == ignore) {
+ ignore = false;
+ }
+ },
+ chars: function(chars){
+ if (!ignore) {
+ out(encodeEntities(chars));
+ }
+ }
+ };
+}
+
+
+// define ngSanitize module and register $sanitize service
+angular.module('ngSanitize', []).value('$sanitize', $sanitize);
+
+/**
+ * @ngdoc directive
+ * @name ngSanitize.directive:ngBindHtml
+ *
+ * @description
+ * Creates a binding that will sanitize the result of evaluating the `expression` with the
+ * {@link ngSanitize.$sanitize $sanitize} service and innerHTML the result into the current element.
+ *
+ * See {@link ngSanitize.$sanitize $sanitize} docs for examples.
+ *
+ * @element ANY
+ * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
+ */
+angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($sanitize) {
+ return function(scope, element, attr) {
+ element.addClass('ng-binding').data('$binding', attr.ngBindHtml);
+ scope.$watch(attr.ngBindHtml, function ngBindHtmlWatchAction(value) {
+ value = $sanitize(value);
+ element.html(value || '');
+ });
+ };
+}]);
+
+/**
+ * @ngdoc filter
+ * @name ngSanitize.filter:linky
+ * @function
+ *
+ * @description
+ * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
+ * plain email address links.
+ *
+ * @param {string} text Input text.
+ * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
+ * @returns {string} Html-linkified text.
+ *
+ * @usage
+ <span ng-bind-html="linky_expression | linky"></span>
+ *
+ * @example
+ <doc:example module="ngSanitize">
+ <doc:source>
+ <script>
+ function Ctrl($scope) {
+ $scope.snippet =
+ 'Pretty text with some links:\n'+
+ 'http://angularjs.org/,\n'+
+ 'mailto:us@somewhere.org,\n'+
+ 'another(a)somewhere.org,\n'+
+ 'and one more: ftp://127.0.0.1/.';
+ $scope.snippetWithTarget = 'http://angularjs.org/';
+ }
+ </script>
+ <div ng-controller="Ctrl">
+ Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+ <table>
+ <tr>
+ <td>Filter</td>
+ <td>Source</td>
+ <td>Rendered</td>
+ </tr>
+ <tr id="linky-filter">
+ <td>linky filter</td>
+ <td>
+ <pre><div ng-bind-html="snippet | linky"><br></div></pre>
+ </td>
+ <td>
+ <div ng-bind-html="snippet | linky"></div>
+ </td>
+ </tr>
+ <tr id="linky-target">
+ <td>linky target</td>
+ <td>
+ <pre><div ng-bind-html="snippetWithTarget | linky:'_blank'"><br></div></pre>
+ </td>
+ <td>
+ <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
+ </td>
+ </tr>
+ <tr id="escaped-html">
+ <td>no filter</td>
+ <td><pre><div ng-bind="snippet"><br></div></pre></td>
+ <td><div ng-bind="snippet"></div></td>
+ </tr>
+ </table>
+ </doc:source>
+ <doc:scenario>
+ it('should linkify the snippet with urls', function() {
+ expect(using('#linky-filter').binding('snippet | linky')).
+ toBe('Pretty text with some links: ' +
+ '<a href="http://angularjs.org/">http://angularjs.org/</a>, ' +
+ '<a href="mailto:us@somewhere.org">us(a)somewhere.org</a>, ' +
+ '<a href="mailto:another@somewhere.org">another(a)somewhere.org</a>, ' +
+ 'and one more: <a href="ftp://127.0.0.1/">ftp://127.0.0.1/</a>.');
+ });
+
+ it ('should not linkify snippet without the linky filter', function() {
+ expect(using('#escaped-html').binding('snippet')).
+ toBe("Pretty text with some links:\n" +
+ "http://angularjs.org/,\n" +
+ "mailto:us@somewhere.org,\n" +
+ "another(a)somewhere.org,\n" +
+ "and one more: ftp://127.0.0.1/.");
+ });
+
+ it('should update', function() {
+ input('snippet').enter('new http://link.');
+ expect(using('#linky-filter').binding('snippet | linky')).
+ toBe('new <a href="http://link">http://link</a>.');
+ expect(using('#escaped-html').binding('snippet')).toBe('new http://link.');
+ });
+
+ it('should work with the target property', function() {
+ expect(using('#linky-target').binding("snippetWithTarget | linky:'_blank'")).
+ toBe('<a target="_blank" href="http://angularjs.org/">http://angularjs.org/</a>');
+ });
+ </doc:scenario>
+ </doc:example>
+ */
+angular.module('ngSanitize').filter('linky', function() {
+ var LINKY_URL_REGEXP = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,
+ MAILTO_REGEXP = /^mailto:/;
+
+ return function(text, target) {
+ if (!text) return text;
+ var match;
+ var raw = text;
+ var html = [];
+ // TODO(vojta): use $sanitize instead
+ var writer = htmlSanitizeWriter(html);
+ var url;
+ var i;
+ var properties = {};
+ if (angular.isDefined(target)) {
+ properties.target = target;
+ }
+ while ((match = raw.match(LINKY_URL_REGEXP))) {
+ // We can not end in these as they are sometimes found at the end of the sentence
+ url = match[0];
+ // if we did not match ftp/http/mailto then assume mailto
+ if (match[2] == match[3]) url = 'mailto:' + url;
+ i = match.index;
+ writer.chars(raw.substr(0, i));
+ properties.href = url;
+ writer.start('a', properties);
+ writer.chars(match[0].replace(MAILTO_REGEXP, ''));
+ writer.end('a');
+ raw = raw.substring(i + match[0].length);
+ }
+ writer.chars(raw);
+ return html.join('');
+ };
+});
+
+
+})(window, window.angular);
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-na.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-na.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-na.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vm.",
+ "1": "nm."
+ },
+ "DAY": {
+ "0": "Sondag",
+ "1": "Maandag",
+ "2": "Dinsdag",
+ "3": "Woensdag",
+ "4": "Donderdag",
+ "5": "Vrydag",
+ "6": "Saterdag"
+ },
+ "MONTH": {
+ "0": "Januarie",
+ "1": "Februarie",
+ "2": "Maart",
+ "3": "April",
+ "4": "Mei",
+ "5": "Junie",
+ "6": "Julie",
+ "7": "Augustus",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Desember"
+ },
+ "SHORTDAY": {
+ "0": "So",
+ "1": "Ma",
+ "2": "Di",
+ "3": "Wo",
+ "4": "Do",
+ "5": "Vr",
+ "6": "Sa"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "af-na",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-za.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-za.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af-za.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vm.",
+ "1": "nm."
+ },
+ "DAY": {
+ "0": "Sondag",
+ "1": "Maandag",
+ "2": "Dinsdag",
+ "3": "Woensdag",
+ "4": "Donderdag",
+ "5": "Vrydag",
+ "6": "Saterdag"
+ },
+ "MONTH": {
+ "0": "Januarie",
+ "1": "Februarie",
+ "2": "Maart",
+ "3": "April",
+ "4": "Mei",
+ "5": "Junie",
+ "6": "Julie",
+ "7": "Augustus",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Desember"
+ },
+ "SHORTDAY": {
+ "0": "So",
+ "1": "Ma",
+ "2": "Di",
+ "3": "Wo",
+ "4": "Do",
+ "5": "Vr",
+ "6": "Sa"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd MMM y h:mm:ss a",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy-MM-dd h:mm a",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "af-za",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_af.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vm.",
+ "1": "nm."
+ },
+ "DAY": {
+ "0": "Sondag",
+ "1": "Maandag",
+ "2": "Dinsdag",
+ "3": "Woensdag",
+ "4": "Donderdag",
+ "5": "Vrydag",
+ "6": "Saterdag"
+ },
+ "MONTH": {
+ "0": "Januarie",
+ "1": "Februarie",
+ "2": "Maart",
+ "3": "April",
+ "4": "Mei",
+ "5": "Junie",
+ "6": "Julie",
+ "7": "Augustus",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Desember"
+ },
+ "SHORTDAY": {
+ "0": "So",
+ "1": "Ma",
+ "2": "Di",
+ "3": "Wo",
+ "4": "Do",
+ "5": "Vr",
+ "6": "Sa"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd MMM y h:mm:ss a",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy-MM-dd h:mm a",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "af",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am-et.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am-et.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am-et.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u1321\u12cb\u1275",
+ "1": "\u12a8\u1233\u12d3\u1275"
+ },
+ "DAY": {
+ "0": "\u12a5\u1211\u12f5",
+ "1": "\u1230\u129e",
+ "2": "\u121b\u12ad\u1230\u129e",
+ "3": "\u1228\u1261\u12d5",
+ "4": "\u1210\u1219\u1235",
+ "5": "\u12d3\u122d\u1265",
+ "6": "\u1245\u12f3\u121c"
+ },
+ "MONTH": {
+ "0": "\u1303\u1295\u12e9\u12c8\u122a",
+ "1": "\u134c\u1265\u1229\u12c8\u122a",
+ "2": "\u121b\u122d\u127d",
+ "3": "\u12a4\u1355\u1228\u120d",
+ "4": "\u121c\u12ed",
+ "5": "\u1301\u1295",
+ "6": "\u1301\u120b\u12ed",
+ "7": "\u12a6\u1308\u1235\u1275",
+ "8": "\u1234\u1355\u1274\u121d\u1260\u122d",
+ "9": "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+ "10": "\u1296\u126c\u121d\u1260\u122d",
+ "11": "\u12f2\u1234\u121d\u1260\u122d"
+ },
+ "SHORTDAY": {
+ "0": "\u12a5\u1211\u12f5",
+ "1": "\u1230\u129e",
+ "2": "\u121b\u12ad\u1230",
+ "3": "\u1228\u1261\u12d5",
+ "4": "\u1210\u1219\u1235",
+ "5": "\u12d3\u122d\u1265",
+ "6": "\u1245\u12f3\u121c"
+ },
+ "SHORTMONTH": {
+ "0": "\u1303\u1295\u12e9",
+ "1": "\u134c\u1265\u1229",
+ "2": "\u121b\u122d\u127d",
+ "3": "\u12a4\u1355\u1228",
+ "4": "\u121c\u12ed",
+ "5": "\u1301\u1295",
+ "6": "\u1301\u120b\u12ed",
+ "7": "\u12a6\u1308\u1235",
+ "8": "\u1234\u1355\u1274",
+ "9": "\u12a6\u12ad\u1270",
+ "10": "\u1296\u126c\u121d",
+ "11": "\u12f2\u1234\u121d"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Birr",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "am-et",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_am.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u1321\u12cb\u1275",
+ "1": "\u12a8\u1233\u12d3\u1275"
+ },
+ "DAY": {
+ "0": "\u12a5\u1211\u12f5",
+ "1": "\u1230\u129e",
+ "2": "\u121b\u12ad\u1230\u129e",
+ "3": "\u1228\u1261\u12d5",
+ "4": "\u1210\u1219\u1235",
+ "5": "\u12d3\u122d\u1265",
+ "6": "\u1245\u12f3\u121c"
+ },
+ "MONTH": {
+ "0": "\u1303\u1295\u12e9\u12c8\u122a",
+ "1": "\u134c\u1265\u1229\u12c8\u122a",
+ "2": "\u121b\u122d\u127d",
+ "3": "\u12a4\u1355\u1228\u120d",
+ "4": "\u121c\u12ed",
+ "5": "\u1301\u1295",
+ "6": "\u1301\u120b\u12ed",
+ "7": "\u12a6\u1308\u1235\u1275",
+ "8": "\u1234\u1355\u1274\u121d\u1260\u122d",
+ "9": "\u12a6\u12ad\u1270\u12cd\u1260\u122d",
+ "10": "\u1296\u126c\u121d\u1260\u122d",
+ "11": "\u12f2\u1234\u121d\u1260\u122d"
+ },
+ "SHORTDAY": {
+ "0": "\u12a5\u1211\u12f5",
+ "1": "\u1230\u129e",
+ "2": "\u121b\u12ad\u1230",
+ "3": "\u1228\u1261\u12d5",
+ "4": "\u1210\u1219\u1235",
+ "5": "\u12d3\u122d\u1265",
+ "6": "\u1245\u12f3\u121c"
+ },
+ "SHORTMONTH": {
+ "0": "\u1303\u1295\u12e9",
+ "1": "\u134c\u1265\u1229",
+ "2": "\u121b\u122d\u127d",
+ "3": "\u12a4\u1355\u1228",
+ "4": "\u121c\u12ed",
+ "5": "\u1301\u1295",
+ "6": "\u1301\u120b\u12ed",
+ "7": "\u12a6\u1308\u1235",
+ "8": "\u1234\u1355\u1274",
+ "9": "\u12a6\u12ad\u1270",
+ "10": "\u1296\u126c\u121d",
+ "11": "\u12f2\u1234\u121d"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Birr",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "am",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-001.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-001.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-001.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-001",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ae.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ae.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ae.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-ae",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-bh.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-bh.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-bh.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-bh",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-dz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-dz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-dz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "yyyy/MM/dd h:mm:ss a",
+ "mediumDate": "yyyy/MM/dd",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy/M/d h:mm a",
+ "shortDate": "yyyy/M/d",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-dz",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-eg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-eg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-eg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-eg",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-iq.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-iq.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-iq.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-iq",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-jo.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-jo.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-jo.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "1": "\u0634\u0628\u0627\u0637",
+ "2": "\u0622\u0630\u0627\u0631",
+ "3": "\u0646\u064a\u0633\u0627\u0646",
+ "4": "\u0623\u064a\u0627\u0631",
+ "5": "\u062d\u0632\u064a\u0631\u0627\u0646",
+ "6": "\u062a\u0645\u0648\u0632",
+ "7": "\u0622\u0628",
+ "8": "\u0623\u064a\u0644\u0648\u0644",
+ "9": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+ "10": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "11": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "1": "\u0634\u0628\u0627\u0637",
+ "2": "\u0622\u0630\u0627\u0631",
+ "3": "\u0646\u064a\u0633\u0627\u0646",
+ "4": "\u0623\u064a\u0627\u0631",
+ "5": "\u062d\u0632\u064a\u0631\u0627\u0646",
+ "6": "\u062a\u0645\u0648\u0632",
+ "7": "\u0622\u0628",
+ "8": "\u0623\u064a\u0644\u0648\u0644",
+ "9": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+ "10": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "11": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-jo",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-kw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-kw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-kw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-kw",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-lb.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-lb.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-lb.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "1": "\u0634\u0628\u0627\u0637",
+ "2": "\u0622\u0630\u0627\u0631",
+ "3": "\u0646\u064a\u0633\u0627\u0646",
+ "4": "\u0623\u064a\u0627\u0631",
+ "5": "\u062d\u0632\u064a\u0631\u0627\u0646",
+ "6": "\u062a\u0645\u0648\u0632",
+ "7": "\u0622\u0628",
+ "8": "\u0623\u064a\u0644\u0648\u0644",
+ "9": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+ "10": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "11": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "1": "\u0634\u0628\u0627\u0637",
+ "2": "\u0622\u0630\u0627\u0631",
+ "3": "\u0646\u064a\u0633\u0627\u0646",
+ "4": "\u0623\u064a\u0627\u0631",
+ "5": "\u062d\u0632\u064a\u0631\u0627\u0646",
+ "6": "\u062a\u0645\u0648\u0632",
+ "7": "\u0622\u0628",
+ "8": "\u0623\u064a\u0644\u0648\u0644",
+ "9": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+ "10": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "11": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-lb",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ly.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ly.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ly.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-ly",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ma.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ma.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ma.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "yyyy/MM/dd h:mm:ss a",
+ "mediumDate": "yyyy/MM/dd",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy/M/d h:mm a",
+ "shortDate": "yyyy/M/d",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-ma",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-om.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-om.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-om.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-om",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-qa.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-qa.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-qa.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-qa",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sa.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sa.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sa.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-sa",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sd.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sd.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sd.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-sd",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sy.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sy.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-sy.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "1": "\u0634\u0628\u0627\u0637",
+ "2": "\u0622\u0630\u0627\u0631",
+ "3": "\u0646\u064a\u0633\u0627\u0646",
+ "4": "\u0623\u064a\u0627\u0631",
+ "5": "\u062d\u0632\u064a\u0631\u0627\u0646",
+ "6": "\u062a\u0645\u0648\u0632",
+ "7": "\u0622\u0628",
+ "8": "\u0623\u064a\u0644\u0648\u0644",
+ "9": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+ "10": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "11": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "1": "\u0634\u0628\u0627\u0637",
+ "2": "\u0622\u0630\u0627\u0631",
+ "3": "\u0646\u064a\u0633\u0627\u0646",
+ "4": "\u0623\u064a\u0627\u0631",
+ "5": "\u062d\u0632\u064a\u0631\u0627\u0646",
+ "6": "\u062a\u0645\u0648\u0632",
+ "7": "\u0622\u0628",
+ "8": "\u0623\u064a\u0644\u0648\u0644",
+ "9": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644",
+ "10": "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a",
+ "11": "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-sy",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-tn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-tn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-tn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "yyyy/MM/dd h:mm:ss a",
+ "mediumDate": "yyyy/MM/dd",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy/M/d h:mm a",
+ "shortDate": "yyyy/M/d",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-tn",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ye.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ye.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar-ye.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar-ye",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ar.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0635",
+ "1": "\u0645"
+ },
+ "DAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "MONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u0644\u0623\u062d\u062f",
+ "1": "\u0627\u0644\u0627\u062b\u0646\u064a\u0646",
+ "2": "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621",
+ "3": "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
+ "4": "\u0627\u0644\u062e\u0645\u064a\u0633",
+ "5": "\u0627\u0644\u062c\u0645\u0639\u0629",
+ "6": "\u0627\u0644\u0633\u0628\u062a"
+ },
+ "SHORTMONTH": {
+ "0": "\u064a\u0646\u0627\u064a\u0631",
+ "1": "\u0641\u0628\u0631\u0627\u064a\u0631",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0623\u0628\u0631\u064a\u0644",
+ "4": "\u0645\u0627\u064a\u0648",
+ "5": "\u064a\u0648\u0646\u064a\u0648",
+ "6": "\u064a\u0648\u0644\u064a\u0648",
+ "7": "\u0623\u063a\u0633\u0637\u0633",
+ "8": "\u0633\u0628\u062a\u0645\u0628\u0631",
+ "9": "\u0623\u0643\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0641\u0645\u0628\u0631",
+ "11": "\u062f\u064a\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060c d MMMM\u060c y",
+ "longDate": "d MMMM\u060c y",
+ "medium": "dd\u200f/MM\u200f/yyyy h:mm:ss a",
+ "mediumDate": "dd\u200f/MM\u200f/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d\u200f/M\u200f/yyyy h:mm a",
+ "shortDate": "d\u200f/M\u200f/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "",
+ "negSuf": "-",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ar",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 2) { return PLURAL_CATEGORY.TWO; } if (n == (n | 0) && n % 100 >= 3 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 99) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg-bg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg-bg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg-bg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u043f\u0440. \u043e\u0431.",
+ "1": "\u0441\u043b. \u043e\u0431."
+ },
+ "DAY": {
+ "0": "\u043d\u0435\u0434\u0435\u043b\u044f",
+ "1": "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+ "2": "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+ "3": "\u0441\u0440\u044f\u0434\u0430",
+ "4": "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
+ "5": "\u043f\u0435\u0442\u044a\u043a",
+ "6": "\u0441\u044a\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u044f\u043d\u0443\u0430\u0440\u0438",
+ "1": "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+ "2": "\u043c\u0430\u0440\u0442",
+ "3": "\u0430\u043f\u0440\u0438\u043b",
+ "4": "\u043c\u0430\u0439",
+ "5": "\u044e\u043d\u0438",
+ "6": "\u044e\u043b\u0438",
+ "7": "\u0430\u0432\u0433\u0443\u0441\u0442",
+ "8": "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+ "9": "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+ "10": "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+ "11": "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+ },
+ "SHORTDAY": {
+ "0": "\u043d\u0434",
+ "1": "\u043f\u043d",
+ "2": "\u0432\u0442",
+ "3": "\u0441\u0440",
+ "4": "\u0447\u0442",
+ "5": "\u043f\u0442",
+ "6": "\u0441\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u044f\u043d.",
+ "1": "\u0444\u0435\u0432\u0440.",
+ "2": "\u043c\u0430\u0440\u0442",
+ "3": "\u0430\u043f\u0440.",
+ "4": "\u043c\u0430\u0439",
+ "5": "\u044e\u043d\u0438",
+ "6": "\u044e\u043b\u0438",
+ "7": "\u0430\u0432\u0433.",
+ "8": "\u0441\u0435\u043f\u0442.",
+ "9": "\u043e\u043a\u0442.",
+ "10": "\u043d\u043e\u0435\u043c.",
+ "11": "\u0434\u0435\u043a."
+ },
+ "fullDate": "dd MMMM y, EEEE",
+ "longDate": "dd MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "lev",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "bg-bg",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u043f\u0440. \u043e\u0431.",
+ "1": "\u0441\u043b. \u043e\u0431."
+ },
+ "DAY": {
+ "0": "\u043d\u0435\u0434\u0435\u043b\u044f",
+ "1": "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a",
+ "2": "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+ "3": "\u0441\u0440\u044f\u0434\u0430",
+ "4": "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
+ "5": "\u043f\u0435\u0442\u044a\u043a",
+ "6": "\u0441\u044a\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u044f\u043d\u0443\u0430\u0440\u0438",
+ "1": "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
+ "2": "\u043c\u0430\u0440\u0442",
+ "3": "\u0430\u043f\u0440\u0438\u043b",
+ "4": "\u043c\u0430\u0439",
+ "5": "\u044e\u043d\u0438",
+ "6": "\u044e\u043b\u0438",
+ "7": "\u0430\u0432\u0433\u0443\u0441\u0442",
+ "8": "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438",
+ "9": "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
+ "10": "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
+ "11": "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"
+ },
+ "SHORTDAY": {
+ "0": "\u043d\u0434",
+ "1": "\u043f\u043d",
+ "2": "\u0432\u0442",
+ "3": "\u0441\u0440",
+ "4": "\u0447\u0442",
+ "5": "\u043f\u0442",
+ "6": "\u0441\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u044f\u043d.",
+ "1": "\u0444\u0435\u0432\u0440.",
+ "2": "\u043c\u0430\u0440\u0442",
+ "3": "\u0430\u043f\u0440.",
+ "4": "\u043c\u0430\u0439",
+ "5": "\u044e\u043d\u0438",
+ "6": "\u044e\u043b\u0438",
+ "7": "\u0430\u0432\u0433.",
+ "8": "\u0441\u0435\u043f\u0442.",
+ "9": "\u043e\u043a\u0442.",
+ "10": "\u043d\u043e\u0435\u043c.",
+ "11": "\u0434\u0435\u043a."
+ },
+ "fullDate": "dd MMMM y, EEEE",
+ "longDate": "dd MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "lev",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "bg",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-bd.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-bd.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-bd.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
+ "1": "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
+ "2": "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
+ "3": "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
+ "4": "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
+ "5": "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
+ "6": "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
+ },
+ "MONTH": {
+ "0": "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "1": "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "2": "\u09ae\u09be\u09b0\u09cd\u099a",
+ "3": "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+ "4": "\u09ae\u09c7",
+ "5": "\u099c\u09c1\u09a8",
+ "6": "\u099c\u09c1\u09b2\u09be\u0987",
+ "7": "\u0986\u0997\u09b8\u09cd\u099f",
+ "8": "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "9": "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+ "10": "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "11": "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+ },
+ "SHORTDAY": {
+ "0": "\u09b0\u09ac\u09bf",
+ "1": "\u09b8\u09cb\u09ae",
+ "2": "\u09ae\u0999\u09cd\u0997\u09b2",
+ "3": "\u09ac\u09c1\u09a7",
+ "4": "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf",
+ "5": "\u09b6\u09c1\u0995\u09cd\u09b0",
+ "6": "\u09b6\u09a8\u09bf"
+ },
+ "SHORTMONTH": {
+ "0": "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "1": "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "2": "\u09ae\u09be\u09b0\u09cd\u099a",
+ "3": "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+ "4": "\u09ae\u09c7",
+ "5": "\u099c\u09c1\u09a8",
+ "6": "\u099c\u09c1\u09b2\u09be\u0987",
+ "7": "\u0986\u0997\u09b8\u09cd\u099f",
+ "8": "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "9": "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+ "10": "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "11": "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u09f3",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "bn-bd",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
+ "1": "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
+ "2": "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
+ "3": "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
+ "4": "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
+ "5": "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
+ "6": "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
+ },
+ "MONTH": {
+ "0": "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "1": "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "2": "\u09ae\u09be\u09b0\u09cd\u099a",
+ "3": "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+ "4": "\u09ae\u09c7",
+ "5": "\u099c\u09c1\u09a8",
+ "6": "\u099c\u09c1\u09b2\u09be\u0987",
+ "7": "\u0986\u0997\u09b8\u09cd\u099f",
+ "8": "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "9": "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+ "10": "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "11": "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+ },
+ "SHORTDAY": {
+ "0": "\u09b0\u09ac\u09bf",
+ "1": "\u09b8\u09cb\u09ae",
+ "2": "\u09ae\u0999\u09cd\u0997\u09b2",
+ "3": "\u09ac\u09c1\u09a7",
+ "4": "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf",
+ "5": "\u09b6\u09c1\u0995\u09cd\u09b0",
+ "6": "\u09b6\u09a8\u09bf"
+ },
+ "SHORTMONTH": {
+ "0": "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "1": "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "2": "\u09ae\u09be\u09b0\u09cd\u099a",
+ "3": "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+ "4": "\u09ae\u09c7",
+ "5": "\u099c\u09c1\u09a8",
+ "6": "\u099c\u09c1\u09b2\u09be\u0987",
+ "7": "\u0986\u0997\u09b8\u09cd\u099f",
+ "8": "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "9": "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+ "10": "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "11": "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u09f3",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "bn-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_bn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
+ "1": "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
+ "2": "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
+ "3": "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
+ "4": "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
+ "5": "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
+ "6": "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
+ },
+ "MONTH": {
+ "0": "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "1": "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "2": "\u09ae\u09be\u09b0\u09cd\u099a",
+ "3": "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+ "4": "\u09ae\u09c7",
+ "5": "\u099c\u09c1\u09a8",
+ "6": "\u099c\u09c1\u09b2\u09be\u0987",
+ "7": "\u0986\u0997\u09b8\u09cd\u099f",
+ "8": "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "9": "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+ "10": "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "11": "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+ },
+ "SHORTDAY": {
+ "0": "\u09b0\u09ac\u09bf",
+ "1": "\u09b8\u09cb\u09ae",
+ "2": "\u09ae\u0999\u09cd\u0997\u09b2",
+ "3": "\u09ac\u09c1\u09a7",
+ "4": "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf",
+ "5": "\u09b6\u09c1\u0995\u09cd\u09b0",
+ "6": "\u09b6\u09a8\u09bf"
+ },
+ "SHORTMONTH": {
+ "0": "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "1": "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0",
+ "2": "\u09ae\u09be\u09b0\u09cd\u099a",
+ "3": "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2",
+ "4": "\u09ae\u09c7",
+ "5": "\u099c\u09c1\u09a8",
+ "6": "\u099c\u09c1\u09b2\u09be\u0987",
+ "7": "\u0986\u0997\u09b8\u09cd\u099f",
+ "8": "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "9": "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0",
+ "10": "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0",
+ "11": "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u09f3",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "bn",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-ad.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-ad.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-ad.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "diumenge",
+ "1": "dilluns",
+ "2": "dimarts",
+ "3": "dimecres",
+ "4": "dijous",
+ "5": "divendres",
+ "6": "dissabte"
+ },
+ "MONTH": {
+ "0": "de gener",
+ "1": "de febrer",
+ "2": "de mar\u00e7",
+ "3": "d\u2019abril",
+ "4": "de maig",
+ "5": "de juny",
+ "6": "de juliol",
+ "7": "d\u2019agost",
+ "8": "de setembre",
+ "9": "d\u2019octubre",
+ "10": "de novembre",
+ "11": "de desembre"
+ },
+ "SHORTDAY": {
+ "0": "dg.",
+ "1": "dl.",
+ "2": "dt.",
+ "3": "dc.",
+ "4": "dj.",
+ "5": "dv.",
+ "6": "ds."
+ },
+ "SHORTMONTH": {
+ "0": "de gen.",
+ "1": "de febr.",
+ "2": "de mar\u00e7",
+ "3": "d\u2019abr.",
+ "4": "de maig",
+ "5": "de juny",
+ "6": "de jul.",
+ "7": "d\u2019ag.",
+ "8": "de set.",
+ "9": "d\u2019oct.",
+ "10": "de nov.",
+ "11": "de des."
+ },
+ "fullDate": "EEEE d MMMM 'de' y",
+ "longDate": "d MMMM 'de' y",
+ "medium": "dd/MM/yyyy H:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd/MM/yy H:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ca-ad",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-es.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-es.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca-es.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "diumenge",
+ "1": "dilluns",
+ "2": "dimarts",
+ "3": "dimecres",
+ "4": "dijous",
+ "5": "divendres",
+ "6": "dissabte"
+ },
+ "MONTH": {
+ "0": "de gener",
+ "1": "de febrer",
+ "2": "de mar\u00e7",
+ "3": "d\u2019abril",
+ "4": "de maig",
+ "5": "de juny",
+ "6": "de juliol",
+ "7": "d\u2019agost",
+ "8": "de setembre",
+ "9": "d\u2019octubre",
+ "10": "de novembre",
+ "11": "de desembre"
+ },
+ "SHORTDAY": {
+ "0": "dg.",
+ "1": "dl.",
+ "2": "dt.",
+ "3": "dc.",
+ "4": "dj.",
+ "5": "dv.",
+ "6": "ds."
+ },
+ "SHORTMONTH": {
+ "0": "de gen.",
+ "1": "de febr.",
+ "2": "de mar\u00e7",
+ "3": "d\u2019abr.",
+ "4": "de maig",
+ "5": "de juny",
+ "6": "de jul.",
+ "7": "d\u2019ag.",
+ "8": "de set.",
+ "9": "d\u2019oct.",
+ "10": "de nov.",
+ "11": "de des."
+ },
+ "fullDate": "EEEE d MMMM 'de' y",
+ "longDate": "d MMMM 'de' y",
+ "medium": "dd/MM/yyyy H:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd/MM/yy H:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ca-es",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ca.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "diumenge",
+ "1": "dilluns",
+ "2": "dimarts",
+ "3": "dimecres",
+ "4": "dijous",
+ "5": "divendres",
+ "6": "dissabte"
+ },
+ "MONTH": {
+ "0": "de gener",
+ "1": "de febrer",
+ "2": "de mar\u00e7",
+ "3": "d\u2019abril",
+ "4": "de maig",
+ "5": "de juny",
+ "6": "de juliol",
+ "7": "d\u2019agost",
+ "8": "de setembre",
+ "9": "d\u2019octubre",
+ "10": "de novembre",
+ "11": "de desembre"
+ },
+ "SHORTDAY": {
+ "0": "dg.",
+ "1": "dl.",
+ "2": "dt.",
+ "3": "dc.",
+ "4": "dj.",
+ "5": "dv.",
+ "6": "ds."
+ },
+ "SHORTMONTH": {
+ "0": "de gen.",
+ "1": "de febr.",
+ "2": "de mar\u00e7",
+ "3": "d\u2019abr.",
+ "4": "de maig",
+ "5": "de juny",
+ "6": "de jul.",
+ "7": "d\u2019ag.",
+ "8": "de set.",
+ "9": "d\u2019oct.",
+ "10": "de nov.",
+ "11": "de des."
+ },
+ "fullDate": "EEEE d MMMM 'de' y",
+ "longDate": "d MMMM 'de' y",
+ "medium": "dd/MM/yyyy H:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd/MM/yy H:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ca",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_chr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_chr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_chr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"DATETIME_FORMATS":{"MONTH":["ᎤᏃᎸᏔᏅ","ᎧᎦᎵ","ᎠᏅᏱ","ᎧᏬᏂ","ᎠᏂᏍᎬᏘ","ᏕᎭᎷᏱ","ᎫᏰᏉᏂ","ᎦᎶᏂ","ᏚᎵᏍᏗ","ᏚᏂᏅᏗ","ᏅᏓᏕᏆ","ᎤᏍᎩᏱ"],"SHORTMONTH":["ᎤᏃ","ᎧᎦ","ᎠᏅ","ᎧᏬ","ᎠᏂ","ᏕᎭ","ᎫᏰ","ᎦᎶ","ᏚᎵ","ᏚᏂ","ᏅᏓ","ᎤᏍ"],"DAY":["ᎤᎾᏙᏓᏆᏍᎬ","ᎤᎾᏙᏓᏉᏅᎯ","ᏔᎵᏁᎢᎦ","ᏦᎢᏁᎢᎦ","ᏅᎩᏁᎢᎦ","ᏧᎾᎩᎶᏍᏗ","ᎤᎾᏙᏓᏈᏕᎾ"],"SHORTDAY":["ᏆᏍᎬ","ᏉᏅᎯ","ᏔᎵᏁ","ᏦᎢᏁ","ᏅᎩᏁ","ᏧᎾᎩ","ᏈᏕᎾ"],"AMPMS":["ᏌᎾᎴ","ᏒᎯᏱᎢᏗᏢ"],"medium":"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a","fullDate":"EEEE, MMMM d, y","longDate":"MMMM d, y","mediumDate":"MMM d, y","shortDate":"M/d/yy","mediumTime":"h:mm:ss a","shortTime":"h:mm a"},"pluralCat":function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;},"id":"chr"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs-cz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs-cz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs-cz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "dop.",
+ "1": "odp."
+ },
+ "DAY": {
+ "0": "ned\u011ble",
+ "1": "pond\u011bl\u00ed",
+ "2": "\u00fater\u00fd",
+ "3": "st\u0159eda",
+ "4": "\u010dtvrtek",
+ "5": "p\u00e1tek",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "ledna",
+ "1": "\u00fanora",
+ "2": "b\u0159ezna",
+ "3": "dubna",
+ "4": "kv\u011btna",
+ "5": "\u010dervna",
+ "6": "\u010dervence",
+ "7": "srpna",
+ "8": "z\u00e1\u0159\u00ed",
+ "9": "\u0159\u00edjna",
+ "10": "listopadu",
+ "11": "prosince"
+ },
+ "SHORTDAY": {
+ "0": "ne",
+ "1": "po",
+ "2": "\u00fat",
+ "3": "st",
+ "4": "\u010dt",
+ "5": "p\u00e1",
+ "6": "so"
+ },
+ "SHORTMONTH": {
+ "0": "Led",
+ "1": "\u00dano",
+ "2": "B\u0159e",
+ "3": "Dub",
+ "4": "Kv\u011b",
+ "5": "\u010cer",
+ "6": "\u010cvc",
+ "7": "Srp",
+ "8": "Z\u00e1\u0159",
+ "9": "\u0158\u00edj",
+ "10": "Lis",
+ "11": "Pro"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d. M. yyyy H:mm:ss",
+ "mediumDate": "d. M. yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "K\u010d",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "cs-cz",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cs.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "dop.",
+ "1": "odp."
+ },
+ "DAY": {
+ "0": "ned\u011ble",
+ "1": "pond\u011bl\u00ed",
+ "2": "\u00fater\u00fd",
+ "3": "st\u0159eda",
+ "4": "\u010dtvrtek",
+ "5": "p\u00e1tek",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "ledna",
+ "1": "\u00fanora",
+ "2": "b\u0159ezna",
+ "3": "dubna",
+ "4": "kv\u011btna",
+ "5": "\u010dervna",
+ "6": "\u010dervence",
+ "7": "srpna",
+ "8": "z\u00e1\u0159\u00ed",
+ "9": "\u0159\u00edjna",
+ "10": "listopadu",
+ "11": "prosince"
+ },
+ "SHORTDAY": {
+ "0": "ne",
+ "1": "po",
+ "2": "\u00fat",
+ "3": "st",
+ "4": "\u010dt",
+ "5": "p\u00e1",
+ "6": "so"
+ },
+ "SHORTMONTH": {
+ "0": "Led",
+ "1": "\u00dano",
+ "2": "B\u0159e",
+ "3": "Dub",
+ "4": "Kv\u011b",
+ "5": "\u010cer",
+ "6": "\u010cvc",
+ "7": "Srp",
+ "8": "Z\u00e1\u0159",
+ "9": "\u0158\u00edj",
+ "10": "Lis",
+ "11": "Pro"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d. M. yyyy H:mm:ss",
+ "mediumDate": "d. M. yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "K\u010d",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "cs",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cy.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cy.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_cy.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"DATETIME_FORMATS":{"MONTH":["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffenaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],"SHORTMONTH":["Ion","Chwef","Mawrth","Ebrill","Mai","Meh","Gorff","Awst","Medi","Hyd","Tach","Rhag"],"DAY":["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],"SHORTDAY":["Sul","Llun","Maw","Mer","Iau","Gwen","Sad"],"AMPMS":["AM","PM"],"medium":"d MMM y HH:mm:ss","short":"dd/MM/yyyy HH:mm","fullDate":"EEEE, d MMMM y","longDate":"d MMMM y","mediumDate":"d MMM y","shortDate":"dd/MM/yyyy","mediumTime":"HH:mm:ss","shortTime":"HH:mm"},"pluralCat":function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;},"id":"cy"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da-dk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da-dk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da-dk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "f.m.",
+ "1": "e.m."
+ },
+ "DAY": {
+ "0": "s\u00f8ndag",
+ "1": "mandag",
+ "2": "tirsdag",
+ "3": "onsdag",
+ "4": "torsdag",
+ "5": "fredag",
+ "6": "l\u00f8rdag"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "marts",
+ "3": "april",
+ "4": "maj",
+ "5": "juni",
+ "6": "juli",
+ "7": "august",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "s\u00f8n",
+ "1": "man",
+ "2": "tir",
+ "3": "ons",
+ "4": "tor",
+ "5": "fre",
+ "6": "l\u00f8r"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "maj",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE 'den' d. MMMM y",
+ "longDate": "d. MMM y",
+ "medium": "dd/MM/yyyy HH.mm.ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH.mm.ss",
+ "short": "dd/MM/yy HH.mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "da-dk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_da.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "f.m.",
+ "1": "e.m."
+ },
+ "DAY": {
+ "0": "s\u00f8ndag",
+ "1": "mandag",
+ "2": "tirsdag",
+ "3": "onsdag",
+ "4": "torsdag",
+ "5": "fredag",
+ "6": "l\u00f8rdag"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "marts",
+ "3": "april",
+ "4": "maj",
+ "5": "juni",
+ "6": "juli",
+ "7": "august",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "s\u00f8n",
+ "1": "man",
+ "2": "tir",
+ "3": "ons",
+ "4": "tor",
+ "5": "fre",
+ "6": "l\u00f8r"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "maj",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE 'den' d. MMMM y",
+ "longDate": "d. MMM y",
+ "medium": "dd/MM/yyyy HH.mm.ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH.mm.ss",
+ "short": "dd/MM/yy HH.mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "da",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-at.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-at.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-at.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "J\u00e4nner",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "J\u00e4n",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, dd. MMMM y",
+ "longDate": "dd. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "de-at",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-be.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-be.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-be.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "de-be",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-ch.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-ch.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-ch.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "CHF",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": "'",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "de-ch",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-de.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-de.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-de.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "de-de",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-li.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-li.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-li.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "de-li",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-lu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-lu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de-lu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "de-lu",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_de.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nachm."
+ },
+ "DAY": {
+ "0": "Sonntag",
+ "1": "Montag",
+ "2": "Dienstag",
+ "3": "Mittwoch",
+ "4": "Donnerstag",
+ "5": "Freitag",
+ "6": "Samstag"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "August",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Dezember"
+ },
+ "SHORTDAY": {
+ "0": "So.",
+ "1": "Mo.",
+ "2": "Di.",
+ "3": "Mi.",
+ "4": "Do.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "de",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-cy.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-cy.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-cy.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u03c0.\u03bc.",
+ "1": "\u03bc.\u03bc."
+ },
+ "DAY": {
+ "0": "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+ "1": "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+ "2": "\u03a4\u03c1\u03af\u03c4\u03b7",
+ "3": "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+ "4": "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+ "5": "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+ "6": "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"
+ },
+ "MONTH": {
+ "0": "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+ "1": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+ "2": "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5",
+ "3": "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5",
+ "4": "\u039c\u03b1\u0390\u03bf\u03c5",
+ "5": "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5",
+ "6": "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5",
+ "7": "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5",
+ "8": "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+ "9": "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
+ "10": "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+ "11": "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"
+ },
+ "SHORTDAY": {
+ "0": "\u039a\u03c5\u03c1",
+ "1": "\u0394\u03b5\u03c5",
+ "2": "\u03a4\u03c1\u03b9",
+ "3": "\u03a4\u03b5\u03c4",
+ "4": "\u03a0\u03b5\u03bc",
+ "5": "\u03a0\u03b1\u03c1",
+ "6": "\u03a3\u03b1\u03b2"
+ },
+ "SHORTMONTH": {
+ "0": "\u0399\u03b1\u03bd",
+ "1": "\u03a6\u03b5\u03b2",
+ "2": "\u039c\u03b1\u03c1",
+ "3": "\u0391\u03c0\u03c1",
+ "4": "\u039c\u03b1\u03ca",
+ "5": "\u0399\u03bf\u03c5\u03bd",
+ "6": "\u0399\u03bf\u03c5\u03bb",
+ "7": "\u0391\u03c5\u03b3",
+ "8": "\u03a3\u03b5\u03c0",
+ "9": "\u039f\u03ba\u03c4",
+ "10": "\u039d\u03bf\u03b5",
+ "11": "\u0394\u03b5\u03ba"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "el-cy",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-gr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-gr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-gr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u03c0.\u03bc.",
+ "1": "\u03bc.\u03bc."
+ },
+ "DAY": {
+ "0": "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+ "1": "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+ "2": "\u03a4\u03c1\u03af\u03c4\u03b7",
+ "3": "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+ "4": "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+ "5": "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+ "6": "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"
+ },
+ "MONTH": {
+ "0": "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+ "1": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+ "2": "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5",
+ "3": "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5",
+ "4": "\u039c\u03b1\u0390\u03bf\u03c5",
+ "5": "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5",
+ "6": "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5",
+ "7": "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5",
+ "8": "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+ "9": "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
+ "10": "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+ "11": "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"
+ },
+ "SHORTDAY": {
+ "0": "\u039a\u03c5\u03c1",
+ "1": "\u0394\u03b5\u03c5",
+ "2": "\u03a4\u03c1\u03b9",
+ "3": "\u03a4\u03b5\u03c4",
+ "4": "\u03a0\u03b5\u03bc",
+ "5": "\u03a0\u03b1\u03c1",
+ "6": "\u03a3\u03b1\u03b2"
+ },
+ "SHORTMONTH": {
+ "0": "\u0399\u03b1\u03bd",
+ "1": "\u03a6\u03b5\u03b2",
+ "2": "\u039c\u03b1\u03c1",
+ "3": "\u0391\u03c0\u03c1",
+ "4": "\u039c\u03b1\u03ca",
+ "5": "\u0399\u03bf\u03c5\u03bd",
+ "6": "\u0399\u03bf\u03c5\u03bb",
+ "7": "\u0391\u03c5\u03b3",
+ "8": "\u03a3\u03b5\u03c0",
+ "9": "\u039f\u03ba\u03c4",
+ "10": "\u039d\u03bf\u03b5",
+ "11": "\u0394\u03b5\u03ba"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "el-gr",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-polyton.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-polyton.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el-polyton.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"NUMBER_FORMATS":{"DECIMAL_SEP":",","GROUP_SEP":".","PATTERNS":[{"minInt":1,"minFrac":0,"macFrac":0,"posPre":"","posSuf":"","negPre":"-","negSuf":"","gSize":3,"lgSize":3,"maxFrac":3},{"minInt":1,"minFrac":2,"macFrac":0,"posPre":"","posSuf":" \u00A4","negPre":"-","negSuf":" \u00A4","gSize":3,"lgSize":3,"maxFrac":2}],"CURRENCY_SYM":"€"},"pluralCat":function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;},"DATETIME_FORMATS":{"MONTH":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"SHORTMONTH":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"DAY":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"SHORTDAY":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"AMPMS":["π.μ.","μ.μ."],"medium":"d MMM y h:mm:ss a","short":"d/M/yy h:mm a","fullDate":"EEEE, d MMMM y","longDate":"d MMMM y","mediumDate":"d MMM y","shortDate":"d/M/yy","mediumTime":"h:mm:ss a","shortTime":"h:mm a"},"id":"el-polyton"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_el.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u03c0.\u03bc.",
+ "1": "\u03bc.\u03bc."
+ },
+ "DAY": {
+ "0": "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae",
+ "1": "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1",
+ "2": "\u03a4\u03c1\u03af\u03c4\u03b7",
+ "3": "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7",
+ "4": "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7",
+ "5": "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
+ "6": "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"
+ },
+ "MONTH": {
+ "0": "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+ "1": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
+ "2": "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5",
+ "3": "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5",
+ "4": "\u039c\u03b1\u0390\u03bf\u03c5",
+ "5": "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5",
+ "6": "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5",
+ "7": "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5",
+ "8": "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+ "9": "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
+ "10": "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
+ "11": "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"
+ },
+ "SHORTDAY": {
+ "0": "\u039a\u03c5\u03c1",
+ "1": "\u0394\u03b5\u03c5",
+ "2": "\u03a4\u03c1\u03b9",
+ "3": "\u03a4\u03b5\u03c4",
+ "4": "\u03a0\u03b5\u03bc",
+ "5": "\u03a0\u03b1\u03c1",
+ "6": "\u03a3\u03b1\u03b2"
+ },
+ "SHORTMONTH": {
+ "0": "\u0399\u03b1\u03bd",
+ "1": "\u03a6\u03b5\u03b2",
+ "2": "\u039c\u03b1\u03c1",
+ "3": "\u0391\u03c0\u03c1",
+ "4": "\u039c\u03b1\u03ca",
+ "5": "\u0399\u03bf\u03c5\u03bd",
+ "6": "\u0399\u03bf\u03c5\u03bb",
+ "7": "\u0391\u03c5\u03b3",
+ "8": "\u03a3\u03b5\u03c0",
+ "9": "\u039f\u03ba\u03c4",
+ "10": "\u039d\u03bf\u03b5",
+ "11": "\u0394\u03b5\u03ba"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "el",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-as.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-as.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-as.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-as",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-au.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-au.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-au.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd/MM/yyyy h:mm:ss a",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/MM/yy h:mm a",
+ "shortDate": "d/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-au",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bb.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bb.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bb.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-bb",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-be.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-be.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-be.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMM y",
+ "medium": "dd MMM y HH:mm:ss",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-be",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bm.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bm.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bm.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-bm",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yy h:mm a",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-bw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-bz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd-MMM-y HH:mm:ss",
+ "mediumDate": "dd-MMM-y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-bz",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ca.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ca.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ca.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "yyyy-MM-dd h:mm:ss a",
+ "mediumDate": "yyyy-MM-dd",
+ "mediumTime": "h:mm:ss a",
+ "short": "yy-MM-dd h:mm a",
+ "shortDate": "yy-MM-dd",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-ca",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt-us.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt-us.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt-us.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\ud801\udc08\ud801\udc23",
+ "1": "\ud801\udc11\ud801\udc23"
+ },
+ "DAY": {
+ "0": "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29",
+ "1": "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29",
+ "2": "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29",
+ "3": "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29",
+ "4": "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29",
+ "5": "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29",
+ "6": "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29"
+ },
+ "MONTH": {
+ "0": "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28",
+ "1": "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28",
+ "2": "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d",
+ "3": "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a",
+ "4": "\ud801\udc23\ud801\udc29",
+ "5": "\ud801\udc16\ud801\udc2d\ud801\udc4c",
+ "6": "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34",
+ "7": "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b",
+ "8": "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49",
+ "9": "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49",
+ "10": "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49",
+ "11": "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49"
+ },
+ "SHORTDAY": {
+ "0": "\ud801\udc1d\ud801\udc32\ud801\udc4c",
+ "1": "\ud801\udc23\ud801\udc32\ud801\udc4c",
+ "2": "\ud801\udc13\ud801\udc2d\ud801\udc46",
+ "3": "\ud801\udc0e\ud801\udc2f\ud801\udc4c",
+ "4": "\ud801\udc1b\ud801\udc32\ud801\udc49",
+ "5": "\ud801\udc19\ud801\udc49\ud801\udc34",
+ "6": "\ud801\udc1d\ud801\udc30\ud801\udc3b"
+ },
+ "SHORTMONTH": {
+ "0": "\ud801\udc16\ud801\udc30\ud801\udc4c",
+ "1": "\ud801\udc19\ud801\udc2f\ud801\udc3a",
+ "2": "\ud801\udc23\ud801\udc2a\ud801\udc49",
+ "3": "\ud801\udc01\ud801\udc39\ud801\udc49",
+ "4": "\ud801\udc23\ud801\udc29",
+ "5": "\ud801\udc16\ud801\udc2d\ud801\udc4c",
+ "6": "\ud801\udc16\ud801\udc2d\ud801\udc4a",
+ "7": "\ud801\udc02\ud801\udc40",
+ "8": "\ud801\udc1d\ud801\udc2f\ud801\udc39",
+ "9": "\ud801\udc09\ud801\udc3f\ud801\udc3b",
+ "10": "\ud801\udc24\ud801\udc2c\ud801\udc42",
+ "11": "\ud801\udc14\ud801\udc28\ud801\udc45"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-dsrt-us",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-dsrt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\ud801\udc08\ud801\udc23",
+ "1": "\ud801\udc11\ud801\udc23"
+ },
+ "DAY": {
+ "0": "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29",
+ "1": "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29",
+ "2": "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29",
+ "3": "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29",
+ "4": "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29",
+ "5": "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29",
+ "6": "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29"
+ },
+ "MONTH": {
+ "0": "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28",
+ "1": "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28",
+ "2": "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d",
+ "3": "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a",
+ "4": "\ud801\udc23\ud801\udc29",
+ "5": "\ud801\udc16\ud801\udc2d\ud801\udc4c",
+ "6": "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34",
+ "7": "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b",
+ "8": "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49",
+ "9": "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49",
+ "10": "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49",
+ "11": "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49"
+ },
+ "SHORTDAY": {
+ "0": "\ud801\udc1d\ud801\udc32\ud801\udc4c",
+ "1": "\ud801\udc23\ud801\udc32\ud801\udc4c",
+ "2": "\ud801\udc13\ud801\udc2d\ud801\udc46",
+ "3": "\ud801\udc0e\ud801\udc2f\ud801\udc4c",
+ "4": "\ud801\udc1b\ud801\udc32\ud801\udc49",
+ "5": "\ud801\udc19\ud801\udc49\ud801\udc34",
+ "6": "\ud801\udc1d\ud801\udc30\ud801\udc3b"
+ },
+ "SHORTMONTH": {
+ "0": "\ud801\udc16\ud801\udc30\ud801\udc4c",
+ "1": "\ud801\udc19\ud801\udc2f\ud801\udc3a",
+ "2": "\ud801\udc23\ud801\udc2a\ud801\udc49",
+ "3": "\ud801\udc01\ud801\udc39\ud801\udc49",
+ "4": "\ud801\udc23\ud801\udc29",
+ "5": "\ud801\udc16\ud801\udc2d\ud801\udc4c",
+ "6": "\ud801\udc16\ud801\udc2d\ud801\udc4a",
+ "7": "\ud801\udc02\ud801\udc40",
+ "8": "\ud801\udc1d\ud801\udc2f\ud801\udc39",
+ "9": "\ud801\udc09\ud801\udc3f\ud801\udc3b",
+ "10": "\ud801\udc24\ud801\udc2c\ud801\udc42",
+ "11": "\ud801\udc14\ud801\udc28\ud801\udc45"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-dsrt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-fm.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-fm.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-fm.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-fm",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gb.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gb.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gb.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yyyy HH:mm",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a3",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-gb",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-gu",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gy.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gy.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-gy.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-gy",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-hk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-hk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-hk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-hk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ie.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ie.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ie.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-ie",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd-MMM-y h:mm:ss a",
+ "mediumDate": "dd-MMM-y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yy h:mm a",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-iso.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-iso.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-iso.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, y MMMM dd",
+ "longDate": "y MMMM d",
+ "medium": "y MMM d HH:mm:ss",
+ "mediumDate": "y MMM d",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-iso",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-jm.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-jm.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-jm.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-jm",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mh.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mh.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mh.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-mh",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mp.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mp.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mp.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-mp",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd MMM y h:mm:ss a",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-mt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-mu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-mu",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-na.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-na.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-na.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-na",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-nz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-nz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-nz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d/MM/yyyy h:mm:ss a",
+ "mediumDate": "d/MM/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/MM/yy h:mm a",
+ "shortDate": "d/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-nz",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ph.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ph.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-ph.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-ph",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd-MMM-y h:mm:ss a",
+ "mediumDate": "dd-MMM-y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yy h:mm a",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-pk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-pr",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-pw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-pw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-sg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-sg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-sg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-sg",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tc.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tc.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tc.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-tc",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-tt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-tt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-um.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-um.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-um.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-um",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-us.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-us.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-us.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-us",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-vg",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-vi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-vi",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-za.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-za.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-za.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd MMM y h:mm:ss a",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy/MM/dd h:mm a",
+ "shortDate": "yyyy/MM/dd",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-za",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd MMM,y h:mm:ss a",
+ "mediumDate": "dd MMM,y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yyyy h:mm a",
+ "shortDate": "d/M/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en-zw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en-zz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"NUMBER_FORMATS":{"DECIMAL_SEP":".","GROUP_SEP":",","PATTERNS":[{"minInt":1,"minFrac":0,"macFrac":0,"posPre":"","posSuf":"","negPre":"-","negSuf":"","gSize":3,"lgSize":3,"maxFrac":3},{"minInt":1,"minFrac":2,"macFrac":0,"posPre":"\u00A4","posSuf":"","negPre":"(\u00A4","negSuf":")","gSize":3,"lgSize":3,"maxFrac":2}],"CURRENCY_SYM":"$"},"pluralCat":function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;},"DATETIME_FORMATS":{"MONTH":["January","February","March","April","May","June","July","August","September","October","November","December"],"SHORTMONTH":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"DAY":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"SHORTDAY":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"AMPMS":["AM","PM"],"medium":"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a","fullDate":"EEEE, MMMM d, y","longDate":"MMMM d, y","mediumDate":"MMM d, y","shortDate":"M/d/yy","mediumTime":"h:mm:ss a","shortTime":"h:mm a"},"id":"en-zz"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_en.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sunday",
+ "1": "Monday",
+ "2": "Tuesday",
+ "3": "Wednesday",
+ "4": "Thursday",
+ "5": "Friday",
+ "6": "Saturday"
+ },
+ "MONTH": {
+ "0": "January",
+ "1": "February",
+ "2": "March",
+ "3": "April",
+ "4": "May",
+ "5": "June",
+ "6": "July",
+ "7": "August",
+ "8": "September",
+ "9": "October",
+ "10": "November",
+ "11": "December"
+ },
+ "SHORTDAY": {
+ "0": "Sun",
+ "1": "Mon",
+ "2": "Tue",
+ "3": "Wed",
+ "4": "Thu",
+ "5": "Fri",
+ "6": "Sat"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "May",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Oct",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE, MMMM d, y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "en",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-419.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-419.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-419.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "es-419",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ar.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ar.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ar.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-ar",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-bo.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-bo.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-bo.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-bo",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd-MM-yyyy H:mm:ss",
+ "mediumDate": "dd-MM-yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd-MM-yy H:mm",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-cl",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-co.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-co.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-co.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "d/MM/yyyy H:mm:ss",
+ "mediumDate": "d/MM/yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "d/MM/yy H:mm",
+ "shortDate": "d/MM/yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-co",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-cr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-cr",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-do.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-do.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-do.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-do",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ea.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ea.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ea.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-ea",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ec.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ec.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ec.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy H:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd/MM/yy H:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-ec",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-es.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-es.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-es.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-es",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gq.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gq.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gq.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-gq",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-gt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "d/MM/yyyy HH:mm:ss",
+ "mediumDate": "d/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/MM/yy HH:mm",
+ "shortDate": "d/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-gt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-hn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-hn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-hn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE dd 'de' MMMM 'de' y",
+ "longDate": "dd 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-hn",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ic.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ic.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ic.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-ic",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-mx.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-mx.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-mx.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-mx",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ni.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ni.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ni.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-ni",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pa.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pa.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pa.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "MM/dd/yyyy HH:mm:ss",
+ "mediumDate": "MM/dd/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "MM/dd/yy HH:mm",
+ "shortDate": "MM/dd/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-pa",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pe.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pe.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pe.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/MM/yy HH:mm",
+ "shortDate": "d/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-pe",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-pr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "MM/dd/yyyy HH:mm:ss",
+ "mediumDate": "MM/dd/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "MM/dd/yy HH:mm",
+ "shortDate": "MM/dd/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-pr",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-py.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-py.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-py.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-py",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-sv.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-sv.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-sv.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-sv",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-us.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-us.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-us.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "MMM d, y h:mm:ss a",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ "shortDate": "M/d/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-us",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-uy.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-uy.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-uy.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-uy",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ve.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ve.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es-ve.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es-ve",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_es.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "lunes",
+ "2": "martes",
+ "3": "mi\u00e9rcoles",
+ "4": "jueves",
+ "5": "viernes",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "enero",
+ "1": "febrero",
+ "2": "marzo",
+ "3": "abril",
+ "4": "mayo",
+ "5": "junio",
+ "6": "julio",
+ "7": "agosto",
+ "8": "septiembre",
+ "9": "octubre",
+ "10": "noviembre",
+ "11": "diciembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mi\u00e9",
+ "4": "jue",
+ "5": "vie",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "ene",
+ "1": "feb",
+ "2": "mar",
+ "3": "abr",
+ "4": "may",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "sep",
+ "9": "oct",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "es",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et-ee.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et-ee.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et-ee.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "enne keskp\u00e4eva",
+ "1": "p\u00e4rast keskp\u00e4eva"
+ },
+ "DAY": {
+ "0": "p\u00fchap\u00e4ev",
+ "1": "esmasp\u00e4ev",
+ "2": "teisip\u00e4ev",
+ "3": "kolmap\u00e4ev",
+ "4": "neljap\u00e4ev",
+ "5": "reede",
+ "6": "laup\u00e4ev"
+ },
+ "MONTH": {
+ "0": "jaanuar",
+ "1": "veebruar",
+ "2": "m\u00e4rts",
+ "3": "aprill",
+ "4": "mai",
+ "5": "juuni",
+ "6": "juuli",
+ "7": "august",
+ "8": "september",
+ "9": "oktoober",
+ "10": "november",
+ "11": "detsember"
+ },
+ "SHORTDAY": {
+ "0": "P",
+ "1": "E",
+ "2": "T",
+ "3": "K",
+ "4": "N",
+ "5": "R",
+ "6": "L"
+ },
+ "SHORTMONTH": {
+ "0": "jaan",
+ "1": "veebr",
+ "2": "m\u00e4rts",
+ "3": "apr",
+ "4": "mai",
+ "5": "juuni",
+ "6": "juuli",
+ "7": "aug",
+ "8": "sept",
+ "9": "okt",
+ "10": "nov",
+ "11": "dets"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy H:mm.ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "H:mm.ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "et-ee",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_et.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "enne keskp\u00e4eva",
+ "1": "p\u00e4rast keskp\u00e4eva"
+ },
+ "DAY": {
+ "0": "p\u00fchap\u00e4ev",
+ "1": "esmasp\u00e4ev",
+ "2": "teisip\u00e4ev",
+ "3": "kolmap\u00e4ev",
+ "4": "neljap\u00e4ev",
+ "5": "reede",
+ "6": "laup\u00e4ev"
+ },
+ "MONTH": {
+ "0": "jaanuar",
+ "1": "veebruar",
+ "2": "m\u00e4rts",
+ "3": "aprill",
+ "4": "mai",
+ "5": "juuni",
+ "6": "juuli",
+ "7": "august",
+ "8": "september",
+ "9": "oktoober",
+ "10": "november",
+ "11": "detsember"
+ },
+ "SHORTDAY": {
+ "0": "P",
+ "1": "E",
+ "2": "T",
+ "3": "K",
+ "4": "N",
+ "5": "R",
+ "6": "L"
+ },
+ "SHORTMONTH": {
+ "0": "jaan",
+ "1": "veebr",
+ "2": "m\u00e4rts",
+ "3": "apr",
+ "4": "mai",
+ "5": "juuni",
+ "6": "juuli",
+ "7": "aug",
+ "8": "sept",
+ "9": "okt",
+ "10": "nov",
+ "11": "dets"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy H:mm.ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "H:mm.ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 0,
+ "lgSize": 0,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "et",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu-es.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu-es.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu-es.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "igandea",
+ "1": "astelehena",
+ "2": "asteartea",
+ "3": "asteazkena",
+ "4": "osteguna",
+ "5": "ostirala",
+ "6": "larunbata"
+ },
+ "MONTH": {
+ "0": "urtarrila",
+ "1": "otsaila",
+ "2": "martxoa",
+ "3": "apirila",
+ "4": "maiatza",
+ "5": "ekaina",
+ "6": "uztaila",
+ "7": "abuztua",
+ "8": "iraila",
+ "9": "urria",
+ "10": "azaroa",
+ "11": "abendua"
+ },
+ "SHORTDAY": {
+ "0": "ig",
+ "1": "al",
+ "2": "as",
+ "3": "az",
+ "4": "og",
+ "5": "or",
+ "6": "lr"
+ },
+ "SHORTMONTH": {
+ "0": "urt",
+ "1": "ots",
+ "2": "mar",
+ "3": "api",
+ "4": "mai",
+ "5": "eka",
+ "6": "uzt",
+ "7": "abu",
+ "8": "ira",
+ "9": "urr",
+ "10": "aza",
+ "11": "abe"
+ },
+ "fullDate": "EEEE, y'eko' MMMM'ren' dd'a'",
+ "longDate": "y'eko' MMM'ren' dd'a'",
+ "medium": "y MMM d HH:mm:ss",
+ "mediumDate": "y MMM d",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "eu-es",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_eu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "igandea",
+ "1": "astelehena",
+ "2": "asteartea",
+ "3": "asteazkena",
+ "4": "osteguna",
+ "5": "ostirala",
+ "6": "larunbata"
+ },
+ "MONTH": {
+ "0": "urtarrila",
+ "1": "otsaila",
+ "2": "martxoa",
+ "3": "apirila",
+ "4": "maiatza",
+ "5": "ekaina",
+ "6": "uztaila",
+ "7": "abuztua",
+ "8": "iraila",
+ "9": "urria",
+ "10": "azaroa",
+ "11": "abendua"
+ },
+ "SHORTDAY": {
+ "0": "ig",
+ "1": "al",
+ "2": "as",
+ "3": "az",
+ "4": "og",
+ "5": "or",
+ "6": "lr"
+ },
+ "SHORTMONTH": {
+ "0": "urt",
+ "1": "ots",
+ "2": "mar",
+ "3": "api",
+ "4": "mai",
+ "5": "eka",
+ "6": "uzt",
+ "7": "abu",
+ "8": "ira",
+ "9": "urr",
+ "10": "aza",
+ "11": "abe"
+ },
+ "fullDate": "EEEE, y'eko' MMMM'ren' dd'a'",
+ "longDate": "y'eko' MMM'ren' dd'a'",
+ "medium": "y MMM d HH:mm:ss",
+ "mediumDate": "y MMM d",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "eu",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-af.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-af.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-af.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631",
+ "1": "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"
+ },
+ "DAY": {
+ "0": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+ "1": "\u062f\u0648\u0634\u0646\u0628\u0647",
+ "2": "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+ "3": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+ "4": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+ "5": "\u062c\u0645\u0639\u0647",
+ "6": "\u0634\u0646\u0628\u0647"
+ },
+ "MONTH": {
+ "0": "\u062c\u0646\u0648\u0631\u06cc",
+ "1": "\u0641\u0628\u0631\u0648\u0631\u06cc",
+ "2": "\u0645\u0627\u0631\u0686",
+ "3": "\u0627\u067e\u0631\u06cc\u0644",
+ "4": "\u0645\u06cc",
+ "5": "\u062c\u0648\u0646",
+ "6": "\u062c\u0648\u0644\u0627\u06cc",
+ "7": "\u0627\u06af\u0633\u062a",
+ "8": "\u0633\u067e\u062a\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+ "1": "\u062f\u0648\u0634\u0646\u0628\u0647",
+ "2": "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+ "3": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+ "4": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+ "5": "\u062c\u0645\u0639\u0647",
+ "6": "\u0634\u0646\u0628\u0647"
+ },
+ "SHORTMONTH": {
+ "0": "\u062c\u0646\u0648",
+ "1": "\u0641\u0648\u0631\u06cc\u0647\u0654",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0622\u0648\u0631\u06cc\u0644",
+ "4": "\u0645\u0640\u06cc",
+ "5": "\u0698\u0648\u0626\u0646",
+ "6": "\u062c\u0648\u0644",
+ "7": "\u0627\u0648\u062a",
+ "8": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0628\u0631",
+ "10": "\u0646\u0648\u0627\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0645"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y H:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy/M/d H:mm",
+ "shortDate": "yyyy/M/d",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rial",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u200e(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u200e\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "fa-af",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-ir.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-ir.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa-ir.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631",
+ "1": "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"
+ },
+ "DAY": {
+ "0": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+ "1": "\u062f\u0648\u0634\u0646\u0628\u0647",
+ "2": "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+ "3": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+ "4": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+ "5": "\u062c\u0645\u0639\u0647",
+ "6": "\u0634\u0646\u0628\u0647"
+ },
+ "MONTH": {
+ "0": "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+ "1": "\u0641\u0648\u0631\u06cc\u0647\u0654",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0622\u0648\u0631\u06cc\u0644",
+ "4": "\u0645\u0647\u0654",
+ "5": "\u0698\u0648\u0626\u0646",
+ "6": "\u0698\u0648\u0626\u06cc\u0647\u0654",
+ "7": "\u0627\u0648\u062a",
+ "8": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0628\u0631",
+ "10": "\u0646\u0648\u0627\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0627\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+ "1": "\u062f\u0648\u0634\u0646\u0628\u0647",
+ "2": "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+ "3": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+ "4": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+ "5": "\u062c\u0645\u0639\u0647",
+ "6": "\u0634\u0646\u0628\u0647"
+ },
+ "SHORTMONTH": {
+ "0": "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+ "1": "\u0641\u0648\u0631\u06cc\u0647\u0654",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0622\u0648\u0631\u06cc\u0644",
+ "4": "\u0645\u0647\u0654",
+ "5": "\u0698\u0648\u0626\u0646",
+ "6": "\u0698\u0648\u0626\u06cc\u0647\u0654",
+ "7": "\u0627\u0648\u062a",
+ "8": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0628\u0631",
+ "10": "\u0646\u0648\u0627\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0627\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y H:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy/M/d H:mm",
+ "shortDate": "yyyy/M/d",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rial",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u200e(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u200e\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "fa-ir",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fa.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631",
+ "1": "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"
+ },
+ "DAY": {
+ "0": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+ "1": "\u062f\u0648\u0634\u0646\u0628\u0647",
+ "2": "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+ "3": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+ "4": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+ "5": "\u062c\u0645\u0639\u0647",
+ "6": "\u0634\u0646\u0628\u0647"
+ },
+ "MONTH": {
+ "0": "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+ "1": "\u0641\u0648\u0631\u06cc\u0647\u0654",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0622\u0648\u0631\u06cc\u0644",
+ "4": "\u0645\u0647\u0654",
+ "5": "\u0698\u0648\u0626\u0646",
+ "6": "\u0698\u0648\u0626\u06cc\u0647\u0654",
+ "7": "\u0627\u0648\u062a",
+ "8": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0628\u0631",
+ "10": "\u0646\u0648\u0627\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0627\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u06cc\u06a9\u0634\u0646\u0628\u0647",
+ "1": "\u062f\u0648\u0634\u0646\u0628\u0647",
+ "2": "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
+ "3": "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647",
+ "4": "\u067e\u0646\u062c\u0634\u0646\u0628\u0647",
+ "5": "\u062c\u0645\u0639\u0647",
+ "6": "\u0634\u0646\u0628\u0647"
+ },
+ "SHORTMONTH": {
+ "0": "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
+ "1": "\u0641\u0648\u0631\u06cc\u0647\u0654",
+ "2": "\u0645\u0627\u0631\u0633",
+ "3": "\u0622\u0648\u0631\u06cc\u0644",
+ "4": "\u0645\u0647\u0654",
+ "5": "\u0698\u0648\u0626\u0646",
+ "6": "\u0698\u0648\u0626\u06cc\u0647\u0654",
+ "7": "\u0627\u0648\u062a",
+ "8": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0628\u0631",
+ "10": "\u0646\u0648\u0627\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0627\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y H:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy/M/d H:mm",
+ "shortDate": "yyyy/M/d",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rial",
+ "DECIMAL_SEP": "\u066b",
+ "GROUP_SEP": "\u066c",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u200e(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u200e\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "fa",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi-fi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi-fi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi-fi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "ap.",
+ "1": "ip."
+ },
+ "DAY": {
+ "0": "sunnuntaina",
+ "1": "maanantaina",
+ "2": "tiistaina",
+ "3": "keskiviikkona",
+ "4": "torstaina",
+ "5": "perjantaina",
+ "6": "lauantaina"
+ },
+ "MONTH": {
+ "0": "tammikuuta",
+ "1": "helmikuuta",
+ "2": "maaliskuuta",
+ "3": "huhtikuuta",
+ "4": "toukokuuta",
+ "5": "kes\u00e4kuuta",
+ "6": "hein\u00e4kuuta",
+ "7": "elokuuta",
+ "8": "syyskuuta",
+ "9": "lokakuuta",
+ "10": "marraskuuta",
+ "11": "joulukuuta"
+ },
+ "SHORTDAY": {
+ "0": "su",
+ "1": "ma",
+ "2": "ti",
+ "3": "ke",
+ "4": "to",
+ "5": "pe",
+ "6": "la"
+ },
+ "SHORTMONTH": {
+ "0": "tammikuuta",
+ "1": "helmikuuta",
+ "2": "maaliskuuta",
+ "3": "huhtikuuta",
+ "4": "toukokuuta",
+ "5": "kes\u00e4kuuta",
+ "6": "hein\u00e4kuuta",
+ "7": "elokuuta",
+ "8": "syyskuuta",
+ "9": "lokakuuta",
+ "10": "marraskuuta",
+ "11": "joulukuuta"
+ },
+ "fullDate": "cccc, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d.M.yyyy H.mm.ss",
+ "mediumDate": "d.M.yyyy",
+ "mediumTime": "H.mm.ss",
+ "short": "d.M.yyyy H.mm",
+ "shortDate": "d.M.yyyy",
+ "shortTime": "H.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fi-fi",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "ap.",
+ "1": "ip."
+ },
+ "DAY": {
+ "0": "sunnuntaina",
+ "1": "maanantaina",
+ "2": "tiistaina",
+ "3": "keskiviikkona",
+ "4": "torstaina",
+ "5": "perjantaina",
+ "6": "lauantaina"
+ },
+ "MONTH": {
+ "0": "tammikuuta",
+ "1": "helmikuuta",
+ "2": "maaliskuuta",
+ "3": "huhtikuuta",
+ "4": "toukokuuta",
+ "5": "kes\u00e4kuuta",
+ "6": "hein\u00e4kuuta",
+ "7": "elokuuta",
+ "8": "syyskuuta",
+ "9": "lokakuuta",
+ "10": "marraskuuta",
+ "11": "joulukuuta"
+ },
+ "SHORTDAY": {
+ "0": "su",
+ "1": "ma",
+ "2": "ti",
+ "3": "ke",
+ "4": "to",
+ "5": "pe",
+ "6": "la"
+ },
+ "SHORTMONTH": {
+ "0": "tammikuuta",
+ "1": "helmikuuta",
+ "2": "maaliskuuta",
+ "3": "huhtikuuta",
+ "4": "toukokuuta",
+ "5": "kes\u00e4kuuta",
+ "6": "hein\u00e4kuuta",
+ "7": "elokuuta",
+ "8": "syyskuuta",
+ "9": "lokakuuta",
+ "10": "marraskuuta",
+ "11": "joulukuuta"
+ },
+ "fullDate": "cccc, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d.M.yyyy H.mm.ss",
+ "mediumDate": "d.M.yyyy",
+ "mediumTime": "H.mm.ss",
+ "short": "d.M.yyyy H.mm",
+ "shortDate": "d.M.yyyy",
+ "shortTime": "H.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fi",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil-ph.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil-ph.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil-ph.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Linggo",
+ "1": "Lunes",
+ "2": "Martes",
+ "3": "Miyerkules",
+ "4": "Huwebes",
+ "5": "Biyernes",
+ "6": "Sabado"
+ },
+ "MONTH": {
+ "0": "Enero",
+ "1": "Pebrero",
+ "2": "Marso",
+ "3": "Abril",
+ "4": "Mayo",
+ "5": "Hunyo",
+ "6": "Hulyo",
+ "7": "Agosto",
+ "8": "Setyembre",
+ "9": "Oktubre",
+ "10": "Nobyembre",
+ "11": "Disyembre"
+ },
+ "SHORTDAY": {
+ "0": "Lin",
+ "1": "Lun",
+ "2": "Mar",
+ "3": "Mye",
+ "4": "Huw",
+ "5": "Bye",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Ene",
+ "1": "Peb",
+ "2": "Mar",
+ "3": "Abr",
+ "4": "May",
+ "5": "Hun",
+ "6": "Hul",
+ "7": "Ago",
+ "8": "Set",
+ "9": "Okt",
+ "10": "Nob",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE, MMMM dd y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y HH:mm:ss",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "HH:mm:ss",
+ "short": "M/d/yy HH:mm",
+ "shortDate": "M/d/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b1",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "fil-ph",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fil.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Linggo",
+ "1": "Lunes",
+ "2": "Martes",
+ "3": "Miyerkules",
+ "4": "Huwebes",
+ "5": "Biyernes",
+ "6": "Sabado"
+ },
+ "MONTH": {
+ "0": "Enero",
+ "1": "Pebrero",
+ "2": "Marso",
+ "3": "Abril",
+ "4": "Mayo",
+ "5": "Hunyo",
+ "6": "Hulyo",
+ "7": "Agosto",
+ "8": "Setyembre",
+ "9": "Oktubre",
+ "10": "Nobyembre",
+ "11": "Disyembre"
+ },
+ "SHORTDAY": {
+ "0": "Lin",
+ "1": "Lun",
+ "2": "Mar",
+ "3": "Mye",
+ "4": "Huw",
+ "5": "Bye",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Ene",
+ "1": "Peb",
+ "2": "Mar",
+ "3": "Abr",
+ "4": "May",
+ "5": "Hun",
+ "6": "Hul",
+ "7": "Ago",
+ "8": "Set",
+ "9": "Okt",
+ "10": "Nob",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE, MMMM dd y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y HH:mm:ss",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "HH:mm:ss",
+ "short": "M/d/yy HH:mm",
+ "shortDate": "M/d/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b1",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "fil",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-be.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-be.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-be.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/MM/yy HH:mm",
+ "shortDate": "d/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-be",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bf.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bf.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bf.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-bf",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-bi",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bj.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bj.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bj.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-bj",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-bl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-bl",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ca.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ca.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ca.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "yyyy-MM-dd HH:mm:ss",
+ "mediumDate": "yyyy-MM-dd",
+ "mediumTime": "HH:mm:ss",
+ "short": "yy-MM-dd HH:mm",
+ "shortDate": "yy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-ca",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cd.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cd.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cd.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-cd",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cf.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cf.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cf.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-cf",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-cg",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ch.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ch.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ch.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-ch",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ci.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ci.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ci.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-ci",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cm.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cm.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-cm.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-cm",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-dj.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-dj.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-dj.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-dj",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-fr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-fr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-fr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-fr",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ga.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ga.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ga.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-ga",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gf.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gf.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gf.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-gf",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-gn",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gp.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gp.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gp.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-gp",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gq.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gq.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-gq.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-gq",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-km.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-km.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-km.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-km",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-lu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-lu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-lu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-lu",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mc.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mc.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mc.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-mc",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mf.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mf.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mf.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-mf",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-mg",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ml.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ml.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ml.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-ml",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mq.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mq.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-mq.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-mq",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ne.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ne.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-ne.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-ne",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-re.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-re.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-re.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-re",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-rw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-rw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-rw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-rw",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-sn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-sn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-sn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-sn",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-td.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-td.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-td.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-td",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-tg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-tg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-tg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "février",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "août",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "décembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "févr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "août",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "déc."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "€",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": " ",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": " \u00A4)",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "fr-tg",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-yt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-yt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr-yt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr-yt",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_fr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "dimanche",
+ "1": "lundi",
+ "2": "mardi",
+ "3": "mercredi",
+ "4": "jeudi",
+ "5": "vendredi",
+ "6": "samedi"
+ },
+ "MONTH": {
+ "0": "janvier",
+ "1": "f\u00e9vrier",
+ "2": "mars",
+ "3": "avril",
+ "4": "mai",
+ "5": "juin",
+ "6": "juillet",
+ "7": "ao\u00fbt",
+ "8": "septembre",
+ "9": "octobre",
+ "10": "novembre",
+ "11": "d\u00e9cembre"
+ },
+ "SHORTDAY": {
+ "0": "dim.",
+ "1": "lun.",
+ "2": "mar.",
+ "3": "mer.",
+ "4": "jeu.",
+ "5": "ven.",
+ "6": "sam."
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "f\u00e9vr.",
+ "2": "mars",
+ "3": "avr.",
+ "4": "mai",
+ "5": "juin",
+ "6": "juil.",
+ "7": "ao\u00fbt",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "d\u00e9c."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "fr",
+ "pluralCat": function (n) { if (n >= 0 && n <= 2 && n != 2) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl-es.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl-es.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl-es.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "Domingo",
+ "1": "Luns",
+ "2": "Martes",
+ "3": "M\u00e9rcores",
+ "4": "Xoves",
+ "5": "Venres",
+ "6": "S\u00e1bado"
+ },
+ "MONTH": {
+ "0": "Xaneiro",
+ "1": "Febreiro",
+ "2": "Marzo",
+ "3": "Abril",
+ "4": "Maio",
+ "5": "Xu\u00f1o",
+ "6": "Xullo",
+ "7": "Agosto",
+ "8": "Setembro",
+ "9": "Outubro",
+ "10": "Novembro",
+ "11": "Decembro"
+ },
+ "SHORTDAY": {
+ "0": "Dom",
+ "1": "Lun",
+ "2": "Mar",
+ "3": "M\u00e9r",
+ "4": "Xov",
+ "5": "Ven",
+ "6": "S\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "Xan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Abr",
+ "4": "Mai",
+ "5": "Xu\u00f1",
+ "6": "Xul",
+ "7": "Ago",
+ "8": "Set",
+ "9": "Out",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "d MMM, y HH:mm:ss",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "gl-es",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "Domingo",
+ "1": "Luns",
+ "2": "Martes",
+ "3": "M\u00e9rcores",
+ "4": "Xoves",
+ "5": "Venres",
+ "6": "S\u00e1bado"
+ },
+ "MONTH": {
+ "0": "Xaneiro",
+ "1": "Febreiro",
+ "2": "Marzo",
+ "3": "Abril",
+ "4": "Maio",
+ "5": "Xu\u00f1o",
+ "6": "Xullo",
+ "7": "Agosto",
+ "8": "Setembro",
+ "9": "Outubro",
+ "10": "Novembro",
+ "11": "Decembro"
+ },
+ "SHORTDAY": {
+ "0": "Dom",
+ "1": "Lun",
+ "2": "Mar",
+ "3": "M\u00e9r",
+ "4": "Xov",
+ "5": "Ven",
+ "6": "S\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "Xan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Abr",
+ "4": "Mai",
+ "5": "Xu\u00f1",
+ "6": "Xul",
+ "7": "Ago",
+ "8": "Set",
+ "9": "Out",
+ "10": "Nov",
+ "11": "Dec"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "d MMM, y HH:mm:ss",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "gl",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw-ch.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw-ch.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw-ch.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nam."
+ },
+ "DAY": {
+ "0": "Sunntig",
+ "1": "M\u00e4\u00e4ntig",
+ "2": "Ziischtig",
+ "3": "Mittwuch",
+ "4": "Dunschtig",
+ "5": "Friitig",
+ "6": "Samschtig"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "Auguscht",
+ "8": "Sept\u00e4mber",
+ "9": "Oktoober",
+ "10": "Nov\u00e4mber",
+ "11": "Dez\u00e4mber"
+ },
+ "SHORTDAY": {
+ "0": "Su.",
+ "1": "M\u00e4.",
+ "2": "Zi.",
+ "3": "Mi.",
+ "4": "Du.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "CHF",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": "\u2019",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "gsw-ch",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gsw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "vorm.",
+ "1": "nam."
+ },
+ "DAY": {
+ "0": "Sunntig",
+ "1": "M\u00e4\u00e4ntig",
+ "2": "Ziischtig",
+ "3": "Mittwuch",
+ "4": "Dunschtig",
+ "5": "Friitig",
+ "6": "Samschtig"
+ },
+ "MONTH": {
+ "0": "Januar",
+ "1": "Februar",
+ "2": "M\u00e4rz",
+ "3": "April",
+ "4": "Mai",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "Auguscht",
+ "8": "Sept\u00e4mber",
+ "9": "Oktoober",
+ "10": "Nov\u00e4mber",
+ "11": "Dez\u00e4mber"
+ },
+ "SHORTDAY": {
+ "0": "Su.",
+ "1": "M\u00e4.",
+ "2": "Zi.",
+ "3": "Mi.",
+ "4": "Du.",
+ "5": "Fr.",
+ "6": "Sa."
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "M\u00e4r",
+ "3": "Apr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aug",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "CHF",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": "\u2019",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "gsw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0",
+ "1": "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0",
+ "2": "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0",
+ "3": "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0",
+ "4": "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0",
+ "5": "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0",
+ "6": "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"
+ },
+ "MONTH": {
+ "0": "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
+ "1": "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0",
+ "2": "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+ "3": "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+ "4": "\u0aae\u0ac7",
+ "5": "\u0a9c\u0ac2\u0aa8",
+ "6": "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+ "7": "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+ "8": "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+ "9": "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0",
+ "10": "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+ "11": "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"
+ },
+ "SHORTDAY": {
+ "0": "\u0ab0\u0ab5\u0abf",
+ "1": "\u0ab8\u0acb\u0aae",
+ "2": "\u0aae\u0a82\u0a97\u0ab3",
+ "3": "\u0aac\u0ac1\u0aa7",
+ "4": "\u0a97\u0ac1\u0ab0\u0ac1",
+ "5": "\u0ab6\u0ac1\u0a95\u0acd\u0ab0",
+ "6": "\u0ab6\u0aa8\u0abf"
+ },
+ "SHORTMONTH": {
+ "0": "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1",
+ "1": "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1",
+ "2": "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+ "3": "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+ "4": "\u0aae\u0ac7",
+ "5": "\u0a9c\u0ac2\u0aa8",
+ "6": "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+ "7": "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+ "8": "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7",
+ "9": "\u0a91\u0a95\u0acd\u0a9f\u0acb",
+ "10": "\u0aa8\u0ab5\u0ac7",
+ "11": "\u0aa1\u0abf\u0ab8\u0ac7"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y hh:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "hh:mm:ss a",
+ "short": "d-MM-yy hh:mm a",
+ "shortDate": "d-MM-yy",
+ "shortTime": "hh:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "gu-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_gu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0",
+ "1": "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0",
+ "2": "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0",
+ "3": "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0",
+ "4": "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0",
+ "5": "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0",
+ "6": "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"
+ },
+ "MONTH": {
+ "0": "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0",
+ "1": "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0",
+ "2": "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+ "3": "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+ "4": "\u0aae\u0ac7",
+ "5": "\u0a9c\u0ac2\u0aa8",
+ "6": "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+ "7": "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+ "8": "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+ "9": "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0",
+ "10": "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0",
+ "11": "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"
+ },
+ "SHORTDAY": {
+ "0": "\u0ab0\u0ab5\u0abf",
+ "1": "\u0ab8\u0acb\u0aae",
+ "2": "\u0aae\u0a82\u0a97\u0ab3",
+ "3": "\u0aac\u0ac1\u0aa7",
+ "4": "\u0a97\u0ac1\u0ab0\u0ac1",
+ "5": "\u0ab6\u0ac1\u0a95\u0acd\u0ab0",
+ "6": "\u0ab6\u0aa8\u0abf"
+ },
+ "SHORTMONTH": {
+ "0": "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1",
+ "1": "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1",
+ "2": "\u0aae\u0abe\u0ab0\u0acd\u0a9a",
+ "3": "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2",
+ "4": "\u0aae\u0ac7",
+ "5": "\u0a9c\u0ac2\u0aa8",
+ "6": "\u0a9c\u0ac1\u0ab2\u0abe\u0a88",
+ "7": "\u0a91\u0a97\u0ab8\u0acd\u0a9f",
+ "8": "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7",
+ "9": "\u0a91\u0a95\u0acd\u0a9f\u0acb",
+ "10": "\u0aa8\u0ab5\u0ac7",
+ "11": "\u0aa1\u0abf\u0ab8\u0ac7"
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y hh:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "hh:mm:ss a",
+ "short": "d-MM-yy hh:mm a",
+ "shortDate": "d-MM-yy",
+ "shortTime": "hh:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "gu",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_haw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_haw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_haw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"DATETIME_FORMATS":{"MONTH":["Ianuali","Pepeluali","Malaki","ʻApelila","Mei","Iune","Iulai","ʻAukake","Kepakemapa","ʻOkakopa","Nowemapa","Kekemapa"],"SHORTMONTH":["Ian.","Pep.","Mal.","ʻAp.","Mei","Iun.","Iul.","ʻAu.","Kep.","ʻOk.","Now.","Kek."],"DAY":["Lāpule","Poʻakahi","Poʻalua","Poʻakolu","Poʻahā","Poʻalima","Poʻaono"],"SHORTDAY":["LP","P1","P2","P3","P4","P5","P6"],"AMPMS":["AM","PM"],"medium":"d MMM y h:mm:ss a","short":"d/M/yy h:mm a","fullDate":"EEEE, d MMMM y","longDate":"d MMMM y","mediumDate":"d MMM y","shortDate":"d/M/yy","mediumTime":"h:mm:ss a","shortTime":"h:mm a"},"pluralCat":function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;},"id":"haw"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he-il.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he-il.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he-il.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6",
+ "1": "\u05d0\u05d7\u05d4\u05f4\u05e6"
+ },
+ "DAY": {
+ "0": "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df",
+ "1": "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9",
+ "2": "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9",
+ "3": "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
+ "4": "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9",
+ "5": "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9",
+ "6": "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"
+ },
+ "MONTH": {
+ "0": "\u05d9\u05e0\u05d5\u05d0\u05e8",
+ "1": "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+ "2": "\u05de\u05e8\u05e5",
+ "3": "\u05d0\u05e4\u05e8\u05d9\u05dc",
+ "4": "\u05de\u05d0\u05d9",
+ "5": "\u05d9\u05d5\u05e0\u05d9",
+ "6": "\u05d9\u05d5\u05dc\u05d9",
+ "7": "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+ "8": "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+ "9": "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+ "10": "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+ "11": "\u05d3\u05e6\u05de\u05d1\u05e8"
+ },
+ "SHORTDAY": {
+ "0": "\u05d9\u05d5\u05dd \u05d0\u05f3",
+ "1": "\u05d9\u05d5\u05dd \u05d1\u05f3",
+ "2": "\u05d9\u05d5\u05dd \u05d2\u05f3",
+ "3": "\u05d9\u05d5\u05dd \u05d3\u05f3",
+ "4": "\u05d9\u05d5\u05dd \u05d4\u05f3",
+ "5": "\u05d9\u05d5\u05dd \u05d5\u05f3",
+ "6": "\u05e9\u05d1\u05ea"
+ },
+ "SHORTMONTH": {
+ "0": "\u05d9\u05e0\u05d5",
+ "1": "\u05e4\u05d1\u05e8",
+ "2": "\u05de\u05e8\u05e5",
+ "3": "\u05d0\u05e4\u05e8",
+ "4": "\u05de\u05d0\u05d9",
+ "5": "\u05d9\u05d5\u05e0",
+ "6": "\u05d9\u05d5\u05dc",
+ "7": "\u05d0\u05d5\u05d2",
+ "8": "\u05e1\u05e4\u05d8",
+ "9": "\u05d0\u05d5\u05e7",
+ "10": "\u05e0\u05d5\u05d1",
+ "11": "\u05d3\u05e6\u05de"
+ },
+ "fullDate": "EEEE, d \u05d1MMMM y",
+ "longDate": "d \u05d1MMMM y",
+ "medium": "d \u05d1MMM yyyy HH:mm:ss",
+ "mediumDate": "d \u05d1MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20aa",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "he-il",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_he.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6",
+ "1": "\u05d0\u05d7\u05d4\u05f4\u05e6"
+ },
+ "DAY": {
+ "0": "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df",
+ "1": "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9",
+ "2": "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9",
+ "3": "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
+ "4": "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9",
+ "5": "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9",
+ "6": "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"
+ },
+ "MONTH": {
+ "0": "\u05d9\u05e0\u05d5\u05d0\u05e8",
+ "1": "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+ "2": "\u05de\u05e8\u05e5",
+ "3": "\u05d0\u05e4\u05e8\u05d9\u05dc",
+ "4": "\u05de\u05d0\u05d9",
+ "5": "\u05d9\u05d5\u05e0\u05d9",
+ "6": "\u05d9\u05d5\u05dc\u05d9",
+ "7": "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+ "8": "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+ "9": "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+ "10": "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+ "11": "\u05d3\u05e6\u05de\u05d1\u05e8"
+ },
+ "SHORTDAY": {
+ "0": "\u05d9\u05d5\u05dd \u05d0\u05f3",
+ "1": "\u05d9\u05d5\u05dd \u05d1\u05f3",
+ "2": "\u05d9\u05d5\u05dd \u05d2\u05f3",
+ "3": "\u05d9\u05d5\u05dd \u05d3\u05f3",
+ "4": "\u05d9\u05d5\u05dd \u05d4\u05f3",
+ "5": "\u05d9\u05d5\u05dd \u05d5\u05f3",
+ "6": "\u05e9\u05d1\u05ea"
+ },
+ "SHORTMONTH": {
+ "0": "\u05d9\u05e0\u05d5",
+ "1": "\u05e4\u05d1\u05e8",
+ "2": "\u05de\u05e8\u05e5",
+ "3": "\u05d0\u05e4\u05e8",
+ "4": "\u05de\u05d0\u05d9",
+ "5": "\u05d9\u05d5\u05e0",
+ "6": "\u05d9\u05d5\u05dc",
+ "7": "\u05d0\u05d5\u05d2",
+ "8": "\u05e1\u05e4\u05d8",
+ "9": "\u05d0\u05d5\u05e7",
+ "10": "\u05e0\u05d5\u05d1",
+ "11": "\u05d3\u05e6\u05de"
+ },
+ "fullDate": "EEEE, d \u05d1MMMM y",
+ "longDate": "d \u05d1MMMM y",
+ "medium": "d \u05d1MMM yyyy HH:mm:ss",
+ "mediumDate": "d \u05d1MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20aa",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "he",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0930\u0935\u093f\u0935\u093e\u0930",
+ "1": "\u0938\u094b\u092e\u0935\u093e\u0930",
+ "2": "\u092e\u0902\u0917\u0932\u0935\u093e\u0930",
+ "3": "\u092c\u0941\u0927\u0935\u093e\u0930",
+ "4": "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930",
+ "5": "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+ "6": "\u0936\u0928\u093f\u0935\u093e\u0930"
+ },
+ "MONTH": {
+ "0": "\u091c\u0928\u0935\u0930\u0940",
+ "1": "\u092b\u0930\u0935\u0930\u0940",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u0905\u092a\u094d\u0930\u0948\u0932",
+ "4": "\u092e\u0908",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u093e\u0908",
+ "7": "\u0905\u0917\u0938\u094d\u0924",
+ "8": "\u0938\u093f\u0924\u092e\u094d\u092c\u0930",
+ "9": "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+ "10": "\u0928\u0935\u092e\u094d\u092c\u0930",
+ "11": "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"
+ },
+ "SHORTDAY": {
+ "0": "\u0930\u0935\u093f.",
+ "1": "\u0938\u094b\u092e.",
+ "2": "\u092e\u0902\u0917\u0932.",
+ "3": "\u092c\u0941\u0927.",
+ "4": "\u092c\u0943\u0939.",
+ "5": "\u0936\u0941\u0915\u094d\u0930.",
+ "6": "\u0936\u0928\u093f."
+ },
+ "SHORTMONTH": {
+ "0": "\u091c\u0928\u0935\u0930\u0940",
+ "1": "\u092b\u0930\u0935\u0930\u0940",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u0905\u092a\u094d\u0930\u0948\u0932",
+ "4": "\u092e\u0908",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u093e\u0908",
+ "7": "\u0905\u0917\u0938\u094d\u0924",
+ "8": "\u0938\u093f\u0924\u092e\u094d\u092c\u0930",
+ "9": "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+ "10": "\u0928\u0935\u092e\u094d\u092c\u0930",
+ "11": "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd-MM-yyyy h:mm:ss a",
+ "mediumDate": "dd-MM-yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "hi-in",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0930\u0935\u093f\u0935\u093e\u0930",
+ "1": "\u0938\u094b\u092e\u0935\u093e\u0930",
+ "2": "\u092e\u0902\u0917\u0932\u0935\u093e\u0930",
+ "3": "\u092c\u0941\u0927\u0935\u093e\u0930",
+ "4": "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930",
+ "5": "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+ "6": "\u0936\u0928\u093f\u0935\u093e\u0930"
+ },
+ "MONTH": {
+ "0": "\u091c\u0928\u0935\u0930\u0940",
+ "1": "\u092b\u0930\u0935\u0930\u0940",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u0905\u092a\u094d\u0930\u0948\u0932",
+ "4": "\u092e\u0908",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u093e\u0908",
+ "7": "\u0905\u0917\u0938\u094d\u0924",
+ "8": "\u0938\u093f\u0924\u092e\u094d\u092c\u0930",
+ "9": "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+ "10": "\u0928\u0935\u092e\u094d\u092c\u0930",
+ "11": "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"
+ },
+ "SHORTDAY": {
+ "0": "\u0930\u0935\u093f.",
+ "1": "\u0938\u094b\u092e.",
+ "2": "\u092e\u0902\u0917\u0932.",
+ "3": "\u092c\u0941\u0927.",
+ "4": "\u092c\u0943\u0939.",
+ "5": "\u0936\u0941\u0915\u094d\u0930.",
+ "6": "\u0936\u0928\u093f."
+ },
+ "SHORTMONTH": {
+ "0": "\u091c\u0928\u0935\u0930\u0940",
+ "1": "\u092b\u0930\u0935\u0930\u0940",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u0905\u092a\u094d\u0930\u0948\u0932",
+ "4": "\u092e\u0908",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u093e\u0908",
+ "7": "\u0905\u0917\u0938\u094d\u0924",
+ "8": "\u0938\u093f\u0924\u092e\u094d\u092c\u0930",
+ "9": "\u0905\u0915\u094d\u0924\u0942\u092c\u0930",
+ "10": "\u0928\u0935\u092e\u094d\u092c\u0930",
+ "11": "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd-MM-yyyy h:mm:ss a",
+ "mediumDate": "dd-MM-yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "hi",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr-hr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr-hr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr-hr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "nedjelja",
+ "1": "ponedjeljak",
+ "2": "utorak",
+ "3": "srijeda",
+ "4": "\u010detvrtak",
+ "5": "petak",
+ "6": "subota"
+ },
+ "MONTH": {
+ "0": "sije\u010dnja",
+ "1": "velja\u010de",
+ "2": "o\u017eujka",
+ "3": "travnja",
+ "4": "svibnja",
+ "5": "lipnja",
+ "6": "srpnja",
+ "7": "kolovoza",
+ "8": "rujna",
+ "9": "listopada",
+ "10": "studenoga",
+ "11": "prosinca"
+ },
+ "SHORTDAY": {
+ "0": "ned",
+ "1": "pon",
+ "2": "uto",
+ "3": "sri",
+ "4": "\u010det",
+ "5": "pet",
+ "6": "sub"
+ },
+ "SHORTMONTH": {
+ "0": "sij",
+ "1": "velj",
+ "2": "o\u017eu",
+ "3": "tra",
+ "4": "svi",
+ "5": "lip",
+ "6": "srp",
+ "7": "kol",
+ "8": "ruj",
+ "9": "lis",
+ "10": "stu",
+ "11": "pro"
+ },
+ "fullDate": "EEEE, d. MMMM y.",
+ "longDate": "d. MMMM y.",
+ "medium": "d. M. y. HH:mm:ss",
+ "mediumDate": "d. M. y.",
+ "mediumTime": "HH:mm:ss",
+ "short": "d.M.y. HH:mm",
+ "shortDate": "d.M.y.",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kn",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "hr-hr",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "nedjelja",
+ "1": "ponedjeljak",
+ "2": "utorak",
+ "3": "srijeda",
+ "4": "\u010detvrtak",
+ "5": "petak",
+ "6": "subota"
+ },
+ "MONTH": {
+ "0": "sije\u010dnja",
+ "1": "velja\u010de",
+ "2": "o\u017eujka",
+ "3": "travnja",
+ "4": "svibnja",
+ "5": "lipnja",
+ "6": "srpnja",
+ "7": "kolovoza",
+ "8": "rujna",
+ "9": "listopada",
+ "10": "studenoga",
+ "11": "prosinca"
+ },
+ "SHORTDAY": {
+ "0": "ned",
+ "1": "pon",
+ "2": "uto",
+ "3": "sri",
+ "4": "\u010det",
+ "5": "pet",
+ "6": "sub"
+ },
+ "SHORTMONTH": {
+ "0": "sij",
+ "1": "velj",
+ "2": "o\u017eu",
+ "3": "tra",
+ "4": "svi",
+ "5": "lip",
+ "6": "srp",
+ "7": "kol",
+ "8": "ruj",
+ "9": "lis",
+ "10": "stu",
+ "11": "pro"
+ },
+ "fullDate": "EEEE, d. MMMM y.",
+ "longDate": "d. MMMM y.",
+ "medium": "d. M. y. HH:mm:ss",
+ "mediumDate": "d. M. y.",
+ "mediumTime": "HH:mm:ss",
+ "short": "d.M.y. HH:mm",
+ "shortDate": "d.M.y.",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kn",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "hr",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu-hu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu-hu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu-hu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "de.",
+ "1": "du."
+ },
+ "DAY": {
+ "0": "vas\u00e1rnap",
+ "1": "h\u00e9tf\u0151",
+ "2": "kedd",
+ "3": "szerda",
+ "4": "cs\u00fct\u00f6rt\u00f6k",
+ "5": "p\u00e9ntek",
+ "6": "szombat"
+ },
+ "MONTH": {
+ "0": "janu\u00e1r",
+ "1": "febru\u00e1r",
+ "2": "m\u00e1rcius",
+ "3": "\u00e1prilis",
+ "4": "m\u00e1jus",
+ "5": "j\u00fanius",
+ "6": "j\u00falius",
+ "7": "augusztus",
+ "8": "szeptember",
+ "9": "okt\u00f3ber",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "V",
+ "1": "H",
+ "2": "K",
+ "3": "Sze",
+ "4": "Cs",
+ "5": "P",
+ "6": "Szo"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "febr.",
+ "2": "m\u00e1rc.",
+ "3": "\u00e1pr.",
+ "4": "m\u00e1j.",
+ "5": "j\u00fan.",
+ "6": "j\u00fal.",
+ "7": "aug.",
+ "8": "szept.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "y. MMMM d., EEEE",
+ "longDate": "y. MMMM d.",
+ "medium": "yyyy.MM.dd. H:mm:ss",
+ "mediumDate": "yyyy.MM.dd.",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy.MM.dd. H:mm",
+ "shortDate": "yyyy.MM.dd.",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Ft",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "hu-hu",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_hu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "de.",
+ "1": "du."
+ },
+ "DAY": {
+ "0": "vas\u00e1rnap",
+ "1": "h\u00e9tf\u0151",
+ "2": "kedd",
+ "3": "szerda",
+ "4": "cs\u00fct\u00f6rt\u00f6k",
+ "5": "p\u00e9ntek",
+ "6": "szombat"
+ },
+ "MONTH": {
+ "0": "janu\u00e1r",
+ "1": "febru\u00e1r",
+ "2": "m\u00e1rcius",
+ "3": "\u00e1prilis",
+ "4": "m\u00e1jus",
+ "5": "j\u00fanius",
+ "6": "j\u00falius",
+ "7": "augusztus",
+ "8": "szeptember",
+ "9": "okt\u00f3ber",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "V",
+ "1": "H",
+ "2": "K",
+ "3": "Sze",
+ "4": "Cs",
+ "5": "P",
+ "6": "Szo"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "febr.",
+ "2": "m\u00e1rc.",
+ "3": "\u00e1pr.",
+ "4": "m\u00e1j.",
+ "5": "j\u00fan.",
+ "6": "j\u00fal.",
+ "7": "aug.",
+ "8": "szept.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "y. MMMM d., EEEE",
+ "longDate": "y. MMMM d.",
+ "medium": "yyyy.MM.dd. H:mm:ss",
+ "mediumDate": "yyyy.MM.dd.",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy.MM.dd. H:mm",
+ "shortDate": "yyyy.MM.dd.",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Ft",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "hu",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id-id.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id-id.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id-id.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Minggu",
+ "1": "Senin",
+ "2": "Selasa",
+ "3": "Rabu",
+ "4": "Kamis",
+ "5": "Jumat",
+ "6": "Sabtu"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Maret",
+ "3": "April",
+ "4": "Mei",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "Agustus",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Desember"
+ },
+ "SHORTDAY": {
+ "0": "Min",
+ "1": "Sen",
+ "2": "Sel",
+ "3": "Rab",
+ "4": "Kam",
+ "5": "Jum",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Agt",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE, dd MMMM yyyy",
+ "longDate": "d MMMM yyyy",
+ "medium": "d MMM yyyy HH:mm:ss",
+ "mediumDate": "d MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rp",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "id-id",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_id.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Minggu",
+ "1": "Senin",
+ "2": "Selasa",
+ "3": "Rabu",
+ "4": "Kamis",
+ "5": "Jumat",
+ "6": "Sabtu"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Maret",
+ "3": "April",
+ "4": "Mei",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "Agustus",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Desember"
+ },
+ "SHORTDAY": {
+ "0": "Min",
+ "1": "Sen",
+ "2": "Sel",
+ "3": "Rab",
+ "4": "Kam",
+ "5": "Jum",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Agt",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE, dd MMMM yyyy",
+ "longDate": "d MMMM yyyy",
+ "medium": "d MMM yyyy HH:mm:ss",
+ "mediumDate": "d MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rp",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "id",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Minggu",
+ "1": "Senin",
+ "2": "Selasa",
+ "3": "Rabu",
+ "4": "Kamis",
+ "5": "Jumat",
+ "6": "Sabtu"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Maret",
+ "3": "April",
+ "4": "Mei",
+ "5": "Juni",
+ "6": "Juli",
+ "7": "Agustus",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Desember"
+ },
+ "SHORTDAY": {
+ "0": "Min",
+ "1": "Sen",
+ "2": "Sel",
+ "3": "Rab",
+ "4": "Kam",
+ "5": "Jum",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Agt",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE, dd MMMM yyyy",
+ "longDate": "d MMMM yyyy",
+ "medium": "d MMM yyyy HH:mm:ss",
+ "mediumDate": "d MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rp",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "in",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is-is.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is-is.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is-is.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "f.h.",
+ "1": "e.h."
+ },
+ "DAY": {
+ "0": "sunnudagur",
+ "1": "m\u00e1nudagur",
+ "2": "\u00feri\u00f0judagur",
+ "3": "mi\u00f0vikudagur",
+ "4": "fimmtudagur",
+ "5": "f\u00f6studagur",
+ "6": "laugardagur"
+ },
+ "MONTH": {
+ "0": "jan\u00faar",
+ "1": "febr\u00faar",
+ "2": "mars",
+ "3": "apr\u00edl",
+ "4": "ma\u00ed",
+ "5": "j\u00fan\u00ed",
+ "6": "j\u00fal\u00ed",
+ "7": "\u00e1g\u00fast",
+ "8": "september",
+ "9": "okt\u00f3ber",
+ "10": "n\u00f3vember",
+ "11": "desember"
+ },
+ "SHORTDAY": {
+ "0": "sun",
+ "1": "m\u00e1n",
+ "2": "\u00feri",
+ "3": "mi\u00f0",
+ "4": "fim",
+ "5": "f\u00f6s",
+ "6": "lau"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "ma\u00ed",
+ "5": "j\u00fan",
+ "6": "j\u00fal",
+ "7": "\u00e1g\u00fa",
+ "8": "sep",
+ "9": "okt",
+ "10": "n\u00f3v",
+ "11": "des"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d.M.yyyy HH:mm:ss",
+ "mediumDate": "d.M.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "d.M.yyyy HH:mm",
+ "shortDate": "d.M.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "is-is",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_is.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "f.h.",
+ "1": "e.h."
+ },
+ "DAY": {
+ "0": "sunnudagur",
+ "1": "m\u00e1nudagur",
+ "2": "\u00feri\u00f0judagur",
+ "3": "mi\u00f0vikudagur",
+ "4": "fimmtudagur",
+ "5": "f\u00f6studagur",
+ "6": "laugardagur"
+ },
+ "MONTH": {
+ "0": "jan\u00faar",
+ "1": "febr\u00faar",
+ "2": "mars",
+ "3": "apr\u00edl",
+ "4": "ma\u00ed",
+ "5": "j\u00fan\u00ed",
+ "6": "j\u00fal\u00ed",
+ "7": "\u00e1g\u00fast",
+ "8": "september",
+ "9": "okt\u00f3ber",
+ "10": "n\u00f3vember",
+ "11": "desember"
+ },
+ "SHORTDAY": {
+ "0": "sun",
+ "1": "m\u00e1n",
+ "2": "\u00feri",
+ "3": "mi\u00f0",
+ "4": "fim",
+ "5": "f\u00f6s",
+ "6": "lau"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "ma\u00ed",
+ "5": "j\u00fan",
+ "6": "j\u00fal",
+ "7": "\u00e1g\u00fa",
+ "8": "sep",
+ "9": "okt",
+ "10": "n\u00f3v",
+ "11": "des"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d.M.yyyy HH:mm:ss",
+ "mediumDate": "d.M.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "d.M.yyyy HH:mm",
+ "shortDate": "d.M.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "is",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-ch.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-ch.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-ch.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "m.",
+ "1": "p."
+ },
+ "DAY": {
+ "0": "domenica",
+ "1": "lunedì",
+ "2": "martedì",
+ "3": "mercoledì",
+ "4": "giovedì",
+ "5": "venerdì",
+ "6": "sabato"
+ },
+ "MONTH": {
+ "0": "gennaio",
+ "1": "febbraio",
+ "2": "marzo",
+ "3": "aprile",
+ "4": "maggio",
+ "5": "giugno",
+ "6": "luglio",
+ "7": "agosto",
+ "8": "settembre",
+ "9": "ottobre",
+ "10": "novembre",
+ "11": "dicembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mer",
+ "4": "gio",
+ "5": "ven",
+ "6": "sab"
+ },
+ "SHORTMONTH": {
+ "0": "gen",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "mag",
+ "5": "giu",
+ "6": "lug",
+ "7": "ago",
+ "8": "set",
+ "9": "ott",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d-MMM-y HH:mm:ss",
+ "mediumDate": "d-MMM-y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "€",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00A4 -",
+ "negSuf": "",
+ "posPre": "\u00A4 ",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "it-ch",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-it.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-it.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-it.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "m.",
+ "1": "p."
+ },
+ "DAY": {
+ "0": "domenica",
+ "1": "luned\u00ec",
+ "2": "marted\u00ec",
+ "3": "mercoled\u00ec",
+ "4": "gioved\u00ec",
+ "5": "venerd\u00ec",
+ "6": "sabato"
+ },
+ "MONTH": {
+ "0": "gennaio",
+ "1": "febbraio",
+ "2": "marzo",
+ "3": "aprile",
+ "4": "maggio",
+ "5": "giugno",
+ "6": "luglio",
+ "7": "agosto",
+ "8": "settembre",
+ "9": "ottobre",
+ "10": "novembre",
+ "11": "dicembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mer",
+ "4": "gio",
+ "5": "ven",
+ "6": "sab"
+ },
+ "SHORTMONTH": {
+ "0": "gen",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "mag",
+ "5": "giu",
+ "6": "lug",
+ "7": "ago",
+ "8": "set",
+ "9": "ott",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd/MMM/y HH:mm:ss",
+ "mediumDate": "dd/MMM/y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "it-it",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-sm.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-sm.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it-sm.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "m.",
+ "1": "p."
+ },
+ "DAY": {
+ "0": "domenica",
+ "1": "luned\u00ec",
+ "2": "marted\u00ec",
+ "3": "mercoled\u00ec",
+ "4": "gioved\u00ec",
+ "5": "venerd\u00ec",
+ "6": "sabato"
+ },
+ "MONTH": {
+ "0": "gennaio",
+ "1": "febbraio",
+ "2": "marzo",
+ "3": "aprile",
+ "4": "maggio",
+ "5": "giugno",
+ "6": "luglio",
+ "7": "agosto",
+ "8": "settembre",
+ "9": "ottobre",
+ "10": "novembre",
+ "11": "dicembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mer",
+ "4": "gio",
+ "5": "ven",
+ "6": "sab"
+ },
+ "SHORTMONTH": {
+ "0": "gen",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "mag",
+ "5": "giu",
+ "6": "lug",
+ "7": "ago",
+ "8": "set",
+ "9": "ott",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd/MMM/y HH:mm:ss",
+ "mediumDate": "dd/MMM/y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "it-sm",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_it.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "m.",
+ "1": "p."
+ },
+ "DAY": {
+ "0": "domenica",
+ "1": "luned\u00ec",
+ "2": "marted\u00ec",
+ "3": "mercoled\u00ec",
+ "4": "gioved\u00ec",
+ "5": "venerd\u00ec",
+ "6": "sabato"
+ },
+ "MONTH": {
+ "0": "gennaio",
+ "1": "febbraio",
+ "2": "marzo",
+ "3": "aprile",
+ "4": "maggio",
+ "5": "giugno",
+ "6": "luglio",
+ "7": "agosto",
+ "8": "settembre",
+ "9": "ottobre",
+ "10": "novembre",
+ "11": "dicembre"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "lun",
+ "2": "mar",
+ "3": "mer",
+ "4": "gio",
+ "5": "ven",
+ "6": "sab"
+ },
+ "SHORTMONTH": {
+ "0": "gen",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "mag",
+ "5": "giu",
+ "6": "lug",
+ "7": "ago",
+ "8": "set",
+ "9": "ott",
+ "10": "nov",
+ "11": "dic"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "dd/MMM/y HH:mm:ss",
+ "mediumDate": "dd/MMM/y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "it",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_iw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_iw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_iw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6",
+ "1": "\u05d0\u05d7\u05d4\u05f4\u05e6"
+ },
+ "DAY": {
+ "0": "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df",
+ "1": "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9",
+ "2": "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9",
+ "3": "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
+ "4": "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9",
+ "5": "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9",
+ "6": "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"
+ },
+ "MONTH": {
+ "0": "\u05d9\u05e0\u05d5\u05d0\u05e8",
+ "1": "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8",
+ "2": "\u05de\u05e8\u05e5",
+ "3": "\u05d0\u05e4\u05e8\u05d9\u05dc",
+ "4": "\u05de\u05d0\u05d9",
+ "5": "\u05d9\u05d5\u05e0\u05d9",
+ "6": "\u05d9\u05d5\u05dc\u05d9",
+ "7": "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8",
+ "8": "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8",
+ "9": "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
+ "10": "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
+ "11": "\u05d3\u05e6\u05de\u05d1\u05e8"
+ },
+ "SHORTDAY": {
+ "0": "\u05d9\u05d5\u05dd \u05d0\u05f3",
+ "1": "\u05d9\u05d5\u05dd \u05d1\u05f3",
+ "2": "\u05d9\u05d5\u05dd \u05d2\u05f3",
+ "3": "\u05d9\u05d5\u05dd \u05d3\u05f3",
+ "4": "\u05d9\u05d5\u05dd \u05d4\u05f3",
+ "5": "\u05d9\u05d5\u05dd \u05d5\u05f3",
+ "6": "\u05e9\u05d1\u05ea"
+ },
+ "SHORTMONTH": {
+ "0": "\u05d9\u05e0\u05d5",
+ "1": "\u05e4\u05d1\u05e8",
+ "2": "\u05de\u05e8\u05e5",
+ "3": "\u05d0\u05e4\u05e8",
+ "4": "\u05de\u05d0\u05d9",
+ "5": "\u05d9\u05d5\u05e0",
+ "6": "\u05d9\u05d5\u05dc",
+ "7": "\u05d0\u05d5\u05d2",
+ "8": "\u05e1\u05e4\u05d8",
+ "9": "\u05d0\u05d5\u05e7",
+ "10": "\u05e0\u05d5\u05d1",
+ "11": "\u05d3\u05e6\u05de"
+ },
+ "fullDate": "EEEE, d \u05d1MMMM y",
+ "longDate": "d \u05d1MMMM y",
+ "medium": "d \u05d1MMM yyyy HH:mm:ss",
+ "mediumDate": "d \u05d1MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20aa",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "iw",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja-jp.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja-jp.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja-jp.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u5348\u524d",
+ "1": "\u5348\u5f8c"
+ },
+ "DAY": {
+ "0": "\u65e5\u66dc\u65e5",
+ "1": "\u6708\u66dc\u65e5",
+ "2": "\u706b\u66dc\u65e5",
+ "3": "\u6c34\u66dc\u65e5",
+ "4": "\u6728\u66dc\u65e5",
+ "5": "\u91d1\u66dc\u65e5",
+ "6": "\u571f\u66dc\u65e5"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u65e5",
+ "1": "\u6708",
+ "2": "\u706b",
+ "3": "\u6c34",
+ "4": "\u6728",
+ "5": "\u91d1",
+ "6": "\u571f"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "yyyy/MM/dd H:mm:ss",
+ "mediumDate": "yyyy/MM/dd",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy/MM/dd H:mm",
+ "shortDate": "yyyy/MM/dd",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a5",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ja-jp",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ja.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u5348\u524d",
+ "1": "\u5348\u5f8c"
+ },
+ "DAY": {
+ "0": "\u65e5\u66dc\u65e5",
+ "1": "\u6708\u66dc\u65e5",
+ "2": "\u706b\u66dc\u65e5",
+ "3": "\u6c34\u66dc\u65e5",
+ "4": "\u6728\u66dc\u65e5",
+ "5": "\u91d1\u66dc\u65e5",
+ "6": "\u571f\u66dc\u65e5"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u65e5",
+ "1": "\u6708",
+ "2": "\u706b",
+ "3": "\u6c34",
+ "4": "\u6728",
+ "5": "\u91d1",
+ "6": "\u571f"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "yyyy/MM/dd H:mm:ss",
+ "mediumDate": "yyyy/MM/dd",
+ "mediumTime": "H:mm:ss",
+ "short": "yyyy/MM/dd H:mm",
+ "shortDate": "yyyy/MM/dd",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a5",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ja",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0",
+ "1": "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0",
+ "2": "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0",
+ "3": "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0",
+ "4": "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0",
+ "5": "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0",
+ "6": "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"
+ },
+ "MONTH": {
+ "0": "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0",
+ "1": "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0",
+ "2": "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+ "3": "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+ "4": "\u0cae\u0cc6",
+ "5": "\u0c9c\u0cc2\u0ca8\u0ccd",
+ "6": "\u0c9c\u0cc1\u0cb2\u0cc8",
+ "7": "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+ "8": "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "9": "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+ "10": "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "11": "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+ },
+ "SHORTDAY": {
+ "0": "\u0cb0.",
+ "1": "\u0cb8\u0ccb.",
+ "2": "\u0cae\u0c82.",
+ "3": "\u0cac\u0cc1.",
+ "4": "\u0c97\u0cc1.",
+ "5": "\u0cb6\u0cc1.",
+ "6": "\u0cb6\u0ca8\u0cbf."
+ },
+ "SHORTMONTH": {
+ "0": "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0",
+ "1": "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0",
+ "2": "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+ "3": "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+ "4": "\u0cae\u0cc6",
+ "5": "\u0c9c\u0cc2\u0ca8\u0ccd",
+ "6": "\u0c9c\u0cc1\u0cb2\u0cc8",
+ "7": "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+ "8": "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "9": "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+ "10": "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "11": "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y hh:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "hh:mm:ss a",
+ "short": "d-M-yy hh:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "hh:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "kn-in",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_kn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0",
+ "1": "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0",
+ "2": "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0",
+ "3": "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0",
+ "4": "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0",
+ "5": "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0",
+ "6": "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"
+ },
+ "MONTH": {
+ "0": "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0",
+ "1": "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0",
+ "2": "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+ "3": "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+ "4": "\u0cae\u0cc6",
+ "5": "\u0c9c\u0cc2\u0ca8\u0ccd",
+ "6": "\u0c9c\u0cc1\u0cb2\u0cc8",
+ "7": "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+ "8": "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "9": "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+ "10": "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "11": "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+ },
+ "SHORTDAY": {
+ "0": "\u0cb0.",
+ "1": "\u0cb8\u0ccb.",
+ "2": "\u0cae\u0c82.",
+ "3": "\u0cac\u0cc1.",
+ "4": "\u0c97\u0cc1.",
+ "5": "\u0cb6\u0cc1.",
+ "6": "\u0cb6\u0ca8\u0cbf."
+ },
+ "SHORTMONTH": {
+ "0": "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0",
+ "1": "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0",
+ "2": "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd",
+ "3": "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd",
+ "4": "\u0cae\u0cc6",
+ "5": "\u0c9c\u0cc2\u0ca8\u0ccd",
+ "6": "\u0c9c\u0cc1\u0cb2\u0cc8",
+ "7": "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd",
+ "8": "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "9": "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd",
+ "10": "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
+ "11": "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y hh:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "hh:mm:ss a",
+ "short": "d-M-yy hh:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "hh:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "kn",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko-kr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko-kr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko-kr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\uc624\uc804",
+ "1": "\uc624\ud6c4"
+ },
+ "DAY": {
+ "0": "\uc77c\uc694\uc77c",
+ "1": "\uc6d4\uc694\uc77c",
+ "2": "\ud654\uc694\uc77c",
+ "3": "\uc218\uc694\uc77c",
+ "4": "\ubaa9\uc694\uc77c",
+ "5": "\uae08\uc694\uc77c",
+ "6": "\ud1a0\uc694\uc77c"
+ },
+ "MONTH": {
+ "0": "1\uc6d4",
+ "1": "2\uc6d4",
+ "2": "3\uc6d4",
+ "3": "4\uc6d4",
+ "4": "5\uc6d4",
+ "5": "6\uc6d4",
+ "6": "7\uc6d4",
+ "7": "8\uc6d4",
+ "8": "9\uc6d4",
+ "9": "10\uc6d4",
+ "10": "11\uc6d4",
+ "11": "12\uc6d4"
+ },
+ "SHORTDAY": {
+ "0": "\uc77c",
+ "1": "\uc6d4",
+ "2": "\ud654",
+ "3": "\uc218",
+ "4": "\ubaa9",
+ "5": "\uae08",
+ "6": "\ud1a0"
+ },
+ "SHORTMONTH": {
+ "0": "1\uc6d4",
+ "1": "2\uc6d4",
+ "2": "3\uc6d4",
+ "3": "4\uc6d4",
+ "4": "5\uc6d4",
+ "5": "6\uc6d4",
+ "6": "7\uc6d4",
+ "7": "8\uc6d4",
+ "8": "9\uc6d4",
+ "9": "10\uc6d4",
+ "10": "11\uc6d4",
+ "11": "12\uc6d4"
+ },
+ "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE",
+ "longDate": "y\ub144 M\uc6d4 d\uc77c",
+ "medium": "yyyy. M. d. a h:mm:ss",
+ "mediumDate": "yyyy. M. d.",
+ "mediumTime": "a h:mm:ss",
+ "short": "yy. M. d. a h:mm",
+ "shortDate": "yy. M. d.",
+ "shortTime": "a h:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20a9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ko-kr",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ko.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\uc624\uc804",
+ "1": "\uc624\ud6c4"
+ },
+ "DAY": {
+ "0": "\uc77c\uc694\uc77c",
+ "1": "\uc6d4\uc694\uc77c",
+ "2": "\ud654\uc694\uc77c",
+ "3": "\uc218\uc694\uc77c",
+ "4": "\ubaa9\uc694\uc77c",
+ "5": "\uae08\uc694\uc77c",
+ "6": "\ud1a0\uc694\uc77c"
+ },
+ "MONTH": {
+ "0": "1\uc6d4",
+ "1": "2\uc6d4",
+ "2": "3\uc6d4",
+ "3": "4\uc6d4",
+ "4": "5\uc6d4",
+ "5": "6\uc6d4",
+ "6": "7\uc6d4",
+ "7": "8\uc6d4",
+ "8": "9\uc6d4",
+ "9": "10\uc6d4",
+ "10": "11\uc6d4",
+ "11": "12\uc6d4"
+ },
+ "SHORTDAY": {
+ "0": "\uc77c",
+ "1": "\uc6d4",
+ "2": "\ud654",
+ "3": "\uc218",
+ "4": "\ubaa9",
+ "5": "\uae08",
+ "6": "\ud1a0"
+ },
+ "SHORTMONTH": {
+ "0": "1\uc6d4",
+ "1": "2\uc6d4",
+ "2": "3\uc6d4",
+ "3": "4\uc6d4",
+ "4": "5\uc6d4",
+ "5": "6\uc6d4",
+ "6": "7\uc6d4",
+ "7": "8\uc6d4",
+ "8": "9\uc6d4",
+ "9": "10\uc6d4",
+ "10": "11\uc6d4",
+ "11": "12\uc6d4"
+ },
+ "fullDate": "y\ub144 M\uc6d4 d\uc77c EEEE",
+ "longDate": "y\ub144 M\uc6d4 d\uc77c",
+ "medium": "yyyy. M. d. a h:mm:ss",
+ "mediumDate": "yyyy. M. d.",
+ "mediumTime": "a h:mm:ss",
+ "short": "yy. M. d. a h:mm",
+ "shortDate": "yy. M. d.",
+ "shortTime": "a h:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20a9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ko",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cd.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cd.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cd.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "nt\u0254\u0301ng\u0254\u0301",
+ "1": "mp\u00f3kwa"
+ },
+ "DAY": {
+ "0": "eyenga",
+ "1": "mok\u0254l\u0254 mwa yambo",
+ "2": "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+ "3": "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+ "4": "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+ "5": "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+ "6": "mp\u0254\u0301s\u0254"
+ },
+ "MONTH": {
+ "0": "s\u00e1nz\u00e1 ya yambo",
+ "1": "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+ "2": "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+ "3": "s\u00e1nz\u00e1 ya m\u00ednei",
+ "4": "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+ "5": "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+ "6": "s\u00e1nz\u00e1 ya nsambo",
+ "7": "s\u00e1nz\u00e1 ya mwambe",
+ "8": "s\u00e1nz\u00e1 ya libwa",
+ "9": "s\u00e1nz\u00e1 ya z\u00f3mi",
+ "10": "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+ "11": "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+ },
+ "SHORTDAY": {
+ "0": "eye",
+ "1": "ybo",
+ "2": "mbl",
+ "3": "mst",
+ "4": "min",
+ "5": "mtn",
+ "6": "mps"
+ },
+ "SHORTMONTH": {
+ "0": "yan",
+ "1": "fbl",
+ "2": "msi",
+ "3": "apl",
+ "4": "mai",
+ "5": "yun",
+ "6": "yul",
+ "7": "agt",
+ "8": "stb",
+ "9": "\u0254tb",
+ "10": "nvb",
+ "11": "dsb"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/M/yyyy HH:mm",
+ "shortDate": "d/M/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "FrCD",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "ln-cd",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln-cg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "ntɔ́ngɔ́",
+ "1": "mpókwa"
+ },
+ "DAY": {
+ "0": "eyenga",
+ "1": "mokɔlɔ mwa yambo",
+ "2": "mokɔlɔ mwa míbalé",
+ "3": "mokɔlɔ mwa mísáto",
+ "4": "mokɔlɔ ya mínéi",
+ "5": "mokɔlɔ ya mítáno",
+ "6": "mpɔ́sɔ"
+ },
+ "MONTH": {
+ "0": "sánzá ya yambo",
+ "1": "sánzá ya míbalé",
+ "2": "sánzá ya mísáto",
+ "3": "sánzá ya mínei",
+ "4": "sánzá ya mítáno",
+ "5": "sánzá ya motóbá",
+ "6": "sánzá ya nsambo",
+ "7": "sánzá ya mwambe",
+ "8": "sánzá ya libwa",
+ "9": "sánzá ya zómi",
+ "10": "sánzá ya zómi na mɔ̌kɔ́",
+ "11": "sánzá ya zómi na míbalé"
+ },
+ "SHORTDAY": {
+ "0": "eye",
+ "1": "ybo",
+ "2": "mbl",
+ "3": "mst",
+ "4": "min",
+ "5": "mtn",
+ "6": "mps"
+ },
+ "SHORTMONTH": {
+ "0": "yan",
+ "1": "fbl",
+ "2": "msi",
+ "3": "apl",
+ "4": "mai",
+ "5": "yun",
+ "6": "yul",
+ "7": "agt",
+ "8": "stb",
+ "9": "ɔtb",
+ "10": "nvb",
+ "11": "dsb"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/M/yyyy HH:mm",
+ "shortDate": "d/M/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "FrCD",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "ln-cg",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ln.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "nt\u0254\u0301ng\u0254\u0301",
+ "1": "mp\u00f3kwa"
+ },
+ "DAY": {
+ "0": "eyenga",
+ "1": "mok\u0254l\u0254 mwa yambo",
+ "2": "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
+ "3": "mok\u0254l\u0254 mwa m\u00eds\u00e1to",
+ "4": "mok\u0254l\u0254 ya m\u00edn\u00e9i",
+ "5": "mok\u0254l\u0254 ya m\u00edt\u00e1no",
+ "6": "mp\u0254\u0301s\u0254"
+ },
+ "MONTH": {
+ "0": "s\u00e1nz\u00e1 ya yambo",
+ "1": "s\u00e1nz\u00e1 ya m\u00edbal\u00e9",
+ "2": "s\u00e1nz\u00e1 ya m\u00eds\u00e1to",
+ "3": "s\u00e1nz\u00e1 ya m\u00ednei",
+ "4": "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
+ "5": "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
+ "6": "s\u00e1nz\u00e1 ya nsambo",
+ "7": "s\u00e1nz\u00e1 ya mwambe",
+ "8": "s\u00e1nz\u00e1 ya libwa",
+ "9": "s\u00e1nz\u00e1 ya z\u00f3mi",
+ "10": "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301",
+ "11": "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"
+ },
+ "SHORTDAY": {
+ "0": "eye",
+ "1": "ybo",
+ "2": "mbl",
+ "3": "mst",
+ "4": "min",
+ "5": "mtn",
+ "6": "mps"
+ },
+ "SHORTMONTH": {
+ "0": "yan",
+ "1": "fbl",
+ "2": "msi",
+ "3": "apl",
+ "4": "mai",
+ "5": "yun",
+ "6": "yul",
+ "7": "agt",
+ "8": "stb",
+ "9": "\u0254tb",
+ "10": "nvb",
+ "11": "dsb"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/M/yyyy HH:mm",
+ "shortDate": "d/M/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "FrCD",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "ln",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt-lt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt-lt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt-lt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "prie\u0161piet",
+ "1": "popiet"
+ },
+ "DAY": {
+ "0": "sekmadienis",
+ "1": "pirmadienis",
+ "2": "antradienis",
+ "3": "tre\u010diadienis",
+ "4": "ketvirtadienis",
+ "5": "penktadienis",
+ "6": "\u0161e\u0161tadienis"
+ },
+ "MONTH": {
+ "0": "sausio",
+ "1": "vasaris",
+ "2": "kovas",
+ "3": "balandis",
+ "4": "gegu\u017e\u0117",
+ "5": "bir\u017eelis",
+ "6": "liepa",
+ "7": "rugpj\u016btis",
+ "8": "rugs\u0117jis",
+ "9": "spalis",
+ "10": "lapkritis",
+ "11": "gruodis"
+ },
+ "SHORTDAY": {
+ "0": "Sk",
+ "1": "Pr",
+ "2": "An",
+ "3": "Tr",
+ "4": "Kt",
+ "5": "Pn",
+ "6": "\u0160t"
+ },
+ "SHORTMONTH": {
+ "0": "Saus.",
+ "1": "Vas",
+ "2": "Kov.",
+ "3": "Bal.",
+ "4": "Geg.",
+ "5": "Bir.",
+ "6": "Liep.",
+ "7": "Rugp.",
+ "8": "Rugs.",
+ "9": "Spal.",
+ "10": "Lapkr.",
+ "11": "Gruod."
+ },
+ "fullDate": "y 'm'. MMMM d 'd'., EEEE",
+ "longDate": "y 'm'. MMMM d 'd'.",
+ "medium": "y MMM d HH:mm:ss",
+ "mediumDate": "y MMM d",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Lt",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "lt-lt",
+ "pluralCat": function (n) { if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "prie\u0161piet",
+ "1": "popiet"
+ },
+ "DAY": {
+ "0": "sekmadienis",
+ "1": "pirmadienis",
+ "2": "antradienis",
+ "3": "tre\u010diadienis",
+ "4": "ketvirtadienis",
+ "5": "penktadienis",
+ "6": "\u0161e\u0161tadienis"
+ },
+ "MONTH": {
+ "0": "sausio",
+ "1": "vasaris",
+ "2": "kovas",
+ "3": "balandis",
+ "4": "gegu\u017e\u0117",
+ "5": "bir\u017eelis",
+ "6": "liepa",
+ "7": "rugpj\u016btis",
+ "8": "rugs\u0117jis",
+ "9": "spalis",
+ "10": "lapkritis",
+ "11": "gruodis"
+ },
+ "SHORTDAY": {
+ "0": "Sk",
+ "1": "Pr",
+ "2": "An",
+ "3": "Tr",
+ "4": "Kt",
+ "5": "Pn",
+ "6": "\u0160t"
+ },
+ "SHORTMONTH": {
+ "0": "Saus.",
+ "1": "Vas",
+ "2": "Kov.",
+ "3": "Bal.",
+ "4": "Geg.",
+ "5": "Bir.",
+ "6": "Liep.",
+ "7": "Rugp.",
+ "8": "Rugs.",
+ "9": "Spal.",
+ "10": "Lapkr.",
+ "11": "Gruod."
+ },
+ "fullDate": "y 'm'. MMMM d 'd'., EEEE",
+ "longDate": "y 'm'. MMMM d 'd'.",
+ "medium": "y MMM d HH:mm:ss",
+ "mediumDate": "y MMM d",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Lt",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "lt",
+ "pluralCat": function (n) { if (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv-lv.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv-lv.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv-lv.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "priek\u0161pusdien\u0101",
+ "1": "p\u0113cpusdien\u0101"
+ },
+ "DAY": {
+ "0": "sv\u0113tdiena",
+ "1": "pirmdiena",
+ "2": "otrdiena",
+ "3": "tre\u0161diena",
+ "4": "ceturtdiena",
+ "5": "piektdiena",
+ "6": "sestdiena"
+ },
+ "MONTH": {
+ "0": "janv\u0101ris",
+ "1": "febru\u0101ris",
+ "2": "marts",
+ "3": "apr\u012blis",
+ "4": "maijs",
+ "5": "j\u016bnijs",
+ "6": "j\u016blijs",
+ "7": "augusts",
+ "8": "septembris",
+ "9": "oktobris",
+ "10": "novembris",
+ "11": "decembris"
+ },
+ "SHORTDAY": {
+ "0": "Sv",
+ "1": "Pr",
+ "2": "Ot",
+ "3": "Tr",
+ "4": "Ce",
+ "5": "Pk",
+ "6": "Se"
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "febr.",
+ "2": "marts",
+ "3": "apr.",
+ "4": "maijs",
+ "5": "j\u016bn.",
+ "6": "j\u016bl.",
+ "7": "aug.",
+ "8": "sept.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, y. 'gada' d. MMMM",
+ "longDate": "y. 'gada' d. MMMM",
+ "medium": "y. 'gada' d. MMM HH:mm:ss",
+ "mediumDate": "y. 'gada' d. MMM",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Ls",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "lv-lv",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_lv.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "priek\u0161pusdien\u0101",
+ "1": "p\u0113cpusdien\u0101"
+ },
+ "DAY": {
+ "0": "sv\u0113tdiena",
+ "1": "pirmdiena",
+ "2": "otrdiena",
+ "3": "tre\u0161diena",
+ "4": "ceturtdiena",
+ "5": "piektdiena",
+ "6": "sestdiena"
+ },
+ "MONTH": {
+ "0": "janv\u0101ris",
+ "1": "febru\u0101ris",
+ "2": "marts",
+ "3": "apr\u012blis",
+ "4": "maijs",
+ "5": "j\u016bnijs",
+ "6": "j\u016blijs",
+ "7": "augusts",
+ "8": "septembris",
+ "9": "oktobris",
+ "10": "novembris",
+ "11": "decembris"
+ },
+ "SHORTDAY": {
+ "0": "Sv",
+ "1": "Pr",
+ "2": "Ot",
+ "3": "Tr",
+ "4": "Ce",
+ "5": "Pk",
+ "6": "Se"
+ },
+ "SHORTMONTH": {
+ "0": "janv.",
+ "1": "febr.",
+ "2": "marts",
+ "3": "apr.",
+ "4": "maijs",
+ "5": "j\u016bn.",
+ "6": "j\u016bl.",
+ "7": "aug.",
+ "8": "sept.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, y. 'gada' d. MMMM",
+ "longDate": "y. 'gada' d. MMMM",
+ "medium": "y. 'gada' d. MMM HH:mm:ss",
+ "mediumDate": "y. 'gada' d. MMM",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Ls",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "lv",
+ "pluralCat": function (n) { if (n == 0) { return PLURAL_CATEGORY.ZERO; } if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a",
+ "1": "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a",
+ "2": "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a",
+ "3": "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a",
+ "4": "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a",
+ "5": "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a",
+ "6": "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a"
+ },
+ "MONTH": {
+ "0": "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f",
+ "1": "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f",
+ "2": "\u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d4d",
+ "3": "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d",
+ "4": "\u0d2e\u0d47\u0d2f\u0d4d",
+ "5": "\u0d1c\u0d42\u0d23\u0d4d\u200d",
+ "6": "\u0d1c\u0d42\u0d32\u0d48",
+ "7": "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
+ "8": "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d\u200d",
+ "9": "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d",
+ "10": "\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d",
+ "11": "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d"
+ },
+ "SHORTDAY": {
+ "0": "\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d",
+ "1": "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d",
+ "2": "\u0d1a\u0d4a\u0d35\u0d4d\u0d35",
+ "3": "\u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d",
+ "4": "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02",
+ "5": "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f",
+ "6": "\u0d36\u0d28\u0d3f"
+ },
+ "SHORTMONTH": {
+ "0": "\u0d1c\u0d28\u0d41",
+ "1": "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41",
+ "2": "\u0d2e\u0d3e\u0d30\u0d4d\u200d",
+ "3": "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f",
+ "4": "\u0d2e\u0d47\u0d2f\u0d4d",
+ "5": "\u0d1c\u0d42\u0d23\u0d4d\u200d",
+ "6": "\u0d1c\u0d42\u0d32\u0d48",
+ "7": "\u0d13\u0d17",
+ "8": "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02",
+ "9": "\u0d12\u0d15\u0d4d\u0d1f\u0d4b",
+ "10": "\u0d28\u0d35\u0d02",
+ "11": "\u0d21\u0d3f\u0d38\u0d02"
+ },
+ "fullDate": "y, MMMM d, EEEE",
+ "longDate": "y, MMMM d",
+ "medium": "y, MMM d h:mm:ss a",
+ "mediumDate": "y, MMM d",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yy h:mm a",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "ml-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ml.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a",
+ "1": "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a",
+ "2": "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a",
+ "3": "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a",
+ "4": "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a",
+ "5": "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a",
+ "6": "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a"
+ },
+ "MONTH": {
+ "0": "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f",
+ "1": "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f",
+ "2": "\u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d4d",
+ "3": "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d",
+ "4": "\u0d2e\u0d47\u0d2f\u0d4d",
+ "5": "\u0d1c\u0d42\u0d23\u0d4d\u200d",
+ "6": "\u0d1c\u0d42\u0d32\u0d48",
+ "7": "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
+ "8": "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d\u200d",
+ "9": "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d",
+ "10": "\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d",
+ "11": "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d"
+ },
+ "SHORTDAY": {
+ "0": "\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d",
+ "1": "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d",
+ "2": "\u0d1a\u0d4a\u0d35\u0d4d\u0d35",
+ "3": "\u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d",
+ "4": "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02",
+ "5": "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f",
+ "6": "\u0d36\u0d28\u0d3f"
+ },
+ "SHORTMONTH": {
+ "0": "\u0d1c\u0d28\u0d41",
+ "1": "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41",
+ "2": "\u0d2e\u0d3e\u0d30\u0d4d\u200d",
+ "3": "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f",
+ "4": "\u0d2e\u0d47\u0d2f\u0d4d",
+ "5": "\u0d1c\u0d42\u0d23\u0d4d\u200d",
+ "6": "\u0d1c\u0d42\u0d32\u0d48",
+ "7": "\u0d13\u0d17",
+ "8": "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02",
+ "9": "\u0d12\u0d15\u0d4d\u0d1f\u0d4b",
+ "10": "\u0d28\u0d35\u0d02",
+ "11": "\u0d21\u0d3f\u0d38\u0d02"
+ },
+ "fullDate": "y, MMMM d, EEEE",
+ "longDate": "y, MMMM d",
+ "medium": "y, MMM d h:mm:ss a",
+ "mediumDate": "y, MMM d",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yy h:mm a",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a4"
+ }
+ }
+ },
+ "id": "ml",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mo.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mo.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mo.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"DATETIME_FORMATS":{"MONTH":["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],"SHORTMONTH":["ian.","feb.","mar.","apr.","mai","iun.","iul.","aug.","sept.","oct.","nov.","dec."],"DAY":["duminică","luni","marți","miercuri","joi","vineri","sâmbătă"],"SHORTDAY":["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],"AMPMS":["AM","PM"],"medium":"dd.MM.yyyy HH:mm:ss","short":"dd.MM.yyyy HH:mm","fullDate":"EEEE, d MMMM y","longDate":"d MMMM y","mediumDate":"dd.MM.yyyy","shortDate":"dd.MM.yyyy","mediumTime":"HH:mm:ss","shortTime":"HH:mm"},"NUMBER_FORMATS":{"DECIMAL_SEP":",","GROUP_SEP":".","PATTERNS":[{"minInt":1,"minFrac":0,"macFrac":0,"posPre":"","posSuf":"","negPre":"-","negSuf":"","gSize":3,"lgSize":3,"maxFrac":3},{"minInt":1,"minFrac":2,"macFrac":0,"posPre":"","posSuf":" \u00A4","negPre":"-","negSuf":" \u00A4","gSize":3,"lgSize":3,"maxFrac":2}],"CURRENCY_SYM":"MDL"},"pluralCat":function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n != 1 && (n % 100) >= 1 && (n % 100) <= 19 && n == Math.floor(n)) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;},"id":"mo"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0930\u0935\u093f\u0935\u093e\u0930",
+ "1": "\u0938\u094b\u092e\u0935\u093e\u0930",
+ "2": "\u092e\u0902\u0917\u0933\u0935\u093e\u0930",
+ "3": "\u092c\u0941\u0927\u0935\u093e\u0930",
+ "4": "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+ "5": "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+ "6": "\u0936\u0928\u093f\u0935\u093e\u0930"
+ },
+ "MONTH": {
+ "0": "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+ "1": "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u090f\u092a\u094d\u0930\u093f\u0932",
+ "4": "\u092e\u0947",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u0948",
+ "7": "\u0911\u0917\u0938\u094d\u091f",
+ "8": "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+ "9": "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+ "10": "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+ "11": "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+ },
+ "SHORTDAY": {
+ "0": "\u0930\u0935\u093f",
+ "1": "\u0938\u094b\u092e",
+ "2": "\u092e\u0902\u0917\u0933",
+ "3": "\u092c\u0941\u0927",
+ "4": "\u0917\u0941\u0930\u0941",
+ "5": "\u0936\u0941\u0915\u094d\u0930",
+ "6": "\u0936\u0928\u093f"
+ },
+ "SHORTMONTH": {
+ "0": "\u091c\u093e\u0928\u0947",
+ "1": "\u092b\u0947\u092c\u094d\u0930\u0941",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u090f\u092a\u094d\u0930\u093f",
+ "4": "\u092e\u0947",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u0948",
+ "7": "\u0911\u0917",
+ "8": "\u0938\u0947\u092a\u094d\u091f\u0947\u0902",
+ "9": "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+ "10": "\u0928\u094b\u0935\u094d\u0939\u0947\u0902",
+ "11": "\u0921\u093f\u0938\u0947\u0902"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h-mm-ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h-mm-ss a",
+ "short": "d-M-yy h-mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h-mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "mr-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0930\u0935\u093f\u0935\u093e\u0930",
+ "1": "\u0938\u094b\u092e\u0935\u093e\u0930",
+ "2": "\u092e\u0902\u0917\u0933\u0935\u093e\u0930",
+ "3": "\u092c\u0941\u0927\u0935\u093e\u0930",
+ "4": "\u0917\u0941\u0930\u0941\u0935\u093e\u0930",
+ "5": "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930",
+ "6": "\u0936\u0928\u093f\u0935\u093e\u0930"
+ },
+ "MONTH": {
+ "0": "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
+ "1": "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u090f\u092a\u094d\u0930\u093f\u0932",
+ "4": "\u092e\u0947",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u0948",
+ "7": "\u0911\u0917\u0938\u094d\u091f",
+ "8": "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
+ "9": "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+ "10": "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
+ "11": "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"
+ },
+ "SHORTDAY": {
+ "0": "\u0930\u0935\u093f",
+ "1": "\u0938\u094b\u092e",
+ "2": "\u092e\u0902\u0917\u0933",
+ "3": "\u092c\u0941\u0927",
+ "4": "\u0917\u0941\u0930\u0941",
+ "5": "\u0936\u0941\u0915\u094d\u0930",
+ "6": "\u0936\u0928\u093f"
+ },
+ "SHORTMONTH": {
+ "0": "\u091c\u093e\u0928\u0947",
+ "1": "\u092b\u0947\u092c\u094d\u0930\u0941",
+ "2": "\u092e\u093e\u0930\u094d\u091a",
+ "3": "\u090f\u092a\u094d\u0930\u093f",
+ "4": "\u092e\u0947",
+ "5": "\u091c\u0942\u0928",
+ "6": "\u091c\u0941\u0932\u0948",
+ "7": "\u0911\u0917",
+ "8": "\u0938\u0947\u092a\u094d\u091f\u0947\u0902",
+ "9": "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
+ "10": "\u0928\u094b\u0935\u094d\u0939\u0947\u0902",
+ "11": "\u0921\u093f\u0938\u0947\u0902"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h-mm-ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h-mm-ss a",
+ "short": "d-M-yy h-mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h-mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "mr",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-bn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-bn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-bn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "PG",
+ "1": "PTG"
+ },
+ "DAY": {
+ "0": "Ahad",
+ "1": "Isnin",
+ "2": "Selasa",
+ "3": "Rabu",
+ "4": "Khamis",
+ "5": "Jumaat",
+ "6": "Sabtu"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Mac",
+ "3": "April",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Julai",
+ "7": "Ogos",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Disember"
+ },
+ "SHORTDAY": {
+ "0": "Ahd",
+ "1": "Isn",
+ "2": "Sel",
+ "3": "Rab",
+ "4": "Kha",
+ "5": "Jum",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mac",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ogos",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dis"
+ },
+ "fullDate": "dd MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd/MM/yyyy h:mm:ss a",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/MM/yy h:mm a",
+ "shortDate": "d/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "RM",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ms-bn",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-my.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-my.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms-my.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "PG",
+ "1": "PTG"
+ },
+ "DAY": {
+ "0": "Ahad",
+ "1": "Isnin",
+ "2": "Selasa",
+ "3": "Rabu",
+ "4": "Khamis",
+ "5": "Jumaat",
+ "6": "Sabtu"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Mac",
+ "3": "April",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Julai",
+ "7": "Ogos",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Disember"
+ },
+ "SHORTDAY": {
+ "0": "Ahd",
+ "1": "Isn",
+ "2": "Sel",
+ "3": "Rab",
+ "4": "Kha",
+ "5": "Jum",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mac",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ogos",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd/MM/yyyy h:mm:ss a",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/MM/yy h:mm a",
+ "shortDate": "d/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "RM",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ms-my",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ms.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "PG",
+ "1": "PTG"
+ },
+ "DAY": {
+ "0": "Ahad",
+ "1": "Isnin",
+ "2": "Selasa",
+ "3": "Rabu",
+ "4": "Khamis",
+ "5": "Jumaat",
+ "6": "Sabtu"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Mac",
+ "3": "April",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Julai",
+ "7": "Ogos",
+ "8": "September",
+ "9": "Oktober",
+ "10": "November",
+ "11": "Disember"
+ },
+ "SHORTDAY": {
+ "0": "Ahd",
+ "1": "Isn",
+ "2": "Sel",
+ "3": "Rab",
+ "4": "Kha",
+ "5": "Jum",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mac",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ogos",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd/MM/yyyy h:mm:ss a",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/MM/yy h:mm a",
+ "shortDate": "d/MM/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "RM",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ms",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt-mt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt-mt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt-mt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "QN",
+ "1": "WN"
+ },
+ "DAY": {
+ "0": "Il-\u0126add",
+ "1": "It-Tnejn",
+ "2": "It-Tlieta",
+ "3": "L-Erbg\u0127a",
+ "4": "Il-\u0126amis",
+ "5": "Il-\u0120img\u0127a",
+ "6": "Is-Sibt"
+ },
+ "MONTH": {
+ "0": "Jannar",
+ "1": "Frar",
+ "2": "Marzu",
+ "3": "April",
+ "4": "Mejju",
+ "5": "\u0120unju",
+ "6": "Lulju",
+ "7": "Awwissu",
+ "8": "Settembru",
+ "9": "Ottubru",
+ "10": "Novembru",
+ "11": "Di\u010bembru"
+ },
+ "SHORTDAY": {
+ "0": "\u0126ad",
+ "1": "Tne",
+ "2": "Tli",
+ "3": "Erb",
+ "4": "\u0126am",
+ "5": "\u0120im",
+ "6": "Sib"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Fra",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mej",
+ "5": "\u0120un",
+ "6": "Lul",
+ "7": "Aww",
+ "8": "Set",
+ "9": "Ott",
+ "10": "Nov",
+ "11": "Di\u010b"
+ },
+ "fullDate": "EEEE, d 'ta'\u2019 MMMM y",
+ "longDate": "d 'ta'\u2019 MMMM y",
+ "medium": "dd MMM y HH:mm:ss",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yyyy HH:mm",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "mt-mt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n == (n | 0) && n % 100 >= 2 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 19) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_mt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "QN",
+ "1": "WN"
+ },
+ "DAY": {
+ "0": "Il-\u0126add",
+ "1": "It-Tnejn",
+ "2": "It-Tlieta",
+ "3": "L-Erbg\u0127a",
+ "4": "Il-\u0126amis",
+ "5": "Il-\u0120img\u0127a",
+ "6": "Is-Sibt"
+ },
+ "MONTH": {
+ "0": "Jannar",
+ "1": "Frar",
+ "2": "Marzu",
+ "3": "April",
+ "4": "Mejju",
+ "5": "\u0120unju",
+ "6": "Lulju",
+ "7": "Awwissu",
+ "8": "Settembru",
+ "9": "Ottubru",
+ "10": "Novembru",
+ "11": "Di\u010bembru"
+ },
+ "SHORTDAY": {
+ "0": "\u0126ad",
+ "1": "Tne",
+ "2": "Tli",
+ "3": "Erb",
+ "4": "\u0126am",
+ "5": "\u0120im",
+ "6": "Sib"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Fra",
+ "2": "Mar",
+ "3": "Apr",
+ "4": "Mej",
+ "5": "\u0120un",
+ "6": "Lul",
+ "7": "Aww",
+ "8": "Set",
+ "9": "Ott",
+ "10": "Nov",
+ "11": "Di\u010b"
+ },
+ "fullDate": "EEEE, d 'ta'\u2019 MMMM y",
+ "longDate": "d 'ta'\u2019 MMMM y",
+ "medium": "dd MMM y HH:mm:ss",
+ "mediumDate": "dd MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yyyy HH:mm",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "mt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n == (n | 0) && n % 100 >= 2 && n % 100 <= 10) { return PLURAL_CATEGORY.FEW; } if (n == (n | 0) && n % 100 >= 11 && n % 100 <= 19) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-aw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-aw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-aw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "zondag",
+ "1": "maandag",
+ "2": "dinsdag",
+ "3": "woensdag",
+ "4": "donderdag",
+ "5": "vrijdag",
+ "6": "zaterdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "maart",
+ "3": "april",
+ "4": "mei",
+ "5": "juni",
+ "6": "juli",
+ "7": "augustus",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "zo",
+ "1": "ma",
+ "2": "di",
+ "3": "wo",
+ "4": "do",
+ "5": "vr",
+ "6": "za"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mrt.",
+ "3": "apr.",
+ "4": "mei",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd-MM-yy HH:mm",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "€",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00A4 ",
+ "negSuf": "-",
+ "posPre": "\u00A4 ",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "nl-aw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-be.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-be.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-be.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "zondag",
+ "1": "maandag",
+ "2": "dinsdag",
+ "3": "woensdag",
+ "4": "donderdag",
+ "5": "vrijdag",
+ "6": "zaterdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "maart",
+ "3": "april",
+ "4": "mei",
+ "5": "juni",
+ "6": "juli",
+ "7": "augustus",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "zo",
+ "1": "ma",
+ "2": "di",
+ "3": "wo",
+ "4": "do",
+ "5": "vr",
+ "6": "za"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mrt.",
+ "3": "apr.",
+ "4": "mei",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d-MMM-y HH:mm:ss",
+ "mediumDate": "d-MMM-y",
+ "mediumTime": "HH:mm:ss",
+ "short": "d/MM/yy HH:mm",
+ "shortDate": "d/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "€",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00A4 ",
+ "negSuf": "-",
+ "posPre": "\u00A4 ",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "nl-be",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-cw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-cw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-cw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "zondag",
+ "1": "maandag",
+ "2": "dinsdag",
+ "3": "woensdag",
+ "4": "donderdag",
+ "5": "vrijdag",
+ "6": "zaterdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "maart",
+ "3": "april",
+ "4": "mei",
+ "5": "juni",
+ "6": "juli",
+ "7": "augustus",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "zo",
+ "1": "ma",
+ "2": "di",
+ "3": "wo",
+ "4": "do",
+ "5": "vr",
+ "6": "za"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mrt.",
+ "3": "apr.",
+ "4": "mei",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd-MM-yy HH:mm",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "nl-cw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-nl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-nl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-nl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "zondag",
+ "1": "maandag",
+ "2": "dinsdag",
+ "3": "woensdag",
+ "4": "donderdag",
+ "5": "vrijdag",
+ "6": "zaterdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "maart",
+ "3": "april",
+ "4": "mei",
+ "5": "juni",
+ "6": "juli",
+ "7": "augustus",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "zo",
+ "1": "ma",
+ "2": "di",
+ "3": "wo",
+ "4": "do",
+ "5": "vr",
+ "6": "za"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mrt.",
+ "3": "apr.",
+ "4": "mei",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd-MM-yy HH:mm",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "nl-nl",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-sx.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-sx.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl-sx.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "zondag",
+ "1": "maandag",
+ "2": "dinsdag",
+ "3": "woensdag",
+ "4": "donderdag",
+ "5": "vrijdag",
+ "6": "zaterdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "maart",
+ "3": "april",
+ "4": "mei",
+ "5": "juni",
+ "6": "juli",
+ "7": "augustus",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "zo",
+ "1": "ma",
+ "2": "di",
+ "3": "wo",
+ "4": "do",
+ "5": "vr",
+ "6": "za"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mrt.",
+ "3": "apr.",
+ "4": "mei",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd-MM-yy HH:mm",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "nl-sx",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_nl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "zondag",
+ "1": "maandag",
+ "2": "dinsdag",
+ "3": "woensdag",
+ "4": "donderdag",
+ "5": "vrijdag",
+ "6": "zaterdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "maart",
+ "3": "april",
+ "4": "mei",
+ "5": "juni",
+ "6": "juli",
+ "7": "augustus",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "zo",
+ "1": "ma",
+ "2": "di",
+ "3": "wo",
+ "4": "do",
+ "5": "vr",
+ "6": "za"
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mrt.",
+ "3": "apr.",
+ "4": "mei",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd-MM-yy HH:mm",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0",
+ "negSuf": "-",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "nl",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_no.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_no.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_no.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "s\u00f8ndag",
+ "1": "mandag",
+ "2": "tirsdag",
+ "3": "onsdag",
+ "4": "torsdag",
+ "5": "fredag",
+ "6": "l\u00f8rdag"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "mars",
+ "3": "april",
+ "4": "mai",
+ "5": "juni",
+ "6": "juli",
+ "7": "august",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "desember"
+ },
+ "SHORTDAY": {
+ "0": "s\u00f8n.",
+ "1": "man.",
+ "2": "tir.",
+ "3": "ons.",
+ "4": "tor.",
+ "5": "fre.",
+ "6": "l\u00f8r."
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mars",
+ "3": "apr.",
+ "4": "mai",
+ "5": "juni",
+ "6": "juli",
+ "7": "aug.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "des."
+ },
+ "fullDate": "EEEE d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d. MMM y HH:mm:ss",
+ "mediumDate": "d. MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "no",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30",
+ "1": "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30",
+ "2": "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30",
+ "3": "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30",
+ "4": "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30",
+ "5": "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30",
+ "6": "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"
+ },
+ "MONTH": {
+ "0": "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+ "1": "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
+ "2": "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+ "3": "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+ "4": "\u0b2e\u0b47",
+ "5": "\u0b1c\u0b41\u0b28",
+ "6": "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+ "7": "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+ "8": "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "9": "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+ "10": "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "11": "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+ },
+ "SHORTDAY": {
+ "0": "\u0b30\u0b2c\u0b3f",
+ "1": "\u0b38\u0b4b\u0b2e",
+ "2": "\u0b2e\u0b19\u0b4d\u0b17\u0b33",
+ "3": "\u0b2c\u0b41\u0b27",
+ "4": "\u0b17\u0b41\u0b30\u0b41",
+ "5": "\u0b36\u0b41\u0b15\u0b4d\u0b30",
+ "6": "\u0b36\u0b28\u0b3f"
+ },
+ "SHORTMONTH": {
+ "0": "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+ "1": "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
+ "2": "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+ "3": "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+ "4": "\u0b2e\u0b47",
+ "5": "\u0b1c\u0b41\u0b28",
+ "6": "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+ "7": "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+ "8": "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "9": "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+ "10": "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "11": "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "or-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_or.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30",
+ "1": "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30",
+ "2": "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30",
+ "3": "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30",
+ "4": "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30",
+ "5": "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30",
+ "6": "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"
+ },
+ "MONTH": {
+ "0": "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+ "1": "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
+ "2": "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+ "3": "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+ "4": "\u0b2e\u0b47",
+ "5": "\u0b1c\u0b41\u0b28",
+ "6": "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+ "7": "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+ "8": "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "9": "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+ "10": "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "11": "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+ },
+ "SHORTDAY": {
+ "0": "\u0b30\u0b2c\u0b3f",
+ "1": "\u0b38\u0b4b\u0b2e",
+ "2": "\u0b2e\u0b19\u0b4d\u0b17\u0b33",
+ "3": "\u0b2c\u0b41\u0b27",
+ "4": "\u0b17\u0b41\u0b30\u0b41",
+ "5": "\u0b36\u0b41\u0b15\u0b4d\u0b30",
+ "6": "\u0b36\u0b28\u0b3f"
+ },
+ "SHORTMONTH": {
+ "0": "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
+ "1": "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40",
+ "2": "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a",
+ "3": "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32",
+ "4": "\u0b2e\u0b47",
+ "5": "\u0b1c\u0b41\u0b28",
+ "6": "\u0b1c\u0b41\u0b32\u0b3e\u0b07",
+ "7": "\u0b05\u0b17\u0b37\u0b4d\u0b1f",
+ "8": "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "9": "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30",
+ "10": "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30",
+ "11": "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "or",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl-pl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl-pl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl-pl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "niedziela",
+ "1": "poniedzia\u0142ek",
+ "2": "wtorek",
+ "3": "\u015broda",
+ "4": "czwartek",
+ "5": "pi\u0105tek",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "stycznia",
+ "1": "lutego",
+ "2": "marca",
+ "3": "kwietnia",
+ "4": "maja",
+ "5": "czerwca",
+ "6": "lipca",
+ "7": "sierpnia",
+ "8": "wrze\u015bnia",
+ "9": "pa\u017adziernika",
+ "10": "listopada",
+ "11": "grudnia"
+ },
+ "SHORTDAY": {
+ "0": "niedz.",
+ "1": "pon.",
+ "2": "wt.",
+ "3": "\u015br.",
+ "4": "czw.",
+ "5": "pt.",
+ "6": "sob."
+ },
+ "SHORTMONTH": {
+ "0": "sty",
+ "1": "lut",
+ "2": "mar",
+ "3": "kwi",
+ "4": "maj",
+ "5": "cze",
+ "6": "lip",
+ "7": "sie",
+ "8": "wrz",
+ "9": "pa\u017a",
+ "10": "lis",
+ "11": "gru"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yyyy HH:mm",
+ "shortDate": "dd.MM.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "z\u0142",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "pl-pl",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n != 1 && (n % 10 == 0 || n % 10 == 1) || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 12 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "niedziela",
+ "1": "poniedzia\u0142ek",
+ "2": "wtorek",
+ "3": "\u015broda",
+ "4": "czwartek",
+ "5": "pi\u0105tek",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "stycznia",
+ "1": "lutego",
+ "2": "marca",
+ "3": "kwietnia",
+ "4": "maja",
+ "5": "czerwca",
+ "6": "lipca",
+ "7": "sierpnia",
+ "8": "wrze\u015bnia",
+ "9": "pa\u017adziernika",
+ "10": "listopada",
+ "11": "grudnia"
+ },
+ "SHORTDAY": {
+ "0": "niedz.",
+ "1": "pon.",
+ "2": "wt.",
+ "3": "\u015br.",
+ "4": "czw.",
+ "5": "pt.",
+ "6": "sob."
+ },
+ "SHORTMONTH": {
+ "0": "sty",
+ "1": "lut",
+ "2": "mar",
+ "3": "kwi",
+ "4": "maj",
+ "5": "cze",
+ "6": "lip",
+ "7": "sie",
+ "8": "wrz",
+ "9": "pa\u017a",
+ "10": "lis",
+ "11": "gru"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yyyy HH:mm",
+ "shortDate": "dd.MM.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "z\u0142",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "pl",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n != 1 && (n % 10 == 0 || n % 10 == 1) || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 12 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-ao.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-ao.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-ao.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "segunda-feira",
+ "2": "terça-feira",
+ "3": "quarta-feira",
+ "4": "quinta-feira",
+ "5": "sexta-feira",
+ "6": "sábado"
+ },
+ "MONTH": {
+ "0": "janeiro",
+ "1": "fevereiro",
+ "2": "março",
+ "3": "abril",
+ "4": "maio",
+ "5": "junho",
+ "6": "julho",
+ "7": "agosto",
+ "8": "setembro",
+ "9": "outubro",
+ "10": "novembro",
+ "11": "dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "sáb"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "fev",
+ "2": "mar",
+ "3": "abr",
+ "4": "mai",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "set",
+ "9": "out",
+ "10": "nov",
+ "11": "dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "pt-ao",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-br.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-br.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-br.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "segunda-feira",
+ "2": "ter\u00e7a-feira",
+ "3": "quarta-feira",
+ "4": "quinta-feira",
+ "5": "sexta-feira",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "janeiro",
+ "1": "fevereiro",
+ "2": "mar\u00e7o",
+ "3": "abril",
+ "4": "maio",
+ "5": "junho",
+ "6": "julho",
+ "7": "agosto",
+ "8": "setembro",
+ "9": "outubro",
+ "10": "novembro",
+ "11": "dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "fev",
+ "2": "mar",
+ "3": "abr",
+ "4": "mai",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "set",
+ "9": "out",
+ "10": "nov",
+ "11": "dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "pt-br",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-gw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-gw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-gw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "segunda-feira",
+ "2": "terça-feira",
+ "3": "quarta-feira",
+ "4": "quinta-feira",
+ "5": "sexta-feira",
+ "6": "sábado"
+ },
+ "MONTH": {
+ "0": "janeiro",
+ "1": "fevereiro",
+ "2": "março",
+ "3": "abril",
+ "4": "maio",
+ "5": "junho",
+ "6": "julho",
+ "7": "agosto",
+ "8": "setembro",
+ "9": "outubro",
+ "10": "novembro",
+ "11": "dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "sáb"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "fev",
+ "2": "mar",
+ "3": "abr",
+ "4": "mai",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "set",
+ "9": "out",
+ "10": "nov",
+ "11": "dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "pt-gw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-mz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-mz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-mz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "segunda-feira",
+ "2": "terça-feira",
+ "3": "quarta-feira",
+ "4": "quinta-feira",
+ "5": "sexta-feira",
+ "6": "sábado"
+ },
+ "MONTH": {
+ "0": "janeiro",
+ "1": "fevereiro",
+ "2": "março",
+ "3": "abril",
+ "4": "maio",
+ "5": "junho",
+ "6": "julho",
+ "7": "agosto",
+ "8": "setembro",
+ "9": "outubro",
+ "10": "novembro",
+ "11": "dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "sáb"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "fev",
+ "2": "mar",
+ "3": "abr",
+ "4": "mai",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "set",
+ "9": "out",
+ "10": "nov",
+ "11": "dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "pt-mz",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-pt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-pt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-pt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "a.m.",
+ "1": "p.m."
+ },
+ "DAY": {
+ "0": "Domingo",
+ "1": "Segunda-feira",
+ "2": "Ter\u00e7a-feira",
+ "3": "Quarta-feira",
+ "4": "Quinta-feira",
+ "5": "Sexta-feira",
+ "6": "S\u00e1bado"
+ },
+ "MONTH": {
+ "0": "Janeiro",
+ "1": "Fevereiro",
+ "2": "Mar\u00e7o",
+ "3": "Abril",
+ "4": "Maio",
+ "5": "Junho",
+ "6": "Julho",
+ "7": "Agosto",
+ "8": "Setembro",
+ "9": "Outubro",
+ "10": "Novembro",
+ "11": "Dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Fev",
+ "2": "Mar",
+ "3": "Abr",
+ "4": "Mai",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ago",
+ "8": "Set",
+ "9": "Out",
+ "10": "Nov",
+ "11": "Dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "pt-pt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-st.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-st.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt-st.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "segunda-feira",
+ "2": "terça-feira",
+ "3": "quarta-feira",
+ "4": "quinta-feira",
+ "5": "sexta-feira",
+ "6": "sábado"
+ },
+ "MONTH": {
+ "0": "janeiro",
+ "1": "fevereiro",
+ "2": "março",
+ "3": "abril",
+ "4": "maio",
+ "5": "junho",
+ "6": "julho",
+ "7": "agosto",
+ "8": "setembro",
+ "9": "outubro",
+ "10": "novembro",
+ "11": "dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "sáb"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "fev",
+ "2": "mar",
+ "3": "abr",
+ "4": "mai",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "set",
+ "9": "out",
+ "10": "nov",
+ "11": "dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "pt-st",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_pt.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "domingo",
+ "1": "segunda-feira",
+ "2": "ter\u00e7a-feira",
+ "3": "quarta-feira",
+ "4": "quinta-feira",
+ "5": "sexta-feira",
+ "6": "s\u00e1bado"
+ },
+ "MONTH": {
+ "0": "janeiro",
+ "1": "fevereiro",
+ "2": "mar\u00e7o",
+ "3": "abril",
+ "4": "maio",
+ "5": "junho",
+ "6": "julho",
+ "7": "agosto",
+ "8": "setembro",
+ "9": "outubro",
+ "10": "novembro",
+ "11": "dezembro"
+ },
+ "SHORTDAY": {
+ "0": "dom",
+ "1": "seg",
+ "2": "ter",
+ "3": "qua",
+ "4": "qui",
+ "5": "sex",
+ "6": "s\u00e1b"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "fev",
+ "2": "mar",
+ "3": "abr",
+ "4": "mai",
+ "5": "jun",
+ "6": "jul",
+ "7": "ago",
+ "8": "set",
+ "9": "out",
+ "10": "nov",
+ "11": "dez"
+ },
+ "fullDate": "EEEE, d 'de' MMMM 'de' y",
+ "longDate": "d 'de' MMMM 'de' y",
+ "medium": "dd/MM/yyyy HH:mm:ss",
+ "mediumDate": "dd/MM/yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yy HH:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R$",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "pt",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-md.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-md.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-md.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "duminică",
+ "1": "luni",
+ "2": "marți",
+ "3": "miercuri",
+ "4": "joi",
+ "5": "vineri",
+ "6": "sâmbătă"
+ },
+ "MONTH": {
+ "0": "ianuarie",
+ "1": "februarie",
+ "2": "martie",
+ "3": "aprilie",
+ "4": "mai",
+ "5": "iunie",
+ "6": "iulie",
+ "7": "august",
+ "8": "septembrie",
+ "9": "octombrie",
+ "10": "noiembrie",
+ "11": "decembrie"
+ },
+ "SHORTDAY": {
+ "0": "Du",
+ "1": "Lu",
+ "2": "Ma",
+ "3": "Mi",
+ "4": "Jo",
+ "5": "Vi",
+ "6": "Sâ"
+ },
+ "SHORTMONTH": {
+ "0": "ian.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "mai",
+ "5": "iun.",
+ "6": "iul.",
+ "7": "aug.",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yyyy HH:mm",
+ "shortDate": "dd.MM.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "RON",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "ro-md",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n != 1 && n == (n | 0) && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-ro.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-ro.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro-ro.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "duminic\u0103",
+ "1": "luni",
+ "2": "mar\u021bi",
+ "3": "miercuri",
+ "4": "joi",
+ "5": "vineri",
+ "6": "s\u00e2mb\u0103t\u0103"
+ },
+ "MONTH": {
+ "0": "ianuarie",
+ "1": "februarie",
+ "2": "martie",
+ "3": "aprilie",
+ "4": "mai",
+ "5": "iunie",
+ "6": "iulie",
+ "7": "august",
+ "8": "septembrie",
+ "9": "octombrie",
+ "10": "noiembrie",
+ "11": "decembrie"
+ },
+ "SHORTDAY": {
+ "0": "Du",
+ "1": "Lu",
+ "2": "Ma",
+ "3": "Mi",
+ "4": "Jo",
+ "5": "Vi",
+ "6": "S\u00e2"
+ },
+ "SHORTMONTH": {
+ "0": "ian.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "mai",
+ "5": "iun.",
+ "6": "iul.",
+ "7": "aug.",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yyyy HH:mm",
+ "shortDate": "dd.MM.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "RON",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "ro-ro",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n != 1 && n == (n | 0) && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ro.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "duminic\u0103",
+ "1": "luni",
+ "2": "mar\u021bi",
+ "3": "miercuri",
+ "4": "joi",
+ "5": "vineri",
+ "6": "s\u00e2mb\u0103t\u0103"
+ },
+ "MONTH": {
+ "0": "ianuarie",
+ "1": "februarie",
+ "2": "martie",
+ "3": "aprilie",
+ "4": "mai",
+ "5": "iunie",
+ "6": "iulie",
+ "7": "august",
+ "8": "septembrie",
+ "9": "octombrie",
+ "10": "noiembrie",
+ "11": "decembrie"
+ },
+ "SHORTDAY": {
+ "0": "Du",
+ "1": "Lu",
+ "2": "Ma",
+ "3": "Mi",
+ "4": "Jo",
+ "5": "Vi",
+ "6": "S\u00e2"
+ },
+ "SHORTMONTH": {
+ "0": "ian.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "mai",
+ "5": "iun.",
+ "6": "iul.",
+ "7": "aug.",
+ "8": "sept.",
+ "9": "oct.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "dd.MM.yyyy HH:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yyyy HH:mm",
+ "shortDate": "dd.MM.yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "RON",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "ro",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == 0 || n != 1 && n == (n | 0) && n % 100 >= 1 && n % 100 <= 19) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-md.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-md.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-md.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "до полудня",
+ "1": "после полудня"
+ },
+ "DAY": {
+ "0": "воскресенье",
+ "1": "понедельник",
+ "2": "вторник",
+ "3": "среда",
+ "4": "четверг",
+ "5": "пятница",
+ "6": "суббота"
+ },
+ "MONTH": {
+ "0": "января",
+ "1": "февраля",
+ "2": "марта",
+ "3": "апреля",
+ "4": "мая",
+ "5": "июня",
+ "6": "июля",
+ "7": "августа",
+ "8": "сентября",
+ "9": "октября",
+ "10": "ноября",
+ "11": "декабря"
+ },
+ "SHORTDAY": {
+ "0": "вс",
+ "1": "пн",
+ "2": "вт",
+ "3": "ср",
+ "4": "чт",
+ "5": "пт",
+ "6": "сб"
+ },
+ "SHORTMONTH": {
+ "0": "янв.",
+ "1": "февр.",
+ "2": "марта",
+ "3": "апр.",
+ "4": "мая",
+ "5": "июня",
+ "6": "июля",
+ "7": "авг.",
+ "8": "сент.",
+ "9": "окт.",
+ "10": "нояб.",
+ "11": "дек."
+ },
+ "fullDate": "EEEE, d MMMM y 'г'.",
+ "longDate": "d MMMM y 'г'.",
+ "medium": "dd.MM.yyyy H:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "руб.",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": " ",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "ru-md",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ru.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ru.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ru.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f",
+ "1": "\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f"
+ },
+ "DAY": {
+ "0": "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+ "1": "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+ "2": "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+ "3": "\u0441\u0440\u0435\u0434\u0430",
+ "4": "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+ "5": "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+ "6": "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u044f\u043d\u0432\u0430\u0440\u044f",
+ "1": "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+ "2": "\u043c\u0430\u0440\u0442\u0430",
+ "3": "\u0430\u043f\u0440\u0435\u043b\u044f",
+ "4": "\u043c\u0430\u044f",
+ "5": "\u0438\u044e\u043d\u044f",
+ "6": "\u0438\u044e\u043b\u044f",
+ "7": "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+ "8": "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+ "9": "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+ "10": "\u043d\u043e\u044f\u0431\u0440\u044f",
+ "11": "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+ },
+ "SHORTDAY": {
+ "0": "\u0432\u0441",
+ "1": "\u043f\u043d",
+ "2": "\u0432\u0442",
+ "3": "\u0441\u0440",
+ "4": "\u0447\u0442",
+ "5": "\u043f\u0442",
+ "6": "\u0441\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u044f\u043d\u0432.",
+ "1": "\u0444\u0435\u0432\u0440.",
+ "2": "\u043c\u0430\u0440\u0442\u0430",
+ "3": "\u0430\u043f\u0440.",
+ "4": "\u043c\u0430\u044f",
+ "5": "\u0438\u044e\u043d\u044f",
+ "6": "\u0438\u044e\u043b\u044f",
+ "7": "\u0430\u0432\u0433.",
+ "8": "\u0441\u0435\u043d\u0442.",
+ "9": "\u043e\u043a\u0442.",
+ "10": "\u043d\u043e\u044f\u0431.",
+ "11": "\u0434\u0435\u043a."
+ },
+ "fullDate": "EEEE, d MMMM y\u00a0'\u0433'.",
+ "longDate": "d MMMM y\u00a0'\u0433'.",
+ "medium": "dd.MM.yyyy H:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u0440\u0443\u0431.",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "ru-ru",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ua.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ua.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru-ua.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "до полудня",
+ "1": "после полудня"
+ },
+ "DAY": {
+ "0": "воскресенье",
+ "1": "понедельник",
+ "2": "вторник",
+ "3": "среда",
+ "4": "четверг",
+ "5": "пятница",
+ "6": "суббота"
+ },
+ "MONTH": {
+ "0": "января",
+ "1": "февраля",
+ "2": "марта",
+ "3": "апреля",
+ "4": "мая",
+ "5": "июня",
+ "6": "июля",
+ "7": "августа",
+ "8": "сентября",
+ "9": "октября",
+ "10": "ноября",
+ "11": "декабря"
+ },
+ "SHORTDAY": {
+ "0": "вс",
+ "1": "пн",
+ "2": "вт",
+ "3": "ср",
+ "4": "чт",
+ "5": "пт",
+ "6": "сб"
+ },
+ "SHORTMONTH": {
+ "0": "янв.",
+ "1": "февр.",
+ "2": "марта",
+ "3": "апр.",
+ "4": "мая",
+ "5": "июня",
+ "6": "июля",
+ "7": "авг.",
+ "8": "сент.",
+ "9": "окт.",
+ "10": "нояб.",
+ "11": "дек."
+ },
+ "fullDate": "EEEE, d MMMM y 'г'.",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "руб.",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": " ",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "ru-ua",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ru.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f",
+ "1": "\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f"
+ },
+ "DAY": {
+ "0": "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
+ "1": "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a",
+ "2": "\u0432\u0442\u043e\u0440\u043d\u0438\u043a",
+ "3": "\u0441\u0440\u0435\u0434\u0430",
+ "4": "\u0447\u0435\u0442\u0432\u0435\u0440\u0433",
+ "5": "\u043f\u044f\u0442\u043d\u0438\u0446\u0430",
+ "6": "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u044f\u043d\u0432\u0430\u0440\u044f",
+ "1": "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
+ "2": "\u043c\u0430\u0440\u0442\u0430",
+ "3": "\u0430\u043f\u0440\u0435\u043b\u044f",
+ "4": "\u043c\u0430\u044f",
+ "5": "\u0438\u044e\u043d\u044f",
+ "6": "\u0438\u044e\u043b\u044f",
+ "7": "\u0430\u0432\u0433\u0443\u0441\u0442\u0430",
+ "8": "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f",
+ "9": "\u043e\u043a\u0442\u044f\u0431\u0440\u044f",
+ "10": "\u043d\u043e\u044f\u0431\u0440\u044f",
+ "11": "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"
+ },
+ "SHORTDAY": {
+ "0": "\u0432\u0441",
+ "1": "\u043f\u043d",
+ "2": "\u0432\u0442",
+ "3": "\u0441\u0440",
+ "4": "\u0447\u0442",
+ "5": "\u043f\u0442",
+ "6": "\u0441\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u044f\u043d\u0432.",
+ "1": "\u0444\u0435\u0432\u0440.",
+ "2": "\u043c\u0430\u0440\u0442\u0430",
+ "3": "\u0430\u043f\u0440.",
+ "4": "\u043c\u0430\u044f",
+ "5": "\u0438\u044e\u043d\u044f",
+ "6": "\u0438\u044e\u043b\u044f",
+ "7": "\u0430\u0432\u0433.",
+ "8": "\u0441\u0435\u043d\u0442.",
+ "9": "\u043e\u043a\u0442.",
+ "10": "\u043d\u043e\u044f\u0431.",
+ "11": "\u0434\u0435\u043a."
+ },
+ "fullDate": "EEEE, d MMMM y\u00a0'\u0433'.",
+ "longDate": "d MMMM y\u00a0'\u0433'.",
+ "medium": "dd.MM.yyyy H:mm:ss",
+ "mediumDate": "dd.MM.yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "dd.MM.yy H:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u0440\u0443\u0431.",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "ru",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk-sk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk-sk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk-sk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "dopoludnia",
+ "1": "popoludn\u00ed"
+ },
+ "DAY": {
+ "0": "nede\u013ea",
+ "1": "pondelok",
+ "2": "utorok",
+ "3": "streda",
+ "4": "\u0161tvrtok",
+ "5": "piatok",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "janu\u00e1ra",
+ "1": "febru\u00e1ra",
+ "2": "marca",
+ "3": "apr\u00edla",
+ "4": "m\u00e1ja",
+ "5": "j\u00fana",
+ "6": "j\u00fala",
+ "7": "augusta",
+ "8": "septembra",
+ "9": "okt\u00f3bra",
+ "10": "novembra",
+ "11": "decembra"
+ },
+ "SHORTDAY": {
+ "0": "ne",
+ "1": "po",
+ "2": "ut",
+ "3": "st",
+ "4": "\u0161t",
+ "5": "pi",
+ "6": "so"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "m\u00e1j",
+ "5": "j\u00fan",
+ "6": "j\u00fal",
+ "7": "aug",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d.M.yyyy H:mm:ss",
+ "mediumDate": "d.M.yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "d.M.yyyy H:mm",
+ "shortDate": "d.M.yyyy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sk-sk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "dopoludnia",
+ "1": "popoludn\u00ed"
+ },
+ "DAY": {
+ "0": "nede\u013ea",
+ "1": "pondelok",
+ "2": "utorok",
+ "3": "streda",
+ "4": "\u0161tvrtok",
+ "5": "piatok",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "janu\u00e1ra",
+ "1": "febru\u00e1ra",
+ "2": "marca",
+ "3": "apr\u00edla",
+ "4": "m\u00e1ja",
+ "5": "j\u00fana",
+ "6": "j\u00fala",
+ "7": "augusta",
+ "8": "septembra",
+ "9": "okt\u00f3bra",
+ "10": "novembra",
+ "11": "decembra"
+ },
+ "SHORTDAY": {
+ "0": "ne",
+ "1": "po",
+ "2": "ut",
+ "3": "st",
+ "4": "\u0161t",
+ "5": "pi",
+ "6": "so"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "m\u00e1j",
+ "5": "j\u00fan",
+ "6": "j\u00fal",
+ "7": "aug",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE, d. MMMM y",
+ "longDate": "d. MMMM y",
+ "medium": "d.M.yyyy H:mm:ss",
+ "mediumDate": "d.M.yyyy",
+ "mediumTime": "H:mm:ss",
+ "short": "d.M.yyyy H:mm",
+ "shortDate": "d.M.yyyy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n >= 2 && n <= 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl-si.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl-si.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl-si.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "dop.",
+ "1": "pop."
+ },
+ "DAY": {
+ "0": "nedelja",
+ "1": "ponedeljek",
+ "2": "torek",
+ "3": "sreda",
+ "4": "\u010detrtek",
+ "5": "petek",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "marec",
+ "3": "april",
+ "4": "maj",
+ "5": "junij",
+ "6": "julij",
+ "7": "avgust",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "ned.",
+ "1": "pon.",
+ "2": "tor.",
+ "3": "sre.",
+ "4": "\u010det.",
+ "5": "pet.",
+ "6": "sob."
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "maj",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "avg.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, dd. MMMM y",
+ "longDate": "dd. MMMM y",
+ "medium": "d. MMM yyyy HH:mm:ss",
+ "mediumDate": "d. MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "d. MM. yy HH:mm",
+ "shortDate": "d. MM. yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sl-si",
+ "pluralCat": function (n) { if (n % 100 == 1) { return PLURAL_CATEGORY.ONE; } if (n % 100 == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 == 3 || n % 100 == 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "dop.",
+ "1": "pop."
+ },
+ "DAY": {
+ "0": "nedelja",
+ "1": "ponedeljek",
+ "2": "torek",
+ "3": "sreda",
+ "4": "\u010detrtek",
+ "5": "petek",
+ "6": "sobota"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "marec",
+ "3": "april",
+ "4": "maj",
+ "5": "junij",
+ "6": "julij",
+ "7": "avgust",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "ned.",
+ "1": "pon.",
+ "2": "tor.",
+ "3": "sre.",
+ "4": "\u010det.",
+ "5": "pet.",
+ "6": "sob."
+ },
+ "SHORTMONTH": {
+ "0": "jan.",
+ "1": "feb.",
+ "2": "mar.",
+ "3": "apr.",
+ "4": "maj",
+ "5": "jun.",
+ "6": "jul.",
+ "7": "avg.",
+ "8": "sep.",
+ "9": "okt.",
+ "10": "nov.",
+ "11": "dec."
+ },
+ "fullDate": "EEEE, dd. MMMM y",
+ "longDate": "dd. MMMM y",
+ "medium": "d. MMM yyyy HH:mm:ss",
+ "mediumDate": "d. MMM yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "d. MM. yy HH:mm",
+ "shortDate": "d. MM. yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ac",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sl",
+ "pluralCat": function (n) { if (n % 100 == 1) { return PLURAL_CATEGORY.ONE; } if (n % 100 == 2) { return PLURAL_CATEGORY.TWO; } if (n % 100 == 3 || n % 100 == 4) { return PLURAL_CATEGORY.FEW; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq-al.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq-al.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq-al.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "PD",
+ "1": "MD"
+ },
+ "DAY": {
+ "0": "e diel",
+ "1": "e h\u00ebn\u00eb",
+ "2": "e mart\u00eb",
+ "3": "e m\u00ebrkur\u00eb",
+ "4": "e enjte",
+ "5": "e premte",
+ "6": "e shtun\u00eb"
+ },
+ "MONTH": {
+ "0": "janar",
+ "1": "shkurt",
+ "2": "mars",
+ "3": "prill",
+ "4": "maj",
+ "5": "qershor",
+ "6": "korrik",
+ "7": "gusht",
+ "8": "shtator",
+ "9": "tetor",
+ "10": "n\u00ebntor",
+ "11": "dhjetor"
+ },
+ "SHORTDAY": {
+ "0": "Die",
+ "1": "H\u00ebn",
+ "2": "Mar",
+ "3": "M\u00ebr",
+ "4": "Enj",
+ "5": "Pre",
+ "6": "Sht"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Shk",
+ "2": "Mar",
+ "3": "Pri",
+ "4": "Maj",
+ "5": "Qer",
+ "6": "Kor",
+ "7": "Gsh",
+ "8": "Sht",
+ "9": "Tet",
+ "10": "N\u00ebn",
+ "11": "Dhj"
+ },
+ "fullDate": "EEEE, dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "yyyy-MM-dd h.mm.ss.a",
+ "mediumDate": "yyyy-MM-dd",
+ "mediumTime": "h.mm.ss.a",
+ "short": "yy-MM-dd h.mm.a",
+ "shortDate": "yy-MM-dd",
+ "shortTime": "h.mm.a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Lek",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sq-al",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sq.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "PD",
+ "1": "MD"
+ },
+ "DAY": {
+ "0": "e diel",
+ "1": "e h\u00ebn\u00eb",
+ "2": "e mart\u00eb",
+ "3": "e m\u00ebrkur\u00eb",
+ "4": "e enjte",
+ "5": "e premte",
+ "6": "e shtun\u00eb"
+ },
+ "MONTH": {
+ "0": "janar",
+ "1": "shkurt",
+ "2": "mars",
+ "3": "prill",
+ "4": "maj",
+ "5": "qershor",
+ "6": "korrik",
+ "7": "gusht",
+ "8": "shtator",
+ "9": "tetor",
+ "10": "n\u00ebntor",
+ "11": "dhjetor"
+ },
+ "SHORTDAY": {
+ "0": "Die",
+ "1": "H\u00ebn",
+ "2": "Mar",
+ "3": "M\u00ebr",
+ "4": "Enj",
+ "5": "Pre",
+ "6": "Sht"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Shk",
+ "2": "Mar",
+ "3": "Pri",
+ "4": "Maj",
+ "5": "Qer",
+ "6": "Kor",
+ "7": "Gsh",
+ "8": "Sht",
+ "9": "Tet",
+ "10": "N\u00ebn",
+ "11": "Dhj"
+ },
+ "fullDate": "EEEE, dd MMMM y",
+ "longDate": "dd MMMM y",
+ "medium": "yyyy-MM-dd h.mm.ss.a",
+ "mediumDate": "yyyy-MM-dd",
+ "mediumTime": "h.mm.ss.a",
+ "short": "yy-MM-dd h.mm.a",
+ "shortDate": "yy-MM-dd",
+ "shortTime": "h.mm.a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Lek",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sq",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-ba.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-ba.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-ba.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "пре подне",
+ "1": "поподне"
+ },
+ "DAY": {
+ "0": "недеља",
+ "1": "понедељак",
+ "2": "уторак",
+ "3": "сриједа",
+ "4": "четвртак",
+ "5": "петак",
+ "6": "субота"
+ },
+ "MONTH": {
+ "0": "јануар",
+ "1": "фебруар",
+ "2": "март",
+ "3": "април",
+ "4": "мај",
+ "5": "јуни",
+ "6": "јули",
+ "7": "август",
+ "8": "септембар",
+ "9": "октобар",
+ "10": "новембар",
+ "11": "децембар"
+ },
+ "SHORTDAY": {
+ "0": "нед",
+ "1": "пон",
+ "2": "уто",
+ "3": "сри",
+ "4": "чет",
+ "5": "пет",
+ "6": "суб"
+ },
+ "SHORTMONTH": {
+ "0": "јан",
+ "1": "феб",
+ "2": "мар",
+ "3": "апр",
+ "4": "мај",
+ "5": "јун",
+ "6": "јул",
+ "7": "авг",
+ "8": "сеп",
+ "9": "окт",
+ "10": "нов",
+ "11": "дец"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "yyyy-MM-dd HH:mm:ss",
+ "mediumDate": "yyyy-MM-dd",
+ "mediumTime": "HH:mm:ss",
+ "short": "yy-MM-dd HH:mm",
+ "shortDate": "yy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sr-cyrl-ba",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-me.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-me.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-me.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "пре подне",
+ "1": "поподне"
+ },
+ "DAY": {
+ "0": "недеља",
+ "1": "понедељак",
+ "2": "уторак",
+ "3": "среда",
+ "4": "четвртак",
+ "5": "петак",
+ "6": "субота"
+ },
+ "MONTH": {
+ "0": "јануар",
+ "1": "фебруар",
+ "2": "март",
+ "3": "април",
+ "4": "мај",
+ "5": "јун",
+ "6": "јул",
+ "7": "август",
+ "8": "септембар",
+ "9": "октобар",
+ "10": "новембар",
+ "11": "децембар"
+ },
+ "SHORTDAY": {
+ "0": "нед",
+ "1": "пон",
+ "2": "уто",
+ "3": "сре",
+ "4": "чет",
+ "5": "пет",
+ "6": "суб"
+ },
+ "SHORTMONTH": {
+ "0": "јан",
+ "1": "феб",
+ "2": "мар",
+ "3": "апр",
+ "4": "мај",
+ "5": "јун",
+ "6": "јул",
+ "7": "авг",
+ "8": "сеп",
+ "9": "окт",
+ "10": "нов",
+ "11": "дец"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sr-cyrl-me",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-rs.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-rs.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl-rs.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+ "1": "\u043f\u043e\u043f\u043e\u0434\u043d\u0435"
+ },
+ "DAY": {
+ "0": "\u043d\u0435\u0434\u0435\u0459\u0430",
+ "1": "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+ "2": "\u0443\u0442\u043e\u0440\u0430\u043a",
+ "3": "\u0441\u0440\u0435\u0434\u0430",
+ "4": "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+ "5": "\u043f\u0435\u0442\u0430\u043a",
+ "6": "\u0441\u0443\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u0458\u0430\u043d\u0443\u0430\u0440",
+ "1": "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+ "2": "\u043c\u0430\u0440\u0442",
+ "3": "\u0430\u043f\u0440\u0438\u043b",
+ "4": "\u043c\u0430\u0458",
+ "5": "\u0458\u0443\u043d",
+ "6": "\u0458\u0443\u043b",
+ "7": "\u0430\u0432\u0433\u0443\u0441\u0442",
+ "8": "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+ "9": "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+ "10": "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+ "11": "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+ },
+ "SHORTDAY": {
+ "0": "\u043d\u0435\u0434",
+ "1": "\u043f\u043e\u043d",
+ "2": "\u0443\u0442\u043e",
+ "3": "\u0441\u0440\u0435",
+ "4": "\u0447\u0435\u0442",
+ "5": "\u043f\u0435\u0442",
+ "6": "\u0441\u0443\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u0458\u0430\u043d",
+ "1": "\u0444\u0435\u0431",
+ "2": "\u043c\u0430\u0440",
+ "3": "\u0430\u043f\u0440",
+ "4": "\u043c\u0430\u0458",
+ "5": "\u0458\u0443\u043d",
+ "6": "\u0458\u0443\u043b",
+ "7": "\u0430\u0432\u0433",
+ "8": "\u0441\u0435\u043f",
+ "9": "\u043e\u043a\u0442",
+ "10": "\u043d\u043e\u0432",
+ "11": "\u0434\u0435\u0446"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sr-cyrl-rs",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-cyrl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "пре подне",
+ "1": "поподне"
+ },
+ "DAY": {
+ "0": "недеља",
+ "1": "понедељак",
+ "2": "уторак",
+ "3": "среда",
+ "4": "четвртак",
+ "5": "петак",
+ "6": "субота"
+ },
+ "MONTH": {
+ "0": "јануар",
+ "1": "фебруар",
+ "2": "март",
+ "3": "април",
+ "4": "мај",
+ "5": "јун",
+ "6": "јул",
+ "7": "август",
+ "8": "септембар",
+ "9": "октобар",
+ "10": "новембар",
+ "11": "децембар"
+ },
+ "SHORTDAY": {
+ "0": "нед",
+ "1": "пон",
+ "2": "уто",
+ "3": "сре",
+ "4": "чет",
+ "5": "пет",
+ "6": "суб"
+ },
+ "SHORTMONTH": {
+ "0": "јан",
+ "1": "феб",
+ "2": "мар",
+ "3": "апр",
+ "4": "мај",
+ "5": "јун",
+ "6": "јул",
+ "7": "авг",
+ "8": "сеп",
+ "9": "окт",
+ "10": "нов",
+ "11": "дец"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sr-cyrl",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-ba.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-ba.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-ba.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "pre podne",
+ "1": "popodne"
+ },
+ "DAY": {
+ "0": "nedelja",
+ "1": "ponedeljak",
+ "2": "utorak",
+ "3": "sreda",
+ "4": "četvrtak",
+ "5": "petak",
+ "6": "subota"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "mart",
+ "3": "april",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avgust",
+ "8": "septembar",
+ "9": "oktobar",
+ "10": "novembar",
+ "11": "decembar"
+ },
+ "SHORTDAY": {
+ "0": "ned",
+ "1": "pon",
+ "2": "uto",
+ "3": "sre",
+ "4": "čet",
+ "5": "pet",
+ "6": "sub"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avg",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sr-latn-ba",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-me.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-me.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-me.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "pre podne",
+ "1": "popodne"
+ },
+ "DAY": {
+ "0": "nedelja",
+ "1": "ponedeljak",
+ "2": "utorak",
+ "3": "sreda",
+ "4": "četvrtak",
+ "5": "petak",
+ "6": "subota"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "mart",
+ "3": "april",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avgust",
+ "8": "septembar",
+ "9": "oktobar",
+ "10": "novembar",
+ "11": "decembar"
+ },
+ "SHORTDAY": {
+ "0": "ned",
+ "1": "pon",
+ "2": "uto",
+ "3": "sre",
+ "4": "čet",
+ "5": "pet",
+ "6": "sub"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avg",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "d.MM.yyyy.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sr-latn-me",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-rs.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-rs.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn-rs.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "pre podne",
+ "1": "popodne"
+ },
+ "DAY": {
+ "0": "nedelja",
+ "1": "ponedeljak",
+ "2": "utorak",
+ "3": "sreda",
+ "4": "\u010detvrtak",
+ "5": "petak",
+ "6": "subota"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "mart",
+ "3": "april",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avgust",
+ "8": "septembar",
+ "9": "oktobar",
+ "10": "novembar",
+ "11": "decembar"
+ },
+ "SHORTDAY": {
+ "0": "ned",
+ "1": "pon",
+ "2": "uto",
+ "3": "sre",
+ "4": "\u010det",
+ "5": "pet",
+ "6": "sub"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avg",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sr-latn-rs",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-latn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "pre podne",
+ "1": "popodne"
+ },
+ "DAY": {
+ "0": "nedelja",
+ "1": "ponedeljak",
+ "2": "utorak",
+ "3": "sreda",
+ "4": "četvrtak",
+ "5": "petak",
+ "6": "subota"
+ },
+ "MONTH": {
+ "0": "januar",
+ "1": "februar",
+ "2": "mart",
+ "3": "april",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avgust",
+ "8": "septembar",
+ "9": "oktobar",
+ "10": "novembar",
+ "11": "decembar"
+ },
+ "SHORTDAY": {
+ "0": "ned",
+ "1": "pon",
+ "2": "uto",
+ "3": "sre",
+ "4": "čet",
+ "5": "pet",
+ "6": "sub"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "avg",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sr-latn",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-rs.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-rs.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr-rs.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"NUMBER_FORMATS":{"DECIMAL_SEP":".","GROUP_SEP":",","PATTERNS":[{"minInt":1,"minFrac":0,"macFrac":0,"posPre":"","posSuf":"","negPre":"-","negSuf":"","gSize":3,"lgSize":3,"maxFrac":3},{"minInt":1,"minFrac":2,"macFrac":0,"posPre":"","posSuf":" \u00A4","negPre":"-","negSuf":" \u00A4","gSize":3,"lgSize":3,"maxFrac":2}],"CURRENCY_SYM":"РСД"},"pluralCat":function (n) { if ((n % 10) == 1 && (n % 100) != 11) { return PLURAL_CATEGORY.ONE; } if ((n % 10) >= 2 && (n % 10) <= 4 && ((n % 100) < 12 || (n % 100) > 14) && n == Math.floor(n)) { return PLURAL_CATEGORY.FEW; } if ((n % 10) == 0 || ((n % 10) >= 5 && (n % 10) <= 9) || ((n % 100) >= 11 && (n % 100) <= 14) && n == Math.floor(n)) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;},"DATETIME_FORMATS":{"MONTH":["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],"SHORTMONTH":["јан","феб","мар","апр","мај","јун","јул","авг","сеп","окт","нов","дец"],"DAY":["недеља","понедељак","уторак","среда","четвртак","петак","субота"],"SHORTDAY":["нед","пон","уто","сре","чет","пет","суб"],"AMPMS":["пре подне","поподне"],"medium":"dd.MM.y. HH.mm.ss","short":"d.M.yy. HH.mm","fullDate":"EEEE, dd. MMMM y.","longDate":"dd. MMMM y.","mediumDate":"dd.MM.y.","shortDate":"d.M.yy.","mediumTime":"HH.mm.ss","shortTime":"HH.mm"},"id":"sr-rs"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
+ "1": "\u043f\u043e\u043f\u043e\u0434\u043d\u0435"
+ },
+ "DAY": {
+ "0": "\u043d\u0435\u0434\u0435\u0459\u0430",
+ "1": "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
+ "2": "\u0443\u0442\u043e\u0440\u0430\u043a",
+ "3": "\u0441\u0440\u0435\u0434\u0430",
+ "4": "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
+ "5": "\u043f\u0435\u0442\u0430\u043a",
+ "6": "\u0441\u0443\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u0458\u0430\u043d\u0443\u0430\u0440",
+ "1": "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
+ "2": "\u043c\u0430\u0440\u0442",
+ "3": "\u0430\u043f\u0440\u0438\u043b",
+ "4": "\u043c\u0430\u0458",
+ "5": "\u0458\u0443\u043d",
+ "6": "\u0458\u0443\u043b",
+ "7": "\u0430\u0432\u0433\u0443\u0441\u0442",
+ "8": "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
+ "9": "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
+ "10": "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
+ "11": "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"
+ },
+ "SHORTDAY": {
+ "0": "\u043d\u0435\u0434",
+ "1": "\u043f\u043e\u043d",
+ "2": "\u0443\u0442\u043e",
+ "3": "\u0441\u0440\u0435",
+ "4": "\u0447\u0435\u0442",
+ "5": "\u043f\u0435\u0442",
+ "6": "\u0441\u0443\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u0458\u0430\u043d",
+ "1": "\u0444\u0435\u0431",
+ "2": "\u043c\u0430\u0440",
+ "3": "\u0430\u043f\u0440",
+ "4": "\u043c\u0430\u0458",
+ "5": "\u0458\u0443\u043d",
+ "6": "\u0458\u0443\u043b",
+ "7": "\u0430\u0432\u0433",
+ "8": "\u0441\u0435\u043f",
+ "9": "\u043e\u043a\u0442",
+ "10": "\u043d\u043e\u0432",
+ "11": "\u0434\u0435\u0446"
+ },
+ "fullDate": "EEEE, dd. MMMM y.",
+ "longDate": "dd. MMMM y.",
+ "medium": "dd.MM.y. HH.mm.ss",
+ "mediumDate": "dd.MM.y.",
+ "mediumTime": "HH.mm.ss",
+ "short": "d.M.yy. HH.mm",
+ "shortDate": "d.M.yy.",
+ "shortTime": "HH.mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "din",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sr",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-fi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-fi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-fi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "fm",
+ "1": "em"
+ },
+ "DAY": {
+ "0": "söndag",
+ "1": "måndag",
+ "2": "tisdag",
+ "3": "onsdag",
+ "4": "torsdag",
+ "5": "fredag",
+ "6": "lördag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "mars",
+ "3": "april",
+ "4": "maj",
+ "5": "juni",
+ "6": "juli",
+ "7": "augusti",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "sön",
+ "1": "mån",
+ "2": "tis",
+ "3": "ons",
+ "4": "tors",
+ "5": "fre",
+ "6": "lör"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "aug",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE'en' 'den' d:'e' MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": " ",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": " \u00A4",
+ "posPre": "",
+ "posSuf": " \u00A4"
+ }
+ }
+ },
+ "id": "sv-fi",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-se.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-se.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv-se.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "fm",
+ "1": "em"
+ },
+ "DAY": {
+ "0": "s\u00f6ndag",
+ "1": "m\u00e5ndag",
+ "2": "tisdag",
+ "3": "onsdag",
+ "4": "torsdag",
+ "5": "fredag",
+ "6": "l\u00f6rdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "mars",
+ "3": "april",
+ "4": "maj",
+ "5": "juni",
+ "6": "juli",
+ "7": "augusti",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "s\u00f6n",
+ "1": "m\u00e5n",
+ "2": "tis",
+ "3": "ons",
+ "4": "tors",
+ "5": "fre",
+ "6": "l\u00f6r"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "aug",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE'en' 'den' d:'e' MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sv-se",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sv.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "fm",
+ "1": "em"
+ },
+ "DAY": {
+ "0": "s\u00f6ndag",
+ "1": "m\u00e5ndag",
+ "2": "tisdag",
+ "3": "onsdag",
+ "4": "torsdag",
+ "5": "fredag",
+ "6": "l\u00f6rdag"
+ },
+ "MONTH": {
+ "0": "januari",
+ "1": "februari",
+ "2": "mars",
+ "3": "april",
+ "4": "maj",
+ "5": "juni",
+ "6": "juli",
+ "7": "augusti",
+ "8": "september",
+ "9": "oktober",
+ "10": "november",
+ "11": "december"
+ },
+ "SHORTDAY": {
+ "0": "s\u00f6n",
+ "1": "m\u00e5n",
+ "2": "tis",
+ "3": "ons",
+ "4": "tors",
+ "5": "fre",
+ "6": "l\u00f6r"
+ },
+ "SHORTMONTH": {
+ "0": "jan",
+ "1": "feb",
+ "2": "mar",
+ "3": "apr",
+ "4": "maj",
+ "5": "jun",
+ "6": "jul",
+ "7": "aug",
+ "8": "sep",
+ "9": "okt",
+ "10": "nov",
+ "11": "dec"
+ },
+ "fullDate": "EEEE'en' 'den' d:'e' MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "yyyy-MM-dd HH:mm",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "kr",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "sv",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-ke.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-ke.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-ke.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "asubuhi",
+ "1": "alasiri"
+ },
+ "DAY": {
+ "0": "Jumapili",
+ "1": "Jumatatu",
+ "2": "Jumanne",
+ "3": "Jumatano",
+ "4": "Alhamisi",
+ "5": "Ijumaa",
+ "6": "Jumamosi"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Machi",
+ "3": "Aprili",
+ "4": "Mei",
+ "5": "Juni",
+ "6": "Julai",
+ "7": "Agosti",
+ "8": "Septemba",
+ "9": "Oktoba",
+ "10": "Novemba",
+ "11": "Desemba"
+ },
+ "SHORTDAY": {
+ "0": "J2",
+ "1": "J3",
+ "2": "J4",
+ "3": "J5",
+ "4": "Alh",
+ "5": "Ij",
+ "6": "J1"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mac",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ago",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "TSh",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sw-ke",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-tz.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-tz.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw-tz.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "asubuhi",
+ "1": "alasiri"
+ },
+ "DAY": {
+ "0": "Jumapili",
+ "1": "Jumatatu",
+ "2": "Jumanne",
+ "3": "Jumatano",
+ "4": "Alhamisi",
+ "5": "Ijumaa",
+ "6": "Jumamosi"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Machi",
+ "3": "Aprili",
+ "4": "Mei",
+ "5": "Juni",
+ "6": "Julai",
+ "7": "Agosti",
+ "8": "Septemba",
+ "9": "Oktoba",
+ "10": "Novemba",
+ "11": "Desemba"
+ },
+ "SHORTDAY": {
+ "0": "J2",
+ "1": "J3",
+ "2": "J4",
+ "3": "J5",
+ "4": "Alh",
+ "5": "Ij",
+ "6": "J1"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mac",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ago",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "TSh",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sw-tz",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_sw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "asubuhi",
+ "1": "alasiri"
+ },
+ "DAY": {
+ "0": "Jumapili",
+ "1": "Jumatatu",
+ "2": "Jumanne",
+ "3": "Jumatano",
+ "4": "Alhamisi",
+ "5": "Ijumaa",
+ "6": "Jumamosi"
+ },
+ "MONTH": {
+ "0": "Januari",
+ "1": "Februari",
+ "2": "Machi",
+ "3": "Aprili",
+ "4": "Mei",
+ "5": "Juni",
+ "6": "Julai",
+ "7": "Agosti",
+ "8": "Septemba",
+ "9": "Oktoba",
+ "10": "Novemba",
+ "11": "Desemba"
+ },
+ "SHORTDAY": {
+ "0": "J2",
+ "1": "J3",
+ "2": "J4",
+ "3": "J5",
+ "4": "Alh",
+ "5": "Ij",
+ "6": "J1"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mac",
+ "3": "Apr",
+ "4": "Mei",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Ago",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Des"
+ },
+ "fullDate": "EEEE, d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd/MM/yyyy h:mm a",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "TSh",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "sw",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+ "1": "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+ "2": "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+ "3": "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+ "4": "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+ "5": "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+ "6": "\u0b9a\u0ba9\u0bbf"
+ },
+ "MONTH": {
+ "0": "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+ "1": "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+ "2": "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+ "3": "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+ "4": "\u0bae\u0bc7",
+ "5": "\u0b9c\u0bc2\u0ba9\u0bcd",
+ "6": "\u0b9c\u0bc2\u0bb2\u0bc8",
+ "7": "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+ "8": "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+ "9": "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+ "10": "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+ "11": "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+ },
+ "SHORTDAY": {
+ "0": "\u0b9e\u0bbe",
+ "1": "\u0ba4\u0bbf",
+ "2": "\u0b9a\u0bc6",
+ "3": "\u0baa\u0bc1",
+ "4": "\u0bb5\u0bbf",
+ "5": "\u0bb5\u0bc6",
+ "6": "\u0b9a"
+ },
+ "SHORTMONTH": {
+ "0": "\u0b9c\u0ba9.",
+ "1": "\u0baa\u0bbf\u0baa\u0bcd.",
+ "2": "\u0bae\u0bbe\u0bb0\u0bcd.",
+ "3": "\u0b8f\u0baa\u0bcd.",
+ "4": "\u0bae\u0bc7",
+ "5": "\u0b9c\u0bc2\u0ba9\u0bcd",
+ "6": "\u0b9c\u0bc2\u0bb2\u0bc8",
+ "7": "\u0b86\u0b95.",
+ "8": "\u0b9a\u0bc6\u0baa\u0bcd.",
+ "9": "\u0b85\u0b95\u0bcd.",
+ "10": "\u0ba8\u0bb5.",
+ "11": "\u0b9f\u0bbf\u0b9a."
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ta-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-lk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-lk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta-lk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "ஞாயிறு",
+ "1": "திங்கள்",
+ "2": "செவ்வாய்",
+ "3": "புதன்",
+ "4": "வியாழன்",
+ "5": "வெள்ளி",
+ "6": "சனி"
+ },
+ "MONTH": {
+ "0": "ஜனவரி",
+ "1": "பிப்ரவரி",
+ "2": "மார்ச்",
+ "3": "ஏப்ரல்",
+ "4": "மே",
+ "5": "ஜூன்",
+ "6": "ஜூலை",
+ "7": "ஆகஸ்ட்",
+ "8": "செப்டம்பர்",
+ "9": "அக்டோபர்",
+ "10": "நவம்பர்",
+ "11": "டிசம்பர்"
+ },
+ "SHORTDAY": {
+ "0": "ஞா",
+ "1": "தி",
+ "2": "செ",
+ "3": "பு",
+ "4": "வி",
+ "5": "வெ",
+ "6": "ச"
+ },
+ "SHORTMONTH": {
+ "0": "ஜன.",
+ "1": "பிப்.",
+ "2": "மார்.",
+ "3": "ஏப்.",
+ "4": "மே",
+ "5": "ஜூன்",
+ "6": "ஜூலை",
+ "7": "ஆக.",
+ "8": "செப்.",
+ "9": "அக்.",
+ "10": "நவ.",
+ "11": "டிச."
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "₹",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00A4 -",
+ "negSuf": "",
+ "posPre": "\u00A4 ",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ta-lk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ta.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
+ "1": "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
+ "2": "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd",
+ "3": "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd",
+ "4": "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd",
+ "5": "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf",
+ "6": "\u0b9a\u0ba9\u0bbf"
+ },
+ "MONTH": {
+ "0": "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf",
+ "1": "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf",
+ "2": "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd",
+ "3": "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd",
+ "4": "\u0bae\u0bc7",
+ "5": "\u0b9c\u0bc2\u0ba9\u0bcd",
+ "6": "\u0b9c\u0bc2\u0bb2\u0bc8",
+ "7": "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd",
+ "8": "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+ "9": "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
+ "10": "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd",
+ "11": "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"
+ },
+ "SHORTDAY": {
+ "0": "\u0b9e\u0bbe",
+ "1": "\u0ba4\u0bbf",
+ "2": "\u0b9a\u0bc6",
+ "3": "\u0baa\u0bc1",
+ "4": "\u0bb5\u0bbf",
+ "5": "\u0bb5\u0bc6",
+ "6": "\u0b9a"
+ },
+ "SHORTMONTH": {
+ "0": "\u0b9c\u0ba9.",
+ "1": "\u0baa\u0bbf\u0baa\u0bcd.",
+ "2": "\u0bae\u0bbe\u0bb0\u0bcd.",
+ "3": "\u0b8f\u0baa\u0bcd.",
+ "4": "\u0bae\u0bc7",
+ "5": "\u0b9c\u0bc2\u0ba9\u0bcd",
+ "6": "\u0b9c\u0bc2\u0bb2\u0bc8",
+ "7": "\u0b86\u0b95.",
+ "8": "\u0b9a\u0bc6\u0baa\u0bcd.",
+ "9": "\u0b85\u0b95\u0bcd.",
+ "10": "\u0ba8\u0bb5.",
+ "11": "\u0b9f\u0bbf\u0b9a."
+ },
+ "fullDate": "EEEE, d MMMM, y",
+ "longDate": "d MMMM, y",
+ "medium": "d MMM, y h:mm:ss a",
+ "mediumDate": "d MMM, y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d-M-yy h:mm a",
+ "shortDate": "d-M-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 2,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4\u00a0-",
+ "negSuf": "",
+ "posPre": "\u00a4\u00a0",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ta",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02",
+ "1": "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02",
+ "2": "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02",
+ "3": "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02",
+ "4": "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02",
+ "5": "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02",
+ "6": "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"
+ },
+ "MONTH": {
+ "0": "\u0c1c\u0c28\u0c35\u0c30\u0c3f",
+ "1": "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
+ "2": "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+ "3": "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d",
+ "4": "\u0c2e\u0c47",
+ "5": "\u0c1c\u0c42\u0c28\u0c4d",
+ "6": "\u0c1c\u0c42\u0c32\u0c48",
+ "7": "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+ "8": "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+ "9": "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+ "10": "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+ "11": "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+ },
+ "SHORTDAY": {
+ "0": "\u0c06\u0c26\u0c3f",
+ "1": "\u0c38\u0c4b\u0c2e",
+ "2": "\u0c2e\u0c02\u0c17\u0c33",
+ "3": "\u0c2c\u0c41\u0c27",
+ "4": "\u0c17\u0c41\u0c30\u0c41",
+ "5": "\u0c36\u0c41\u0c15\u0c4d\u0c30",
+ "6": "\u0c36\u0c28\u0c3f"
+ },
+ "SHORTMONTH": {
+ "0": "\u0c1c\u0c28",
+ "1": "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30",
+ "2": "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+ "3": "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f",
+ "4": "\u0c2e\u0c47",
+ "5": "\u0c1c\u0c42\u0c28\u0c4d",
+ "6": "\u0c1c\u0c42\u0c32\u0c48",
+ "7": "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+ "8": "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+ "9": "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+ "10": "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+ "11": "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd-MM-yy h:mm a",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "te-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_te.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "am",
+ "1": "pm"
+ },
+ "DAY": {
+ "0": "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02",
+ "1": "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02",
+ "2": "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02",
+ "3": "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02",
+ "4": "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02",
+ "5": "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02",
+ "6": "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"
+ },
+ "MONTH": {
+ "0": "\u0c1c\u0c28\u0c35\u0c30\u0c3f",
+ "1": "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f",
+ "2": "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+ "3": "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d",
+ "4": "\u0c2e\u0c47",
+ "5": "\u0c1c\u0c42\u0c28\u0c4d",
+ "6": "\u0c1c\u0c42\u0c32\u0c48",
+ "7": "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+ "8": "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+ "9": "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+ "10": "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+ "11": "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+ },
+ "SHORTDAY": {
+ "0": "\u0c06\u0c26\u0c3f",
+ "1": "\u0c38\u0c4b\u0c2e",
+ "2": "\u0c2e\u0c02\u0c17\u0c33",
+ "3": "\u0c2c\u0c41\u0c27",
+ "4": "\u0c17\u0c41\u0c30\u0c41",
+ "5": "\u0c36\u0c41\u0c15\u0c4d\u0c30",
+ "6": "\u0c36\u0c28\u0c3f"
+ },
+ "SHORTMONTH": {
+ "0": "\u0c1c\u0c28",
+ "1": "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30",
+ "2": "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f",
+ "3": "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f",
+ "4": "\u0c2e\u0c47",
+ "5": "\u0c1c\u0c42\u0c28\u0c4d",
+ "6": "\u0c1c\u0c42\u0c32\u0c48",
+ "7": "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41",
+ "8": "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d",
+ "9": "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d",
+ "10": "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
+ "11": "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"
+ },
+ "fullDate": "EEEE d MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "dd-MM-yy h:mm a",
+ "shortDate": "dd-MM-yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b9",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "te",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th-th.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th-th.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th-th.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07",
+ "1": "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"
+ },
+ "DAY": {
+ "0": "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c",
+ "1": "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c",
+ "2": "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23",
+ "3": "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18",
+ "4": "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35",
+ "5": "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c",
+ "6": "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"
+ },
+ "MONTH": {
+ "0": "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
+ "1": "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
+ "2": "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
+ "3": "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
+ "4": "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
+ "5": "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
+ "6": "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
+ "7": "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
+ "8": "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
+ "9": "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21",
+ "10": "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
+ "11": "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
+ },
+ "SHORTDAY": {
+ "0": "\u0e2d\u0e32.",
+ "1": "\u0e08.",
+ "2": "\u0e2d.",
+ "3": "\u0e1e.",
+ "4": "\u0e1e\u0e24.",
+ "5": "\u0e28.",
+ "6": "\u0e2a."
+ },
+ "SHORTMONTH": {
+ "0": "\u0e21.\u0e04.",
+ "1": "\u0e01.\u0e1e.",
+ "2": "\u0e21\u0e35.\u0e04.",
+ "3": "\u0e40\u0e21.\u0e22.",
+ "4": "\u0e1e.\u0e04.",
+ "5": "\u0e21\u0e34.\u0e22.",
+ "6": "\u0e01.\u0e04.",
+ "7": "\u0e2a.\u0e04.",
+ "8": "\u0e01.\u0e22.",
+ "9": "\u0e15.\u0e04.",
+ "10": "\u0e1e.\u0e22.",
+ "11": "\u0e18.\u0e04."
+ },
+ "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y H:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "H:mm:ss",
+ "short": "d/M/yyyy H:mm",
+ "shortDate": "d/M/yyyy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u0e3f",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "th-th",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_th.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07",
+ "1": "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"
+ },
+ "DAY": {
+ "0": "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c",
+ "1": "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c",
+ "2": "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23",
+ "3": "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18",
+ "4": "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35",
+ "5": "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c",
+ "6": "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"
+ },
+ "MONTH": {
+ "0": "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21",
+ "1": "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
+ "2": "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21",
+ "3": "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
+ "4": "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21",
+ "5": "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19",
+ "6": "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21",
+ "7": "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21",
+ "8": "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19",
+ "9": "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21",
+ "10": "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19",
+ "11": "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"
+ },
+ "SHORTDAY": {
+ "0": "\u0e2d\u0e32.",
+ "1": "\u0e08.",
+ "2": "\u0e2d.",
+ "3": "\u0e1e.",
+ "4": "\u0e1e\u0e24.",
+ "5": "\u0e28.",
+ "6": "\u0e2a."
+ },
+ "SHORTMONTH": {
+ "0": "\u0e21.\u0e04.",
+ "1": "\u0e01.\u0e1e.",
+ "2": "\u0e21\u0e35.\u0e04.",
+ "3": "\u0e40\u0e21.\u0e22.",
+ "4": "\u0e1e.\u0e04.",
+ "5": "\u0e21\u0e34.\u0e22.",
+ "6": "\u0e01.\u0e04.",
+ "7": "\u0e2a.\u0e04.",
+ "8": "\u0e01.\u0e22.",
+ "9": "\u0e15.\u0e04.",
+ "10": "\u0e1e.\u0e22.",
+ "11": "\u0e18.\u0e04."
+ },
+ "fullDate": "EEEE\u0e17\u0e35\u0e48 d MMMM G y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y H:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "H:mm:ss",
+ "short": "d/M/yyyy H:mm",
+ "shortDate": "d/M/yyyy",
+ "shortTime": "H:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u0e3f",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "th",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl-ph.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl-ph.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl-ph.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,4 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {"NUMBER_FORMATS":{"DECIMAL_SEP":".","GROUP_SEP":",","PATTERNS":[{"minInt":1,"minFrac":0,"macFrac":0,"posPre":"","posSuf":"","negPre":"-","negSuf":"","gSize":3,"lgSize":3,"maxFrac":3},{"minInt":1,"minFrac":2,"macFrac":0,"posPre":"\u00A4 ","posSuf":"","negPre":"\u00A4 -","negSuf":"","gSize":3,"lgSize":3,"maxFrac":2}],"CURRENCY_SYM":"P"},"pluralCat":function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;},"DATETIME_FORMATS":{"MONTH":["Enero","Pebrero","Marso","Abril","Mayo","Hunyo","Hulyo","Agosto","Setyembre","Oktubre","Nobyembre","Disyembre"],"SHORTMONTH":["Ene","Peb","Mar","Abr","May","Hun","Hul","Ago","Set","Okt","Nob","Dis"],"DAY":["Linggo","Lunes","Martes","Miyerkules","Huwebes","Biyernes","Sabado"],"SHORTDAY":["Lin","Lun","Mar","Mye","Huw","Bye","Sab"],"AMPMS":["AM","PM"],"medium":"MMM d, y HH:mm:ss","short":"M/d/yy HH:mm","fullDate":"EEEE, MMMM dd y","longDate":"MMMM d, y","mediumDate":"MMM d, y","shortDate":"M/d/yy","mediumTime":"HH:mm:ss","shortTime":"HH:mm"},"id":"tl-ph"});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tl.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Linggo",
+ "1": "Lunes",
+ "2": "Martes",
+ "3": "Miyerkules",
+ "4": "Huwebes",
+ "5": "Biyernes",
+ "6": "Sabado"
+ },
+ "MONTH": {
+ "0": "Enero",
+ "1": "Pebrero",
+ "2": "Marso",
+ "3": "Abril",
+ "4": "Mayo",
+ "5": "Hunyo",
+ "6": "Hulyo",
+ "7": "Agosto",
+ "8": "Setyembre",
+ "9": "Oktubre",
+ "10": "Nobyembre",
+ "11": "Disyembre"
+ },
+ "SHORTDAY": {
+ "0": "Lin",
+ "1": "Lun",
+ "2": "Mar",
+ "3": "Mye",
+ "4": "Huw",
+ "5": "Bye",
+ "6": "Sab"
+ },
+ "SHORTMONTH": {
+ "0": "Ene",
+ "1": "Peb",
+ "2": "Mar",
+ "3": "Abr",
+ "4": "May",
+ "5": "Hun",
+ "6": "Hul",
+ "7": "Ago",
+ "8": "Set",
+ "9": "Okt",
+ "10": "Nob",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE, MMMM dd y",
+ "longDate": "MMMM d, y",
+ "medium": "MMM d, y HH:mm:ss",
+ "mediumDate": "MMM d, y",
+ "mediumTime": "HH:mm:ss",
+ "short": "M/d/yy HH:mm",
+ "shortDate": "M/d/yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b1",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "tl",
+ "pluralCat": function (n) { if (n == 0 || n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr-tr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr-tr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr-tr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Pazar",
+ "1": "Pazartesi",
+ "2": "Sal\u0131",
+ "3": "\u00c7ar\u015famba",
+ "4": "Per\u015fembe",
+ "5": "Cuma",
+ "6": "Cumartesi"
+ },
+ "MONTH": {
+ "0": "Ocak",
+ "1": "\u015eubat",
+ "2": "Mart",
+ "3": "Nisan",
+ "4": "May\u0131s",
+ "5": "Haziran",
+ "6": "Temmuz",
+ "7": "A\u011fustos",
+ "8": "Eyl\u00fcl",
+ "9": "Ekim",
+ "10": "Kas\u0131m",
+ "11": "Aral\u0131k"
+ },
+ "SHORTDAY": {
+ "0": "Paz",
+ "1": "Pzt",
+ "2": "Sal",
+ "3": "\u00c7ar",
+ "4": "Per",
+ "5": "Cum",
+ "6": "Cmt"
+ },
+ "SHORTMONTH": {
+ "0": "Oca",
+ "1": "\u015eub",
+ "2": "Mar",
+ "3": "Nis",
+ "4": "May",
+ "5": "Haz",
+ "6": "Tem",
+ "7": "A\u011fu",
+ "8": "Eyl",
+ "9": "Eki",
+ "10": "Kas",
+ "11": "Ara"
+ },
+ "fullDate": "d MMMM y EEEE",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd MM yyyy HH:mm",
+ "shortDate": "dd MM yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "TL",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "tr-tr",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_tr.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Pazar",
+ "1": "Pazartesi",
+ "2": "Sal\u0131",
+ "3": "\u00c7ar\u015famba",
+ "4": "Per\u015fembe",
+ "5": "Cuma",
+ "6": "Cumartesi"
+ },
+ "MONTH": {
+ "0": "Ocak",
+ "1": "\u015eubat",
+ "2": "Mart",
+ "3": "Nisan",
+ "4": "May\u0131s",
+ "5": "Haziran",
+ "6": "Temmuz",
+ "7": "A\u011fustos",
+ "8": "Eyl\u00fcl",
+ "9": "Ekim",
+ "10": "Kas\u0131m",
+ "11": "Aral\u0131k"
+ },
+ "SHORTDAY": {
+ "0": "Paz",
+ "1": "Pzt",
+ "2": "Sal",
+ "3": "\u00c7ar",
+ "4": "Per",
+ "5": "Cum",
+ "6": "Cmt"
+ },
+ "SHORTMONTH": {
+ "0": "Oca",
+ "1": "\u015eub",
+ "2": "Mar",
+ "3": "Nis",
+ "4": "May",
+ "5": "Haz",
+ "6": "Tem",
+ "7": "A\u011fu",
+ "8": "Eyl",
+ "9": "Eki",
+ "10": "Kas",
+ "11": "Ara"
+ },
+ "fullDate": "d MMMM y EEEE",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd MM yyyy HH:mm",
+ "shortDate": "dd MM yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "TL",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(",
+ "negSuf": "\u00a0\u00a4)",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "tr",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk-ua.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk-ua.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk-ua.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0434\u043f",
+ "1": "\u043f\u043f"
+ },
+ "DAY": {
+ "0": "\u041d\u0435\u0434\u0456\u043b\u044f",
+ "1": "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a",
+ "2": "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a",
+ "3": "\u0421\u0435\u0440\u0435\u0434\u0430",
+ "4": "\u0427\u0435\u0442\u0432\u0435\u0440",
+ "5": "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f",
+ "6": "\u0421\u0443\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u0441\u0456\u0447\u043d\u044f",
+ "1": "\u043b\u044e\u0442\u043e\u0433\u043e",
+ "2": "\u0431\u0435\u0440\u0435\u0437\u043d\u044f",
+ "3": "\u043a\u0432\u0456\u0442\u043d\u044f",
+ "4": "\u0442\u0440\u0430\u0432\u043d\u044f",
+ "5": "\u0447\u0435\u0440\u0432\u043d\u044f",
+ "6": "\u043b\u0438\u043f\u043d\u044f",
+ "7": "\u0441\u0435\u0440\u043f\u043d\u044f",
+ "8": "\u0432\u0435\u0440\u0435\u0441\u043d\u044f",
+ "9": "\u0436\u043e\u0432\u0442\u043d\u044f",
+ "10": "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430",
+ "11": "\u0433\u0440\u0443\u0434\u043d\u044f"
+ },
+ "SHORTDAY": {
+ "0": "\u041d\u0434",
+ "1": "\u041f\u043d",
+ "2": "\u0412\u0442",
+ "3": "\u0421\u0440",
+ "4": "\u0427\u0442",
+ "5": "\u041f\u0442",
+ "6": "\u0421\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u0441\u0456\u0447.",
+ "1": "\u043b\u044e\u0442.",
+ "2": "\u0431\u0435\u0440.",
+ "3": "\u043a\u0432\u0456\u0442.",
+ "4": "\u0442\u0440\u0430\u0432.",
+ "5": "\u0447\u0435\u0440\u0432.",
+ "6": "\u043b\u0438\u043f.",
+ "7": "\u0441\u0435\u0440\u043f.",
+ "8": "\u0432\u0435\u0440.",
+ "9": "\u0436\u043e\u0432\u0442.",
+ "10": "\u043b\u0438\u0441\u0442.",
+ "11": "\u0433\u0440\u0443\u0434."
+ },
+ "fullDate": "EEEE, d MMMM y '\u0440'.",
+ "longDate": "d MMMM y '\u0440'.",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b4",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "uk-ua",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_uk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u0434\u043f",
+ "1": "\u043f\u043f"
+ },
+ "DAY": {
+ "0": "\u041d\u0435\u0434\u0456\u043b\u044f",
+ "1": "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a",
+ "2": "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a",
+ "3": "\u0421\u0435\u0440\u0435\u0434\u0430",
+ "4": "\u0427\u0435\u0442\u0432\u0435\u0440",
+ "5": "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f",
+ "6": "\u0421\u0443\u0431\u043e\u0442\u0430"
+ },
+ "MONTH": {
+ "0": "\u0441\u0456\u0447\u043d\u044f",
+ "1": "\u043b\u044e\u0442\u043e\u0433\u043e",
+ "2": "\u0431\u0435\u0440\u0435\u0437\u043d\u044f",
+ "3": "\u043a\u0432\u0456\u0442\u043d\u044f",
+ "4": "\u0442\u0440\u0430\u0432\u043d\u044f",
+ "5": "\u0447\u0435\u0440\u0432\u043d\u044f",
+ "6": "\u043b\u0438\u043f\u043d\u044f",
+ "7": "\u0441\u0435\u0440\u043f\u043d\u044f",
+ "8": "\u0432\u0435\u0440\u0435\u0441\u043d\u044f",
+ "9": "\u0436\u043e\u0432\u0442\u043d\u044f",
+ "10": "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430",
+ "11": "\u0433\u0440\u0443\u0434\u043d\u044f"
+ },
+ "SHORTDAY": {
+ "0": "\u041d\u0434",
+ "1": "\u041f\u043d",
+ "2": "\u0412\u0442",
+ "3": "\u0421\u0440",
+ "4": "\u0427\u0442",
+ "5": "\u041f\u0442",
+ "6": "\u0421\u0431"
+ },
+ "SHORTMONTH": {
+ "0": "\u0441\u0456\u0447.",
+ "1": "\u043b\u044e\u0442.",
+ "2": "\u0431\u0435\u0440.",
+ "3": "\u043a\u0432\u0456\u0442.",
+ "4": "\u0442\u0440\u0430\u0432.",
+ "5": "\u0447\u0435\u0440\u0432.",
+ "6": "\u043b\u0438\u043f.",
+ "7": "\u0441\u0435\u0440\u043f.",
+ "8": "\u0432\u0435\u0440.",
+ "9": "\u0436\u043e\u0432\u0442.",
+ "10": "\u043b\u0438\u0441\u0442.",
+ "11": "\u0433\u0440\u0443\u0434."
+ },
+ "fullDate": "EEEE, d MMMM y '\u0440'.",
+ "longDate": "d MMMM y '\u0440'.",
+ "medium": "d MMM y HH:mm:ss",
+ "mediumDate": "d MMM y",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd.MM.yy HH:mm",
+ "shortDate": "dd.MM.yy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20b4",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": "\u00a0",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "uk",
+ "pluralCat": function (n) { if (n % 10 == 1 && n % 100 != 11) { return PLURAL_CATEGORY.ONE; } if (n == (n | 0) && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) { return PLURAL_CATEGORY.FEW; } if (n % 10 == 0 || n == (n | 0) && n % 10 >= 5 && n % 10 <= 9 || n == (n | 0) && n % 100 >= 11 && n % 100 <= 14) { return PLURAL_CATEGORY.MANY; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-in.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-in.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-in.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "دن",
+ "1": "رات"
+ },
+ "DAY": {
+ "0": "اتوار",
+ "1": "پير",
+ "2": "منگل",
+ "3": "بده",
+ "4": "جمعرات",
+ "5": "جمعہ",
+ "6": "ہفتہ"
+ },
+ "MONTH": {
+ "0": "جنوری",
+ "1": "فروری",
+ "2": "مارچ",
+ "3": "اپريل",
+ "4": "مئ",
+ "5": "جون",
+ "6": "جولائ",
+ "7": "اگست",
+ "8": "ستمبر",
+ "9": "اکتوبر",
+ "10": "نومبر",
+ "11": "دسمبر"
+ },
+ "SHORTDAY": {
+ "0": "اتوار",
+ "1": "پير",
+ "2": "منگل",
+ "3": "بده",
+ "4": "جمعرات",
+ "5": "جمعہ",
+ "6": "ہفتہ"
+ },
+ "SHORTMONTH": {
+ "0": "جنوری",
+ "1": "فروری",
+ "2": "مارچ",
+ "3": "اپريل",
+ "4": "مئ",
+ "5": "جون",
+ "6": "جولائ",
+ "7": "اگست",
+ "8": "ستمبر",
+ "9": "اکتوبر",
+ "10": "نومبر",
+ "11": "دسمبر"
+ },
+ "fullDate": "EEEE؍ d؍ MMMM y",
+ "longDate": "d؍ MMMM y",
+ "medium": "d؍ MMM y h:mm:ss a",
+ "mediumDate": "d؍ MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rs",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00A4-",
+ "negSuf": "",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ur-in",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-pk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-pk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur-pk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u062f\u0646",
+ "1": "\u0631\u0627\u062a"
+ },
+ "DAY": {
+ "0": "\u0627\u062a\u0648\u0627\u0631",
+ "1": "\u067e\u064a\u0631",
+ "2": "\u0645\u0646\u06af\u0644",
+ "3": "\u0628\u062f\u0647",
+ "4": "\u062c\u0645\u0639\u0631\u0627\u062a",
+ "5": "\u062c\u0645\u0639\u06c1",
+ "6": "\u06c1\u0641\u062a\u06c1"
+ },
+ "MONTH": {
+ "0": "\u062c\u0646\u0648\u0631\u06cc",
+ "1": "\u0641\u0631\u0648\u0631\u06cc",
+ "2": "\u0645\u0627\u0631\u0686",
+ "3": "\u0627\u067e\u0631\u064a\u0644",
+ "4": "\u0645\u0626",
+ "5": "\u062c\u0648\u0646",
+ "6": "\u062c\u0648\u0644\u0627\u0626",
+ "7": "\u0627\u06af\u0633\u062a",
+ "8": "\u0633\u062a\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u062a\u0648\u0627\u0631",
+ "1": "\u067e\u064a\u0631",
+ "2": "\u0645\u0646\u06af\u0644",
+ "3": "\u0628\u062f\u0647",
+ "4": "\u062c\u0645\u0639\u0631\u0627\u062a",
+ "5": "\u062c\u0645\u0639\u06c1",
+ "6": "\u06c1\u0641\u062a\u06c1"
+ },
+ "SHORTMONTH": {
+ "0": "\u062c\u0646\u0648\u0631\u06cc",
+ "1": "\u0641\u0631\u0648\u0631\u06cc",
+ "2": "\u0645\u0627\u0631\u0686",
+ "3": "\u0627\u067e\u0631\u064a\u0644",
+ "4": "\u0645\u0626",
+ "5": "\u062c\u0648\u0646",
+ "6": "\u062c\u0648\u0644\u0627\u0626",
+ "7": "\u0627\u06af\u0633\u062a",
+ "8": "\u0633\u062a\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060d d\u060d MMMM y",
+ "longDate": "d\u060d MMMM y",
+ "medium": "d\u060d MMM y h:mm:ss a",
+ "mediumDate": "d\u060d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rs",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ur-pk",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_ur.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u062f\u0646",
+ "1": "\u0631\u0627\u062a"
+ },
+ "DAY": {
+ "0": "\u0627\u062a\u0648\u0627\u0631",
+ "1": "\u067e\u064a\u0631",
+ "2": "\u0645\u0646\u06af\u0644",
+ "3": "\u0628\u062f\u0647",
+ "4": "\u062c\u0645\u0639\u0631\u0627\u062a",
+ "5": "\u062c\u0645\u0639\u06c1",
+ "6": "\u06c1\u0641\u062a\u06c1"
+ },
+ "MONTH": {
+ "0": "\u062c\u0646\u0648\u0631\u06cc",
+ "1": "\u0641\u0631\u0648\u0631\u06cc",
+ "2": "\u0645\u0627\u0631\u0686",
+ "3": "\u0627\u067e\u0631\u064a\u0644",
+ "4": "\u0645\u0626",
+ "5": "\u062c\u0648\u0646",
+ "6": "\u062c\u0648\u0644\u0627\u0626",
+ "7": "\u0627\u06af\u0633\u062a",
+ "8": "\u0633\u062a\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0645\u0628\u0631"
+ },
+ "SHORTDAY": {
+ "0": "\u0627\u062a\u0648\u0627\u0631",
+ "1": "\u067e\u064a\u0631",
+ "2": "\u0645\u0646\u06af\u0644",
+ "3": "\u0628\u062f\u0647",
+ "4": "\u062c\u0645\u0639\u0631\u0627\u062a",
+ "5": "\u062c\u0645\u0639\u06c1",
+ "6": "\u06c1\u0641\u062a\u06c1"
+ },
+ "SHORTMONTH": {
+ "0": "\u062c\u0646\u0648\u0631\u06cc",
+ "1": "\u0641\u0631\u0648\u0631\u06cc",
+ "2": "\u0645\u0627\u0631\u0686",
+ "3": "\u0627\u067e\u0631\u064a\u0644",
+ "4": "\u0645\u0626",
+ "5": "\u062c\u0648\u0646",
+ "6": "\u062c\u0648\u0644\u0627\u0626",
+ "7": "\u0627\u06af\u0633\u062a",
+ "8": "\u0633\u062a\u0645\u0628\u0631",
+ "9": "\u0627\u06a9\u062a\u0648\u0628\u0631",
+ "10": "\u0646\u0648\u0645\u0628\u0631",
+ "11": "\u062f\u0633\u0645\u0628\u0631"
+ },
+ "fullDate": "EEEE\u060d d\u060d MMMM y",
+ "longDate": "d\u060d MMMM y",
+ "medium": "d\u060d MMM y h:mm:ss a",
+ "mediumDate": "d\u060d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "d/M/yy h:mm a",
+ "shortDate": "d/M/yy",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "Rs",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "ur",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi-vn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi-vn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi-vn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "SA",
+ "1": "CH"
+ },
+ "DAY": {
+ "0": "Ch\u1ee7 nh\u1eadt",
+ "1": "Th\u1ee9 hai",
+ "2": "Th\u1ee9 ba",
+ "3": "Th\u1ee9 t\u01b0",
+ "4": "Th\u1ee9 n\u0103m",
+ "5": "Th\u1ee9 s\u00e1u",
+ "6": "Th\u1ee9 b\u1ea3y"
+ },
+ "MONTH": {
+ "0": "th\u00e1ng m\u1ed9t",
+ "1": "th\u00e1ng hai",
+ "2": "th\u00e1ng ba",
+ "3": "th\u00e1ng t\u01b0",
+ "4": "th\u00e1ng n\u0103m",
+ "5": "th\u00e1ng s\u00e1u",
+ "6": "th\u00e1ng b\u1ea3y",
+ "7": "th\u00e1ng t\u00e1m",
+ "8": "th\u00e1ng ch\u00edn",
+ "9": "th\u00e1ng m\u01b0\u1eddi",
+ "10": "th\u00e1ng m\u01b0\u1eddi m\u1ed9t",
+ "11": "th\u00e1ng m\u01b0\u1eddi hai"
+ },
+ "SHORTDAY": {
+ "0": "CN",
+ "1": "Th 2",
+ "2": "Th 3",
+ "3": "Th 4",
+ "4": "Th 5",
+ "5": "Th 6",
+ "6": "Th 7"
+ },
+ "SHORTMONTH": {
+ "0": "thg 1",
+ "1": "thg 2",
+ "2": "thg 3",
+ "3": "thg 4",
+ "4": "thg 5",
+ "5": "thg 6",
+ "6": "thg 7",
+ "7": "thg 8",
+ "8": "thg 9",
+ "9": "thg 10",
+ "10": "thg 11",
+ "11": "thg 12"
+ },
+ "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y",
+ "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y",
+ "medium": "dd-MM-yyyy HH:mm:ss",
+ "mediumDate": "dd-MM-yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yyyy HH:mm",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ab",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "vi-vn",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_vi.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "SA",
+ "1": "CH"
+ },
+ "DAY": {
+ "0": "Ch\u1ee7 nh\u1eadt",
+ "1": "Th\u1ee9 hai",
+ "2": "Th\u1ee9 ba",
+ "3": "Th\u1ee9 t\u01b0",
+ "4": "Th\u1ee9 n\u0103m",
+ "5": "Th\u1ee9 s\u00e1u",
+ "6": "Th\u1ee9 b\u1ea3y"
+ },
+ "MONTH": {
+ "0": "th\u00e1ng m\u1ed9t",
+ "1": "th\u00e1ng hai",
+ "2": "th\u00e1ng ba",
+ "3": "th\u00e1ng t\u01b0",
+ "4": "th\u00e1ng n\u0103m",
+ "5": "th\u00e1ng s\u00e1u",
+ "6": "th\u00e1ng b\u1ea3y",
+ "7": "th\u00e1ng t\u00e1m",
+ "8": "th\u00e1ng ch\u00edn",
+ "9": "th\u00e1ng m\u01b0\u1eddi",
+ "10": "th\u00e1ng m\u01b0\u1eddi m\u1ed9t",
+ "11": "th\u00e1ng m\u01b0\u1eddi hai"
+ },
+ "SHORTDAY": {
+ "0": "CN",
+ "1": "Th 2",
+ "2": "Th 3",
+ "3": "Th 4",
+ "4": "Th 5",
+ "5": "Th 6",
+ "6": "Th 7"
+ },
+ "SHORTMONTH": {
+ "0": "thg 1",
+ "1": "thg 2",
+ "2": "thg 3",
+ "3": "thg 4",
+ "4": "thg 5",
+ "5": "thg 6",
+ "6": "thg 7",
+ "7": "thg 8",
+ "8": "thg 9",
+ "9": "thg 10",
+ "10": "thg 11",
+ "11": "thg 12"
+ },
+ "fullDate": "EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y",
+ "longDate": "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y",
+ "medium": "dd-MM-yyyy HH:mm:ss",
+ "mediumDate": "dd-MM-yyyy",
+ "mediumTime": "HH:mm:ss",
+ "short": "dd/MM/yyyy HH:mm",
+ "shortDate": "dd/MM/yyyy",
+ "shortTime": "HH:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u20ab",
+ "DECIMAL_SEP": ",",
+ "GROUP_SEP": ".",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "\u00a0\u00a4",
+ "posPre": "",
+ "posSuf": "\u00a0\u00a4"
+ }
+ }
+ },
+ "id": "vi",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-cn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-cn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-cn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u4e0a\u5348",
+ "1": "\u4e0b\u5348"
+ },
+ "DAY": {
+ "0": "\u661f\u671f\u65e5",
+ "1": "\u661f\u671f\u4e00",
+ "2": "\u661f\u671f\u4e8c",
+ "3": "\u661f\u671f\u4e09",
+ "4": "\u661f\u671f\u56db",
+ "5": "\u661f\u671f\u4e94",
+ "6": "\u661f\u671f\u516d"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u5468\u65e5",
+ "1": "\u5468\u4e00",
+ "2": "\u5468\u4e8c",
+ "3": "\u5468\u4e09",
+ "4": "\u5468\u56db",
+ "5": "\u5468\u4e94",
+ "6": "\u5468\u516d"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "yyyy-M-d ah:mm:ss",
+ "mediumDate": "yyyy-M-d",
+ "mediumTime": "ah:mm:ss",
+ "short": "yy-M-d ah:mm",
+ "shortDate": "yy-M-d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a5",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-cn",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-cn.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-cn.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-cn.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u4e0a\u5348",
+ "1": "\u4e0b\u5348"
+ },
+ "DAY": {
+ "0": "\u661f\u671f\u65e5",
+ "1": "\u661f\u671f\u4e00",
+ "2": "\u661f\u671f\u4e8c",
+ "3": "\u661f\u671f\u4e09",
+ "4": "\u661f\u671f\u56db",
+ "5": "\u661f\u671f\u4e94",
+ "6": "\u661f\u671f\u516d"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u5468\u65e5",
+ "1": "\u5468\u4e00",
+ "2": "\u5468\u4e8c",
+ "3": "\u5468\u4e09",
+ "4": "\u5468\u56db",
+ "5": "\u5468\u4e94",
+ "6": "\u5468\u516d"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "yyyy-M-d ah:mm:ss",
+ "mediumDate": "yyyy-M-d",
+ "mediumTime": "ah:mm:ss",
+ "short": "yy-M-d ah:mm",
+ "shortDate": "yy-M-d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a5",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hans-cn",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-hk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-hk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-hk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "一月",
+ "1": "二月",
+ "2": "三月",
+ "3": "四月",
+ "4": "五月",
+ "5": "六月",
+ "6": "七月",
+ "7": "八月",
+ "8": "九月",
+ "9": "十月",
+ "10": "十一月",
+ "11": "十二月"
+ },
+ "SHORTDAY": {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "y年M月d日 ah:mm:ss",
+ "mediumDate": "y年M月d日",
+ "mediumTime": "ah:mm:ss",
+ "short": "d/M/yy ah:mm",
+ "shortDate": "d/M/yy",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hans-hk",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-mo.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-mo.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-mo.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "一月",
+ "1": "二月",
+ "2": "三月",
+ "3": "四月",
+ "4": "五月",
+ "5": "六月",
+ "6": "七月",
+ "7": "八月",
+ "8": "九月",
+ "9": "十月",
+ "10": "十一月",
+ "11": "十二月"
+ },
+ "SHORTDAY": {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "y年M月d日 ah:mm:ss",
+ "mediumDate": "y年M月d日",
+ "mediumTime": "ah:mm:ss",
+ "short": "d/M/yy ah:mm",
+ "shortDate": "d/M/yy",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hans-mo",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-sg.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-sg.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans-sg.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "一月",
+ "1": "二月",
+ "2": "三月",
+ "3": "四月",
+ "4": "五月",
+ "5": "六月",
+ "6": "七月",
+ "7": "八月",
+ "8": "九月",
+ "9": "十月",
+ "10": "十一月",
+ "11": "十二月"
+ },
+ "SHORTDAY": {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "y年M月d日 ah:mm:ss",
+ "mediumDate": "y年M月d日",
+ "mediumTime": "ah:mm:ss",
+ "short": "dd/MM/yy ahh:mm",
+ "shortDate": "dd/MM/yy",
+ "shortTime": "ahh:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hans-sg",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hans.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "SHORTDAY": {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "yyyy-M-d ah:mm:ss",
+ "mediumDate": "yyyy-M-d",
+ "mediumTime": "ah:mm:ss",
+ "short": "yy-M-d ah:mm",
+ "shortDate": "yy-M-d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hans",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-hk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-hk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-hk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "SHORTDAY": {
+ "0": "週日",
+ "1": "週一",
+ "2": "週二",
+ "3": "週三",
+ "4": "週四",
+ "5": "週五",
+ "6": "週六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "y年M月d日 ahh:mm:ss",
+ "mediumDate": "y年M月d日",
+ "mediumTime": "ahh:mm:ss",
+ "short": "yy年M月d日 ah:mm",
+ "shortDate": "yy年M月d日",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hant-hk",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-mo.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-mo.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-mo.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "SHORTDAY": {
+ "0": "週日",
+ "1": "週一",
+ "2": "週二",
+ "3": "週三",
+ "4": "週四",
+ "5": "週五",
+ "6": "週六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年MM月dd日EEEE",
+ "longDate": "y年MM月dd日",
+ "medium": "y年M月d日 ahh:mm:ss",
+ "mediumDate": "y年M月d日",
+ "mediumTime": "ahh:mm:ss",
+ "short": "yy年M月d日 ah:mm",
+ "shortDate": "yy年M月d日",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hant-mo",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-tw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-tw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant-tw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "SHORTDAY": {
+ "0": "週日",
+ "1": "週一",
+ "2": "週二",
+ "3": "週三",
+ "4": "週四",
+ "5": "週五",
+ "6": "週六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "yyyy/M/d ah:mm:ss",
+ "mediumDate": "yyyy/M/d",
+ "mediumTime": "ah:mm:ss",
+ "short": "y/M/d ah:mm",
+ "shortDate": "y/M/d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hant-tw",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hant.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "上午",
+ "1": "下午"
+ },
+ "DAY": {
+ "0": "星期日",
+ "1": "星期一",
+ "2": "星期二",
+ "3": "星期三",
+ "4": "星期四",
+ "5": "星期五",
+ "6": "星期六"
+ },
+ "MONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "SHORTDAY": {
+ "0": "週日",
+ "1": "週一",
+ "2": "週二",
+ "3": "週三",
+ "4": "週四",
+ "5": "週五",
+ "6": "週六"
+ },
+ "SHORTMONTH": {
+ "0": "1月",
+ "1": "2月",
+ "2": "3月",
+ "3": "4月",
+ "4": "5月",
+ "5": "6月",
+ "6": "7月",
+ "7": "8月",
+ "8": "9月",
+ "9": "10月",
+ "10": "11月",
+ "11": "12月"
+ },
+ "fullDate": "y年M月d日EEEE",
+ "longDate": "y年M月d日",
+ "medium": "yyyy/M/d ah:mm:ss",
+ "mediumDate": "yyyy/M/d",
+ "mediumTime": "ah:mm:ss",
+ "short": "y/M/d ah:mm",
+ "shortDate": "y/M/d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "¥",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00A4",
+ "negSuf": ")",
+ "posPre": "\u00A4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hant",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hk.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hk.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-hk.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u4e0a\u5348",
+ "1": "\u4e0b\u5348"
+ },
+ "DAY": {
+ "0": "\u661f\u671f\u65e5",
+ "1": "\u661f\u671f\u4e00",
+ "2": "\u661f\u671f\u4e8c",
+ "3": "\u661f\u671f\u4e09",
+ "4": "\u661f\u671f\u56db",
+ "5": "\u661f\u671f\u4e94",
+ "6": "\u661f\u671f\u516d"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u9031\u65e5",
+ "1": "\u9031\u4e00",
+ "2": "\u9031\u4e8c",
+ "3": "\u9031\u4e09",
+ "4": "\u9031\u56db",
+ "5": "\u9031\u4e94",
+ "6": "\u9031\u516d"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "y\u5e74M\u6708d\u65e5 ahh:mm:ss",
+ "mediumDate": "y\u5e74M\u6708d\u65e5",
+ "mediumTime": "ahh:mm:ss",
+ "short": "yy\u5e74M\u6708d\u65e5 ah:mm",
+ "shortDate": "yy\u5e74M\u6708d\u65e5",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-hk",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-tw.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-tw.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh-tw.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u4e0a\u5348",
+ "1": "\u4e0b\u5348"
+ },
+ "DAY": {
+ "0": "\u661f\u671f\u65e5",
+ "1": "\u661f\u671f\u4e00",
+ "2": "\u661f\u671f\u4e8c",
+ "3": "\u661f\u671f\u4e09",
+ "4": "\u661f\u671f\u56db",
+ "5": "\u661f\u671f\u4e94",
+ "6": "\u661f\u671f\u516d"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u9031\u65e5",
+ "1": "\u9031\u4e00",
+ "2": "\u9031\u4e8c",
+ "3": "\u9031\u4e09",
+ "4": "\u9031\u56db",
+ "5": "\u9031\u4e94",
+ "6": "\u9031\u516d"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "yyyy/M/d ah:mm:ss",
+ "mediumDate": "yyyy/M/d",
+ "mediumTime": "ah:mm:ss",
+ "short": "y/M/d ah:mm",
+ "shortDate": "y/M/d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "NT$",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "\u00a4-",
+ "negSuf": "",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh-tw",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zh.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "\u4e0a\u5348",
+ "1": "\u4e0b\u5348"
+ },
+ "DAY": {
+ "0": "\u661f\u671f\u65e5",
+ "1": "\u661f\u671f\u4e00",
+ "2": "\u661f\u671f\u4e8c",
+ "3": "\u661f\u671f\u4e09",
+ "4": "\u661f\u671f\u56db",
+ "5": "\u661f\u671f\u4e94",
+ "6": "\u661f\u671f\u516d"
+ },
+ "MONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "SHORTDAY": {
+ "0": "\u5468\u65e5",
+ "1": "\u5468\u4e00",
+ "2": "\u5468\u4e8c",
+ "3": "\u5468\u4e09",
+ "4": "\u5468\u56db",
+ "5": "\u5468\u4e94",
+ "6": "\u5468\u516d"
+ },
+ "SHORTMONTH": {
+ "0": "1\u6708",
+ "1": "2\u6708",
+ "2": "3\u6708",
+ "3": "4\u6708",
+ "4": "5\u6708",
+ "5": "6\u6708",
+ "6": "7\u6708",
+ "7": "8\u6708",
+ "8": "9\u6708",
+ "9": "10\u6708",
+ "10": "11\u6708",
+ "11": "12\u6708"
+ },
+ "fullDate": "y\u5e74M\u6708d\u65e5EEEE",
+ "longDate": "y\u5e74M\u6708d\u65e5",
+ "medium": "yyyy-M-d ah:mm:ss",
+ "mediumDate": "yyyy-M-d",
+ "mediumTime": "ah:mm:ss",
+ "short": "yy-M-d ah:mm",
+ "shortDate": "yy-M-d",
+ "shortTime": "ah:mm"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "\u00a5",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zh",
+ "pluralCat": function (n) { return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu-za.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu-za.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu-za.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sonto",
+ "1": "Msombuluko",
+ "2": "Lwesibili",
+ "3": "Lwesithathu",
+ "4": "uLwesine",
+ "5": "Lwesihlanu",
+ "6": "Mgqibelo"
+ },
+ "MONTH": {
+ "0": "Januwari",
+ "1": "Februwari",
+ "2": "Mashi",
+ "3": "Apreli",
+ "4": "Meyi",
+ "5": "Juni",
+ "6": "Julayi",
+ "7": "Agasti",
+ "8": "Septhemba",
+ "9": "Okthoba",
+ "10": "Novemba",
+ "11": "Disemba"
+ },
+ "SHORTDAY": {
+ "0": "Son",
+ "1": "Mso",
+ "2": "Bil",
+ "3": "Tha",
+ "4": "Sin",
+ "5": "Hla",
+ "6": "Mgq"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mas",
+ "3": "Apr",
+ "4": "Mey",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aga",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy-MM-dd h:mm a",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zu-za",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Added: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu.js (rev 0)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/i18n/angular-locale_zu.js 2013-07-09 09:21:17 UTC (rev 139)
@@ -0,0 +1,98 @@
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+$provide.value("$locale", {
+ "DATETIME_FORMATS": {
+ "AMPMS": {
+ "0": "AM",
+ "1": "PM"
+ },
+ "DAY": {
+ "0": "Sonto",
+ "1": "Msombuluko",
+ "2": "Lwesibili",
+ "3": "Lwesithathu",
+ "4": "uLwesine",
+ "5": "Lwesihlanu",
+ "6": "Mgqibelo"
+ },
+ "MONTH": {
+ "0": "Januwari",
+ "1": "Februwari",
+ "2": "Mashi",
+ "3": "Apreli",
+ "4": "Meyi",
+ "5": "Juni",
+ "6": "Julayi",
+ "7": "Agasti",
+ "8": "Septhemba",
+ "9": "Okthoba",
+ "10": "Novemba",
+ "11": "Disemba"
+ },
+ "SHORTDAY": {
+ "0": "Son",
+ "1": "Mso",
+ "2": "Bil",
+ "3": "Tha",
+ "4": "Sin",
+ "5": "Hla",
+ "6": "Mgq"
+ },
+ "SHORTMONTH": {
+ "0": "Jan",
+ "1": "Feb",
+ "2": "Mas",
+ "3": "Apr",
+ "4": "Mey",
+ "5": "Jun",
+ "6": "Jul",
+ "7": "Aga",
+ "8": "Sep",
+ "9": "Okt",
+ "10": "Nov",
+ "11": "Dis"
+ },
+ "fullDate": "EEEE dd MMMM y",
+ "longDate": "d MMMM y",
+ "medium": "d MMM y h:mm:ss a",
+ "mediumDate": "d MMM y",
+ "mediumTime": "h:mm:ss a",
+ "short": "yyyy-MM-dd h:mm a",
+ "shortDate": "yyyy-MM-dd",
+ "shortTime": "h:mm a"
+ },
+ "NUMBER_FORMATS": {
+ "CURRENCY_SYM": "R",
+ "DECIMAL_SEP": ".",
+ "GROUP_SEP": ",",
+ "PATTERNS": {
+ "0": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 3,
+ "minFrac": 0,
+ "minInt": 1,
+ "negPre": "-",
+ "negSuf": "",
+ "posPre": "",
+ "posSuf": ""
+ },
+ "1": {
+ "gSize": 3,
+ "lgSize": 3,
+ "macFrac": 0,
+ "maxFrac": 2,
+ "minFrac": 2,
+ "minInt": 1,
+ "negPre": "(\u00a4",
+ "negSuf": ")",
+ "posPre": "\u00a4",
+ "posSuf": ""
+ }
+ }
+ },
+ "id": "zu",
+ "pluralCat": function (n) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
+});
+}]);
\ No newline at end of file
Modified: sandbox/nuiton-js-angular/src/site/rst/index.rst.vm
===================================================================
--- sandbox/nuiton-js-angular/src/site/rst/index.rst.vm 2013-07-07 15:46:51 UTC (rev 138)
+++ sandbox/nuiton-js-angular/src/site/rst/index.rst.vm 2013-07-09 09:21:17 UTC (rev 139)
@@ -57,6 +57,304 @@
- angular.js
+extra:
+
+- angular-cookies.js
+- angular-loader.js
+- angular-mobile.js
+- angular-resource.js
+- angular-sanitize.js
+
+i18n:
+
+- angular-af-na.js
+- angular-af-za.js
+- angular-af.js
+- angular-am-et.js
+- angular-am.js
+- angular-ar-001.js
+- angular-ar-ae.js
+- angular-ar-bh.js
+- angular-ar-dz.js
+- angular-ar-eg.js
+- angular-ar-iq.js
+- angular-ar-jo.js
+- angular-ar-kw.js
+- angular-ar-lb.js
+- angular-ar-ly.js
+- angular-ar-ma.js
+- angular-ar-om.js
+- angular-ar-qa.js
+- angular-ar-sa.js
+- angular-ar-sd.js
+- angular-ar-sy.js
+- angular-ar-tn.js
+- angular-ar-ye.js
+- angular-ar.js
+- angular-bg-bg.js
+- angular-bg.js
+- angular-bn-bd.js
+- angular-bn-in.js
+- angular-bn.js
+- angular-ca-ad.js
+- angular-ca-es.js
+- angular-ca.js
+- angular-chr.js
+- angular-cs-cz.js
+- angular-cs.js
+- angular-cy.js
+- angular-da-dk.js
+- angular-da.js
+- angular-de-at.js
+- angular-de-be.js
+- angular-de-ch.js
+- angular-de-de.js
+- angular-de-li.js
+- angular-de-lu.js
+- angular-de.js
+- angular-el-cy.js
+- angular-el-gr.js
+- angular-el-polyton.js
+- angular-el.js
+- angular-en-as.js
+- angular-en-au.js
+- angular-en-bb.js
+- angular-en-be.js
+- angular-en-bm.js
+- angular-en-bw.js
+- angular-en-bz.js
+- angular-en-ca.js
+- angular-en-dsrt-us.js
+- angular-en-dsrt.js
+- angular-en-fm.js
+- angular-en-gb.js
+- angular-en-gu.js
+- angular-en-gy.js
+- angular-en-hk.js
+- angular-en-ie.js
+- angular-en-in.js
+- angular-en-iso.js
+- angular-en-jm.js
+- angular-en-mh.js
+- angular-en-mp.js
+- angular-en-mt.js
+- angular-en-mu.js
+- angular-en-na.js
+- angular-en-nz.js
+- angular-en-ph.js
+- angular-en-pk.js
+- angular-en-pr.js
+- angular-en-pw.js
+- angular-en-sg.js
+- angular-en-tc.js
+- angular-en-tt.js
+- angular-en-um.js
+- angular-en-us.js
+- angular-en-vg.js
+- angular-en-vi.js
+- angular-en-za.js
+- angular-en-zw.js
+- angular-en-zz.js
+- angular-en.js
+- angular-es-419.js
+- angular-es-ar.js
+- angular-es-bo.js
+- angular-es-cl.js
+- angular-es-co.js
+- angular-es-cr.js
+- angular-es-do.js
+- angular-es-ea.js
+- angular-es-ec.js
+- angular-es-es.js
+- angular-es-gq.js
+- angular-es-gt.js
+- angular-es-hn.js
+- angular-es-ic.js
+- angular-es-mx.js
+- angular-es-ni.js
+- angular-es-pa.js
+- angular-es-pe.js
+- angular-es-pr.js
+- angular-es-py.js
+- angular-es-sv.js
+- angular-es-us.js
+- angular-es-uy.js
+- angular-es-ve.js
+- angular-es.js
+- angular-et-ee.js
+- angular-et.js
+- angular-eu-es.js
+- angular-eu.js
+- angular-fa-af.js
+- angular-fa-ir.js
+- angular-fa.js
+- angular-fi-fi.js
+- angular-fi.js
+- angular-fil-ph.js
+- angular-fil.js
+- angular-fr-be.js
+- angular-fr-bf.js
+- angular-fr-bi.js
+- angular-fr-bj.js
+- angular-fr-bl.js
+- angular-fr-ca.js
+- angular-fr-cd.js
+- angular-fr-cf.js
+- angular-fr-cg.js
+- angular-fr-ch.js
+- angular-fr-ci.js
+- angular-fr-cm.js
+- angular-fr-dj.js
+- angular-fr-fr.js
+- angular-fr-ga.js
+- angular-fr-gf.js
+- angular-fr-gn.js
+- angular-fr-gp.js
+- angular-fr-gq.js
+- angular-fr-km.js
+- angular-fr-lu.js
+- angular-fr-mc.js
+- angular-fr-mf.js
+- angular-fr-mg.js
+- angular-fr-ml.js
+- angular-fr-mq.js
+- angular-fr-ne.js
+- angular-fr-re.js
+- angular-fr-rw.js
+- angular-fr-sn.js
+- angular-fr-td.js
+- angular-fr-tg.js
+- angular-fr-yt.js
+- angular-fr.js
+- angular-gl-es.js
+- angular-gl.js
+- angular-gsw-ch.js
+- angular-gsw.js
+- angular-gu-in.js
+- angular-gu.js
+- angular-haw.js
+- angular-he-il.js
+- angular-he.js
+- angular-hi-in.js
+- angular-hi.js
+- angular-hr-hr.js
+- angular-hr.js
+- angular-hu-hu.js
+- angular-hu.js
+- angular-id-id.js
+- angular-id.js
+- angular-in.js
+- angular-is-is.js
+- angular-is.js
+- angular-it-ch.js
+- angular-it-it.js
+- angular-it-sm.js
+- angular-it.js
+- angular-iw.js
+- angular-ja-jp.js
+- angular-ja.js
+- angular-kn-in.js
+- angular-kn.js
+- angular-ko-kr.js
+- angular-ko.js
+- angular-ln-cd.js
+- angular-ln-cg.js
+- angular-ln.js
+- angular-lt-lt.js
+- angular-lt.js
+- angular-lv-lv.js
+- angular-lv.js
+- angular-ml-in.js
+- angular-ml.js
+- angular-mo.js
+- angular-mr-in.js
+- angular-mr.js
+- angular-ms-bn.js
+- angular-ms-my.js
+- angular-ms.js
+- angular-mt-mt.js
+- angular-mt.js
+- angular-nl-aw.js
+- angular-nl-be.js
+- angular-nl-cw.js
+- angular-nl-nl.js
+- angular-nl-sx.js
+- angular-nl.js
+- angular-no.js
+- angular-or-in.js
+- angular-or.js
+- angular-pl-pl.js
+- angular-pl.js
+- angular-pt-ao.js
+- angular-pt-br.js
+- angular-pt-gw.js
+- angular-pt-mz.js
+- angular-pt-pt.js
+- angular-pt-st.js
+- angular-pt.js
+- angular-ro-md.js
+- angular-ro-ro.js
+- angular-ro.js
+- angular-ru-md.js
+- angular-ru-ru.js
+- angular-ru-ua.js
+- angular-ru.js
+- angular-sk-sk.js
+- angular-sk.js
+- angular-sl-si.js
+- angular-sl.js
+- angular-sq-al.js
+- angular-sq.js
+- angular-sr-cyrl-ba.js
+- angular-sr-cyrl-me.js
+- angular-sr-cyrl-rs.js
+- angular-sr-cyrl.js
+- angular-sr-latn-ba.js
+- angular-sr-latn-me.js
+- angular-sr-latn-rs.js
+- angular-sr-latn.js
+- angular-sr-rs.js
+- angular-sr.js
+- angular-sv-fi.js
+- angular-sv-se.js
+- angular-sv.js
+- angular-sw-ke.js
+- angular-sw-tz.js
+- angular-sw.js
+- angular-ta-in.js
+- angular-ta-lk.js
+- angular-ta.js
+- angular-te-in.js
+- angular-te.js
+- angular-th-th.js
+- angular-th.js
+- angular-tl-ph.js
+- angular-tl.js
+- angular-tr-tr.js
+- angular-tr.js
+- angular-uk-ua.js
+- angular-uk.js
+- angular-ur-in.js
+- angular-ur-pk.js
+- angular-ur.js
+- angular-vi-vn.js
+- angular-vi.js
+- angular-zh-cn.js
+- angular-zh-hans-cn.js
+- angular-zh-hans-hk.js
+- angular-zh-hans-mo.js
+- angular-zh-hans-sg.js
+- angular-zh-hans.js
+- angular-zh-hant-hk.js
+- angular-zh-hant-mo.js
+- angular-zh-hant-tw.js
+- angular-zh-hant.js
+- angular-zh-hk.js
+- angular-zh-tw.js
+- angular-zh.js
+- angular-zu-za.js
+- angular-zu.js
+
Available CSS
-------------
1
0
07 Jul '13
Author: echatellier
Date: 2013-07-07 17:46:51 +0200 (Sun, 07 Jul 2013)
New Revision: 138
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/138
Log:
Fix doc
Modified:
sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm
Modified: sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm
===================================================================
--- sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm 2013-07-07 15:27:09 UTC (rev 137)
+++ sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm 2013-07-07 15:46:51 UTC (rev 138)
@@ -1,6 +1,6 @@
.. -
.. * #%L
-.. * Nuiton JS :: Mustache
+.. * Nuiton JS :: Backbone
.. * $Id$
.. * $HeadURL$
.. * %%
@@ -22,17 +22,17 @@
.. * #L%
.. -
-Angular
-=======
+Backbone.js
+===========
-Angular_ is a logic-less templating system for HTML, config files, anything.
+Backbone.js_ gives structure to web applications by providing models with key-value binding and
+custom events, collections with a rich API of enumerable functions, views with declarative event
+handling, and connects it all to your existing API over a RESTful JSON interface.
- documentation_
-- tutorial_
-.. _Angular: http://www.angularjs.org/
-.. _documentation: http://www.angularjs.org/
-.. _tutorial: http://docs.angularjs.org/tutorial
+.. _Backbone.js: http://backbonejs.org/
+.. _documentation: http://backbonejs.org/
Use
===
@@ -41,7 +41,7 @@
<dependency>
<groupId>org.nuiton.js</groupId>
- <artifactId>nuiton-js-angular</artifactId>
+ <artifactId>nuiton-js-backbone</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
@@ -50,12 +50,12 @@
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/angular.js"/>"></script>
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/backbone.js"/>"></script>
Available JS
------------
-- angular.js
+- backbone.js
Available CSS
-------------
1
0
Author: echatellier
Date: 2013-07-07 17:27:09 +0200 (Sun, 07 Jul 2013)
New Revision: 137
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/137
Log:
Link backbone doc
Modified:
trunk/src/site/site_en.xml
trunk/src/site/site_fr.xml
Modified: trunk/src/site/site_en.xml
===================================================================
--- trunk/src/site/site_en.xml 2013-07-07 15:24:06 UTC (rev 136)
+++ trunk/src/site/site_en.xml 2013-07-07 15:27:09 UTC (rev 137)
@@ -86,6 +86,7 @@
<menu name="Available packages">
<item name="angular" href="nuiton-js-lib/nuiton-js-angular/index.html"/>
+ <item name="backbone" href="nuiton-js-lib/nuiton-js-backbone/index.html"/>
<item name="bootstrap" href="nuiton-js-lib/nuiton-js-bootstrap/index.html"/>
<item name="canjs" href="nuiton-js-lib/nuiton-js-canjs/index.html"/>
<item name="font-awesome" href="nuiton-js-lib/nuiton-js-font-awesome/index.html"/>
Modified: trunk/src/site/site_fr.xml
===================================================================
--- trunk/src/site/site_fr.xml 2013-07-07 15:24:06 UTC (rev 136)
+++ trunk/src/site/site_fr.xml 2013-07-07 15:27:09 UTC (rev 137)
@@ -89,6 +89,7 @@
<menu name="Packages disponible">
<item name="angular" href="nuiton-js-lib/nuiton-js-angular/index.html"/>
+ <item name="backbone" href="nuiton-js-lib/nuiton-js-backbone/index.html"/>
<item name="bootstrap" href="nuiton-js-lib/nuiton-js-bootstrap/index.html"/>
<item name="canjs" href="nuiton-js-lib/nuiton-js-canjs/index.html"/>
<item name="font-awesome" href="nuiton-js-lib/nuiton-js-font-awesome/index.html"/>
1
0
r136 - in sandbox: . nuiton-js-backbone nuiton-js-backbone/src nuiton-js-backbone/src/main nuiton-js-backbone/src/main/resources nuiton-js-backbone/src/main/resources/META-INF nuiton-js-backbone/src/main/resources/META-INF/nuiton-js nuiton-js-backbone/src/main/resources/nuiton-js-backbone nuiton-js-backbone/src/site nuiton-js-backbone/src/site/rst
by echatellier@users.nuiton.org 07 Jul '13
by echatellier@users.nuiton.org 07 Jul '13
07 Jul '13
Author: echatellier
Date: 2013-07-07 17:24:06 +0200 (Sun, 07 Jul 2013)
New Revision: 136
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/136
Log:
Backbone initial import
Added:
sandbox/nuiton-js-backbone/
sandbox/nuiton-js-backbone/LICENSE.txt
sandbox/nuiton-js-backbone/README.txt
sandbox/nuiton-js-backbone/changelog.txt
sandbox/nuiton-js-backbone/pom.xml
sandbox/nuiton-js-backbone/src/
sandbox/nuiton-js-backbone/src/main/
sandbox/nuiton-js-backbone/src/main/resources/
sandbox/nuiton-js-backbone/src/main/resources/META-INF/
sandbox/nuiton-js-backbone/src/main/resources/META-INF/nuiton-js/
sandbox/nuiton-js-backbone/src/main/resources/META-INF/nuiton-js/wro-backbone.xml
sandbox/nuiton-js-backbone/src/main/resources/nuiton-js-backbone/
sandbox/nuiton-js-backbone/src/main/resources/nuiton-js-backbone/backbone.js
sandbox/nuiton-js-backbone/src/site/
sandbox/nuiton-js-backbone/src/site/rst/
sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm
sandbox/nuiton-js-backbone/src/site/site_en.xml
Added: sandbox/nuiton-js-backbone/LICENSE.txt
===================================================================
--- sandbox/nuiton-js-backbone/LICENSE.txt (rev 0)
+++ sandbox/nuiton-js-backbone/LICENSE.txt 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,166 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+
Added: sandbox/nuiton-js-backbone/README.txt
===================================================================
(Binary files differ)
Property changes on: sandbox/nuiton-js-backbone/README.txt
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: sandbox/nuiton-js-backbone/changelog.txt
===================================================================
--- sandbox/nuiton-js-backbone/changelog.txt (rev 0)
+++ sandbox/nuiton-js-backbone/changelog.txt 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,2 @@
+Please refer to the release note :
+ http://maven-site.nuiton.org/nuiton-js/changes-report.html
Added: sandbox/nuiton-js-backbone/pom.xml
===================================================================
--- sandbox/nuiton-js-backbone/pom.xml (rev 0)
+++ sandbox/nuiton-js-backbone/pom.xml 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <!-- ************************************************************* -->
+ <!-- *** POM Relationships *************************************** -->
+ <!-- ************************************************************* -->
+
+ <parent>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-lib</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>nuiton-js-backbone</artifactId>
+ <version>1.0.0-1-SNAPSHOT</version>
+
+ <name>Nuiton JS :: Backbone</name>
+ <description>Backbone jar packaging</description>
+
+ <url>http://backbonejs.org/</url>
+
+ <licenses>
+ <license>
+ <name>MIT License</name>
+ <url>https://github.com/documentcloud/backbone/blob/master/LICENSE</url>
+ </license>
+ </licenses>
+
+ <scm>
+ <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-backbone-1.0.0-1</connection>
+ <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-backbone-1.0.0-1</developerConnection>
+ <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-backbone…</url>
+ </scm>
+
+</project>
Property changes on: sandbox/nuiton-js-backbone/pom.xml
___________________________________________________________________
Added: svn:mime-type
+ text/xml
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: sandbox/nuiton-js-backbone/src/main/resources/META-INF/nuiton-js/wro-backbone.xml
===================================================================
--- sandbox/nuiton-js-backbone/src/main/resources/META-INF/nuiton-js/wro-backbone.xml (rev 0)
+++ sandbox/nuiton-js-backbone/src/main/resources/META-INF/nuiton-js/wro-backbone.xml 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,28 @@
+<!--
+ #%L
+ Nuiton JS :: Mustache
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2013 CodeLutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+<groups xmlns="http://www.isdc.ro/wro">
+ <group name='backbone'>
+ <js>classpath:nuiton-js-backbone/*.js</js>
+ </group>
+</groups>
Property changes on: sandbox/nuiton-js-backbone/src/main/resources/META-INF/nuiton-js/wro-backbone.xml
___________________________________________________________________
Added: svn:mime-type
+ text/xml
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: sandbox/nuiton-js-backbone/src/main/resources/nuiton-js-backbone/backbone.js
===================================================================
--- sandbox/nuiton-js-backbone/src/main/resources/nuiton-js-backbone/backbone.js (rev 0)
+++ sandbox/nuiton-js-backbone/src/main/resources/nuiton-js-backbone/backbone.js 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,1571 @@
+// Backbone.js 1.0.0
+
+// (c) 2010-2013 Jeremy Ashkenas, DocumentCloud Inc.
+// Backbone may be freely distributed under the MIT license.
+// For all details and documentation:
+// http://backbonejs.org
+
+(function(){
+
+ // Initial Setup
+ // -------------
+
+ // Save a reference to the global object (`window` in the browser, `exports`
+ // on the server).
+ var root = this;
+
+ // Save the previous value of the `Backbone` variable, so that it can be
+ // restored later on, if `noConflict` is used.
+ var previousBackbone = root.Backbone;
+
+ // Create local references to array methods we'll want to use later.
+ var array = [];
+ var push = array.push;
+ var slice = array.slice;
+ var splice = array.splice;
+
+ // The top-level namespace. All public Backbone classes and modules will
+ // be attached to this. Exported for both the browser and the server.
+ var Backbone;
+ if (typeof exports !== 'undefined') {
+ Backbone = exports;
+ } else {
+ Backbone = root.Backbone = {};
+ }
+
+ // Current version of the library. Keep in sync with `package.json`.
+ Backbone.VERSION = '1.0.0';
+
+ // Require Underscore, if we're on the server, and it's not already present.
+ var _ = root._;
+ if (!_ && (typeof require !== 'undefined')) _ = require('underscore');
+
+ // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns
+ // the `$` variable.
+ Backbone.$ = root.jQuery || root.Zepto || root.ender || root.$;
+
+ // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable
+ // to its previous owner. Returns a reference to this Backbone object.
+ Backbone.noConflict = function() {
+ root.Backbone = previousBackbone;
+ return this;
+ };
+
+ // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option
+ // will fake `"PUT"` and `"DELETE"` requests via the `_method` parameter and
+ // set a `X-Http-Method-Override` header.
+ Backbone.emulateHTTP = false;
+
+ // Turn on `emulateJSON` to support legacy servers that can't deal with direct
+ // `application/json` requests ... will encode the body as
+ // `application/x-www-form-urlencoded` instead and will send the model in a
+ // form param named `model`.
+ Backbone.emulateJSON = false;
+
+ // Backbone.Events
+ // ---------------
+
+ // A module that can be mixed in to *any object* in order to provide it with
+ // custom events. You may bind with `on` or remove with `off` callback
+ // functions to an event; `trigger`-ing an event fires all callbacks in
+ // succession.
+ //
+ // var object = {};
+ // _.extend(object, Backbone.Events);
+ // object.on('expand', function(){ alert('expanded'); });
+ // object.trigger('expand');
+ //
+ var Events = Backbone.Events = {
+
+ // Bind an event to a `callback` function. Passing `"all"` will bind
+ // the callback to all events fired.
+ on: function(name, callback, context) {
+ if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
+ this._events || (this._events = {});
+ var events = this._events[name] || (this._events[name] = []);
+ events.push({callback: callback, context: context, ctx: context || this});
+ return this;
+ },
+
+ // Bind an event to only be triggered a single time. After the first time
+ // the callback is invoked, it will be removed.
+ once: function(name, callback, context) {
+ if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;
+ var self = this;
+ var once = _.once(function() {
+ self.off(name, once);
+ callback.apply(this, arguments);
+ });
+ once._callback = callback;
+ return this.on(name, once, context);
+ },
+
+ // Remove one or many callbacks. If `context` is null, removes all
+ // callbacks with that function. If `callback` is null, removes all
+ // callbacks for the event. If `name` is null, removes all bound
+ // callbacks for all events.
+ off: function(name, callback, context) {
+ var retain, ev, events, names, i, l, j, k;
+ if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;
+ if (!name && !callback && !context) {
+ this._events = {};
+ return this;
+ }
+
+ names = name ? [name] : _.keys(this._events);
+ for (i = 0, l = names.length; i < l; i++) {
+ name = names[i];
+ if (events = this._events[name]) {
+ this._events[name] = retain = [];
+ if (callback || context) {
+ for (j = 0, k = events.length; j < k; j++) {
+ ev = events[j];
+ if ((callback && callback !== ev.callback && callback !== ev.callback._callback) ||
+ (context && context !== ev.context)) {
+ retain.push(ev);
+ }
+ }
+ }
+ if (!retain.length) delete this._events[name];
+ }
+ }
+
+ return this;
+ },
+
+ // Trigger one or many events, firing all bound callbacks. Callbacks are
+ // passed the same arguments as `trigger` is, apart from the event name
+ // (unless you're listening on `"all"`, which will cause your callback to
+ // receive the true name of the event as the first argument).
+ trigger: function(name) {
+ if (!this._events) return this;
+ var args = slice.call(arguments, 1);
+ if (!eventsApi(this, 'trigger', name, args)) return this;
+ var events = this._events[name];
+ var allEvents = this._events.all;
+ if (events) triggerEvents(events, args);
+ if (allEvents) triggerEvents(allEvents, arguments);
+ return this;
+ },
+
+ // Tell this object to stop listening to either specific events ... or
+ // to every object it's currently listening to.
+ stopListening: function(obj, name, callback) {
+ var listeners = this._listeners;
+ if (!listeners) return this;
+ var deleteListener = !name && !callback;
+ if (typeof name === 'object') callback = this;
+ if (obj) (listeners = {})[obj._listenerId] = obj;
+ for (var id in listeners) {
+ listeners[id].off(name, callback, this);
+ if (deleteListener) delete this._listeners[id];
+ }
+ return this;
+ }
+
+ };
+
+ // Regular expression used to split event strings.
+ var eventSplitter = /\s+/;
+
+ // Implement fancy features of the Events API such as multiple event
+ // names `"change blur"` and jQuery-style event maps `{change: action}`
+ // in terms of the existing API.
+ var eventsApi = function(obj, action, name, rest) {
+ if (!name) return true;
+
+ // Handle event maps.
+ if (typeof name === 'object') {
+ for (var key in name) {
+ obj[action].apply(obj, [key, name[key]].concat(rest));
+ }
+ return false;
+ }
+
+ // Handle space separated event names.
+ if (eventSplitter.test(name)) {
+ var names = name.split(eventSplitter);
+ for (var i = 0, l = names.length; i < l; i++) {
+ obj[action].apply(obj, [names[i]].concat(rest));
+ }
+ return false;
+ }
+
+ return true;
+ };
+
+ // A difficult-to-believe, but optimized internal dispatch function for
+ // triggering events. Tries to keep the usual cases speedy (most internal
+ // Backbone events have 3 arguments).
+ var triggerEvents = function(events, args) {
+ var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
+ switch (args.length) {
+ case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;
+ case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;
+ case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;
+ case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;
+ default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
+ }
+ };
+
+ var listenMethods = {listenTo: 'on', listenToOnce: 'once'};
+
+ // Inversion-of-control versions of `on` and `once`. Tell *this* object to
+ // listen to an event in another object ... keeping track of what it's
+ // listening to.
+ _.each(listenMethods, function(implementation, method) {
+ Events[method] = function(obj, name, callback) {
+ var listeners = this._listeners || (this._listeners = {});
+ var id = obj._listenerId || (obj._listenerId = _.uniqueId('l'));
+ listeners[id] = obj;
+ if (typeof name === 'object') callback = this;
+ obj[implementation](name, callback, this);
+ return this;
+ };
+ });
+
+ // Aliases for backwards compatibility.
+ Events.bind = Events.on;
+ Events.unbind = Events.off;
+
+ // Allow the `Backbone` object to serve as a global event bus, for folks who
+ // want global "pubsub" in a convenient place.
+ _.extend(Backbone, Events);
+
+ // Backbone.Model
+ // --------------
+
+ // Backbone **Models** are the basic data object in the framework --
+ // frequently representing a row in a table in a database on your server.
+ // A discrete chunk of data and a bunch of useful, related methods for
+ // performing computations and transformations on that data.
+
+ // Create a new model with the specified attributes. A client id (`cid`)
+ // is automatically generated and assigned for you.
+ var Model = Backbone.Model = function(attributes, options) {
+ var defaults;
+ var attrs = attributes || {};
+ options || (options = {});
+ this.cid = _.uniqueId('c');
+ this.attributes = {};
+ _.extend(this, _.pick(options, modelOptions));
+ if (options.parse) attrs = this.parse(attrs, options) || {};
+ if (defaults = _.result(this, 'defaults')) {
+ attrs = _.defaults({}, attrs, defaults);
+ }
+ this.set(attrs, options);
+ this.changed = {};
+ this.initialize.apply(this, arguments);
+ };
+
+ // A list of options to be attached directly to the model, if provided.
+ var modelOptions = ['url', 'urlRoot', 'collection'];
+
+ // Attach all inheritable methods to the Model prototype.
+ _.extend(Model.prototype, Events, {
+
+ // A hash of attributes whose current and previous value differ.
+ changed: null,
+
+ // The value returned during the last failed validation.
+ validationError: null,
+
+ // The default name for the JSON `id` attribute is `"id"`. MongoDB and
+ // CouchDB users may want to set this to `"_id"`.
+ idAttribute: 'id',
+
+ // Initialize is an empty function by default. Override it with your own
+ // initialization logic.
+ initialize: function(){},
+
+ // Return a copy of the model's `attributes` object.
+ toJSON: function(options) {
+ return _.clone(this.attributes);
+ },
+
+ // Proxy `Backbone.sync` by default -- but override this if you need
+ // custom syncing semantics for *this* particular model.
+ sync: function() {
+ return Backbone.sync.apply(this, arguments);
+ },
+
+ // Get the value of an attribute.
+ get: function(attr) {
+ return this.attributes[attr];
+ },
+
+ // Get the HTML-escaped value of an attribute.
+ escape: function(attr) {
+ return _.escape(this.get(attr));
+ },
+
+ // Returns `true` if the attribute contains a value that is not null
+ // or undefined.
+ has: function(attr) {
+ return this.get(attr) != null;
+ },
+
+ // Set a hash of model attributes on the object, firing `"change"`. This is
+ // the core primitive operation of a model, updating the data and notifying
+ // anyone who needs to know about the change in state. The heart of the beast.
+ set: function(key, val, options) {
+ var attr, attrs, unset, changes, silent, changing, prev, current;
+ if (key == null) return this;
+
+ // Handle both `"key", value` and `{key: value}` -style arguments.
+ if (typeof key === 'object') {
+ attrs = key;
+ options = val;
+ } else {
+ (attrs = {})[key] = val;
+ }
+
+ options || (options = {});
+
+ // Run validation.
+ if (!this._validate(attrs, options)) return false;
+
+ // Extract attributes and options.
+ unset = options.unset;
+ silent = options.silent;
+ changes = [];
+ changing = this._changing;
+ this._changing = true;
+
+ if (!changing) {
+ this._previousAttributes = _.clone(this.attributes);
+ this.changed = {};
+ }
+ current = this.attributes, prev = this._previousAttributes;
+
+ // Check for changes of `id`.
+ if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];
+
+ // For each `set` attribute, update or delete the current value.
+ for (attr in attrs) {
+ val = attrs[attr];
+ if (!_.isEqual(current[attr], val)) changes.push(attr);
+ if (!_.isEqual(prev[attr], val)) {
+ this.changed[attr] = val;
+ } else {
+ delete this.changed[attr];
+ }
+ unset ? delete current[attr] : current[attr] = val;
+ }
+
+ // Trigger all relevant attribute changes.
+ if (!silent) {
+ if (changes.length) this._pending = true;
+ for (var i = 0, l = changes.length; i < l; i++) {
+ this.trigger('change:' + changes[i], this, current[changes[i]], options);
+ }
+ }
+
+ // You might be wondering why there's a `while` loop here. Changes can
+ // be recursively nested within `"change"` events.
+ if (changing) return this;
+ if (!silent) {
+ while (this._pending) {
+ this._pending = false;
+ this.trigger('change', this, options);
+ }
+ }
+ this._pending = false;
+ this._changing = false;
+ return this;
+ },
+
+ // Remove an attribute from the model, firing `"change"`. `unset` is a noop
+ // if the attribute doesn't exist.
+ unset: function(attr, options) {
+ return this.set(attr, void 0, _.extend({}, options, {unset: true}));
+ },
+
+ // Clear all attributes on the model, firing `"change"`.
+ clear: function(options) {
+ var attrs = {};
+ for (var key in this.attributes) attrs[key] = void 0;
+ return this.set(attrs, _.extend({}, options, {unset: true}));
+ },
+
+ // Determine if the model has changed since the last `"change"` event.
+ // If you specify an attribute name, determine if that attribute has changed.
+ hasChanged: function(attr) {
+ if (attr == null) return !_.isEmpty(this.changed);
+ return _.has(this.changed, attr);
+ },
+
+ // Return an object containing all the attributes that have changed, or
+ // false if there are no changed attributes. Useful for determining what
+ // parts of a view need to be updated and/or what attributes need to be
+ // persisted to the server. Unset attributes will be set to undefined.
+ // You can also pass an attributes object to diff against the model,
+ // determining if there *would be* a change.
+ changedAttributes: function(diff) {
+ if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;
+ var val, changed = false;
+ var old = this._changing ? this._previousAttributes : this.attributes;
+ for (var attr in diff) {
+ if (_.isEqual(old[attr], (val = diff[attr]))) continue;
+ (changed || (changed = {}))[attr] = val;
+ }
+ return changed;
+ },
+
+ // Get the previous value of an attribute, recorded at the time the last
+ // `"change"` event was fired.
+ previous: function(attr) {
+ if (attr == null || !this._previousAttributes) return null;
+ return this._previousAttributes[attr];
+ },
+
+ // Get all of the attributes of the model at the time of the previous
+ // `"change"` event.
+ previousAttributes: function() {
+ return _.clone(this._previousAttributes);
+ },
+
+ // Fetch the model from the server. If the server's representation of the
+ // model differs from its current attributes, they will be overridden,
+ // triggering a `"change"` event.
+ fetch: function(options) {
+ options = options ? _.clone(options) : {};
+ if (options.parse === void 0) options.parse = true;
+ var model = this;
+ var success = options.success;
+ options.success = function(resp) {
+ if (!model.set(model.parse(resp, options), options)) return false;
+ if (success) success(model, resp, options);
+ model.trigger('sync', model, resp, options);
+ };
+ wrapError(this, options);
+ return this.sync('read', this, options);
+ },
+
+ // Set a hash of model attributes, and sync the model to the server.
+ // If the server returns an attributes hash that differs, the model's
+ // state will be `set` again.
+ save: function(key, val, options) {
+ var attrs, method, xhr, attributes = this.attributes;
+
+ // Handle both `"key", value` and `{key: value}` -style arguments.
+ if (key == null || typeof key === 'object') {
+ attrs = key;
+ options = val;
+ } else {
+ (attrs = {})[key] = val;
+ }
+
+ // If we're not waiting and attributes exist, save acts as `set(attr).save(null, opts)`.
+ if (attrs && (!options || !options.wait) && !this.set(attrs, options)) return false;
+
+ options = _.extend({validate: true}, options);
+
+ // Do not persist invalid models.
+ if (!this._validate(attrs, options)) return false;
+
+ // Set temporary attributes if `{wait: true}`.
+ if (attrs && options.wait) {
+ this.attributes = _.extend({}, attributes, attrs);
+ }
+
+ // After a successful server-side save, the client is (optionally)
+ // updated with the server-side state.
+ if (options.parse === void 0) options.parse = true;
+ var model = this;
+ var success = options.success;
+ options.success = function(resp) {
+ // Ensure attributes are restored during synchronous saves.
+ model.attributes = attributes;
+ var serverAttrs = model.parse(resp, options);
+ if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs);
+ if (_.isObject(serverAttrs) && !model.set(serverAttrs, options)) {
+ return false;
+ }
+ if (success) success(model, resp, options);
+ model.trigger('sync', model, resp, options);
+ };
+ wrapError(this, options);
+
+ method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');
+ if (method === 'patch') options.attrs = attrs;
+ xhr = this.sync(method, this, options);
+
+ // Restore attributes.
+ if (attrs && options.wait) this.attributes = attributes;
+
+ return xhr;
+ },
+
+ // Destroy this model on the server if it was already persisted.
+ // Optimistically removes the model from its collection, if it has one.
+ // If `wait: true` is passed, waits for the server to respond before removal.
+ destroy: function(options) {
+ options = options ? _.clone(options) : {};
+ var model = this;
+ var success = options.success;
+
+ var destroy = function() {
+ model.trigger('destroy', model, model.collection, options);
+ };
+
+ options.success = function(resp) {
+ if (options.wait || model.isNew()) destroy();
+ if (success) success(model, resp, options);
+ if (!model.isNew()) model.trigger('sync', model, resp, options);
+ };
+
+ if (this.isNew()) {
+ options.success();
+ return false;
+ }
+ wrapError(this, options);
+
+ var xhr = this.sync('delete', this, options);
+ if (!options.wait) destroy();
+ return xhr;
+ },
+
+ // Default URL for the model's representation on the server -- if you're
+ // using Backbone's restful methods, override this to change the endpoint
+ // that will be called.
+ url: function() {
+ var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError();
+ if (this.isNew()) return base;
+ return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id);
+ },
+
+ // **parse** converts a response into the hash of attributes to be `set` on
+ // the model. The default implementation is just to pass the response along.
+ parse: function(resp, options) {
+ return resp;
+ },
+
+ // Create a new model with identical attributes to this one.
+ clone: function() {
+ return new this.constructor(this.attributes);
+ },
+
+ // A model is new if it has never been saved to the server, and lacks an id.
+ isNew: function() {
+ return this.id == null;
+ },
+
+ // Check if the model is currently in a valid state.
+ isValid: function(options) {
+ return this._validate({}, _.extend(options || {}, { validate: true }));
+ },
+
+ // Run validation against the next complete set of model attributes,
+ // returning `true` if all is well. Otherwise, fire an `"invalid"` event.
+ _validate: function(attrs, options) {
+ if (!options.validate || !this.validate) return true;
+ attrs = _.extend({}, this.attributes, attrs);
+ var error = this.validationError = this.validate(attrs, options) || null;
+ if (!error) return true;
+ this.trigger('invalid', this, error, _.extend(options || {}, {validationError: error}));
+ return false;
+ }
+
+ });
+
+ // Underscore methods that we want to implement on the Model.
+ var modelMethods = ['keys', 'values', 'pairs', 'invert', 'pick', 'omit'];
+
+ // Mix in each Underscore method as a proxy to `Model#attributes`.
+ _.each(modelMethods, function(method) {
+ Model.prototype[method] = function() {
+ var args = slice.call(arguments);
+ args.unshift(this.attributes);
+ return _[method].apply(_, args);
+ };
+ });
+
+ // Backbone.Collection
+ // -------------------
+
+ // If models tend to represent a single row of data, a Backbone Collection is
+ // more analagous to a table full of data ... or a small slice or page of that
+ // table, or a collection of rows that belong together for a particular reason
+ // -- all of the messages in this particular folder, all of the documents
+ // belonging to this particular author, and so on. Collections maintain
+ // indexes of their models, both in order, and for lookup by `id`.
+
+ // Create a new **Collection**, perhaps to contain a specific type of `model`.
+ // If a `comparator` is specified, the Collection will maintain
+ // its models in sort order, as they're added and removed.
+ var Collection = Backbone.Collection = function(models, options) {
+ options || (options = {});
+ if (options.url) this.url = options.url;
+ if (options.model) this.model = options.model;
+ if (options.comparator !== void 0) this.comparator = options.comparator;
+ this._reset();
+ this.initialize.apply(this, arguments);
+ if (models) this.reset(models, _.extend({silent: true}, options));
+ };
+
+ // Default options for `Collection#set`.
+ var setOptions = {add: true, remove: true, merge: true};
+ var addOptions = {add: true, merge: false, remove: false};
+
+ // Define the Collection's inheritable methods.
+ _.extend(Collection.prototype, Events, {
+
+ // The default model for a collection is just a **Backbone.Model**.
+ // This should be overridden in most cases.
+ model: Model,
+
+ // Initialize is an empty function by default. Override it with your own
+ // initialization logic.
+ initialize: function(){},
+
+ // The JSON representation of a Collection is an array of the
+ // models' attributes.
+ toJSON: function(options) {
+ return this.map(function(model){ return model.toJSON(options); });
+ },
+
+ // Proxy `Backbone.sync` by default.
+ sync: function() {
+ return Backbone.sync.apply(this, arguments);
+ },
+
+ // Add a model, or list of models to the set.
+ add: function(models, options) {
+ return this.set(models, _.defaults(options || {}, addOptions));
+ },
+
+ // Remove a model, or a list of models from the set.
+ remove: function(models, options) {
+ models = _.isArray(models) ? models.slice() : [models];
+ options || (options = {});
+ var i, l, index, model;
+ for (i = 0, l = models.length; i < l; i++) {
+ model = this.get(models[i]);
+ if (!model) continue;
+ delete this._byId[model.id];
+ delete this._byId[model.cid];
+ index = this.indexOf(model);
+ this.models.splice(index, 1);
+ this.length--;
+ if (!options.silent) {
+ options.index = index;
+ model.trigger('remove', model, this, options);
+ }
+ this._removeReference(model);
+ }
+ return this;
+ },
+
+ // Update a collection by `set`-ing a new list of models, adding new ones,
+ // removing models that are no longer present, and merging models that
+ // already exist in the collection, as necessary. Similar to **Model#set**,
+ // the core operation for updating the data contained by the collection.
+ set: function(models, options) {
+ options = _.defaults(options || {}, setOptions);
+ if (options.parse) models = this.parse(models, options);
+ if (!_.isArray(models)) models = models ? [models] : [];
+ var i, l, model, attrs, existing, sort;
+ var at = options.at;
+ var sortable = this.comparator && (at == null) && options.sort !== false;
+ var sortAttr = _.isString(this.comparator) ? this.comparator : null;
+ var toAdd = [], toRemove = [], modelMap = {};
+
+ // Turn bare objects into model references, and prevent invalid models
+ // from being added.
+ for (i = 0, l = models.length; i < l; i++) {
+ if (!(model = this._prepareModel(models[i], options))) continue;
+
+ // If a duplicate is found, prevent it from being added and
+ // optionally merge it into the existing model.
+ if (existing = this.get(model)) {
+ if (options.remove) modelMap[existing.cid] = true;
+ if (options.merge) {
+ existing.set(model.attributes, options);
+ if (sortable && !sort && existing.hasChanged(sortAttr)) sort = true;
+ }
+
+ // This is a new model, push it to the `toAdd` list.
+ } else if (options.add) {
+ toAdd.push(model);
+
+ // Listen to added models' events, and index models for lookup by
+ // `id` and by `cid`.
+ model.on('all', this._onModelEvent, this);
+ this._byId[model.cid] = model;
+ if (model.id != null) this._byId[model.id] = model;
+ }
+ }
+
+ // Remove nonexistent models if appropriate.
+ if (options.remove) {
+ for (i = 0, l = this.length; i < l; ++i) {
+ if (!modelMap[(model = this.models[i]).cid]) toRemove.push(model);
+ }
+ if (toRemove.length) this.remove(toRemove, options);
+ }
+
+ // See if sorting is needed, update `length` and splice in new models.
+ if (toAdd.length) {
+ if (sortable) sort = true;
+ this.length += toAdd.length;
+ if (at != null) {
+ splice.apply(this.models, [at, 0].concat(toAdd));
+ } else {
+ push.apply(this.models, toAdd);
+ }
+ }
+
+ // Silently sort the collection if appropriate.
+ if (sort) this.sort({silent: true});
+
+ if (options.silent) return this;
+
+ // Trigger `add` events.
+ for (i = 0, l = toAdd.length; i < l; i++) {
+ (model = toAdd[i]).trigger('add', model, this, options);
+ }
+
+ // Trigger `sort` if the collection was sorted.
+ if (sort) this.trigger('sort', this, options);
+ return this;
+ },
+
+ // When you have more items than you want to add or remove individually,
+ // you can reset the entire set with a new list of models, without firing
+ // any granular `add` or `remove` events. Fires `reset` when finished.
+ // Useful for bulk operations and optimizations.
+ reset: function(models, options) {
+ options || (options = {});
+ for (var i = 0, l = this.models.length; i < l; i++) {
+ this._removeReference(this.models[i]);
+ }
+ options.previousModels = this.models;
+ this._reset();
+ this.add(models, _.extend({silent: true}, options));
+ if (!options.silent) this.trigger('reset', this, options);
+ return this;
+ },
+
+ // Add a model to the end of the collection.
+ push: function(model, options) {
+ model = this._prepareModel(model, options);
+ this.add(model, _.extend({at: this.length}, options));
+ return model;
+ },
+
+ // Remove a model from the end of the collection.
+ pop: function(options) {
+ var model = this.at(this.length - 1);
+ this.remove(model, options);
+ return model;
+ },
+
+ // Add a model to the beginning of the collection.
+ unshift: function(model, options) {
+ model = this._prepareModel(model, options);
+ this.add(model, _.extend({at: 0}, options));
+ return model;
+ },
+
+ // Remove a model from the beginning of the collection.
+ shift: function(options) {
+ var model = this.at(0);
+ this.remove(model, options);
+ return model;
+ },
+
+ // Slice out a sub-array of models from the collection.
+ slice: function(begin, end) {
+ return this.models.slice(begin, end);
+ },
+
+ // Get a model from the set by id.
+ get: function(obj) {
+ if (obj == null) return void 0;
+ return this._byId[obj.id != null ? obj.id : obj.cid || obj];
+ },
+
+ // Get the model at the given index.
+ at: function(index) {
+ return this.models[index];
+ },
+
+ // Return models with matching attributes. Useful for simple cases of
+ // `filter`.
+ where: function(attrs, first) {
+ if (_.isEmpty(attrs)) return first ? void 0 : [];
+ return this[first ? 'find' : 'filter'](function(model) {
+ for (var key in attrs) {
+ if (attrs[key] !== model.get(key)) return false;
+ }
+ return true;
+ });
+ },
+
+ // Return the first model with matching attributes. Useful for simple cases
+ // of `find`.
+ findWhere: function(attrs) {
+ return this.where(attrs, true);
+ },
+
+ // Force the collection to re-sort itself. You don't need to call this under
+ // normal circumstances, as the set will maintain sort order as each item
+ // is added.
+ sort: function(options) {
+ if (!this.comparator) throw new Error('Cannot sort a set without a comparator');
+ options || (options = {});
+
+ // Run sort based on type of `comparator`.
+ if (_.isString(this.comparator) || this.comparator.length === 1) {
+ this.models = this.sortBy(this.comparator, this);
+ } else {
+ this.models.sort(_.bind(this.comparator, this));
+ }
+
+ if (!options.silent) this.trigger('sort', this, options);
+ return this;
+ },
+
+ // Figure out the smallest index at which a model should be inserted so as
+ // to maintain order.
+ sortedIndex: function(model, value, context) {
+ value || (value = this.comparator);
+ var iterator = _.isFunction(value) ? value : function(model) {
+ return model.get(value);
+ };
+ return _.sortedIndex(this.models, model, iterator, context);
+ },
+
+ // Pluck an attribute from each model in the collection.
+ pluck: function(attr) {
+ return _.invoke(this.models, 'get', attr);
+ },
+
+ // Fetch the default set of models for this collection, resetting the
+ // collection when they arrive. If `reset: true` is passed, the response
+ // data will be passed through the `reset` method instead of `set`.
+ fetch: function(options) {
+ options = options ? _.clone(options) : {};
+ if (options.parse === void 0) options.parse = true;
+ var success = options.success;
+ var collection = this;
+ options.success = function(resp) {
+ var method = options.reset ? 'reset' : 'set';
+ collection[method](resp, options);
+ if (success) success(collection, resp, options);
+ collection.trigger('sync', collection, resp, options);
+ };
+ wrapError(this, options);
+ return this.sync('read', this, options);
+ },
+
+ // Create a new instance of a model in this collection. Add the model to the
+ // collection immediately, unless `wait: true` is passed, in which case we
+ // wait for the server to agree.
+ create: function(model, options) {
+ options = options ? _.clone(options) : {};
+ if (!(model = this._prepareModel(model, options))) return false;
+ if (!options.wait) this.add(model, options);
+ var collection = this;
+ var success = options.success;
+ options.success = function(resp) {
+ if (options.wait) collection.add(model, options);
+ if (success) success(model, resp, options);
+ };
+ model.save(null, options);
+ return model;
+ },
+
+ // **parse** converts a response into a list of models to be added to the
+ // collection. The default implementation is just to pass it through.
+ parse: function(resp, options) {
+ return resp;
+ },
+
+ // Create a new collection with an identical list of models as this one.
+ clone: function() {
+ return new this.constructor(this.models);
+ },
+
+ // Private method to reset all internal state. Called when the collection
+ // is first initialized or reset.
+ _reset: function() {
+ this.length = 0;
+ this.models = [];
+ this._byId = {};
+ },
+
+ // Prepare a hash of attributes (or other model) to be added to this
+ // collection.
+ _prepareModel: function(attrs, options) {
+ if (attrs instanceof Model) {
+ if (!attrs.collection) attrs.collection = this;
+ return attrs;
+ }
+ options || (options = {});
+ options.collection = this;
+ var model = new this.model(attrs, options);
+ if (!model._validate(attrs, options)) {
+ this.trigger('invalid', this, attrs, options);
+ return false;
+ }
+ return model;
+ },
+
+ // Internal method to sever a model's ties to a collection.
+ _removeReference: function(model) {
+ if (this === model.collection) delete model.collection;
+ model.off('all', this._onModelEvent, this);
+ },
+
+ // Internal method called every time a model in the set fires an event.
+ // Sets need to update their indexes when models change ids. All other
+ // events simply proxy through. "add" and "remove" events that originate
+ // in other collections are ignored.
+ _onModelEvent: function(event, model, collection, options) {
+ if ((event === 'add' || event === 'remove') && collection !== this) return;
+ if (event === 'destroy') this.remove(model, options);
+ if (model && event === 'change:' + model.idAttribute) {
+ delete this._byId[model.previous(model.idAttribute)];
+ if (model.id != null) this._byId[model.id] = model;
+ }
+ this.trigger.apply(this, arguments);
+ }
+
+ });
+
+ // Underscore methods that we want to implement on the Collection.
+ // 90% of the core usefulness of Backbone Collections is actually implemented
+ // right here:
+ var methods = ['forEach', 'each', 'map', 'collect', 'reduce', 'foldl',
+ 'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select',
+ 'reject', 'every', 'all', 'some', 'any', 'include', 'contains', 'invoke',
+ 'max', 'min', 'toArray', 'size', 'first', 'head', 'take', 'initial', 'rest',
+ 'tail', 'drop', 'last', 'without', 'indexOf', 'shuffle', 'lastIndexOf',
+ 'isEmpty', 'chain'];
+
+ // Mix in each Underscore method as a proxy to `Collection#models`.
+ _.each(methods, function(method) {
+ Collection.prototype[method] = function() {
+ var args = slice.call(arguments);
+ args.unshift(this.models);
+ return _[method].apply(_, args);
+ };
+ });
+
+ // Underscore methods that take a property name as an argument.
+ var attributeMethods = ['groupBy', 'countBy', 'sortBy'];
+
+ // Use attributes instead of properties.
+ _.each(attributeMethods, function(method) {
+ Collection.prototype[method] = function(value, context) {
+ var iterator = _.isFunction(value) ? value : function(model) {
+ return model.get(value);
+ };
+ return _[method](this.models, iterator, context);
+ };
+ });
+
+ // Backbone.View
+ // -------------
+
+ // Backbone Views are almost more convention than they are actual code. A View
+ // is simply a JavaScript object that represents a logical chunk of UI in the
+ // DOM. This might be a single item, an entire list, a sidebar or panel, or
+ // even the surrounding frame which wraps your whole app. Defining a chunk of
+ // UI as a **View** allows you to define your DOM events declaratively, without
+ // having to worry about render order ... and makes it easy for the view to
+ // react to specific changes in the state of your models.
+
+ // Creating a Backbone.View creates its initial element outside of the DOM,
+ // if an existing element is not provided...
+ var View = Backbone.View = function(options) {
+ this.cid = _.uniqueId('view');
+ this._configure(options || {});
+ this._ensureElement();
+ this.initialize.apply(this, arguments);
+ this.delegateEvents();
+ };
+
+ // Cached regex to split keys for `delegate`.
+ var delegateEventSplitter = /^(\S+)\s*(.*)$/;
+
+ // List of view options to be merged as properties.
+ var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
+
+ // Set up all inheritable **Backbone.View** properties and methods.
+ _.extend(View.prototype, Events, {
+
+ // The default `tagName` of a View's element is `"div"`.
+ tagName: 'div',
+
+ // jQuery delegate for element lookup, scoped to DOM elements within the
+ // current view. This should be prefered to global lookups where possible.
+ $: function(selector) {
+ return this.$el.find(selector);
+ },
+
+ // Initialize is an empty function by default. Override it with your own
+ // initialization logic.
+ initialize: function(){},
+
+ // **render** is the core function that your view should override, in order
+ // to populate its element (`this.el`), with the appropriate HTML. The
+ // convention is for **render** to always return `this`.
+ render: function() {
+ return this;
+ },
+
+ // Remove this view by taking the element out of the DOM, and removing any
+ // applicable Backbone.Events listeners.
+ remove: function() {
+ this.$el.remove();
+ this.stopListening();
+ return this;
+ },
+
+ // Change the view's element (`this.el` property), including event
+ // re-delegation.
+ setElement: function(element, delegate) {
+ if (this.$el) this.undelegateEvents();
+ this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);
+ this.el = this.$el[0];
+ if (delegate !== false) this.delegateEvents();
+ return this;
+ },
+
+ // Set callbacks, where `this.events` is a hash of
+ //
+ // *{"event selector": "callback"}*
+ //
+ // {
+ // 'mousedown .title': 'edit',
+ // 'click .button': 'save'
+ // 'click .open': function(e) { ... }
+ // }
+ //
+ // pairs. Callbacks will be bound to the view, with `this` set properly.
+ // Uses event delegation for efficiency.
+ // Omitting the selector binds the event to `this.el`.
+ // This only works for delegate-able events: not `focus`, `blur`, and
+ // not `change`, `submit`, and `reset` in Internet Explorer.
+ delegateEvents: function(events) {
+ if (!(events || (events = _.result(this, 'events')))) return this;
+ this.undelegateEvents();
+ for (var key in events) {
+ var method = events[key];
+ if (!_.isFunction(method)) method = this[events[key]];
+ if (!method) continue;
+
+ var match = key.match(delegateEventSplitter);
+ var eventName = match[1], selector = match[2];
+ method = _.bind(method, this);
+ eventName += '.delegateEvents' + this.cid;
+ if (selector === '') {
+ this.$el.on(eventName, method);
+ } else {
+ this.$el.on(eventName, selector, method);
+ }
+ }
+ return this;
+ },
+
+ // Clears all callbacks previously bound to the view with `delegateEvents`.
+ // You usually don't need to use this, but may wish to if you have multiple
+ // Backbone views attached to the same DOM element.
+ undelegateEvents: function() {
+ this.$el.off('.delegateEvents' + this.cid);
+ return this;
+ },
+
+ // Performs the initial configuration of a View with a set of options.
+ // Keys with special meaning *(e.g. model, collection, id, className)* are
+ // attached directly to the view. See `viewOptions` for an exhaustive
+ // list.
+ _configure: function(options) {
+ if (this.options) options = _.extend({}, _.result(this, 'options'), options);
+ _.extend(this, _.pick(options, viewOptions));
+ this.options = options;
+ },
+
+ // Ensure that the View has a DOM element to render into.
+ // If `this.el` is a string, pass it through `$()`, take the first
+ // matching element, and re-assign it to `el`. Otherwise, create
+ // an element from the `id`, `className` and `tagName` properties.
+ _ensureElement: function() {
+ if (!this.el) {
+ var attrs = _.extend({}, _.result(this, 'attributes'));
+ if (this.id) attrs.id = _.result(this, 'id');
+ if (this.className) attrs['class'] = _.result(this, 'className');
+ var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs);
+ this.setElement($el, false);
+ } else {
+ this.setElement(_.result(this, 'el'), false);
+ }
+ }
+
+ });
+
+ // Backbone.sync
+ // -------------
+
+ // Override this function to change the manner in which Backbone persists
+ // models to the server. You will be passed the type of request, and the
+ // model in question. By default, makes a RESTful Ajax request
+ // to the model's `url()`. Some possible customizations could be:
+ //
+ // * Use `setTimeout` to batch rapid-fire updates into a single request.
+ // * Send up the models as XML instead of JSON.
+ // * Persist models via WebSockets instead of Ajax.
+ //
+ // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests
+ // as `POST`, with a `_method` parameter containing the true HTTP method,
+ // as well as all requests with the body as `application/x-www-form-urlencoded`
+ // instead of `application/json` with the model in a param named `model`.
+ // Useful when interfacing with server-side languages like **PHP** that make
+ // it difficult to read the body of `PUT` requests.
+ Backbone.sync = function(method, model, options) {
+ var type = methodMap[method];
+
+ // Default options, unless specified.
+ _.defaults(options || (options = {}), {
+ emulateHTTP: Backbone.emulateHTTP,
+ emulateJSON: Backbone.emulateJSON
+ });
+
+ // Default JSON-request options.
+ var params = {type: type, dataType: 'json'};
+
+ // Ensure that we have a URL.
+ if (!options.url) {
+ params.url = _.result(model, 'url') || urlError();
+ }
+
+ // Ensure that we have the appropriate request data.
+ if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
+ params.contentType = 'application/json';
+ params.data = JSON.stringify(options.attrs || model.toJSON(options));
+ }
+
+ // For older servers, emulate JSON by encoding the request into an HTML-form.
+ if (options.emulateJSON) {
+ params.contentType = 'application/x-www-form-urlencoded';
+ params.data = params.data ? {model: params.data} : {};
+ }
+
+ // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
+ // And an `X-HTTP-Method-Override` header.
+ if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {
+ params.type = 'POST';
+ if (options.emulateJSON) params.data._method = type;
+ var beforeSend = options.beforeSend;
+ options.beforeSend = function(xhr) {
+ xhr.setRequestHeader('X-HTTP-Method-Override', type);
+ if (beforeSend) return beforeSend.apply(this, arguments);
+ };
+ }
+
+ // Don't process data on a non-GET request.
+ if (params.type !== 'GET' && !options.emulateJSON) {
+ params.processData = false;
+ }
+
+ // If we're sending a `PATCH` request, and we're in an old Internet Explorer
+ // that still has ActiveX enabled by default, override jQuery to use that
+ // for XHR instead. Remove this line when jQuery supports `PATCH` on IE8.
+ if (params.type === 'PATCH' && window.ActiveXObject &&
+ !(window.external && window.external.msActiveXFilteringEnabled)) {
+ params.xhr = function() {
+ return new ActiveXObject("Microsoft.XMLHTTP");
+ };
+ }
+
+ // Make the request, allowing the user to override any Ajax options.
+ var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
+ model.trigger('request', model, xhr, options);
+ return xhr;
+ };
+
+ // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
+ var methodMap = {
+ 'create': 'POST',
+ 'update': 'PUT',
+ 'patch': 'PATCH',
+ 'delete': 'DELETE',
+ 'read': 'GET'
+ };
+
+ // Set the default implementation of `Backbone.ajax` to proxy through to `$`.
+ // Override this if you'd like to use a different library.
+ Backbone.ajax = function() {
+ return Backbone.$.ajax.apply(Backbone.$, arguments);
+ };
+
+ // Backbone.Router
+ // ---------------
+
+ // Routers map faux-URLs to actions, and fire events when routes are
+ // matched. Creating a new one sets its `routes` hash, if not set statically.
+ var Router = Backbone.Router = function(options) {
+ options || (options = {});
+ if (options.routes) this.routes = options.routes;
+ this._bindRoutes();
+ this.initialize.apply(this, arguments);
+ };
+
+ // Cached regular expressions for matching named param parts and splatted
+ // parts of route strings.
+ var optionalParam = /\((.*?)\)/g;
+ var namedParam = /(\(\?)?:\w+/g;
+ var splatParam = /\*\w+/g;
+ var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g;
+
+ // Set up all inheritable **Backbone.Router** properties and methods.
+ _.extend(Router.prototype, Events, {
+
+ // Initialize is an empty function by default. Override it with your own
+ // initialization logic.
+ initialize: function(){},
+
+ // Manually bind a single named route to a callback. For example:
+ //
+ // this.route('search/:query/p:num', 'search', function(query, num) {
+ // ...
+ // });
+ //
+ route: function(route, name, callback) {
+ if (!_.isRegExp(route)) route = this._routeToRegExp(route);
+ if (_.isFunction(name)) {
+ callback = name;
+ name = '';
+ }
+ if (!callback) callback = this[name];
+ var router = this;
+ Backbone.history.route(route, function(fragment) {
+ var args = router._extractParameters(route, fragment);
+ callback && callback.apply(router, args);
+ router.trigger.apply(router, ['route:' + name].concat(args));
+ router.trigger('route', name, args);
+ Backbone.history.trigger('route', router, name, args);
+ });
+ return this;
+ },
+
+ // Simple proxy to `Backbone.history` to save a fragment into the history.
+ navigate: function(fragment, options) {
+ Backbone.history.navigate(fragment, options);
+ return this;
+ },
+
+ // Bind all defined routes to `Backbone.history`. We have to reverse the
+ // order of the routes here to support behavior where the most general
+ // routes can be defined at the bottom of the route map.
+ _bindRoutes: function() {
+ if (!this.routes) return;
+ this.routes = _.result(this, 'routes');
+ var route, routes = _.keys(this.routes);
+ while ((route = routes.pop()) != null) {
+ this.route(route, this.routes[route]);
+ }
+ },
+
+ // Convert a route string into a regular expression, suitable for matching
+ // against the current location hash.
+ _routeToRegExp: function(route) {
+ route = route.replace(escapeRegExp, '\\$&')
+ .replace(optionalParam, '(?:$1)?')
+ .replace(namedParam, function(match, optional){
+ return optional ? match : '([^\/]+)';
+ })
+ .replace(splatParam, '(.*?)');
+ return new RegExp('^' + route + '$');
+ },
+
+ // Given a route, and a URL fragment that it matches, return the array of
+ // extracted decoded parameters. Empty or unmatched parameters will be
+ // treated as `null` to normalize cross-browser behavior.
+ _extractParameters: function(route, fragment) {
+ var params = route.exec(fragment).slice(1);
+ return _.map(params, function(param) {
+ return param ? decodeURIComponent(param) : null;
+ });
+ }
+
+ });
+
+ // Backbone.History
+ // ----------------
+
+ // Handles cross-browser history management, based on either
+ // [pushState](http://diveintohtml5.info/history.html) and real URLs, or
+ // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashcha…
+ // and URL fragments. If the browser supports neither (old IE, natch),
+ // falls back to polling.
+ var History = Backbone.History = function() {
+ this.handlers = [];
+ _.bindAll(this, 'checkUrl');
+
+ // Ensure that `History` can be used outside of the browser.
+ if (typeof window !== 'undefined') {
+ this.location = window.location;
+ this.history = window.history;
+ }
+ };
+
+ // Cached regex for stripping a leading hash/slash and trailing space.
+ var routeStripper = /^[#\/]|\s+$/g;
+
+ // Cached regex for stripping leading and trailing slashes.
+ var rootStripper = /^\/+|\/+$/g;
+
+ // Cached regex for detecting MSIE.
+ var isExplorer = /msie [\w.]+/;
+
+ // Cached regex for removing a trailing slash.
+ var trailingSlash = /\/$/;
+
+ // Has the history handling already been started?
+ History.started = false;
+
+ // Set up all inheritable **Backbone.History** properties and methods.
+ _.extend(History.prototype, Events, {
+
+ // The default interval to poll for hash changes, if necessary, is
+ // twenty times a second.
+ interval: 50,
+
+ // Gets the true hash value. Cannot use location.hash directly due to bug
+ // in Firefox where location.hash will always be decoded.
+ getHash: function(window) {
+ var match = (window || this).location.href.match(/#(.*)$/);
+ return match ? match[1] : '';
+ },
+
+ // Get the cross-browser normalized URL fragment, either from the URL,
+ // the hash, or the override.
+ getFragment: function(fragment, forcePushState) {
+ if (fragment == null) {
+ if (this._hasPushState || !this._wantsHashChange || forcePushState) {
+ fragment = this.location.pathname;
+ var root = this.root.replace(trailingSlash, '');
+ if (!fragment.indexOf(root)) fragment = fragment.substr(root.length);
+ } else {
+ fragment = this.getHash();
+ }
+ }
+ return fragment.replace(routeStripper, '');
+ },
+
+ // Start the hash change handling, returning `true` if the current URL matches
+ // an existing route, and `false` otherwise.
+ start: function(options) {
+ if (History.started) throw new Error("Backbone.history has already been started");
+ History.started = true;
+
+ // Figure out the initial configuration. Do we need an iframe?
+ // Is pushState desired ... is it available?
+ this.options = _.extend({}, {root: '/'}, this.options, options);
+ this.root = this.options.root;
+ this._wantsHashChange = this.options.hashChange !== false;
+ this._wantsPushState = !!this.options.pushState;
+ this._hasPushState = !!(this.options.pushState && this.history && this.history.pushState);
+ var fragment = this.getFragment();
+ var docMode = document.documentMode;
+ var oldIE = (isExplorer.exec(navigator.userAgent.toLowerCase()) && (!docMode || docMode <= 7));
+
+ // Normalize root to always include a leading and trailing slash.
+ this.root = ('/' + this.root + '/').replace(rootStripper, '/');
+
+ if (oldIE && this._wantsHashChange) {
+ this.iframe = Backbone.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo('body')[0].contentWindow;
+ this.navigate(fragment);
+ }
+
+ // Depending on whether we're using pushState or hashes, and whether
+ // 'onhashchange' is supported, determine how we check the URL state.
+ if (this._hasPushState) {
+ Backbone.$(window).on('popstate', this.checkUrl);
+ } else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) {
+ Backbone.$(window).on('hashchange', this.checkUrl);
+ } else if (this._wantsHashChange) {
+ this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
+ }
+
+ // Determine if we need to change the base url, for a pushState link
+ // opened by a non-pushState browser.
+ this.fragment = fragment;
+ var loc = this.location;
+ var atRoot = loc.pathname.replace(/[^\/]$/, '$&/') === this.root;
+
+ // If we've started off with a route from a `pushState`-enabled browser,
+ // but we're currently in a browser that doesn't support it...
+ if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !atRoot) {
+ this.fragment = this.getFragment(null, true);
+ this.location.replace(this.root + this.location.search + '#' + this.fragment);
+ // Return immediately as browser will do redirect to new url
+ return true;
+
+ // Or if we've started out with a hash-based route, but we're currently
+ // in a browser where it could be `pushState`-based instead...
+ } else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) {
+ this.fragment = this.getHash().replace(routeStripper, '');
+ this.history.replaceState({}, document.title, this.root + this.fragment + loc.search);
+ }
+
+ if (!this.options.silent) return this.loadUrl();
+ },
+
+ // Disable Backbone.history, perhaps temporarily. Not useful in a real app,
+ // but possibly useful for unit testing Routers.
+ stop: function() {
+ Backbone.$(window).off('popstate', this.checkUrl).off('hashchange', this.checkUrl);
+ clearInterval(this._checkUrlInterval);
+ History.started = false;
+ },
+
+ // Add a route to be tested when the fragment changes. Routes added later
+ // may override previous routes.
+ route: function(route, callback) {
+ this.handlers.unshift({route: route, callback: callback});
+ },
+
+ // Checks the current URL to see if it has changed, and if it has,
+ // calls `loadUrl`, normalizing across the hidden iframe.
+ checkUrl: function(e) {
+ var current = this.getFragment();
+ if (current === this.fragment && this.iframe) {
+ current = this.getFragment(this.getHash(this.iframe));
+ }
+ if (current === this.fragment) return false;
+ if (this.iframe) this.navigate(current);
+ this.loadUrl() || this.loadUrl(this.getHash());
+ },
+
+ // Attempt to load the current URL fragment. If a route succeeds with a
+ // match, returns `true`. If no defined routes matches the fragment,
+ // returns `false`.
+ loadUrl: function(fragmentOverride) {
+ var fragment = this.fragment = this.getFragment(fragmentOverride);
+ var matched = _.any(this.handlers, function(handler) {
+ if (handler.route.test(fragment)) {
+ handler.callback(fragment);
+ return true;
+ }
+ });
+ return matched;
+ },
+
+ // Save a fragment into the hash history, or replace the URL state if the
+ // 'replace' option is passed. You are responsible for properly URL-encoding
+ // the fragment in advance.
+ //
+ // The options object can contain `trigger: true` if you wish to have the
+ // route callback be fired (not usually desirable), or `replace: true`, if
+ // you wish to modify the current URL without adding an entry to the history.
+ navigate: function(fragment, options) {
+ if (!History.started) return false;
+ if (!options || options === true) options = {trigger: options};
+ fragment = this.getFragment(fragment || '');
+ if (this.fragment === fragment) return;
+ this.fragment = fragment;
+ var url = this.root + fragment;
+
+ // If pushState is available, we use it to set the fragment as a real URL.
+ if (this._hasPushState) {
+ this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);
+
+ // If hash changes haven't been explicitly disabled, update the hash
+ // fragment to store history.
+ } else if (this._wantsHashChange) {
+ this._updateHash(this.location, fragment, options.replace);
+ if (this.iframe && (fragment !== this.getFragment(this.getHash(this.iframe)))) {
+ // Opening and closing the iframe tricks IE7 and earlier to push a
+ // history entry on hash-tag change. When replace is true, we don't
+ // want this.
+ if(!options.replace) this.iframe.document.open().close();
+ this._updateHash(this.iframe.location, fragment, options.replace);
+ }
+
+ // If you've told us that you explicitly don't want fallback hashchange-
+ // based history, then `navigate` becomes a page refresh.
+ } else {
+ return this.location.assign(url);
+ }
+ if (options.trigger) this.loadUrl(fragment);
+ },
+
+ // Update the hash location, either replacing the current entry, or adding
+ // a new one to the browser history.
+ _updateHash: function(location, fragment, replace) {
+ if (replace) {
+ var href = location.href.replace(/(javascript:|#).*$/, '');
+ location.replace(href + '#' + fragment);
+ } else {
+ // Some browsers require that `hash` contains a leading #.
+ location.hash = '#' + fragment;
+ }
+ }
+
+ });
+
+ // Create the default Backbone.history.
+ Backbone.history = new History;
+
+ // Helpers
+ // -------
+
+ // Helper function to correctly set up the prototype chain, for subclasses.
+ // Similar to `goog.inherits`, but uses a hash of prototype properties and
+ // class properties to be extended.
+ var extend = function(protoProps, staticProps) {
+ var parent = this;
+ var child;
+
+ // The constructor function for the new subclass is either defined by you
+ // (the "constructor" property in your `extend` definition), or defaulted
+ // by us to simply call the parent's constructor.
+ if (protoProps && _.has(protoProps, 'constructor')) {
+ child = protoProps.constructor;
+ } else {
+ child = function(){ return parent.apply(this, arguments); };
+ }
+
+ // Add static properties to the constructor function, if supplied.
+ _.extend(child, parent, staticProps);
+
+ // Set the prototype chain to inherit from `parent`, without calling
+ // `parent`'s constructor function.
+ var Surrogate = function(){ this.constructor = child; };
+ Surrogate.prototype = parent.prototype;
+ child.prototype = new Surrogate;
+
+ // Add prototype properties (instance properties) to the subclass,
+ // if supplied.
+ if (protoProps) _.extend(child.prototype, protoProps);
+
+ // Set a convenience property in case the parent's prototype is needed
+ // later.
+ child.__super__ = parent.prototype;
+
+ return child;
+ };
+
+ // Set up inheritance for the model, collection, router, view and history.
+ Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;
+
+ // Throw an error when a URL is needed, and none is supplied.
+ var urlError = function() {
+ throw new Error('A "url" property or function must be specified');
+ };
+
+ // Wrap an optional error callback with a fallback error event.
+ var wrapError = function (model, options) {
+ var error = options.error;
+ options.error = function(resp) {
+ if (error) error(model, resp, options);
+ model.trigger('error', model, resp, options);
+ };
+ };
+
+}).call(this);
Added: sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm
===================================================================
--- sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,63 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: Mustache
+.. * $Id$
+.. * $HeadURL$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+Angular
+=======
+
+Angular_ is a logic-less templating system for HTML, config files, anything.
+
+- documentation_
+- tutorial_
+
+.. _Angular: http://www.angularjs.org/
+.. _documentation: http://www.angularjs.org/
+.. _tutorial: http://docs.angularjs.org/tutorial
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-angular</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/angular.js"/>"></script>
+
+Available JS
+------------
+
+- angular.js
+
+Available CSS
+-------------
+
+*none*
Property changes on: sandbox/nuiton-js-backbone/src/site/rst/index.rst.vm
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: sandbox/nuiton-js-backbone/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-backbone/src/site/site_en.xml (rev 0)
+++ sandbox/nuiton-js-backbone/src/site/site_en.xml 2013-07-07 15:24:06 UTC (rev 136)
@@ -0,0 +1,71 @@
+<!--
+ #%L
+ Nuiton JS :: Mustache
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2012 - 2013 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+<project name="${project.name}">
+
+ <bannerLeft>
+ <name>${project.name}</name>
+ <href>index.html</href>
+ </bannerLeft>
+
+ <body>
+
+ <head>
+ <script type="text/javascript"
+ src="http://maven-site.nuiton.org/public/js/mavenpom-site.js">
+ </script>
+
+ <link rel="stylesheet" type="text/css"
+ href="http://maven-site.nuiton.org/public/css/mavenpom-site.css"/>
+ </head>
+
+ <breadcrumbs>
+ <item name="${project.name}" href="${project.url}"/>
+ </breadcrumbs>
+
+ <menu ref="parent"/>
+
+ <menu name="Utilisateurs">
+ <item name="Accueil" href="index.html"/>
+ </menu>
+
+ <menu ref="reports"/>
+
+ <footer>
+
+ <div id='projectMetas'
+ projectversion='${project.version}'
+ platform='${project.platform}'
+ projectid='${project.projectId}'
+ scm='${project.scm.connection}'
+ scmwebeditorenabled='${project.scmwebeditorEnabled}'
+ scmwebeditorurl='${project.scmwebeditorUrl}'
+ siteSourcesType='${project.siteSourcesType}'
+ piwikEnabled='${project.piwikEnabled}'
+ piwikId='${project.piwikId}'>
+ </div>
+ </footer>
+
+ </body>
+
+</project>
Property changes on: sandbox/nuiton-js-backbone/src/site/site_en.xml
___________________________________________________________________
Added: svn:mime-type
+ text/xml
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
r135 - in sandbox/nuiton-js-leaflet: . src/main src/main/resources/META-INF/nuiton-js src/main/resources/nuiton-js-leaflet src/main/resources/nuiton-js-leaflet/images src/main/rst
by echatellier@users.nuiton.org 07 Jul '13
by echatellier@users.nuiton.org 07 Jul '13
07 Jul '13
Author: echatellier
Date: 2013-07-07 17:17:25 +0200 (Sun, 07 Jul 2013)
New Revision: 135
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/135
Log:
Update leaflet to 0.6.2.
Added:
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/layers-2x.png
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/marker-icon-2x.png
sandbox/nuiton-js-leaflet/src/main/rst/
sandbox/nuiton-js-leaflet/src/main/rst/index.rst.vm
sandbox/nuiton-js-leaflet/src/main/site_en.xml
Removed:
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/marker-icon(a)2x.png
Modified:
sandbox/nuiton-js-leaflet/pom.xml
sandbox/nuiton-js-leaflet/src/main/resources/META-INF/nuiton-js/wro-leaflet.xml
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/layers.png
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet-src.js
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.css
sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.ie.css
Modified: sandbox/nuiton-js-leaflet/pom.xml
===================================================================
--- sandbox/nuiton-js-leaflet/pom.xml 2013-07-07 15:16:59 UTC (rev 134)
+++ sandbox/nuiton-js-leaflet/pom.xml 2013-07-07 15:17:25 UTC (rev 135)
@@ -10,11 +10,11 @@
<parent>
<groupId>org.nuiton.js</groupId>
<artifactId>nuiton-js-lib</artifactId>
- <version>1.0</version>
+ <version>1.0.1-SNAPSHOT</version>
</parent>
<artifactId>nuiton-js-leaflet</artifactId>
- <version>0.5.1-1-SNAPSHOT</version>
+ <version>0.6.2-1-SNAPSHOT</version>
<name>Nuiton JS :: Leaflet</name>
<description>Leaflet jar packaging</description>
@@ -29,9 +29,9 @@
</licenses>
<scm>
- <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-leaflet-0.5.1-1</connection>
- <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-leaflet-0.5.1-1</developerConnection>
- <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-leaflet-…</url>
+ <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-leaflet-0.6.2-1</connection>
+ <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-leaflet-0.6.2-1</developerConnection>
+ <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-leaflet-…</url>
</scm>
</project>
Modified: sandbox/nuiton-js-leaflet/src/main/resources/META-INF/nuiton-js/wro-leaflet.xml
===================================================================
--- sandbox/nuiton-js-leaflet/src/main/resources/META-INF/nuiton-js/wro-leaflet.xml 2013-07-07 15:16:59 UTC (rev 134)
+++ sandbox/nuiton-js-leaflet/src/main/resources/META-INF/nuiton-js/wro-leaflet.xml 2013-07-07 15:17:25 UTC (rev 135)
@@ -30,7 +30,7 @@
<css>classpath:nuiton-js-leaflet/leaflet.css</css>
</group>
- <group name='leaflet-ie'>
+ <group name='leaflet.ie'>
<group-ref>jquery</group-ref>
<css>classpath:nuiton-js-leaflet/leaflet.ie.css</css>
</group>
Added: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/layers-2x.png
===================================================================
(Binary files differ)
Property changes on: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/layers-2x.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Modified: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/layers.png
===================================================================
(Binary files differ)
Added: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/marker-icon-2x.png
===================================================================
(Binary files differ)
Property changes on: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/marker-icon-2x.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Deleted: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/images/marker-icon(a)2x.png
===================================================================
(Binary files differ)
Modified: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet-src.js
===================================================================
--- sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet-src.js 2013-07-07 15:16:59 UTC (rev 134)
+++ sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet-src.js 2013-07-07 15:17:25 UTC (rev 135)
@@ -1,1286 +1,1470 @@
-/* %%Ignore-License
+/*
Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com
- (c) 2010-2013, Vladimir Agafonkin, CloudMade
+ (c) 2010-2013, Vladimir Agafonkin
+ (c) 2010-2011, CloudMade
*/
-(function (window, document, undefined) {/*
- * The L namespace contains all Leaflet classes and functions.
- * This code allows you to handle any possible namespace conflicts.
- */
+(function (window, document, undefined) {
+var oldL = window.L,
+ L = {};
+
+L.version = '0.6.2';
+
+// define Leaflet for Node module pattern loaders, including Browserify
+if (typeof module === 'object' && typeof module.exports === 'object') {
+ module.exports = L;
+
+// define Leaflet as an AMD module
+} else if (typeof define === 'function' && define.amd) {
+ define(L);
+}
+
+// define Leaflet as a global L variable, saving the original L to restore later if needed
+
+L.noConflict = function () {
+ window.L = oldL;
+ return this;
+};
+
+window.L = L;
-var L, originalL;
-if (typeof exports !== undefined + '') {
- L = exports;
-} else {
- originalL = window.L;
- L = {};
+/*
+ * L.Util contains various utility functions used throughout Leaflet code.
+ */
+
+L.Util = {
+ extend: function (dest) { // (Object[, Object, ...]) ->
+ var sources = Array.prototype.slice.call(arguments, 1),
+ i, j, len, src;
+
+ for (j = 0, len = sources.length; j < len; j++) {
+ src = sources[j] || {};
+ for (i in src) {
+ if (src.hasOwnProperty(i)) {
+ dest[i] = src[i];
+ }
+ }
+ }
+ return dest;
+ },
+
+ bind: function (fn, obj) { // (Function, Object) -> Function
+ var args = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null;
+ return function () {
+ return fn.apply(obj, args || arguments);
+ };
+ },
+
+ stamp: (function () {
+ var lastId = 0,
+ key = '_leaflet_id';
+ return function (obj) {
+ obj[key] = obj[key] || ++lastId;
+ return obj[key];
+ };
+ }()),
+
+ invokeEach: function (obj, method, context) {
+ var i, args;
+
+ if (typeof obj === 'object') {
+ args = Array.prototype.slice.call(arguments, 3);
+
+ for (i in obj) {
+ method.apply(context, [i, obj[i]].concat(args));
+ }
+ return true;
+ }
+
+ return false;
+ },
+
+ limitExecByInterval: function (fn, time, context) {
+ var lock, execOnUnlock;
+
+ return function wrapperFn() {
+ var args = arguments;
+
+ if (lock) {
+ execOnUnlock = true;
+ return;
+ }
+
+ lock = true;
+
+ setTimeout(function () {
+ lock = false;
+
+ if (execOnUnlock) {
+ wrapperFn.apply(context, args);
+ execOnUnlock = false;
+ }
+ }, time);
+
+ fn.apply(context, args);
+ };
+ },
+
+ falseFn: function () {
+ return false;
+ },
+
+ formatNum: function (num, digits) {
+ var pow = Math.pow(10, digits || 5);
+ return Math.round(num * pow) / pow;
+ },
+
+ trim: function (str) {
+ return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
+ },
+
+ splitWords: function (str) {
+ return L.Util.trim(str).split(/\s+/);
+ },
+
+ setOptions: function (obj, options) {
+ obj.options = L.extend({}, obj.options, options);
+ return obj.options;
+ },
+
+ getParamString: function (obj, existingUrl, uppercase) {
+ var params = [];
+ for (var i in obj) {
+ params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
+ }
+ return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
+ },
+
+ template: function (str, data) {
+ return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
+ var value = data[key];
+ if (value === undefined) {
+ throw new Error('No value provided for variable ' + str);
+ } else if (typeof value === 'function') {
+ value = value(data);
+ }
+ return value;
+ });
+ },
+
+ isArray: function (obj) {
+ return (Object.prototype.toString.call(obj) === '[object Array]');
+ },
+
+ emptyImageUrl: 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
+};
+
+(function () {
+
+ // inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+
+ function getPrefixed(name) {
+ var i, fn,
+ prefixes = ['webkit', 'moz', 'o', 'ms'];
+
+ for (i = 0; i < prefixes.length && !fn; i++) {
+ fn = window[prefixes[i] + name];
+ }
+
+ return fn;
+ }
+
+ var lastTime = 0;
+
+ function timeoutDefer(fn) {
+ var time = +new Date(),
+ timeToCall = Math.max(0, 16 - (time - lastTime));
+
+ lastTime = time + timeToCall;
+ return window.setTimeout(fn, timeToCall);
+ }
+
+ var requestFn = window.requestAnimationFrame ||
+ getPrefixed('RequestAnimationFrame') || timeoutDefer;
+
+ var cancelFn = window.cancelAnimationFrame ||
+ getPrefixed('CancelAnimationFrame') ||
+ getPrefixed('CancelRequestAnimationFrame') ||
+ function (id) { window.clearTimeout(id); };
+
+
+ L.Util.requestAnimFrame = function (fn, context, immediate, element) {
+ fn = L.bind(fn, context);
+
+ if (immediate && requestFn === timeoutDefer) {
+ fn();
+ } else {
+ return requestFn.call(window, fn, element);
+ }
+ };
+
+ L.Util.cancelAnimFrame = function (id) {
+ if (id) {
+ cancelFn.call(window, id);
+ }
+ };
+
+}());
+
+// shortcuts for most used utility functions
+L.extend = L.Util.extend;
+L.bind = L.Util.bind;
+L.stamp = L.Util.stamp;
+L.setOptions = L.Util.setOptions;
- L.noConflict = function () {
- window.L = originalL;
- return this;
- };
- window.L = L;
-}
+/*
+ * L.Class powers the OOP facilities of the library.
+ * Thanks to John Resig and Dean Edwards for inspiration!
+ */
+
+L.Class = function () {};
+
+L.Class.extend = function (props) {
+
+ // extended class with the new prototype
+ var NewClass = function () {
+
+ // call the constructor
+ if (this.initialize) {
+ this.initialize.apply(this, arguments);
+ }
+
+ // call all constructor hooks
+ if (this._initHooks) {
+ this.callInitHooks();
+ }
+ };
+
+ // instantiate class without calling constructor
+ var F = function () {};
+ F.prototype = this.prototype;
+
+ var proto = new F();
+ proto.constructor = NewClass;
+
+ NewClass.prototype = proto;
+
+ //inherit parent's statics
+ for (var i in this) {
+ if (this.hasOwnProperty(i) && i !== 'prototype') {
+ NewClass[i] = this[i];
+ }
+ }
+
+ // mix static properties into the class
+ if (props.statics) {
+ L.extend(NewClass, props.statics);
+ delete props.statics;
+ }
+
+ // mix includes into the prototype
+ if (props.includes) {
+ L.Util.extend.apply(null, [proto].concat(props.includes));
+ delete props.includes;
+ }
+
+ // merge options
+ if (props.options && proto.options) {
+ props.options = L.extend({}, proto.options, props.options);
+ }
+
+ // mix given properties into the prototype
+ L.extend(proto, props);
+
+ proto._initHooks = [];
+
+ var parent = this;
+ // jshint camelcase: false
+ NewClass.__super__ = parent.prototype;
+
+ // add method for calling all hooks
+ proto.callInitHooks = function () {
+
+ if (this._initHooksCalled) { return; }
+
+ if (parent.prototype.callInitHooks) {
+ parent.prototype.callInitHooks.call(this);
+ }
+
+ this._initHooksCalled = true;
+
+ for (var i = 0, len = proto._initHooks.length; i < len; i++) {
+ proto._initHooks[i].call(this);
+ }
+ };
+
+ return NewClass;
+};
+
+
+// method for adding properties to prototype
+L.Class.include = function (props) {
+ L.extend(this.prototype, props);
+};
+
+// merge new default options to the Class
+L.Class.mergeOptions = function (options) {
+ L.extend(this.prototype.options, options);
+};
+
+// add a constructor hook
+L.Class.addInitHook = function (fn) { // (Function) || (String, args...)
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ var init = typeof fn === 'function' ? fn : function () {
+ this[fn].apply(this, args);
+ };
+
+ this.prototype._initHooks = this.prototype._initHooks || [];
+ this.prototype._initHooks.push(init);
+};
-L.version = '0.5.1';
+/*
+ * L.Mixin.Events is used to add custom events functionality to Leaflet classes.
+ */
+
+var eventsKey = '_leaflet_events';
+
+L.Mixin = {};
+
+L.Mixin.Events = {
+
+ addEventListener: function (types, fn, context) { // (String, Function[, Object]) or (Object[, Object])
+
+ // types can be a map of types/handlers
+ if (L.Util.invokeEach(types, this.addEventListener, this, fn, context)) { return this; }
+
+ var events = this[eventsKey] = this[eventsKey] || {},
+ contextId = context && L.stamp(context),
+ i, len, event, type, indexKey, indexLenKey, typeIndex;
+
+ // types can be a string of space-separated words
+ types = L.Util.splitWords(types);
+
+ for (i = 0, len = types.length; i < len; i++) {
+ event = {
+ action: fn,
+ context: context || this
+ };
+ type = types[i];
+
+ if (context) {
+ // store listeners of a particular context in a separate hash (if it has an id)
+ // gives a major performance boost when removing thousands of map layers
+
+ indexKey = type + '_idx';
+ indexLenKey = indexKey + '_len';
+
+ typeIndex = events[indexKey] = events[indexKey] || {};
+
+ if (!typeIndex[contextId]) {
+ typeIndex[contextId] = [];
+
+ // keep track of the number of keys in the index to quickly check if it's empty
+ events[indexLenKey] = (events[indexLenKey] || 0) + 1;
+ }
+
+ typeIndex[contextId].push(event);
+
+
+ } else {
+ events[type] = events[type] || [];
+ events[type].push(event);
+ }
+ }
+
+ return this;
+ },
+
+ hasEventListeners: function (type) { // (String) -> Boolean
+ var events = this[eventsKey];
+ return !!events && ((type in events && events[type].length > 0) ||
+ (type + '_idx' in events && events[type + '_idx_len'] > 0));
+ },
+
+ removeEventListener: function (types, fn, context) { // ([String, Function, Object]) or (Object[, Object])
+
+ if (!this[eventsKey]) {
+ return this;
+ }
+
+ if (!types) {
+ return this.clearAllEventListeners();
+ }
+
+ if (L.Util.invokeEach(types, this.removeEventListener, this, fn, context)) { return this; }
+
+ var events = this[eventsKey],
+ contextId = context && L.stamp(context),
+ i, len, type, listeners, j, indexKey, indexLenKey, typeIndex, removed;
+
+ types = L.Util.splitWords(types);
+
+ for (i = 0, len = types.length; i < len; i++) {
+ type = types[i];
+ indexKey = type + '_idx';
+ indexLenKey = indexKey + '_len';
+
+ typeIndex = events[indexKey];
+
+ if (!fn) {
+ // clear all listeners for a type if function isn't specified
+ delete events[type];
+ delete events[indexKey];
+
+ } else {
+ listeners = context && typeIndex ? typeIndex[contextId] : events[type];
+
+ if (listeners) {
+ for (j = listeners.length - 1; j >= 0; j--) {
+ if ((listeners[j].action === fn) && (!context || (listeners[j].context === context))) {
+ removed = listeners.splice(j, 1);
+ // set the old action to a no-op, because it is possible
+ // that the listener is being iterated over as part of a dispatch
+ removed[0].action = L.Util.falseFn;
+ }
+ }
+
+ if (context && typeIndex && (listeners.length === 0)) {
+ delete typeIndex[contextId];
+ events[indexLenKey]--;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ clearAllEventListeners: function () {
+ delete this[eventsKey];
+ return this;
+ },
+
+ fireEvent: function (type, data) { // (String[, Object])
+ if (!this.hasEventListeners(type)) {
+ return this;
+ }
+
+ var event = L.Util.extend({}, data, { type: type, target: this });
+
+ var events = this[eventsKey],
+ listeners, i, len, typeIndex, contextId;
+
+ if (events[type]) {
+ // make sure adding/removing listeners inside other listeners won't cause infinite loop
+ listeners = events[type].slice();
+
+ for (i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].action.call(listeners[i].context || this, event);
+ }
+ }
+
+ // fire event for the context-indexed listeners as well
+ typeIndex = events[type + '_idx'];
+
+ for (contextId in typeIndex) {
+ listeners = typeIndex[contextId].slice();
+
+ if (listeners) {
+ for (i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].action.call(listeners[i].context || this, event);
+ }
+ }
+ }
+
+ return this;
+ },
+
+ addOneTimeEventListener: function (types, fn, context) {
+
+ if (L.Util.invokeEach(types, this.addOneTimeEventListener, this, fn, context)) { return this; }
+
+ var handler = L.bind(function () {
+ this
+ .removeEventListener(types, fn, context)
+ .removeEventListener(types, handler, context);
+ }, this);
+
+ return this
+ .addEventListener(types, fn, context)
+ .addEventListener(types, handler, context);
+ }
+};
+
+L.Mixin.Events.on = L.Mixin.Events.addEventListener;
+L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
+L.Mixin.Events.once = L.Mixin.Events.addOneTimeEventListener;
+L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
-/*
- * L.Util contains various utility functions used throughout Leaflet code.
- */
-L.Util = {
- extend: function (dest) { // (Object[, Object, ...]) ->
- var sources = Array.prototype.slice.call(arguments, 1),
- i, j, len, src;
+/*
+ * L.Browser handles different browser and feature detections for internal Leaflet use.
+ */
+
+(function () {
+
+ var ie = !!window.ActiveXObject,
+ ie6 = ie && !window.XMLHttpRequest,
+ ie7 = ie && !document.querySelector,
+ ielt9 = ie && !document.addEventListener,
+
+ // terrible browser detection to work around Safari / iOS / Android browser bugs
+ ua = navigator.userAgent.toLowerCase(),
+ webkit = ua.indexOf('webkit') !== -1,
+ chrome = ua.indexOf('chrome') !== -1,
+ phantomjs = ua.indexOf('phantom') !== -1,
+ android = ua.indexOf('android') !== -1,
+ android23 = ua.search('android [23]') !== -1,
+
+ mobile = typeof orientation !== undefined + '',
+ msTouch = window.navigator && window.navigator.msPointerEnabled &&
+ window.navigator.msMaxTouchPoints,
+ retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) ||
+ ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') &&
+ window.matchMedia('(min-resolution:144dpi)').matches),
+
+ doc = document.documentElement,
+ ie3d = ie && ('transition' in doc.style),
+ webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),
+ gecko3d = 'MozPerspective' in doc.style,
+ opera3d = 'OTransition' in doc.style,
+ any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs;
+
+
+ // PhantomJS has 'ontouchstart' in document.documentElement, but doesn't actually support touch.
+ // https://github.com/Leaflet/Leaflet/pull/1434#issuecomment-13843151
+
+ var touch = !window.L_NO_TOUCH && !phantomjs && (function () {
+
+ var startName = 'ontouchstart';
+
+ // IE10+ (We simulate these into touch* events in L.DomEvent and L.DomEvent.MsTouch) or WebKit, etc.
+ if (msTouch || (startName in doc)) {
+ return true;
+ }
+
+ // Firefox/Gecko
+ var div = document.createElement('div'),
+ supported = false;
+
+ if (!div.setAttribute) {
+ return false;
+ }
+ div.setAttribute(startName, 'return;');
+
+ if (typeof div[startName] === 'function') {
+ supported = true;
+ }
+
+ div.removeAttribute(startName);
+ div = null;
+
+ return supported;
+ }());
+
+
+ L.Browser = {
+ ie: ie,
+ ie6: ie6,
+ ie7: ie7,
+ ielt9: ielt9,
+ webkit: webkit,
+
+ android: android,
+ android23: android23,
+
+ chrome: chrome,
+
+ ie3d: ie3d,
+ webkit3d: webkit3d,
+ gecko3d: gecko3d,
+ opera3d: opera3d,
+ any3d: any3d,
+
+ mobile: mobile,
+ mobileWebkit: mobile && webkit,
+ mobileWebkit3d: mobile && webkit3d,
+ mobileOpera: mobile && window.opera,
+
+ touch: touch,
+ msTouch: msTouch,
+
+ retina: retina
+ };
+
+}());
- for (j = 0, len = sources.length; j < len; j++) {
- src = sources[j] || {};
- for (i in src) {
- if (src.hasOwnProperty(i)) {
- dest[i] = src[i];
- }
- }
- }
- return dest;
- },
- bind: function (fn, obj) { // (Function, Object) -> Function
- var args = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null;
- return function () {
- return fn.apply(obj, args || arguments);
- };
- },
+/*
+ * L.Point represents a point with x and y coordinates.
+ */
+
+L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
+ this.x = (round ? Math.round(x) : x);
+ this.y = (round ? Math.round(y) : y);
+};
+
+L.Point.prototype = {
+
+ clone: function () {
+ return new L.Point(this.x, this.y);
+ },
+
+ // non-destructive, returns a new point
+ add: function (point) {
+ return this.clone()._add(L.point(point));
+ },
+
+ // destructive, used directly for performance in situations where it's safe to modify existing point
+ _add: function (point) {
+ this.x += point.x;
+ this.y += point.y;
+ return this;
+ },
+
+ subtract: function (point) {
+ return this.clone()._subtract(L.point(point));
+ },
+
+ _subtract: function (point) {
+ this.x -= point.x;
+ this.y -= point.y;
+ return this;
+ },
+
+ divideBy: function (num) {
+ return this.clone()._divideBy(num);
+ },
+
+ _divideBy: function (num) {
+ this.x /= num;
+ this.y /= num;
+ return this;
+ },
+
+ multiplyBy: function (num) {
+ return this.clone()._multiplyBy(num);
+ },
+
+ _multiplyBy: function (num) {
+ this.x *= num;
+ this.y *= num;
+ return this;
+ },
+
+ round: function () {
+ return this.clone()._round();
+ },
+
+ _round: function () {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ return this;
+ },
+
+ floor: function () {
+ return this.clone()._floor();
+ },
+
+ _floor: function () {
+ this.x = Math.floor(this.x);
+ this.y = Math.floor(this.y);
+ return this;
+ },
+
+ distanceTo: function (point) {
+ point = L.point(point);
+
+ var x = point.x - this.x,
+ y = point.y - this.y;
+
+ return Math.sqrt(x * x + y * y);
+ },
+
+ equals: function (point) {
+ point = L.point(point);
+
+ return point.x === this.x &&
+ point.y === this.y;
+ },
+
+ contains: function (point) {
+ point = L.point(point);
+
+ return Math.abs(point.x) <= Math.abs(this.x) &&
+ Math.abs(point.y) <= Math.abs(this.y);
+ },
+
+ toString: function () {
+ return 'Point(' +
+ L.Util.formatNum(this.x) + ', ' +
+ L.Util.formatNum(this.y) + ')';
+ }
+};
+
+L.point = function (x, y, round) {
+ if (x instanceof L.Point) {
+ return x;
+ }
+ if (L.Util.isArray(x)) {
+ return new L.Point(x[0], x[1]);
+ }
+ if (x === undefined || x === null) {
+ return x;
+ }
+ return new L.Point(x, y, round);
+};
- stamp: (function () {
- var lastId = 0, key = '_leaflet_id';
- return function (/*Object*/ obj) {
- obj[key] = obj[key] || ++lastId;
- return obj[key];
- };
- }()),
- limitExecByInterval: function (fn, time, context) {
- var lock, execOnUnlock;
+/*
+ * L.Bounds represents a rectangular area on the screen in pixel coordinates.
+ */
+
+L.Bounds = function (a, b) { //(Point, Point) or Point[]
+ if (!a) { return; }
+
+ var points = b ? [a, b] : a;
+
+ for (var i = 0, len = points.length; i < len; i++) {
+ this.extend(points[i]);
+ }
+};
+
+L.Bounds.prototype = {
+ // extend the bounds to contain the given point
+ extend: function (point) { // (Point)
+ point = L.point(point);
+
+ if (!this.min && !this.max) {
+ this.min = point.clone();
+ this.max = point.clone();
+ } else {
+ this.min.x = Math.min(point.x, this.min.x);
+ this.max.x = Math.max(point.x, this.max.x);
+ this.min.y = Math.min(point.y, this.min.y);
+ this.max.y = Math.max(point.y, this.max.y);
+ }
+ return this;
+ },
+
+ getCenter: function (round) { // (Boolean) -> Point
+ return new L.Point(
+ (this.min.x + this.max.x) / 2,
+ (this.min.y + this.max.y) / 2, round);
+ },
+
+ getBottomLeft: function () { // -> Point
+ return new L.Point(this.min.x, this.max.y);
+ },
+
+ getTopRight: function () { // -> Point
+ return new L.Point(this.max.x, this.min.y);
+ },
+
+ getSize: function () {
+ return this.max.subtract(this.min);
+ },
+
+ contains: function (obj) { // (Bounds) or (Point) -> Boolean
+ var min, max;
+
+ if (typeof obj[0] === 'number' || obj instanceof L.Point) {
+ obj = L.point(obj);
+ } else {
+ obj = L.bounds(obj);
+ }
+
+ if (obj instanceof L.Bounds) {
+ min = obj.min;
+ max = obj.max;
+ } else {
+ min = max = obj;
+ }
+
+ return (min.x >= this.min.x) &&
+ (max.x <= this.max.x) &&
+ (min.y >= this.min.y) &&
+ (max.y <= this.max.y);
+ },
+
+ intersects: function (bounds) { // (Bounds) -> Boolean
+ bounds = L.bounds(bounds);
+
+ var min = this.min,
+ max = this.max,
+ min2 = bounds.min,
+ max2 = bounds.max,
+ xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
+ yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
+
+ return xIntersects && yIntersects;
+ },
+
+ isValid: function () {
+ return !!(this.min && this.max);
+ }
+};
+
+L.bounds = function (a, b) { // (Bounds) or (Point, Point) or (Point[])
+ if (!a || a instanceof L.Bounds) {
+ return a;
+ }
+ return new L.Bounds(a, b);
+};
- return function wrapperFn() {
- var args = arguments;
- if (lock) {
- execOnUnlock = true;
- return;
- }
+/*
+ * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
+ */
+
+L.Transformation = function (a, b, c, d) {
+ this._a = a;
+ this._b = b;
+ this._c = c;
+ this._d = d;
+};
+
+L.Transformation.prototype = {
+ transform: function (point, scale) { // (Point, Number) -> Point
+ return this._transform(point.clone(), scale);
+ },
+
+ // destructive transform (faster)
+ _transform: function (point, scale) {
+ scale = scale || 1;
+ point.x = scale * (this._a * point.x + this._b);
+ point.y = scale * (this._c * point.y + this._d);
+ return point;
+ },
+
+ untransform: function (point, scale) {
+ scale = scale || 1;
+ return new L.Point(
+ (point.x / scale - this._b) / this._a,
+ (point.y / scale - this._d) / this._c);
+ }
+};
- lock = true;
- setTimeout(function () {
- lock = false;
+/*
+ * L.DomUtil contains various utility functions for working with DOM.
+ */
+
+L.DomUtil = {
+ get: function (id) {
+ return (typeof id === 'string' ? document.getElementById(id) : id);
+ },
+
+ getStyle: function (el, style) {
+
+ var value = el.style[style];
+
+ if (!value && el.currentStyle) {
+ value = el.currentStyle[style];
+ }
+
+ if ((!value || value === 'auto') && document.defaultView) {
+ var css = document.defaultView.getComputedStyle(el, null);
+ value = css ? css[style] : null;
+ }
+
+ return value === 'auto' ? null : value;
+ },
+
+ getViewportOffset: function (element) {
+
+ var top = 0,
+ left = 0,
+ el = element,
+ docBody = document.body,
+ docEl = document.documentElement,
+ pos,
+ ie7 = L.Browser.ie7;
+
+ do {
+ top += el.offsetTop || 0;
+ left += el.offsetLeft || 0;
+
+ //add borders
+ top += parseInt(L.DomUtil.getStyle(el, 'borderTopWidth'), 10) || 0;
+ left += parseInt(L.DomUtil.getStyle(el, 'borderLeftWidth'), 10) || 0;
+
+ pos = L.DomUtil.getStyle(el, 'position');
+
+ if (el.offsetParent === docBody && pos === 'absolute') { break; }
+
+ if (pos === 'fixed') {
+ top += docBody.scrollTop || docEl.scrollTop || 0;
+ left += docBody.scrollLeft || docEl.scrollLeft || 0;
+ break;
+ }
+
+ if (pos === 'relative' && !el.offsetLeft) {
+ var width = L.DomUtil.getStyle(el, 'width'),
+ maxWidth = L.DomUtil.getStyle(el, 'max-width'),
+ r = el.getBoundingClientRect();
+
+ if (width !== 'none' || maxWidth !== 'none') {
+ left += r.left + el.clientLeft;
+ }
+
+ //calculate full y offset since we're breaking out of the loop
+ top += r.top + (docBody.scrollTop || docEl.scrollTop || 0);
+
+ break;
+ }
+
+ el = el.offsetParent;
+
+ } while (el);
+
+ el = element;
+
+ do {
+ if (el === docBody) { break; }
+
+ top -= el.scrollTop || 0;
+ left -= el.scrollLeft || 0;
+
+ // webkit (and ie <= 7) handles RTL scrollLeft different to everyone else
+ // https://code.google.com/p/closure-library/source/browse/trunk/closure/goog/…
+ if (!L.DomUtil.documentIsLtr() && (L.Browser.webkit || ie7)) {
+ left += el.scrollWidth - el.clientWidth;
+
+ // ie7 shows the scrollbar by default and provides clientWidth counting it, so we
+ // need to add it back in if it is visible; scrollbar is on the left as we are RTL
+ if (ie7 && L.DomUtil.getStyle(el, 'overflow-y') !== 'hidden' &&
+ L.DomUtil.getStyle(el, 'overflow') !== 'hidden') {
+ left += 17;
+ }
+ }
+
+ el = el.parentNode;
+ } while (el);
+
+ return new L.Point(left, top);
+ },
+
+ documentIsLtr: function () {
+ if (!L.DomUtil._docIsLtrCached) {
+ L.DomUtil._docIsLtrCached = true;
+ L.DomUtil._docIsLtr = L.DomUtil.getStyle(document.body, 'direction') === 'ltr';
+ }
+ return L.DomUtil._docIsLtr;
+ },
+
+ create: function (tagName, className, container) {
+
+ var el = document.createElement(tagName);
+ el.className = className;
+
+ if (container) {
+ container.appendChild(el);
+ }
+
+ return el;
+ },
+
+ hasClass: function (el, name) {
+ return (el.className.length > 0) &&
+ new RegExp('(^|\\s)' + name + '(\\s|$)').test(el.className);
+ },
+
+ addClass: function (el, name) {
+ if (!L.DomUtil.hasClass(el, name)) {
+ el.className += (el.className ? ' ' : '') + name;
+ }
+ },
+
+ removeClass: function (el, name) {
+ el.className = L.Util.trim((' ' + el.className + ' ').replace(' ' + name + ' ', ' '));
+ },
+
+ setOpacity: function (el, value) {
+
+ if ('opacity' in el.style) {
+ el.style.opacity = value;
+
+ } else if ('filter' in el.style) {
+
+ var filter = false,
+ filterName = 'DXImageTransform.Microsoft.Alpha';
+
+ // filters collection throws an error if we try to retrieve a filter that doesn't exist
+ try {
+ filter = el.filters.item(filterName);
+ } catch (e) {
+ // don't set opacity to 1 if we haven't already set an opacity,
+ // it isn't needed and breaks transparent pngs.
+ if (value === 1) { return; }
+ }
+
+ value = Math.round(value * 100);
+
+ if (filter) {
+ filter.Enabled = (value !== 100);
+ filter.Opacity = value;
+ } else {
+ el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
+ }
+ }
+ },
+
+ testProp: function (props) {
+
+ var style = document.documentElement.style;
+
+ for (var i = 0; i < props.length; i++) {
+ if (props[i] in style) {
+ return props[i];
+ }
+ }
+ return false;
+ },
+
+ getTranslateString: function (point) {
+ // on WebKit browsers (Chrome/Safari/iOS Safari/Android) using translate3d instead of translate
+ // makes animation smoother as it ensures HW accel is used. Firefox 13 doesn't care
+ // (same speed either way), Opera 12 doesn't support translate3d
+
+ var is3d = L.Browser.webkit3d,
+ open = 'translate' + (is3d ? '3d' : '') + '(',
+ close = (is3d ? ',0' : '') + ')';
+
+ return open + point.x + 'px,' + point.y + 'px' + close;
+ },
+
+ getScaleString: function (scale, origin) {
+
+ var preTranslateStr = L.DomUtil.getTranslateString(origin.add(origin.multiplyBy(-1 * scale))),
+ scaleStr = ' scale(' + scale + ') ';
+
+ return preTranslateStr + scaleStr;
+ },
+
+ setPosition: function (el, point, disable3D) { // (HTMLElement, Point[, Boolean])
+
+ // jshint camelcase: false
+ el._leaflet_pos = point;
+
+ if (!disable3D && L.Browser.any3d) {
+ el.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(point);
+
+ // workaround for Android 2/3 stability (https://github.com/CloudMade/Leaflet/issues/69)
+ if (L.Browser.mobileWebkit3d) {
+ el.style.WebkitBackfaceVisibility = 'hidden';
+ }
+ } else {
+ el.style.left = point.x + 'px';
+ el.style.top = point.y + 'px';
+ }
+ },
+
+ getPosition: function (el) {
+ // this method is only used for elements previously positioned using setPosition,
+ // so it's safe to cache the position for performance
+
+ // jshint camelcase: false
+ return el._leaflet_pos;
+ }
+};
+
+
+// prefix style property names
+
+L.DomUtil.TRANSFORM = L.DomUtil.testProp(
+ ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
+
+// webkitTransition comes first because some browser versions that drop vendor prefix don't do
+// the same for the transitionend event, in particular the Android 4.1 stock browser
+
+L.DomUtil.TRANSITION = L.DomUtil.testProp(
+ ['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
+
+L.DomUtil.TRANSITION_END =
+ L.DomUtil.TRANSITION === 'webkitTransition' || L.DomUtil.TRANSITION === 'OTransition' ?
+ L.DomUtil.TRANSITION + 'End' : 'transitionend';
+
+(function () {
+ var userSelectProperty = L.DomUtil.testProp(
+ ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
+
+ var userDragProperty = L.DomUtil.testProp(
+ ['userDrag', 'WebkitUserDrag', 'OUserDrag', 'MozUserDrag', 'msUserDrag']);
+
+ L.extend(L.DomUtil, {
+ disableTextSelection: function () {
+ if (userSelectProperty) {
+ var style = document.documentElement.style;
+ this._userSelect = style[userSelectProperty];
+ style[userSelectProperty] = 'none';
+ } else {
+ L.DomEvent.on(window, 'selectstart', L.DomEvent.stop);
+ }
+ },
+
+ enableTextSelection: function () {
+ if (userSelectProperty) {
+ document.documentElement.style[userSelectProperty] = this._userSelect;
+ delete this._userSelect;
+ } else {
+ L.DomEvent.off(window, 'selectstart', L.DomEvent.stop);
+ }
+ },
+
+ disableImageDrag: function () {
+ if (userDragProperty) {
+ var style = document.documentElement.style;
+ this._userDrag = style[userDragProperty];
+ style[userDragProperty] = 'none';
+ } else {
+ L.DomEvent.on(window, 'dragstart', L.DomEvent.stop);
+ }
+ },
+
+ enableImageDrag: function () {
+ if (userDragProperty) {
+ document.documentElement.style[userDragProperty] = this._userDrag;
+ delete this._userDrag;
+ } else {
+ L.DomEvent.off(window, 'dragstart', L.DomEvent.stop);
+ }
+ }
+ });
+})();
- if (execOnUnlock) {
- wrapperFn.apply(context, args);
- execOnUnlock = false;
- }
- }, time);
- fn.apply(context, args);
- };
- },
+/*
+ * L.LatLng represents a geographical point with latitude and longitude coordinates.
+ */
+
+L.LatLng = function (rawLat, rawLng) { // (Number, Number)
+ var lat = parseFloat(rawLat),
+ lng = parseFloat(rawLng);
+
+ if (isNaN(lat) || isNaN(lng)) {
+ throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
+ }
+
+ this.lat = lat;
+ this.lng = lng;
+};
+
+L.extend(L.LatLng, {
+ DEG_TO_RAD: Math.PI / 180,
+ RAD_TO_DEG: 180 / Math.PI,
+ MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
+});
+
+L.LatLng.prototype = {
+ equals: function (obj) { // (LatLng) -> Boolean
+ if (!obj) { return false; }
+
+ obj = L.latLng(obj);
+
+ var margin = Math.max(
+ Math.abs(this.lat - obj.lat),
+ Math.abs(this.lng - obj.lng));
+
+ return margin <= L.LatLng.MAX_MARGIN;
+ },
+
+ toString: function (precision) { // (Number) -> String
+ return 'LatLng(' +
+ L.Util.formatNum(this.lat, precision) + ', ' +
+ L.Util.formatNum(this.lng, precision) + ')';
+ },
+
+ // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
+ // TODO move to projection code, LatLng shouldn't know about Earth
+ distanceTo: function (other) { // (LatLng) -> Number
+ other = L.latLng(other);
+
+ var R = 6378137, // earth radius in meters
+ d2r = L.LatLng.DEG_TO_RAD,
+ dLat = (other.lat - this.lat) * d2r,
+ dLon = (other.lng - this.lng) * d2r,
+ lat1 = this.lat * d2r,
+ lat2 = other.lat * d2r,
+ sin1 = Math.sin(dLat / 2),
+ sin2 = Math.sin(dLon / 2);
+
+ var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
+
+ return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+ },
+
+ wrap: function (a, b) { // (Number, Number) -> LatLng
+ var lng = this.lng;
+
+ a = a || -180;
+ b = b || 180;
+
+ lng = (lng + b) % (b - a) + (lng < a || lng === b ? b : a);
+
+ return new L.LatLng(this.lat, lng);
+ }
+};
+
+L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Number)
+ if (a instanceof L.LatLng) {
+ return a;
+ }
+ if (L.Util.isArray(a)) {
+ return new L.LatLng(a[0], a[1]);
+ }
+ if (a === undefined || a === null) {
+ return a;
+ }
+ if (typeof a === 'object' && 'lat' in a) {
+ return new L.LatLng(a.lat, 'lng' in a ? a.lng : a.lon);
+ }
+ return new L.LatLng(a, b);
+};
+
- falseFn: function () {
- return false;
- },
- formatNum: function (num, digits) {
- var pow = Math.pow(10, digits || 5);
- return Math.round(num * pow) / pow;
- },
+/*
+ * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
+ */
+
+L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
+ if (!southWest) { return; }
+
+ var latlngs = northEast ? [southWest, northEast] : southWest;
+
+ for (var i = 0, len = latlngs.length; i < len; i++) {
+ this.extend(latlngs[i]);
+ }
+};
+
+L.LatLngBounds.prototype = {
+ // extend the bounds to contain the given point or bounds
+ extend: function (obj) { // (LatLng) or (LatLngBounds)
+ if (!obj) { return this; }
+
+ if (typeof obj[0] === 'number' || typeof obj[0] === 'string' || obj instanceof L.LatLng) {
+ obj = L.latLng(obj);
+ } else {
+ obj = L.latLngBounds(obj);
+ }
+
+ if (obj instanceof L.LatLng) {
+ if (!this._southWest && !this._northEast) {
+ this._southWest = new L.LatLng(obj.lat, obj.lng);
+ this._northEast = new L.LatLng(obj.lat, obj.lng);
+ } else {
+ this._southWest.lat = Math.min(obj.lat, this._southWest.lat);
+ this._southWest.lng = Math.min(obj.lng, this._southWest.lng);
+
+ this._northEast.lat = Math.max(obj.lat, this._northEast.lat);
+ this._northEast.lng = Math.max(obj.lng, this._northEast.lng);
+ }
+ } else if (obj instanceof L.LatLngBounds) {
+ this.extend(obj._southWest);
+ this.extend(obj._northEast);
+ }
+ return this;
+ },
+
+ // extend the bounds by a percentage
+ pad: function (bufferRatio) { // (Number) -> LatLngBounds
+ var sw = this._southWest,
+ ne = this._northEast,
+ heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
+ widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
+
+ return new L.LatLngBounds(
+ new L.LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
+ new L.LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
+ },
+
+ getCenter: function () { // -> LatLng
+ return new L.LatLng(
+ (this._southWest.lat + this._northEast.lat) / 2,
+ (this._southWest.lng + this._northEast.lng) / 2);
+ },
+
+ getSouthWest: function () {
+ return this._southWest;
+ },
+
+ getNorthEast: function () {
+ return this._northEast;
+ },
+
+ getNorthWest: function () {
+ return new L.LatLng(this.getNorth(), this.getWest());
+ },
+
+ getSouthEast: function () {
+ return new L.LatLng(this.getSouth(), this.getEast());
+ },
+
+ getWest: function () {
+ return this._southWest.lng;
+ },
+
+ getSouth: function () {
+ return this._southWest.lat;
+ },
+
+ getEast: function () {
+ return this._northEast.lng;
+ },
+
+ getNorth: function () {
+ return this._northEast.lat;
+ },
+
+ contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
+ if (typeof obj[0] === 'number' || obj instanceof L.LatLng) {
+ obj = L.latLng(obj);
+ } else {
+ obj = L.latLngBounds(obj);
+ }
+
+ var sw = this._southWest,
+ ne = this._northEast,
+ sw2, ne2;
+
+ if (obj instanceof L.LatLngBounds) {
+ sw2 = obj.getSouthWest();
+ ne2 = obj.getNorthEast();
+ } else {
+ sw2 = ne2 = obj;
+ }
+
+ return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
+ (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
+ },
+
+ intersects: function (bounds) { // (LatLngBounds)
+ bounds = L.latLngBounds(bounds);
+
+ var sw = this._southWest,
+ ne = this._northEast,
+ sw2 = bounds.getSouthWest(),
+ ne2 = bounds.getNorthEast(),
+
+ latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
+ lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
+
+ return latIntersects && lngIntersects;
+ },
+
+ toBBoxString: function () {
+ return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
+ },
+
+ equals: function (bounds) { // (LatLngBounds)
+ if (!bounds) { return false; }
+
+ bounds = L.latLngBounds(bounds);
+
+ return this._southWest.equals(bounds.getSouthWest()) &&
+ this._northEast.equals(bounds.getNorthEast());
+ },
+
+ isValid: function () {
+ return !!(this._southWest && this._northEast);
+ }
+};
+
+//TODO International date line?
+
+L.latLngBounds = function (a, b) { // (LatLngBounds) or (LatLng, LatLng)
+ if (!a || a instanceof L.LatLngBounds) {
+ return a;
+ }
+ return new L.LatLngBounds(a, b);
+};
- splitWords: function (str) {
- return str.replace(/^\s+|\s+$/g, '').split(/\s+/);
- },
- setOptions: function (obj, options) {
- obj.options = L.extend({}, obj.options, options);
- return obj.options;
- },
+/*
+ * L.Projection contains various geographical projections used by CRS classes.
+ */
+
+L.Projection = {};
- getParamString: function (obj, existingUrl) {
- var params = [];
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- params.push(i + '=' + obj[i]);
- }
- }
- return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
- },
- template: function (str, data) {
- return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
- var value = data[key];
- if (!data.hasOwnProperty(key)) {
- throw new Error('No value provided for variable ' + str);
- }
- return value;
- });
- },
+/*
+ * Spherical Mercator is the most popular map projection, used by EPSG:3857 CRS used by default.
+ */
+
+L.Projection.SphericalMercator = {
+ MAX_LATITUDE: 85.0511287798,
+
+ project: function (latlng) { // (LatLng) -> Point
+ var d = L.LatLng.DEG_TO_RAD,
+ max = this.MAX_LATITUDE,
+ lat = Math.max(Math.min(max, latlng.lat), -max),
+ x = latlng.lng * d,
+ y = lat * d;
+
+ y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
+
+ return new L.Point(x, y);
+ },
+
+ unproject: function (point) { // (Point, Boolean) -> LatLng
+ var d = L.LatLng.RAD_TO_DEG,
+ lng = point.x * d,
+ lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
+
+ return new L.LatLng(lat, lng);
+ }
+};
- isArray: function (obj) {
- return (Object.prototype.toString.call(obj) === '[object Array]');
- },
- emptyImageUrl: 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
-};
+/*
+ * Simple equirectangular (Plate Carree) projection, used by CRS like EPSG:4326 and Simple.
+ */
+
+L.Projection.LonLat = {
+ project: function (latlng) {
+ return new L.Point(latlng.lng, latlng.lat);
+ },
+
+ unproject: function (point) {
+ return new L.LatLng(point.y, point.x);
+ }
+};
-(function () {
- // inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+/*
+ * L.CRS is a base object for all defined CRS (Coordinate Reference Systems) in Leaflet.
+ */
+
+L.CRS = {
+ latLngToPoint: function (latlng, zoom) { // (LatLng, Number) -> Point
+ var projectedPoint = this.projection.project(latlng),
+ scale = this.scale(zoom);
+
+ return this.transformation._transform(projectedPoint, scale);
+ },
+
+ pointToLatLng: function (point, zoom) { // (Point, Number[, Boolean]) -> LatLng
+ var scale = this.scale(zoom),
+ untransformedPoint = this.transformation.untransform(point, scale);
+
+ return this.projection.unproject(untransformedPoint);
+ },
+
+ project: function (latlng) {
+ return this.projection.project(latlng);
+ },
+
+ scale: function (zoom) {
+ return 256 * Math.pow(2, zoom);
+ }
+};
- function getPrefixed(name) {
- var i, fn,
- prefixes = ['webkit', 'moz', 'o', 'ms'];
- for (i = 0; i < prefixes.length && !fn; i++) {
- fn = window[prefixes[i] + name];
- }
-
- return fn;
- }
-
- var lastTime = 0;
-
- function timeoutDefer(fn) {
- var time = +new Date(),
- timeToCall = Math.max(0, 16 - (time - lastTime));
-
- lastTime = time + timeToCall;
- return window.setTimeout(fn, timeToCall);
- }
-
- var requestFn = window.requestAnimationFrame ||
- getPrefixed('RequestAnimationFrame') || timeoutDefer;
-
- var cancelFn = window.cancelAnimationFrame ||
- getPrefixed('CancelAnimationFrame') ||
- getPrefixed('CancelRequestAnimationFrame') ||
- function (id) { window.clearTimeout(id); };
-
-
- L.Util.requestAnimFrame = function (fn, context, immediate, element) {
- fn = L.bind(fn, context);
-
- if (immediate && requestFn === timeoutDefer) {
- fn();
- } else {
- return requestFn.call(window, fn, element);
- }
- };
-
- L.Util.cancelAnimFrame = function (id) {
- if (id) {
- cancelFn.call(window, id);
- }
- };
-
-}());
-
-// shortcuts for most used utility functions
-L.extend = L.Util.extend;
-L.bind = L.Util.bind;
-L.stamp = L.Util.stamp;
-L.setOptions = L.Util.setOptions;
-
-
/*
- * L.Class powers the OOP facilities of the library.
- * Thanks to John Resig and Dean Edwards for inspiration!
- */
-
-L.Class = function () {};
-
-L.Class.extend = function (props) {
-
- // extended class with the new prototype
- var NewClass = function () {
-
- // call the constructor
- if (this.initialize) {
- this.initialize.apply(this, arguments);
- }
-
- // call all constructor hooks
- if (this._initHooks) {
- this.callInitHooks();
- }
- };
-
- // instantiate class without calling constructor
- var F = function () {};
- F.prototype = this.prototype;
-
- var proto = new F();
- proto.constructor = NewClass;
-
- NewClass.prototype = proto;
-
- //inherit parent's statics
- for (var i in this) {
- if (this.hasOwnProperty(i) && i !== 'prototype') {
- NewClass[i] = this[i];
- }
- }
-
- // mix static properties into the class
- if (props.statics) {
- L.extend(NewClass, props.statics);
- delete props.statics;
- }
-
- // mix includes into the prototype
- if (props.includes) {
- L.Util.extend.apply(null, [proto].concat(props.includes));
- delete props.includes;
- }
-
- // merge options
- if (props.options && proto.options) {
- props.options = L.extend({}, proto.options, props.options);
- }
-
- // mix given properties into the prototype
- L.extend(proto, props);
-
- proto._initHooks = [];
-
- var parent = this;
- // add method for calling all hooks
- proto.callInitHooks = function () {
-
- if (this._initHooksCalled) { return; }
-
- if (parent.prototype.callInitHooks) {
- parent.prototype.callInitHooks.call(this);
- }
-
- this._initHooksCalled = true;
-
- for (var i = 0, len = proto._initHooks.length; i < len; i++) {
- proto._initHooks[i].call(this);
- }
- };
-
- return NewClass;
-};
-
-
-// method for adding properties to prototype
-L.Class.include = function (props) {
- L.extend(this.prototype, props);
-};
-
-// merge new default options to the Class
-L.Class.mergeOptions = function (options) {
- L.extend(this.prototype.options, options);
-};
-
-// add a constructor hook
-L.Class.addInitHook = function (fn) { // (Function) || (String, args...)
- var args = Array.prototype.slice.call(arguments, 1);
-
- var init = typeof fn === 'function' ? fn : function () {
- this[fn].apply(this, args);
- };
-
- this.prototype._initHooks = this.prototype._initHooks || [];
- this.prototype._initHooks.push(init);
-};
-
-
-/*
- * L.Mixin.Events is used to add custom events functionality to Leaflet classes.
- */
-
-var key = '_leaflet_events';
-
-L.Mixin = {};
-
-L.Mixin.Events = {
-
- addEventListener: function (types, fn, context) { // (String, Function[, Object]) or (Object[, Object])
- var events = this[key] = this[key] || {},
- type, i, len;
-
- // Types can be a map of types/handlers
- if (typeof types === 'object') {
- for (type in types) {
- if (types.hasOwnProperty(type)) {
- this.addEventListener(type, types[type], fn);
- }
- }
-
- return this;
- }
-
- types = L.Util.splitWords(types);
-
- for (i = 0, len = types.length; i < len; i++) {
- events[types[i]] = events[types[i]] || [];
- events[types[i]].push({
- action: fn,
- context: context || this
- });
- }
-
- return this;
- },
-
- hasEventListeners: function (type) { // (String) -> Boolean
- return (key in this) && (type in this[key]) && (this[key][type].length > 0);
- },
-
- removeEventListener: function (types, fn, context) { // (String[, Function, Object]) or (Object[, Object])
- var events = this[key],
- type, i, len, listeners, j;
-
- if (typeof types === 'object') {
- for (type in types) {
- if (types.hasOwnProperty(type)) {
- this.removeEventListener(type, types[type], fn);
- }
- }
-
- return this;
- }
-
- types = L.Util.splitWords(types);
-
- for (i = 0, len = types.length; i < len; i++) {
-
- if (this.hasEventListeners(types[i])) {
- listeners = events[types[i]];
-
- for (j = listeners.length - 1; j >= 0; j--) {
- if (
- (!fn || listeners[j].action === fn) &&
- (!context || (listeners[j].context === context))
- ) {
- listeners.splice(j, 1);
- }
- }
- }
- }
-
- return this;
- },
-
- fireEvent: function (type, data) { // (String[, Object])
- if (!this.hasEventListeners(type)) {
- return this;
- }
-
- var event = L.extend({
- type: type,
- target: this
- }, data);
-
- var listeners = this[key][type].slice();
-
- for (var i = 0, len = listeners.length; i < len; i++) {
- listeners[i].action.call(listeners[i].context || this, event);
- }
-
- return this;
- }
-};
-
-L.Mixin.Events.on = L.Mixin.Events.addEventListener;
-L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
-L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
-
-
-/*
- * L.Browser handles different browser and feature detections for internal Leaflet use.
- */
-
-(function () {
-
- var ie = !!window.ActiveXObject,
- ie6 = ie && !window.XMLHttpRequest,
- ie7 = ie && !document.querySelector,
-
- // terrible browser detection to work around Safari / iOS / Android browser bugs
- ua = navigator.userAgent.toLowerCase(),
- webkit = ua.indexOf('webkit') !== -1,
- chrome = ua.indexOf('chrome') !== -1,
- android = ua.indexOf('android') !== -1,
- android23 = ua.search('android [23]') !== -1,
-
- mobile = typeof orientation !== undefined + '',
- msTouch = window.navigator && window.navigator.msPointerEnabled &&
- window.navigator.msMaxTouchPoints,
- retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) ||
- ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') &&
- window.matchMedia('(min-resolution:144dpi)').matches),
-
- doc = document.documentElement,
- ie3d = ie && ('transition' in doc.style),
- webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),
- gecko3d = 'MozPerspective' in doc.style,
- opera3d = 'OTransition' in doc.style,
- any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d);
-
-
- var touch = !window.L_NO_TOUCH && (function () {
-
- var startName = 'ontouchstart';
-
- // IE10+ (We simulate these into touch* events in L.DomEvent and L.DomEvent.MsTouch) or WebKit, etc.
- if (msTouch || (startName in doc)) {
- return true;
- }
-
- // Firefox/Gecko
- var div = document.createElement('div'),
- supported = false;
-
- if (!div.setAttribute) {
- return false;
- }
- div.setAttribute(startName, 'return;');
-
- if (typeof div[startName] === 'function') {
- supported = true;
- }
-
- div.removeAttribute(startName);
- div = null;
-
- return supported;
- }());
-
-
- L.Browser = {
- ie: ie,
- ie6: ie6,
- ie7: ie7,
- webkit: webkit,
-
- android: android,
- android23: android23,
-
- chrome: chrome,
-
- ie3d: ie3d,
- webkit3d: webkit3d,
- gecko3d: gecko3d,
- opera3d: opera3d,
- any3d: any3d,
-
- mobile: mobile,
- mobileWebkit: mobile && webkit,
- mobileWebkit3d: mobile && webkit3d,
- mobileOpera: mobile && window.opera,
-
- touch: touch,
- msTouch: msTouch,
-
- retina: retina
- };
-
-}());
-
-
-/*
- * L.Point represents a point with x and y coordinates.
- */
-
-L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
- this.x = (round ? Math.round(x) : x);
- this.y = (round ? Math.round(y) : y);
-};
-
-L.Point.prototype = {
-
- clone: function () {
- return new L.Point(this.x, this.y);
- },
-
- // non-destructive, returns a new point
- add: function (point) {
- return this.clone()._add(L.point(point));
- },
-
- // destructive, used directly for performance in situations where it's safe to modify existing point
- _add: function (point) {
- this.x += point.x;
- this.y += point.y;
- return this;
- },
-
- subtract: function (point) {
- return this.clone()._subtract(L.point(point));
- },
-
- _subtract: function (point) {
- this.x -= point.x;
- this.y -= point.y;
- return this;
- },
-
- divideBy: function (num) {
- return this.clone()._divideBy(num);
- },
-
- _divideBy: function (num) {
- this.x /= num;
- this.y /= num;
- return this;
- },
-
- multiplyBy: function (num) {
- return this.clone()._multiplyBy(num);
- },
-
- _multiplyBy: function (num) {
- this.x *= num;
- this.y *= num;
- return this;
- },
-
- round: function () {
- return this.clone()._round();
- },
-
- _round: function () {
- this.x = Math.round(this.x);
- this.y = Math.round(this.y);
- return this;
- },
-
- floor: function () {
- return this.clone()._floor();
- },
-
- _floor: function () {
- this.x = Math.floor(this.x);
- this.y = Math.floor(this.y);
- return this;
- },
-
- distanceTo: function (point) {
- point = L.point(point);
-
- var x = point.x - this.x,
- y = point.y - this.y;
-
- return Math.sqrt(x * x + y * y);
- },
-
- equals: function (point) {
- return point.x === this.x &&
- point.y === this.y;
- },
-
- toString: function () {
- return 'Point(' +
- L.Util.formatNum(this.x) + ', ' +
- L.Util.formatNum(this.y) + ')';
- }
-};
-
-L.point = function (x, y, round) {
- if (x instanceof L.Point) {
- return x;
- }
- if (L.Util.isArray(x)) {
- return new L.Point(x[0], x[1]);
- }
- if (isNaN(x)) {
- return x;
- }
- return new L.Point(x, y, round);
-};
-
-
-/*
- * L.Bounds represents a rectangular area on the screen in pixel coordinates.
- */
-
-L.Bounds = function (a, b) { //(Point, Point) or Point[]
- if (!a) { return; }
-
- var points = b ? [a, b] : a;
-
- for (var i = 0, len = points.length; i < len; i++) {
- this.extend(points[i]);
- }
-};
-
-L.Bounds.prototype = {
- // extend the bounds to contain the given point
- extend: function (point) { // (Point)
- point = L.point(point);
-
- if (!this.min && !this.max) {
- this.min = point.clone();
- this.max = point.clone();
- } else {
- this.min.x = Math.min(point.x, this.min.x);
- this.max.x = Math.max(point.x, this.max.x);
- this.min.y = Math.min(point.y, this.min.y);
- this.max.y = Math.max(point.y, this.max.y);
- }
- return this;
- },
-
- getCenter: function (round) { // (Boolean) -> Point
- return new L.Point(
- (this.min.x + this.max.x) / 2,
- (this.min.y + this.max.y) / 2, round);
- },
-
- getBottomLeft: function () { // -> Point
- return new L.Point(this.min.x, this.max.y);
- },
-
- getTopRight: function () { // -> Point
- return new L.Point(this.max.x, this.min.y);
- },
-
- getSize: function () {
- return this.max.subtract(this.min);
- },
-
- contains: function (obj) { // (Bounds) or (Point) -> Boolean
- var min, max;
-
- if (typeof obj[0] === 'number' || obj instanceof L.Point) {
- obj = L.point(obj);
- } else {
- obj = L.bounds(obj);
- }
-
- if (obj instanceof L.Bounds) {
- min = obj.min;
- max = obj.max;
- } else {
- min = max = obj;
- }
-
- return (min.x >= this.min.x) &&
- (max.x <= this.max.x) &&
- (min.y >= this.min.y) &&
- (max.y <= this.max.y);
- },
-
- intersects: function (bounds) { // (Bounds) -> Boolean
- bounds = L.bounds(bounds);
-
- var min = this.min,
- max = this.max,
- min2 = bounds.min,
- max2 = bounds.max,
- xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
- yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
-
- return xIntersects && yIntersects;
- },
-
- isValid: function () {
- return !!(this.min && this.max);
- }
-};
-
-L.bounds = function (a, b) { // (Bounds) or (Point, Point) or (Point[])
- if (!a || a instanceof L.Bounds) {
- return a;
- }
- return new L.Bounds(a, b);
-};
-
-
-/*
- * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
- */
-
-L.Transformation = function (a, b, c, d) {
- this._a = a;
- this._b = b;
- this._c = c;
- this._d = d;
-};
-
-L.Transformation.prototype = {
- transform: function (point, scale) { // (Point, Number) -> Point
- return this._transform(point.clone(), scale);
- },
-
- // destructive transform (faster)
- _transform: function (point, scale) {
- scale = scale || 1;
- point.x = scale * (this._a * point.x + this._b);
- point.y = scale * (this._c * point.y + this._d);
- return point;
- },
-
- untransform: function (point, scale) {
- scale = scale || 1;
- return new L.Point(
- (point.x / scale - this._b) / this._a,
- (point.y / scale - this._d) / this._c);
- }
-};
-
-
-/*
- * L.DomUtil contains various utility functions for working with DOM.
- */
-
-L.DomUtil = {
- get: function (id) {
- return (typeof id === 'string' ? document.getElementById(id) : id);
- },
-
- getStyle: function (el, style) {
-
- var value = el.style[style];
-
- if (!value && el.currentStyle) {
- value = el.currentStyle[style];
- }
-
- if ((!value || value === 'auto') && document.defaultView) {
- var css = document.defaultView.getComputedStyle(el, null);
- value = css ? css[style] : null;
- }
-
- return value === 'auto' ? null : value;
- },
-
- getViewportOffset: function (element) {
-
- var top = 0,
- left = 0,
- el = element,
- docBody = document.body,
- pos,
- ie7 = L.Browser.ie7;
-
- do {
- top += el.offsetTop || 0;
- left += el.offsetLeft || 0;
-
- //add borders
- top += parseInt(L.DomUtil.getStyle(el, "borderTopWidth"), 10) || 0;
- left += parseInt(L.DomUtil.getStyle(el, "borderLeftWidth"), 10) || 0;
-
- pos = L.DomUtil.getStyle(el, 'position');
-
- if (el.offsetParent === docBody && pos === 'absolute') { break; }
-
- if (pos === 'fixed') {
- top += docBody.scrollTop || 0;
- left += docBody.scrollLeft || 0;
- break;
- }
- el = el.offsetParent;
-
- } while (el);
-
- el = element;
-
- do {
- if (el === docBody) { break; }
-
- top -= el.scrollTop || 0;
- left -= el.scrollLeft || 0;
-
- // webkit (and ie <= 7) handles RTL scrollLeft different to everyone else
- // https://code.google.com/p/closure-library/source/browse/trunk/closure/goog/…
- if (!L.DomUtil.documentIsLtr() && (L.Browser.webkit || ie7)) {
- left += el.scrollWidth - el.clientWidth;
-
- // ie7 shows the scrollbar by default and provides clientWidth counting it, so we
- // need to add it back in if it is visible; scrollbar is on the left as we are RTL
- if (ie7 && L.DomUtil.getStyle(el, 'overflow-y') !== 'hidden' &&
- L.DomUtil.getStyle(el, 'overflow') !== 'hidden') {
- left += 17;
- }
- }
-
- el = el.parentNode;
- } while (el);
-
- return new L.Point(left, top);
- },
-
- documentIsLtr: function () {
- if (!L.DomUtil._docIsLtrCached) {
- L.DomUtil._docIsLtrCached = true;
- L.DomUtil._docIsLtr = L.DomUtil.getStyle(document.body, 'direction') === "ltr";
- }
- return L.DomUtil._docIsLtr;
- },
-
- create: function (tagName, className, container) {
-
- var el = document.createElement(tagName);
- el.className = className;
-
- if (container) {
- container.appendChild(el);
- }
-
- return el;
- },
-
- disableTextSelection: function () {
- if (document.selection && document.selection.empty) {
- document.selection.empty();
- }
- if (!this._onselectstart) {
- this._onselectstart = document.onselectstart || null;
- document.onselectstart = L.Util.falseFn;
- }
- },
-
- enableTextSelection: function () {
- if (document.onselectstart === L.Util.falseFn) {
- document.onselectstart = this._onselectstart;
- this._onselectstart = null;
- }
- },
-
- hasClass: function (el, name) {
- return (el.className.length > 0) &&
- new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
- },
-
- addClass: function (el, name) {
- if (!L.DomUtil.hasClass(el, name)) {
- el.className += (el.className ? ' ' : '') + name;
- }
- },
-
- removeClass: function (el, name) {
-
- function replaceFn(w, match) {
- if (match === name) { return ''; }
- return w;
- }
-
- el.className = el.className
- .replace(/(\S+)\s*/g, replaceFn)
- .replace(/(^\s+|\s+$)/, '');
- },
-
- setOpacity: function (el, value) {
-
- if ('opacity' in el.style) {
- el.style.opacity = value;
-
- } else if ('filter' in el.style) {
-
- var filter = false,
- filterName = 'DXImageTransform.Microsoft.Alpha';
-
- // filters collection throws an error if we try to retrieve a filter that doesn't exist
- try { filter = el.filters.item(filterName); } catch (e) {}
-
- value = Math.round(value * 100);
-
- if (filter) {
- filter.Enabled = (value !== 100);
- filter.Opacity = value;
- } else {
- el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
- }
- }
- },
-
- testProp: function (props) {
-
- var style = document.documentElement.style;
-
- for (var i = 0; i < props.length; i++) {
- if (props[i] in style) {
- return props[i];
- }
- }
- return false;
- },
-
- getTranslateString: function (point) {
- // on WebKit browsers (Chrome/Safari/iOS Safari/Android) using translate3d instead of translate
- // makes animation smoother as it ensures HW accel is used. Firefox 13 doesn't care
- // (same speed either way), Opera 12 doesn't support translate3d
-
- var is3d = L.Browser.webkit3d,
- open = 'translate' + (is3d ? '3d' : '') + '(',
- close = (is3d ? ',0' : '') + ')';
-
- return open + point.x + 'px,' + point.y + 'px' + close;
- },
-
- getScaleString: function (scale, origin) {
-
- var preTranslateStr = L.DomUtil.getTranslateString(origin.add(origin.multiplyBy(-1 * scale))),
- scaleStr = ' scale(' + scale + ') ';
-
- return preTranslateStr + scaleStr;
- },
-
- setPosition: function (el, point, disable3D) { // (HTMLElement, Point[, Boolean])
-
- el._leaflet_pos = point;
-
- if (!disable3D && L.Browser.any3d) {
- el.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(point);
-
- // workaround for Android 2/3 stability (https://github.com/CloudMade/Leaflet/issues/69)
- if (L.Browser.mobileWebkit3d) {
- el.style.WebkitBackfaceVisibility = 'hidden';
- }
- } else {
- el.style.left = point.x + 'px';
- el.style.top = point.y + 'px';
- }
- },
-
- getPosition: function (el) {
- // this method is only used for elements previously positioned using setPosition,
- // so it's safe to cache the position for performance
- return el._leaflet_pos;
- }
-};
-
-
-// prefix style property names
-
-L.DomUtil.TRANSFORM = L.DomUtil.testProp(
- ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
-
-// webkitTransition comes first because some browser versions that drop vendor prefix don't do
-// the same for the transitionend event, in particular the Android 4.1 stock browser
-
-L.DomUtil.TRANSITION = L.DomUtil.testProp(
- ['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
-
-L.DomUtil.TRANSITION_END =
- L.DomUtil.TRANSITION === 'webkitTransition' || L.DomUtil.TRANSITION === 'OTransition' ?
- L.DomUtil.TRANSITION + 'End' : 'transitionend';
-
-
-/*
- * L.LatLng represents a geographical point with latitude and longitude coordinates.
- */
-
-L.LatLng = function (rawLat, rawLng) { // (Number, Number)
- var lat = parseFloat(rawLat),
- lng = parseFloat(rawLng);
-
- if (isNaN(lat) || isNaN(lng)) {
- throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
- }
-
- this.lat = lat;
- this.lng = lng;
-};
-
-L.extend(L.LatLng, {
- DEG_TO_RAD: Math.PI / 180,
- RAD_TO_DEG: 180 / Math.PI,
- MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
-});
-
-L.LatLng.prototype = {
- equals: function (obj) { // (LatLng) -> Boolean
- if (!obj) { return false; }
-
- obj = L.latLng(obj);
-
- var margin = Math.max(
- Math.abs(this.lat - obj.lat),
- Math.abs(this.lng - obj.lng));
-
- return margin <= L.LatLng.MAX_MARGIN;
- },
-
- toString: function (precision) { // (Number) -> String
- return 'LatLng(' +
- L.Util.formatNum(this.lat, precision) + ', ' +
- L.Util.formatNum(this.lng, precision) + ')';
- },
-
- // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
- // TODO move to projection code, LatLng shouldn't know about Earth
- distanceTo: function (other) { // (LatLng) -> Number
- other = L.latLng(other);
-
- var R = 6378137, // earth radius in meters
- d2r = L.LatLng.DEG_TO_RAD,
- dLat = (other.lat - this.lat) * d2r,
- dLon = (other.lng - this.lng) * d2r,
- lat1 = this.lat * d2r,
- lat2 = other.lat * d2r,
- sin1 = Math.sin(dLat / 2),
- sin2 = Math.sin(dLon / 2);
-
- var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
-
- return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
- },
-
- wrap: function (a, b) { // (Number, Number) -> LatLng
- var lng = this.lng;
-
- a = a || -180;
- b = b || 180;
-
- lng = (lng + b) % (b - a) + (lng < a || lng === b ? b : a);
-
- return new L.LatLng(this.lat, lng);
- }
-};
-
-L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Number)
- if (a instanceof L.LatLng) {
- return a;
- }
- if (L.Util.isArray(a)) {
- return new L.LatLng(a[0], a[1]);
- }
- if (isNaN(a)) {
- return a;
- }
- return new L.LatLng(a, b);
-};
-
-
-
-/*
- * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
- */
-
-L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
- if (!southWest) { return; }
-
- var latlngs = northEast ? [southWest, northEast] : southWest;
-
- for (var i = 0, len = latlngs.length; i < len; i++) {
- this.extend(latlngs[i]);
- }
-};
-
-L.LatLngBounds.prototype = {
- // extend the bounds to contain the given point or bounds
- extend: function (obj) { // (LatLng) or (LatLngBounds)
- if (typeof obj[0] === 'number' || typeof obj[0] === 'string' || obj instanceof L.LatLng) {
- obj = L.latLng(obj);
- } else {
- obj = L.latLngBounds(obj);
- }
-
- if (obj instanceof L.LatLng) {
- if (!this._southWest && !this._northEast) {
- this._southWest = new L.LatLng(obj.lat, obj.lng);
- this._northEast = new L.LatLng(obj.lat, obj.lng);
- } else {
- this._southWest.lat = Math.min(obj.lat, this._southWest.lat);
- this._southWest.lng = Math.min(obj.lng, this._southWest.lng);
-
- this._northEast.lat = Math.max(obj.lat, this._northEast.lat);
- this._northEast.lng = Math.max(obj.lng, this._northEast.lng);
- }
- } else if (obj instanceof L.LatLngBounds) {
- this.extend(obj._southWest);
- this.extend(obj._northEast);
- }
- return this;
- },
-
- // extend the bounds by a percentage
- pad: function (bufferRatio) { // (Number) -> LatLngBounds
- var sw = this._southWest,
- ne = this._northEast,
- heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
- widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
-
- return new L.LatLngBounds(
- new L.LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
- new L.LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
- },
-
- getCenter: function () { // -> LatLng
- return new L.LatLng(
- (this._southWest.lat + this._northEast.lat) / 2,
- (this._southWest.lng + this._northEast.lng) / 2);
- },
-
- getSouthWest: function () {
- return this._southWest;
- },
-
- getNorthEast: function () {
- return this._northEast;
- },
-
- getNorthWest: function () {
- return new L.LatLng(this._northEast.lat, this._southWest.lng);
- },
-
- getSouthEast: function () {
- return new L.LatLng(this._southWest.lat, this._northEast.lng);
- },
-
- contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
- if (typeof obj[0] === 'number' || obj instanceof L.LatLng) {
- obj = L.latLng(obj);
- } else {
- obj = L.latLngBounds(obj);
- }
-
- var sw = this._southWest,
- ne = this._northEast,
- sw2, ne2;
-
- if (obj instanceof L.LatLngBounds) {
- sw2 = obj.getSouthWest();
- ne2 = obj.getNorthEast();
- } else {
- sw2 = ne2 = obj;
- }
-
- return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
- (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
- },
-
- intersects: function (bounds) { // (LatLngBounds)
- bounds = L.latLngBounds(bounds);
-
- var sw = this._southWest,
- ne = this._northEast,
- sw2 = bounds.getSouthWest(),
- ne2 = bounds.getNorthEast(),
-
- latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
- lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
-
- return latIntersects && lngIntersects;
- },
-
- toBBoxString: function () {
- var sw = this._southWest,
- ne = this._northEast;
-
- return [sw.lng, sw.lat, ne.lng, ne.lat].join(',');
- },
-
- equals: function (bounds) { // (LatLngBounds)
- if (!bounds) { return false; }
-
- bounds = L.latLngBounds(bounds);
-
- return this._southWest.equals(bounds.getSouthWest()) &&
- this._northEast.equals(bounds.getNorthEast());
- },
-
- isValid: function () {
- return !!(this._southWest && this._northEast);
- }
-};
-
-//TODO International date line?
-
-L.latLngBounds = function (a, b) { // (LatLngBounds) or (LatLng, LatLng)
- if (!a || a instanceof L.LatLngBounds) {
- return a;
- }
- return new L.LatLngBounds(a, b);
-};
-
-
-/*
- * L.Projection contains various geographical projections used by CRS classes.
- */
-
-L.Projection = {};
-
-
-/*
- * Spherical Mercator is the most popular map projection, used by EPSG:3857 CRS used by default.
- */
-
-L.Projection.SphericalMercator = {
- MAX_LATITUDE: 85.0511287798,
-
- project: function (latlng) { // (LatLng) -> Point
- var d = L.LatLng.DEG_TO_RAD,
- max = this.MAX_LATITUDE,
- lat = Math.max(Math.min(max, latlng.lat), -max),
- x = latlng.lng * d,
- y = lat * d;
-
- y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
-
- return new L.Point(x, y);
- },
-
- unproject: function (point) { // (Point, Boolean) -> LatLng
- var d = L.LatLng.RAD_TO_DEG,
- lng = point.x * d,
- lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
-
- return new L.LatLng(lat, lng);
- }
-};
-
-
-/*
- * Simple equirectangular (Plate Carree) projection, used by CRS like EPSG:4326 and Simple.
- */
-
-L.Projection.LonLat = {
- project: function (latlng) {
- return new L.Point(latlng.lng, latlng.lat);
- },
-
- unproject: function (point) {
- return new L.LatLng(point.y, point.x);
- }
-};
-
-
-/*
- * L.CRS is a base object for all defined CRS (Coordinate Reference Systems) in Leaflet.
- */
-
-L.CRS = {
- latLngToPoint: function (latlng, zoom) { // (LatLng, Number) -> Point
- var projectedPoint = this.projection.project(latlng),
- scale = this.scale(zoom);
-
- return this.transformation._transform(projectedPoint, scale);
- },
-
- pointToLatLng: function (point, zoom) { // (Point, Number[, Boolean]) -> LatLng
- var scale = this.scale(zoom),
- untransformedPoint = this.transformation.untransform(point, scale);
-
- return this.projection.unproject(untransformedPoint);
- },
-
- project: function (latlng) {
- return this.projection.project(latlng);
- },
-
- scale: function (zoom) {
- return 256 * Math.pow(2, zoom);
- }
-};
-
-
-/*
* A simple CRS that can be used for flat non-Earth maps like panoramas or game maps.
*/
@@ -1294,1723 +1478,1878 @@
});
-/*
- * L.CRS.EPSG3857 (Spherical Mercator) is the most common CRS for web mapping
- * and is used by Leaflet by default.
- */
+/*
+ * L.CRS.EPSG3857 (Spherical Mercator) is the most common CRS for web mapping
+ * and is used by Leaflet by default.
+ */
+
+L.CRS.EPSG3857 = L.extend({}, L.CRS, {
+ code: 'EPSG:3857',
+
+ projection: L.Projection.SphericalMercator,
+ transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
+
+ project: function (latlng) { // (LatLng) -> Point
+ var projectedPoint = this.projection.project(latlng),
+ earthRadius = 6378137;
+ return projectedPoint.multiplyBy(earthRadius);
+ }
+});
+
+L.CRS.EPSG900913 = L.extend({}, L.CRS.EPSG3857, {
+ code: 'EPSG:900913'
+});
-L.CRS.EPSG3857 = L.extend({}, L.CRS, {
- code: 'EPSG:3857',
- projection: L.Projection.SphericalMercator,
- transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
+/*
+ * L.CRS.EPSG4326 is a CRS popular among advanced GIS specialists.
+ */
+
+L.CRS.EPSG4326 = L.extend({}, L.CRS, {
+ code: 'EPSG:4326',
+
+ projection: L.Projection.LonLat,
+ transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
+});
- project: function (latlng) { // (LatLng) -> Point
- var projectedPoint = this.projection.project(latlng),
- earthRadius = 6378137;
- return projectedPoint.multiplyBy(earthRadius);
- }
-});
-L.CRS.EPSG900913 = L.extend({}, L.CRS.EPSG3857, {
- code: 'EPSG:900913'
-});
+/*
+ * L.Map is the central class of the API - it is used to create a map.
+ */
+
+L.Map = L.Class.extend({
+
+ includes: L.Mixin.Events,
+
+ options: {
+ crs: L.CRS.EPSG3857,
+
+ /*
+ center: LatLng,
+ zoom: Number,
+ layers: Array,
+ */
+
+ fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android23,
+ trackResize: true,
+ markerZoomAnimation: L.DomUtil.TRANSITION && L.Browser.any3d
+ },
+
+ initialize: function (id, options) { // (HTMLElement or String, Object)
+ options = L.setOptions(this, options);
+
+ this._initContainer(id);
+ this._initLayout();
+ this._initEvents();
+
+ if (options.maxBounds) {
+ this.setMaxBounds(options.maxBounds);
+ }
+
+ if (options.center && options.zoom !== undefined) {
+ this.setView(L.latLng(options.center), options.zoom, {reset: true});
+ }
+
+ this._handlers = [];
+
+ this._layers = {};
+ this._zoomBoundLayers = {};
+ this._tileLayersNum = 0;
+
+ this.callInitHooks();
+
+ this._addLayers(options.layers);
+ },
+
+
+ // public methods that modify map state
+
+ // replaced by animation-powered implementation in Map.PanAnimation.js
+ setView: function (center, zoom) {
+ this._resetView(L.latLng(center), this._limitZoom(zoom));
+ return this;
+ },
+
+ setZoom: function (zoom, options) {
+ return this.setView(this.getCenter(), zoom, {zoom: options});
+ },
+
+ zoomIn: function (delta, options) {
+ return this.setZoom(this._zoom + (delta || 1), options);
+ },
+
+ zoomOut: function (delta, options) {
+ return this.setZoom(this._zoom - (delta || 1), options);
+ },
+
+ setZoomAround: function (latlng, zoom, options) {
+ var scale = this.getZoomScale(zoom),
+ viewHalf = this.getSize().divideBy(2),
+ containerPoint = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng),
+
+ centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),
+ newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));
+
+ return this.setView(newCenter, zoom, {zoom: options});
+ },
+
+ fitBounds: function (bounds, options) {
+
+ options = options || {};
+ bounds = bounds.getBounds ? bounds.getBounds() : L.latLngBounds(bounds);
+
+ var paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),
+ paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),
+
+ zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)),
+ paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
+
+ swPoint = this.project(bounds.getSouthWest(), zoom),
+ nePoint = this.project(bounds.getNorthEast(), zoom),
+ center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);
+
+ return this.setView(center, zoom, options);
+ },
+
+ fitWorld: function (options) {
+ return this.fitBounds([[-90, -180], [90, 180]], options);
+ },
+
+ panTo: function (center, options) { // (LatLng)
+ return this.setView(center, this._zoom, {pan: options});
+ },
+
+ panBy: function (offset) { // (Point)
+ // replaced with animated panBy in Map.Animation.js
+ this.fire('movestart');
+
+ this._rawPanBy(L.point(offset));
+
+ this.fire('move');
+ return this.fire('moveend');
+ },
+
+ setMaxBounds: function (bounds) {
+ bounds = L.latLngBounds(bounds);
+
+ this.options.maxBounds = bounds;
+
+ if (!bounds) {
+ this._boundsMinZoom = null;
+ this.off('moveend', this._panInsideMaxBounds, this);
+ return this;
+ }
+
+ var minZoom = this.getBoundsZoom(bounds, true);
+
+ this._boundsMinZoom = minZoom;
+
+ if (this._loaded) {
+ if (this._zoom < minZoom) {
+ this.setView(bounds.getCenter(), minZoom);
+ } else {
+ this.panInsideBounds(bounds);
+ }
+ }
+
+ this.on('moveend', this._panInsideMaxBounds, this);
+
+ return this;
+ },
+
+ panInsideBounds: function (bounds) {
+ bounds = L.latLngBounds(bounds);
+
+ var viewBounds = this.getPixelBounds(),
+ viewSw = viewBounds.getBottomLeft(),
+ viewNe = viewBounds.getTopRight(),
+ sw = this.project(bounds.getSouthWest()),
+ ne = this.project(bounds.getNorthEast()),
+ dx = 0,
+ dy = 0;
+
+ if (viewNe.y < ne.y) { // north
+ dy = Math.ceil(ne.y - viewNe.y);
+ }
+ if (viewNe.x > ne.x) { // east
+ dx = Math.floor(ne.x - viewNe.x);
+ }
+ if (viewSw.y > sw.y) { // south
+ dy = Math.floor(sw.y - viewSw.y);
+ }
+ if (viewSw.x < sw.x) { // west
+ dx = Math.ceil(sw.x - viewSw.x);
+ }
+
+ if (dx || dy) {
+ return this.panBy([dx, dy]);
+ }
+
+ return this;
+ },
+
+ addLayer: function (layer) {
+ // TODO method is too big, refactor
+
+ var id = L.stamp(layer);
+
+ if (this._layers[id]) { return this; }
+
+ this._layers[id] = layer;
+
+ // TODO getMaxZoom, getMinZoom in ILayer (instead of options)
+ if (layer.options && (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom))) {
+ this._zoomBoundLayers[id] = layer;
+ this._updateZoomLevels();
+ }
+
+ // TODO looks ugly, refactor!!!
+ if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+ this._tileLayersNum++;
+ this._tileLayersToLoad++;
+ layer.on('load', this._onTileLayerLoad, this);
+ }
+
+ if (this._loaded) {
+ this._layerAdd(layer);
+ }
+
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.stamp(layer);
+
+ if (!this._layers[id]) { return; }
+
+ if (this._loaded) {
+ layer.onRemove(this);
+ this.fire('layerremove', {layer: layer});
+ }
+
+ delete this._layers[id];
+ if (this._zoomBoundLayers[id]) {
+ delete this._zoomBoundLayers[id];
+ this._updateZoomLevels();
+ }
+
+ // TODO looks ugly, refactor
+ if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+ this._tileLayersNum--;
+ this._tileLayersToLoad--;
+ layer.off('load', this._onTileLayerLoad, this);
+ }
+
+ return this;
+ },
+
+ hasLayer: function (layer) {
+ if (!layer) { return false; }
+
+ return (L.stamp(layer) in this._layers);
+ },
+
+ eachLayer: function (method, context) {
+ for (var i in this._layers) {
+ method.call(context, this._layers[i]);
+ }
+ return this;
+ },
+
+ invalidateSize: function (options) {
+ options = L.extend({
+ animate: false,
+ pan: true
+ }, options === true ? {animate: true} : options);
+
+ var oldSize = this.getSize();
+ this._sizeChanged = true;
+
+ if (this.options.maxBounds) {
+ this.setMaxBounds(this.options.maxBounds);
+ }
+
+ if (!this._loaded) { return this; }
+
+ var newSize = this.getSize(),
+ offset = oldSize.subtract(newSize).divideBy(2).round();
+
+ if (!offset.x && !offset.y) { return this; }
+
+ if (options.animate && options.pan) {
+ this.panBy(offset);
+
+ } else {
+ if (options.pan) {
+ this._rawPanBy(offset);
+ }
+
+ this.fire('move');
+
+ // make sure moveend is not fired too often on resize
+ clearTimeout(this._sizeTimer);
+ this._sizeTimer = setTimeout(L.bind(this.fire, this, 'moveend'), 200);
+ }
+
+ return this.fire('resize', {
+ oldSize: oldSize,
+ newSize: newSize
+ });
+ },
+
+ // TODO handler.addTo
+ addHandler: function (name, HandlerClass) {
+ if (!HandlerClass) { return; }
+
+ var handler = this[name] = new HandlerClass(this);
+
+ this._handlers.push(handler);
+
+ if (this.options[name]) {
+ handler.enable();
+ }
+
+ return this;
+ },
+
+ remove: function () {
+ if (this._loaded) {
+ this.fire('unload');
+ }
+
+ this._initEvents('off');
+
+ delete this._container._leaflet;
+
+ this._clearPanes();
+ if (this._clearControlPos) {
+ this._clearControlPos();
+ }
+
+ this._clearHandlers();
+
+ return this;
+ },
+
+
+ // public methods for getting map state
+
+ getCenter: function () { // (Boolean) -> LatLng
+ this._checkIfLoaded();
+
+ if (!this._moved()) {
+ return this._initialCenter;
+ }
+ return this.layerPointToLatLng(this._getCenterLayerPoint());
+ },
+
+ getZoom: function () {
+ return this._zoom;
+ },
+
+ getBounds: function () {
+ var bounds = this.getPixelBounds(),
+ sw = this.unproject(bounds.getBottomLeft()),
+ ne = this.unproject(bounds.getTopRight());
+
+ return new L.LatLngBounds(sw, ne);
+ },
+
+ getMinZoom: function () {
+ var z1 = this.options.minZoom || 0,
+ z2 = this._layersMinZoom || 0,
+ z3 = this._boundsMinZoom || 0;
+
+ return Math.max(z1, z2, z3);
+ },
+
+ getMaxZoom: function () {
+ var z1 = this.options.maxZoom === undefined ? Infinity : this.options.maxZoom,
+ z2 = this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom;
+
+ return Math.min(z1, z2);
+ },
+
+ getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number
+ bounds = L.latLngBounds(bounds);
+
+ var zoom = this.getMinZoom() - (inside ? 1 : 0),
+ maxZoom = this.getMaxZoom(),
+ size = this.getSize(),
+
+ nw = bounds.getNorthWest(),
+ se = bounds.getSouthEast(),
+
+ zoomNotFound = true,
+ boundsSize;
+
+ padding = L.point(padding || [0, 0]);
+
+ do {
+ zoom++;
+ boundsSize = this.project(se, zoom).subtract(this.project(nw, zoom)).add(padding);
+ zoomNotFound = !inside ? size.contains(boundsSize) : boundsSize.x < size.x || boundsSize.y < size.y;
+
+ } while (zoomNotFound && zoom <= maxZoom);
+
+ if (zoomNotFound && inside) {
+ return null;
+ }
+
+ return inside ? zoom : zoom - 1;
+ },
+
+ getSize: function () {
+ if (!this._size || this._sizeChanged) {
+ this._size = new L.Point(
+ this._container.clientWidth,
+ this._container.clientHeight);
+
+ this._sizeChanged = false;
+ }
+ return this._size.clone();
+ },
+
+ getPixelBounds: function () {
+ var topLeftPoint = this._getTopLeftPoint();
+ return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
+ },
+
+ getPixelOrigin: function () {
+ this._checkIfLoaded();
+ return this._initialTopLeftPoint;
+ },
+
+ getPanes: function () {
+ return this._panes;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+
+ // TODO replace with universal implementation after refactoring projections
+
+ getZoomScale: function (toZoom) {
+ var crs = this.options.crs;
+ return crs.scale(toZoom) / crs.scale(this._zoom);
+ },
+
+ getScaleZoom: function (scale) {
+ return this._zoom + (Math.log(scale) / Math.LN2);
+ },
+
+
+ // conversion methods
+
+ project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
+ zoom = zoom === undefined ? this._zoom : zoom;
+ return this.options.crs.latLngToPoint(L.latLng(latlng), zoom);
+ },
+
+ unproject: function (point, zoom) { // (Point[, Number]) -> LatLng
+ zoom = zoom === undefined ? this._zoom : zoom;
+ return this.options.crs.pointToLatLng(L.point(point), zoom);
+ },
+
+ layerPointToLatLng: function (point) { // (Point)
+ var projectedPoint = L.point(point).add(this.getPixelOrigin());
+ return this.unproject(projectedPoint);
+ },
+
+ latLngToLayerPoint: function (latlng) { // (LatLng)
+ var projectedPoint = this.project(L.latLng(latlng))._round();
+ return projectedPoint._subtract(this.getPixelOrigin());
+ },
+
+ containerPointToLayerPoint: function (point) { // (Point)
+ return L.point(point).subtract(this._getMapPanePos());
+ },
+
+ layerPointToContainerPoint: function (point) { // (Point)
+ return L.point(point).add(this._getMapPanePos());
+ },
+
+ containerPointToLatLng: function (point) {
+ var layerPoint = this.containerPointToLayerPoint(L.point(point));
+ return this.layerPointToLatLng(layerPoint);
+ },
+
+ latLngToContainerPoint: function (latlng) {
+ return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
+ },
+
+ mouseEventToContainerPoint: function (e) { // (MouseEvent)
+ return L.DomEvent.getMousePosition(e, this._container);
+ },
+
+ mouseEventToLayerPoint: function (e) { // (MouseEvent)
+ return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
+ },
+
+ mouseEventToLatLng: function (e) { // (MouseEvent)
+ return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
+ },
+
+
+ // map initialization methods
+
+ _initContainer: function (id) {
+ var container = this._container = L.DomUtil.get(id);
+
+ if (!container) {
+ throw new Error('Map container not found.');
+ } else if (container._leaflet) {
+ throw new Error('Map container is already initialized.');
+ }
+
+ container._leaflet = true;
+ },
+
+ _initLayout: function () {
+ var container = this._container;
+
+ L.DomUtil.addClass(container, 'leaflet-container' +
+ (L.Browser.touch ? ' leaflet-touch' : '') +
+ (L.Browser.retina ? ' leaflet-retina' : '') +
+ (this.options.fadeAnimation ? ' leaflet-fade-anim' : ''));
+
+ var position = L.DomUtil.getStyle(container, 'position');
+
+ if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
+ container.style.position = 'relative';
+ }
+
+ this._initPanes();
+
+ if (this._initControlPos) {
+ this._initControlPos();
+ }
+ },
+
+ _initPanes: function () {
+ var panes = this._panes = {};
+
+ this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
+
+ this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
+ panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
+ panes.shadowPane = this._createPane('leaflet-shadow-pane');
+ panes.overlayPane = this._createPane('leaflet-overlay-pane');
+ panes.markerPane = this._createPane('leaflet-marker-pane');
+ panes.popupPane = this._createPane('leaflet-popup-pane');
+
+ var zoomHide = ' leaflet-zoom-hide';
+
+ if (!this.options.markerZoomAnimation) {
+ L.DomUtil.addClass(panes.markerPane, zoomHide);
+ L.DomUtil.addClass(panes.shadowPane, zoomHide);
+ L.DomUtil.addClass(panes.popupPane, zoomHide);
+ }
+ },
+
+ _createPane: function (className, container) {
+ return L.DomUtil.create('div', className, container || this._panes.objectsPane);
+ },
+
+ _clearPanes: function () {
+ this._container.removeChild(this._mapPane);
+ },
+
+ _addLayers: function (layers) {
+ layers = layers ? (L.Util.isArray(layers) ? layers : [layers]) : [];
+
+ for (var i = 0, len = layers.length; i < len; i++) {
+ this.addLayer(layers[i]);
+ }
+ },
+
+
+ // private methods that modify map state
+
+ _resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
+
+ var zoomChanged = (this._zoom !== zoom);
+
+ if (!afterZoomAnim) {
+ this.fire('movestart');
+
+ if (zoomChanged) {
+ this.fire('zoomstart');
+ }
+ }
+
+ this._zoom = zoom;
+ this._initialCenter = center;
+
+ this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
+
+ if (!preserveMapOffset) {
+ L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
+ } else {
+ this._initialTopLeftPoint._add(this._getMapPanePos());
+ }
+
+ this._tileLayersToLoad = this._tileLayersNum;
+
+ var loading = !this._loaded;
+ this._loaded = true;
+
+ if (loading) {
+ this.fire('load');
+ this.eachLayer(this._layerAdd, this);
+ }
+
+ this.fire('viewreset', {hard: !preserveMapOffset});
+
+ this.fire('move');
+
+ if (zoomChanged || afterZoomAnim) {
+ this.fire('zoomend');
+ }
+
+ this.fire('moveend', {hard: !preserveMapOffset});
+ },
+
+ _rawPanBy: function (offset) {
+ L.DomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
+ },
+
+ _getZoomSpan: function () {
+ return this.getMaxZoom() - this.getMinZoom();
+ },
+
+ _updateZoomLevels: function () {
+ var i,
+ minZoom = Infinity,
+ maxZoom = -Infinity,
+ oldZoomSpan = this._getZoomSpan();
+
+ for (i in this._zoomBoundLayers) {
+ var layer = this._zoomBoundLayers[i];
+ if (!isNaN(layer.options.minZoom)) {
+ minZoom = Math.min(minZoom, layer.options.minZoom);
+ }
+ if (!isNaN(layer.options.maxZoom)) {
+ maxZoom = Math.max(maxZoom, layer.options.maxZoom);
+ }
+ }
+
+ if (i === undefined) { // we have no tilelayers
+ this._layersMaxZoom = this._layersMinZoom = undefined;
+ } else {
+ this._layersMaxZoom = maxZoom;
+ this._layersMinZoom = minZoom;
+ }
+
+ if (oldZoomSpan !== this._getZoomSpan()) {
+ this.fire('zoomlevelschange');
+ }
+ },
+
+ _panInsideMaxBounds: function () {
+ this.panInsideBounds(this.options.maxBounds);
+ },
+
+ _checkIfLoaded: function () {
+ if (!this._loaded) {
+ throw new Error('Set map center and zoom first.');
+ }
+ },
+
+ // map events
+
+ _initEvents: function (onOff) {
+ if (!L.DomEvent) { return; }
+
+ onOff = onOff || 'on';
+
+ L.DomEvent[onOff](this._container, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseup', 'mouseenter',
+ 'mouseleave', 'mousemove', 'contextmenu'],
+ i, len;
+
+ for (i = 0, len = events.length; i < len; i++) {
+ L.DomEvent[onOff](this._container, events[i], this._fireMouseEvent, this);
+ }
+
+ if (this.options.trackResize) {
+ L.DomEvent[onOff](window, 'resize', this._onResize, this);
+ }
+ },
+
+ _onResize: function () {
+ L.Util.cancelAnimFrame(this._resizeRequest);
+ this._resizeRequest = L.Util.requestAnimFrame(
+ this.invalidateSize, this, false, this._container);
+ },
+
+ _onMouseClick: function (e) {
+ // jshint camelcase: false
+ if (!this._loaded || (!e._simulated && this.dragging && this.dragging.moved()) || e._leaflet_stop) { return; }
+
+ this.fire('preclick');
+ this._fireMouseEvent(e);
+ },
+
+ _fireMouseEvent: function (e) {
+ // jshint camelcase: false
+ if (!this._loaded || e._leaflet_stop) { return; }
+
+ var type = e.type;
+
+ type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
+
+ if (!this.hasEventListeners(type)) { return; }
+
+ if (type === 'contextmenu') {
+ L.DomEvent.preventDefault(e);
+ }
+
+ var containerPoint = this.mouseEventToContainerPoint(e),
+ layerPoint = this.containerPointToLayerPoint(containerPoint),
+ latlng = this.layerPointToLatLng(layerPoint);
+
+ this.fire(type, {
+ latlng: latlng,
+ layerPoint: layerPoint,
+ containerPoint: containerPoint,
+ originalEvent: e
+ });
+ },
+
+ _onTileLayerLoad: function () {
+ this._tileLayersToLoad--;
+ if (this._tileLayersNum && !this._tileLayersToLoad) {
+ this.fire('tilelayersload');
+ }
+ },
+
+ _clearHandlers: function () {
+ for (var i = 0, len = this._handlers.length; i < len; i++) {
+ this._handlers[i].disable();
+ }
+ },
+
+ whenReady: function (callback, context) {
+ if (this._loaded) {
+ callback.call(context || this, this);
+ } else {
+ this.on('load', callback, context);
+ }
+ return this;
+ },
+
+ _layerAdd: function (layer) {
+ layer.onAdd(this);
+ this.fire('layeradd', {layer: layer});
+ },
+
+
+ // private methods for getting map state
+
+ _getMapPanePos: function () {
+ return L.DomUtil.getPosition(this._mapPane);
+ },
+
+ _moved: function () {
+ var pos = this._getMapPanePos();
+ return pos && !pos.equals([0, 0]);
+ },
+
+ _getTopLeftPoint: function () {
+ return this.getPixelOrigin().subtract(this._getMapPanePos());
+ },
+
+ _getNewTopLeftPoint: function (center, zoom) {
+ var viewHalf = this.getSize()._divideBy(2);
+ // TODO round on display, not calculation to increase precision?
+ return this.project(center, zoom)._subtract(viewHalf)._round();
+ },
+
+ _latLngToNewLayerPoint: function (latlng, newZoom, newCenter) {
+ var topLeft = this._getNewTopLeftPoint(newCenter, newZoom).add(this._getMapPanePos());
+ return this.project(latlng, newZoom)._subtract(topLeft);
+ },
+
+ // layer point of the current center
+ _getCenterLayerPoint: function () {
+ return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
+ },
+
+ // offset of the specified place to the current center in pixels
+ _getCenterOffset: function (latlng) {
+ return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());
+ },
+
+ _limitZoom: function (zoom) {
+ var min = this.getMinZoom(),
+ max = this.getMaxZoom();
+
+ return Math.max(min, Math.min(max, zoom));
+ }
+});
+
+L.map = function (id, options) {
+ return new L.Map(id, options);
+};
-/*
- * L.CRS.EPSG4326 is a CRS popular among advanced GIS specialists.
- */
+/*
+ * Mercator projection that takes into account that the Earth is not a perfect sphere.
+ * Less popular than spherical mercator; used by projections like EPSG:3395.
+ */
+
+L.Projection.Mercator = {
+ MAX_LATITUDE: 85.0840591556,
+
+ R_MINOR: 6356752.314245179,
+ R_MAJOR: 6378137,
+
+ project: function (latlng) { // (LatLng) -> Point
+ var d = L.LatLng.DEG_TO_RAD,
+ max = this.MAX_LATITUDE,
+ lat = Math.max(Math.min(max, latlng.lat), -max),
+ r = this.R_MAJOR,
+ r2 = this.R_MINOR,
+ x = latlng.lng * d * r,
+ y = lat * d,
+ tmp = r2 / r,
+ eccent = Math.sqrt(1.0 - tmp * tmp),
+ con = eccent * Math.sin(y);
+
+ con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
+
+ var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
+ y = -r * Math.log(ts);
+
+ return new L.Point(x, y);
+ },
+
+ unproject: function (point) { // (Point, Boolean) -> LatLng
+ var d = L.LatLng.RAD_TO_DEG,
+ r = this.R_MAJOR,
+ r2 = this.R_MINOR,
+ lng = point.x * d / r,
+ tmp = r2 / r,
+ eccent = Math.sqrt(1 - (tmp * tmp)),
+ ts = Math.exp(- point.y / r),
+ phi = (Math.PI / 2) - 2 * Math.atan(ts),
+ numIter = 15,
+ tol = 1e-7,
+ i = numIter,
+ dphi = 0.1,
+ con;
+
+ while ((Math.abs(dphi) > tol) && (--i > 0)) {
+ con = eccent * Math.sin(phi);
+ dphi = (Math.PI / 2) - 2 * Math.atan(ts *
+ Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
+ phi += dphi;
+ }
+
+ return new L.LatLng(phi * d, lng);
+ }
+};
-L.CRS.EPSG4326 = L.extend({}, L.CRS, {
- code: 'EPSG:4326',
- projection: L.Projection.LonLat,
- transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
-});
+
+L.CRS.EPSG3395 = L.extend({}, L.CRS, {
+ code: 'EPSG:3395',
+
+ projection: L.Projection.Mercator,
+
+ transformation: (function () {
+ var m = L.Projection.Mercator,
+ r = m.R_MAJOR,
+ r2 = m.R_MINOR;
+
+ return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
+ }())
+});
-/*
- * L.Map is the central class of the API - it is used to create a map.
- */
+/*
+ * L.TileLayer is used for standard xyz-numbered tile layers.
+ */
+
+L.TileLayer = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ minZoom: 0,
+ maxZoom: 18,
+ tileSize: 256,
+ subdomains: 'abc',
+ errorTileUrl: '',
+ attribution: '',
+ zoomOffset: 0,
+ opacity: 1,
+ /* (undefined works too)
+ zIndex: null,
+ tms: false,
+ continuousWorld: false,
+ noWrap: false,
+ zoomReverse: false,
+ detectRetina: false,
+ reuseTiles: false,
+ bounds: false,
+ */
+ unloadInvisibleTiles: L.Browser.mobile,
+ updateWhenIdle: L.Browser.mobile
+ },
+
+ initialize: function (url, options) {
+ options = L.setOptions(this, options);
+
+ // detecting retina displays, adjusting tileSize and zoom levels
+ if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) {
+
+ options.tileSize = Math.floor(options.tileSize / 2);
+ options.zoomOffset++;
+
+ if (options.minZoom > 0) {
+ options.minZoom--;
+ }
+ this.options.maxZoom--;
+ }
+
+ if (options.bounds) {
+ options.bounds = L.latLngBounds(options.bounds);
+ }
+
+ this._url = url;
+
+ var subdomains = this.options.subdomains;
+
+ if (typeof subdomains === 'string') {
+ this.options.subdomains = subdomains.split('');
+ }
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ this._animated = map._zoomAnimated;
+
+ // create a container div for tiles
+ this._initContainer();
+
+ // create an image to clone for tiles
+ this._createTileProto();
+
+ // set up events
+ map.on({
+ 'viewreset': this._reset,
+ 'moveend': this._update
+ }, this);
+
+ if (this._animated) {
+ map.on({
+ 'zoomanim': this._animateZoom,
+ 'zoomend': this._endZoomAnim
+ }, this);
+ }
+
+ if (!this.options.updateWhenIdle) {
+ this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
+ map.on('move', this._limitedUpdate, this);
+ }
+
+ this._reset();
+ this._update();
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ this._container.parentNode.removeChild(this._container);
+
+ map.off({
+ 'viewreset': this._reset,
+ 'moveend': this._update
+ }, this);
+
+ if (this._animated) {
+ map.off({
+ 'zoomanim': this._animateZoom,
+ 'zoomend': this._endZoomAnim
+ }, this);
+ }
+
+ if (!this.options.updateWhenIdle) {
+ map.off('move', this._limitedUpdate, this);
+ }
+
+ this._container = null;
+ this._map = null;
+ },
+
+ bringToFront: function () {
+ var pane = this._map._panes.tilePane;
+
+ if (this._container) {
+ pane.appendChild(this._container);
+ this._setAutoZIndex(pane, Math.max);
+ }
+
+ return this;
+ },
+
+ bringToBack: function () {
+ var pane = this._map._panes.tilePane;
+
+ if (this._container) {
+ pane.insertBefore(this._container, pane.firstChild);
+ this._setAutoZIndex(pane, Math.min);
+ }
+
+ return this;
+ },
+
+ getAttribution: function () {
+ return this.options.attribution;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+
+ if (this._map) {
+ this._updateOpacity();
+ }
+
+ return this;
+ },
+
+ setZIndex: function (zIndex) {
+ this.options.zIndex = zIndex;
+ this._updateZIndex();
+
+ return this;
+ },
+
+ setUrl: function (url, noRedraw) {
+ this._url = url;
+
+ if (!noRedraw) {
+ this.redraw();
+ }
+
+ return this;
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this._reset({hard: true});
+ this._update();
+ }
+ return this;
+ },
+
+ _updateZIndex: function () {
+ if (this._container && this.options.zIndex !== undefined) {
+ this._container.style.zIndex = this.options.zIndex;
+ }
+ },
+
+ _setAutoZIndex: function (pane, compare) {
+
+ var layers = pane.children,
+ edgeZIndex = -compare(Infinity, -Infinity), // -Infinity for max, Infinity for min
+ zIndex, i, len;
+
+ for (i = 0, len = layers.length; i < len; i++) {
+
+ if (layers[i] !== this._container) {
+ zIndex = parseInt(layers[i].style.zIndex, 10);
+
+ if (!isNaN(zIndex)) {
+ edgeZIndex = compare(edgeZIndex, zIndex);
+ }
+ }
+ }
+
+ this.options.zIndex = this._container.style.zIndex =
+ (isFinite(edgeZIndex) ? edgeZIndex : 0) + compare(1, -1);
+ },
+
+ _updateOpacity: function () {
+ var i,
+ tiles = this._tiles;
+
+ if (L.Browser.ielt9) {
+ for (i in tiles) {
+ L.DomUtil.setOpacity(tiles[i], this.options.opacity);
+ }
+ } else {
+ L.DomUtil.setOpacity(this._container, this.options.opacity);
+ }
+ },
+
+ _initContainer: function () {
+ var tilePane = this._map._panes.tilePane;
+
+ if (!this._container) {
+ this._container = L.DomUtil.create('div', 'leaflet-layer');
+
+ this._updateZIndex();
+
+ if (this._animated) {
+ var className = 'leaflet-tile-container leaflet-zoom-animated';
+
+ this._bgBuffer = L.DomUtil.create('div', className, this._container);
+ this._tileContainer = L.DomUtil.create('div', className, this._container);
+
+ } else {
+ this._tileContainer = this._container;
+ }
+
+ tilePane.appendChild(this._container);
+
+ if (this.options.opacity < 1) {
+ this._updateOpacity();
+ }
+ }
+ },
+
+ _reset: function (e) {
+ for (var key in this._tiles) {
+ this.fire('tileunload', {tile: this._tiles[key]});
+ }
+
+ this._tiles = {};
+ this._tilesToLoad = 0;
+
+ if (this.options.reuseTiles) {
+ this._unusedTiles = [];
+ }
+
+ this._tileContainer.innerHTML = '';
+
+ if (this._animated && e && e.hard) {
+ this._clearBgBuffer();
+ }
+
+ this._initContainer();
+ },
+
+ _update: function () {
+
+ if (!this._map) { return; }
+
+ var bounds = this._map.getPixelBounds(),
+ zoom = this._map.getZoom(),
+ tileSize = this.options.tileSize;
+
+ if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {
+ return;
+ }
+
+ var tileBounds = L.bounds(
+ bounds.min.divideBy(tileSize)._floor(),
+ bounds.max.divideBy(tileSize)._floor());
+
+ this._addTilesFromCenterOut(tileBounds);
+
+ if (this.options.unloadInvisibleTiles || this.options.reuseTiles) {
+ this._removeOtherTiles(tileBounds);
+ }
+ },
+
+ _addTilesFromCenterOut: function (bounds) {
+ var queue = [],
+ center = bounds.getCenter();
+
+ var j, i, point;
+
+ for (j = bounds.min.y; j <= bounds.max.y; j++) {
+ for (i = bounds.min.x; i <= bounds.max.x; i++) {
+ point = new L.Point(i, j);
+
+ if (this._tileShouldBeLoaded(point)) {
+ queue.push(point);
+ }
+ }
+ }
+
+ var tilesToLoad = queue.length;
+
+ if (tilesToLoad === 0) { return; }
+
+ // load tiles in order of their distance to center
+ queue.sort(function (a, b) {
+ return a.distanceTo(center) - b.distanceTo(center);
+ });
+
+ var fragment = document.createDocumentFragment();
+
+ // if its the first batch of tiles to load
+ if (!this._tilesToLoad) {
+ this.fire('loading');
+ }
+
+ this._tilesToLoad += tilesToLoad;
+
+ for (i = 0; i < tilesToLoad; i++) {
+ this._addTile(queue[i], fragment);
+ }
+
+ this._tileContainer.appendChild(fragment);
+ },
+
+ _tileShouldBeLoaded: function (tilePoint) {
+ if ((tilePoint.x + ':' + tilePoint.y) in this._tiles) {
+ return false; // already loaded
+ }
+
+ var options = this.options;
+
+ if (!options.continuousWorld) {
+ var limit = this._getWrapTileNum();
+
+ // don't load if exceeds world bounds
+ if ((options.noWrap && (tilePoint.x < 0 || tilePoint.x >= limit)) ||
+ tilePoint.y < 0 || tilePoint.y >= limit) { return false; }
+ }
+
+ if (options.bounds) {
+ var tileSize = options.tileSize,
+ nwPoint = tilePoint.multiplyBy(tileSize),
+ sePoint = nwPoint.add([tileSize, tileSize]),
+ nw = this._map.unproject(nwPoint),
+ se = this._map.unproject(sePoint);
+
+ // TODO temporary hack, will be removed after refactoring projections
+ // https://github.com/Leaflet/Leaflet/issues/1618
+ if (!options.continuousWorld && !options.noWrap) {
+ nw = nw.wrap();
+ se = se.wrap();
+ }
+
+ if (!options.bounds.intersects([nw, se])) { return false; }
+ }
+
+ return true;
+ },
+
+ _removeOtherTiles: function (bounds) {
+ var kArr, x, y, key;
+
+ for (key in this._tiles) {
+ kArr = key.split(':');
+ x = parseInt(kArr[0], 10);
+ y = parseInt(kArr[1], 10);
+
+ // remove tile if it's out of bounds
+ if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
+ this._removeTile(key);
+ }
+ }
+ },
+
+ _removeTile: function (key) {
+ var tile = this._tiles[key];
+
+ this.fire('tileunload', {tile: tile, url: tile.src});
+
+ if (this.options.reuseTiles) {
+ L.DomUtil.removeClass(tile, 'leaflet-tile-loaded');
+ this._unusedTiles.push(tile);
+
+ } else if (tile.parentNode === this._tileContainer) {
+ this._tileContainer.removeChild(tile);
+ }
+
+ // for https://github.com/CloudMade/Leaflet/issues/137
+ if (!L.Browser.android) {
+ tile.onload = null;
+ tile.src = L.Util.emptyImageUrl;
+ }
+
+ delete this._tiles[key];
+ },
+
+ _addTile: function (tilePoint, container) {
+ var tilePos = this._getTilePos(tilePoint);
+
+ // get unused tile - or create a new tile
+ var tile = this._getTile();
+
+ /*
+ Chrome 20 layouts much faster with top/left (verify with timeline, frames)
+ Android 4 browser has display issues with top/left and requires transform instead
+ Android 2 browser requires top/left or tiles disappear on load or first drag
+ (reappear after zoom) https://github.com/CloudMade/Leaflet/issues/866
+ (other browsers don't currently care) - see debug/hacks/jitter.html for an example
+ */
+ L.DomUtil.setPosition(tile, tilePos, L.Browser.chrome || L.Browser.android23);
+
+ this._tiles[tilePoint.x + ':' + tilePoint.y] = tile;
+
+ this._loadTile(tile, tilePoint);
+
+ if (tile.parentNode !== this._tileContainer) {
+ container.appendChild(tile);
+ }
+ },
+
+ _getZoomForUrl: function () {
+
+ var options = this.options,
+ zoom = this._map.getZoom();
+
+ if (options.zoomReverse) {
+ zoom = options.maxZoom - zoom;
+ }
+
+ return zoom + options.zoomOffset;
+ },
+
+ _getTilePos: function (tilePoint) {
+ var origin = this._map.getPixelOrigin(),
+ tileSize = this.options.tileSize;
+
+ return tilePoint.multiplyBy(tileSize).subtract(origin);
+ },
+
+ // image-specific code (override to implement e.g. Canvas or SVG tile layer)
+
+ getTileUrl: function (tilePoint) {
+ return L.Util.template(this._url, L.extend({
+ s: this._getSubdomain(tilePoint),
+ z: tilePoint.z,
+ x: tilePoint.x,
+ y: tilePoint.y
+ }, this.options));
+ },
+
+ _getWrapTileNum: function () {
+ // TODO refactor, limit is not valid for non-standard projections
+ return Math.pow(2, this._getZoomForUrl());
+ },
+
+ _adjustTilePoint: function (tilePoint) {
+
+ var limit = this._getWrapTileNum();
+
+ // wrap tile coordinates
+ if (!this.options.continuousWorld && !this.options.noWrap) {
+ tilePoint.x = ((tilePoint.x % limit) + limit) % limit;
+ }
+
+ if (this.options.tms) {
+ tilePoint.y = limit - tilePoint.y - 1;
+ }
+
+ tilePoint.z = this._getZoomForUrl();
+ },
+
+ _getSubdomain: function (tilePoint) {
+ var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
+ return this.options.subdomains[index];
+ },
+
+ _createTileProto: function () {
+ var img = this._tileImg = L.DomUtil.create('img', 'leaflet-tile');
+ img.style.width = img.style.height = this.options.tileSize + 'px';
+ img.galleryimg = 'no';
+ },
+
+ _getTile: function () {
+ if (this.options.reuseTiles && this._unusedTiles.length > 0) {
+ var tile = this._unusedTiles.pop();
+ this._resetTile(tile);
+ return tile;
+ }
+ return this._createTile();
+ },
+
+ // Override if data stored on a tile needs to be cleaned up before reuse
+ _resetTile: function (/*tile*/) {},
+
+ _createTile: function () {
+ var tile = this._tileImg.cloneNode(false);
+ tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+
+ if (L.Browser.ielt9 && this.options.opacity !== undefined) {
+ L.DomUtil.setOpacity(tile, this.options.opacity);
+ }
+ return tile;
+ },
+
+ _loadTile: function (tile, tilePoint) {
+ tile._layer = this;
+ tile.onload = this._tileOnLoad;
+ tile.onerror = this._tileOnError;
+
+ this._adjustTilePoint(tilePoint);
+ tile.src = this.getTileUrl(tilePoint);
+ },
+
+ _tileLoaded: function () {
+ this._tilesToLoad--;
+ if (!this._tilesToLoad) {
+ this.fire('load');
+
+ if (this._animated) {
+ // clear scaled tiles after all new tiles are loaded (for performance)
+ clearTimeout(this._clearBgBufferTimer);
+ this._clearBgBufferTimer = setTimeout(L.bind(this._clearBgBuffer, this), 500);
+ }
+ }
+ },
+
+ _tileOnLoad: function () {
+ var layer = this._layer;
+
+ //Only if we are loading an actual image
+ if (this.src !== L.Util.emptyImageUrl) {
+ L.DomUtil.addClass(this, 'leaflet-tile-loaded');
+
+ layer.fire('tileload', {
+ tile: this,
+ url: this.src
+ });
+ }
+
+ layer._tileLoaded();
+ },
+
+ _tileOnError: function () {
+ var layer = this._layer;
+
+ layer.fire('tileerror', {
+ tile: this,
+ url: this.src
+ });
+
+ var newUrl = layer.options.errorTileUrl;
+ if (newUrl) {
+ this.src = newUrl;
+ }
+
+ layer._tileLoaded();
+ }
+});
+
+L.tileLayer = function (url, options) {
+ return new L.TileLayer(url, options);
+};
-L.Map = L.Class.extend({
- includes: L.Mixin.Events,
+/*
+ * L.TileLayer.WMS is used for putting WMS tile layers on the map.
+ */
+
+L.TileLayer.WMS = L.TileLayer.extend({
+
+ defaultWmsParams: {
+ service: 'WMS',
+ request: 'GetMap',
+ version: '1.1.1',
+ layers: '',
+ styles: '',
+ format: 'image/jpeg',
+ transparent: false
+ },
+
+ initialize: function (url, options) { // (String, Object)
+
+ this._url = url;
+
+ var wmsParams = L.extend({}, this.defaultWmsParams),
+ tileSize = options.tileSize || this.options.tileSize;
+
+ if (options.detectRetina && L.Browser.retina) {
+ wmsParams.width = wmsParams.height = tileSize * 2;
+ } else {
+ wmsParams.width = wmsParams.height = tileSize;
+ }
+
+ for (var i in options) {
+ // all keys that are not TileLayer options go to WMS params
+ if (!this.options.hasOwnProperty(i) && i !== 'crs') {
+ wmsParams[i] = options[i];
+ }
+ }
+
+ this.wmsParams = wmsParams;
+
+ L.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+
+ this._crs = this.options.crs || map.options.crs;
+
+ var projectionKey = parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs';
+ this.wmsParams[projectionKey] = this._crs.code;
+
+ L.TileLayer.prototype.onAdd.call(this, map);
+ },
+
+ getTileUrl: function (tilePoint, zoom) { // (Point, Number) -> String
+
+ var map = this._map,
+ tileSize = this.options.tileSize,
+
+ nwPoint = tilePoint.multiplyBy(tileSize),
+ sePoint = nwPoint.add([tileSize, tileSize]),
+
+ nw = this._crs.project(map.unproject(nwPoint, zoom)),
+ se = this._crs.project(map.unproject(sePoint, zoom)),
+
+ bbox = [nw.x, se.y, se.x, nw.y].join(','),
+
+ url = L.Util.template(this._url, {s: this._getSubdomain(tilePoint)});
+
+ return url + L.Util.getParamString(this.wmsParams, url, true) + '&BBOX=' + bbox;
+ },
+
+ setParams: function (params, noRedraw) {
+
+ L.extend(this.wmsParams, params);
+
+ if (!noRedraw) {
+ this.redraw();
+ }
+
+ return this;
+ }
+});
+
+L.tileLayer.wms = function (url, options) {
+ return new L.TileLayer.WMS(url, options);
+};
- options: {
- crs: L.CRS.EPSG3857,
- /*
- center: LatLng,
- zoom: Number,
- layers: Array,
- */
+/*
+ * L.TileLayer.Canvas is a class that you can use as a base for creating
+ * dynamically drawn Canvas-based tile layers.
+ */
+
+L.TileLayer.Canvas = L.TileLayer.extend({
+ options: {
+ async: false
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ redraw: function () {
+ for (var i in this._tiles) {
+ this._redrawTile(this._tiles[i]);
+ }
+ return this;
+ },
+
+ _redrawTile: function (tile) {
+ this.drawTile(tile, tile._tilePoint, this._map._zoom);
+ },
+
+ _createTileProto: function () {
+ var proto = this._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');
+ proto.width = proto.height = this.options.tileSize;
+ },
+
+ _createTile: function () {
+ var tile = this._canvasProto.cloneNode(false);
+ tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+ return tile;
+ },
+
+ _loadTile: function (tile, tilePoint) {
+ tile._layer = this;
+ tile._tilePoint = tilePoint;
+
+ this._redrawTile(tile);
+
+ if (!this.options.async) {
+ this.tileDrawn(tile);
+ }
+ },
+
+ drawTile: function (/*tile, tilePoint*/) {
+ // override with rendering code
+ },
+
+ tileDrawn: function (tile) {
+ this._tileOnLoad.call(tile);
+ }
+});
+
+
+L.tileLayer.canvas = function (options) {
+ return new L.TileLayer.Canvas(options);
+};
- fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android23,
- trackResize: true,
- markerZoomAnimation: L.DomUtil.TRANSITION && L.Browser.any3d
- },
- initialize: function (id, options) { // (HTMLElement or String, Object)
- options = L.setOptions(this, options);
+/*
+ * L.ImageOverlay is used to overlay images over the map (to specific geographical bounds).
+ */
+
+L.ImageOverlay = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ opacity: 1
+ },
+
+ initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
+ this._url = url;
+ this._bounds = L.latLngBounds(bounds);
+
+ L.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._image) {
+ this._initImage();
+ }
+
+ map._panes.overlayPane.appendChild(this._image);
+
+ map.on('viewreset', this._reset, this);
+
+ if (map.options.zoomAnimation && L.Browser.any3d) {
+ map.on('zoomanim', this._animateZoom, this);
+ }
+
+ this._reset();
+ },
+
+ onRemove: function (map) {
+ map.getPanes().overlayPane.removeChild(this._image);
+
+ map.off('viewreset', this._reset, this);
+
+ if (map.options.zoomAnimation) {
+ map.off('zoomanim', this._animateZoom, this);
+ }
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+ this._updateOpacity();
+ return this;
+ },
+
+ // TODO remove bringToFront/bringToBack duplication from TileLayer/Path
+ bringToFront: function () {
+ if (this._image) {
+ this._map._panes.overlayPane.appendChild(this._image);
+ }
+ return this;
+ },
+
+ bringToBack: function () {
+ var pane = this._map._panes.overlayPane;
+ if (this._image) {
+ pane.insertBefore(this._image, pane.firstChild);
+ }
+ return this;
+ },
+
+ _initImage: function () {
+ this._image = L.DomUtil.create('img', 'leaflet-image-layer');
+
+ if (this._map.options.zoomAnimation && L.Browser.any3d) {
+ L.DomUtil.addClass(this._image, 'leaflet-zoom-animated');
+ } else {
+ L.DomUtil.addClass(this._image, 'leaflet-zoom-hide');
+ }
+
+ this._updateOpacity();
+
+ //TODO createImage util method to remove duplication
+ L.extend(this._image, {
+ galleryimg: 'no',
+ onselectstart: L.Util.falseFn,
+ onmousemove: L.Util.falseFn,
+ onload: L.bind(this._onImageLoad, this),
+ src: this._url
+ });
+ },
+
+ _animateZoom: function (e) {
+ var map = this._map,
+ image = this._image,
+ scale = map.getZoomScale(e.zoom),
+ nw = this._bounds.getNorthWest(),
+ se = this._bounds.getSouthEast(),
+
+ topLeft = map._latLngToNewLayerPoint(nw, e.zoom, e.center),
+ size = map._latLngToNewLayerPoint(se, e.zoom, e.center)._subtract(topLeft),
+ origin = topLeft._add(size._multiplyBy((1 / 2) * (1 - 1 / scale)));
+
+ image.style[L.DomUtil.TRANSFORM] =
+ L.DomUtil.getTranslateString(origin) + ' scale(' + scale + ') ';
+ },
+
+ _reset: function () {
+ var image = this._image,
+ topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
+ size = this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft);
+
+ L.DomUtil.setPosition(image, topLeft);
+
+ image.style.width = size.x + 'px';
+ image.style.height = size.y + 'px';
+ },
+
+ _onImageLoad: function () {
+ this.fire('load');
+ },
+
+ _updateOpacity: function () {
+ L.DomUtil.setOpacity(this._image, this.options.opacity);
+ }
+});
+
+L.imageOverlay = function (url, bounds, options) {
+ return new L.ImageOverlay(url, bounds, options);
+};
- this._initContainer(id);
- this._initLayout();
- this.callInitHooks();
- this._initEvents();
- if (options.maxBounds) {
- this.setMaxBounds(options.maxBounds);
- }
+/*
+ * L.Icon is an image-based icon class that you can use with L.Marker for custom markers.
+ */
+
+L.Icon = L.Class.extend({
+ options: {
+ /*
+ iconUrl: (String) (required)
+ iconRetinaUrl: (String) (optional, used for retina devices if detected)
+ iconSize: (Point) (can be set through CSS)
+ iconAnchor: (Point) (centered by default, can be set in CSS with negative margins)
+ popupAnchor: (Point) (if not specified, popup opens in the anchor point)
+ shadowUrl: (String) (no shadow by default)
+ shadowRetinaUrl: (String) (optional, used for retina devices if detected)
+ shadowSize: (Point)
+ shadowAnchor: (Point)
+ */
+ className: ''
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ createIcon: function (oldIcon) {
+ return this._createIcon('icon', oldIcon);
+ },
+
+ createShadow: function (oldIcon) {
+ return this._createIcon('shadow', oldIcon);
+ },
+
+ _createIcon: function (name, oldIcon) {
+ var src = this._getIconUrl(name);
+
+ if (!src) {
+ if (name === 'icon') {
+ throw new Error('iconUrl not set in Icon options (see the docs).');
+ }
+ return null;
+ }
+
+ var img;
+ if (!oldIcon || oldIcon.tagName !== 'IMG') {
+ img = this._createImg(src);
+ } else {
+ img = this._createImg(src, oldIcon);
+ }
+ this._setIconStyles(img, name);
+
+ return img;
+ },
+
+ _setIconStyles: function (img, name) {
+ var options = this.options,
+ size = L.point(options[name + 'Size']),
+ anchor;
+
+ if (name === 'shadow') {
+ anchor = L.point(options.shadowAnchor || options.iconAnchor);
+ } else {
+ anchor = L.point(options.iconAnchor);
+ }
+
+ if (!anchor && size) {
+ anchor = size.divideBy(2, true);
+ }
+
+ img.className = 'leaflet-marker-' + name + ' ' + options.className;
+
+ if (anchor) {
+ img.style.marginLeft = (-anchor.x) + 'px';
+ img.style.marginTop = (-anchor.y) + 'px';
+ }
+
+ if (size) {
+ img.style.width = size.x + 'px';
+ img.style.height = size.y + 'px';
+ }
+ },
+
+ _createImg: function (src, el) {
+
+ if (!L.Browser.ie6) {
+ if (!el) {
+ el = document.createElement('img');
+ }
+ el.src = src;
+ } else {
+ if (!el) {
+ el = document.createElement('div');
+ }
+ el.style.filter =
+ 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '")';
+ }
+ return el;
+ },
+
+ _getIconUrl: function (name) {
+ if (L.Browser.retina && this.options[name + 'RetinaUrl']) {
+ return this.options[name + 'RetinaUrl'];
+ }
+ return this.options[name + 'Url'];
+ }
+});
+
+L.icon = function (options) {
+ return new L.Icon(options);
+};
- if (options.center && options.zoom !== undefined) {
- this.setView(L.latLng(options.center), options.zoom, true);
- }
- this._initLayers(options.layers);
- },
-
-
- // public methods that modify map state
-
- // replaced by animation-powered implementation in Map.PanAnimation.js
- setView: function (center, zoom) {
- this._resetView(L.latLng(center), this._limitZoom(zoom));
- return this;
- },
-
- setZoom: function (zoom) { // (Number)
- return this.setView(this.getCenter(), zoom);
- },
-
- zoomIn: function (delta) {
- return this.setZoom(this._zoom + (delta || 1));
- },
-
- zoomOut: function (delta) {
- return this.setZoom(this._zoom - (delta || 1));
- },
-
- fitBounds: function (bounds) { // (LatLngBounds)
- var zoom = this.getBoundsZoom(bounds);
- return this.setView(L.latLngBounds(bounds).getCenter(), zoom);
- },
-
- fitWorld: function () {
- var sw = new L.LatLng(-60, -170),
- ne = new L.LatLng(85, 179);
-
- return this.fitBounds(new L.LatLngBounds(sw, ne));
- },
-
- panTo: function (center) { // (LatLng)
- return this.setView(center, this._zoom);
- },
-
- panBy: function (offset) { // (Point)
- // replaced with animated panBy in Map.Animation.js
- this.fire('movestart');
-
- this._rawPanBy(L.point(offset));
-
- this.fire('move');
- return this.fire('moveend');
- },
-
- setMaxBounds: function (bounds) {
- bounds = L.latLngBounds(bounds);
-
- this.options.maxBounds = bounds;
-
- if (!bounds) {
- this._boundsMinZoom = null;
- return this;
- }
-
- var minZoom = this.getBoundsZoom(bounds, true);
-
- this._boundsMinZoom = minZoom;
-
- if (this._loaded) {
- if (this._zoom < minZoom) {
- this.setView(bounds.getCenter(), minZoom);
- } else {
- this.panInsideBounds(bounds);
- }
- }
-
- return this;
- },
-
- panInsideBounds: function (bounds) {
- bounds = L.latLngBounds(bounds);
-
- var viewBounds = this.getBounds(),
- viewSw = this.project(viewBounds.getSouthWest()),
- viewNe = this.project(viewBounds.getNorthEast()),
- sw = this.project(bounds.getSouthWest()),
- ne = this.project(bounds.getNorthEast()),
- dx = 0,
- dy = 0;
-
- if (viewNe.y < ne.y) { // north
- dy = ne.y - viewNe.y;
- }
- if (viewNe.x > ne.x) { // east
- dx = ne.x - viewNe.x;
- }
- if (viewSw.y > sw.y) { // south
- dy = sw.y - viewSw.y;
- }
- if (viewSw.x < sw.x) { // west
- dx = sw.x - viewSw.x;
- }
-
- return this.panBy(new L.Point(dx, dy, true));
- },
-
- addLayer: function (layer) {
- // TODO method is too big, refactor
-
- var id = L.stamp(layer);
-
- if (this._layers[id]) { return this; }
-
- this._layers[id] = layer;
-
- // TODO getMaxZoom, getMinZoom in ILayer (instead of options)
- if (layer.options && (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom))) {
- this._zoomBoundLayers[id] = layer;
- this._updateZoomLevels();
- }
-
- // TODO looks ugly, refactor!!!
- if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
- this._tileLayersNum++;
- this._tileLayersToLoad++;
- layer.on('load', this._onTileLayerLoad, this);
- }
-
- this.whenReady(function () {
- layer.onAdd(this);
- this.fire('layeradd', {layer: layer});
- }, this);
-
- return this;
- },
-
- removeLayer: function (layer) {
- var id = L.stamp(layer);
-
- if (!this._layers[id]) { return; }
-
- layer.onRemove(this);
-
- delete this._layers[id];
- if (this._zoomBoundLayers[id]) {
- delete this._zoomBoundLayers[id];
- this._updateZoomLevels();
- }
-
- // TODO looks ugly, refactor
- if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
- this._tileLayersNum--;
- this._tileLayersToLoad--;
- layer.off('load', this._onTileLayerLoad, this);
- }
-
- return this.fire('layerremove', {layer: layer});
- },
-
- hasLayer: function (layer) {
- var id = L.stamp(layer);
- return this._layers.hasOwnProperty(id);
- },
-
- invalidateSize: function (animate) {
- var oldSize = this.getSize();
-
- this._sizeChanged = true;
-
- if (this.options.maxBounds) {
- this.setMaxBounds(this.options.maxBounds);
- }
-
- if (!this._loaded) { return this; }
-
- var offset = oldSize._subtract(this.getSize())._divideBy(2)._round();
-
- if (animate === true) {
- this.panBy(offset);
- } else {
- this._rawPanBy(offset);
-
- this.fire('move');
-
- clearTimeout(this._sizeTimer);
- this._sizeTimer = setTimeout(L.bind(this.fire, this, 'moveend'), 200);
- }
- return this;
- },
-
- // TODO handler.addTo
- addHandler: function (name, HandlerClass) {
- if (!HandlerClass) { return; }
-
- this[name] = new HandlerClass(this);
-
- if (this.options[name]) {
- this[name].enable();
- }
-
- return this;
- },
-
-
- // public methods for getting map state
-
- getCenter: function () { // (Boolean) -> LatLng
- return this.layerPointToLatLng(this._getCenterLayerPoint());
- },
-
- getZoom: function () {
- return this._zoom;
- },
-
- getBounds: function () {
- var bounds = this.getPixelBounds(),
- sw = this.unproject(bounds.getBottomLeft()),
- ne = this.unproject(bounds.getTopRight());
-
- return new L.LatLngBounds(sw, ne);
- },
-
- getMinZoom: function () {
- var z1 = this.options.minZoom || 0,
- z2 = this._layersMinZoom || 0,
- z3 = this._boundsMinZoom || 0;
-
- return Math.max(z1, z2, z3);
- },
-
- getMaxZoom: function () {
- var z1 = this.options.maxZoom === undefined ? Infinity : this.options.maxZoom,
- z2 = this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom;
-
- return Math.min(z1, z2);
- },
-
- getBoundsZoom: function (bounds, inside) { // (LatLngBounds, Boolean) -> Number
- bounds = L.latLngBounds(bounds);
-
- var size = this.getSize(),
- zoom = this.options.minZoom || 0,
- maxZoom = this.getMaxZoom(),
- ne = bounds.getNorthEast(),
- sw = bounds.getSouthWest(),
- boundsSize,
- nePoint,
- swPoint,
- zoomNotFound = true;
-
- if (inside) {
- zoom--;
- }
-
- do {
- zoom++;
- nePoint = this.project(ne, zoom);
- swPoint = this.project(sw, zoom);
-
- boundsSize = new L.Point(
- Math.abs(nePoint.x - swPoint.x),
- Math.abs(swPoint.y - nePoint.y));
-
- if (!inside) {
- zoomNotFound = boundsSize.x <= size.x && boundsSize.y <= size.y;
- } else {
- zoomNotFound = boundsSize.x < size.x || boundsSize.y < size.y;
- }
- } while (zoomNotFound && zoom <= maxZoom);
-
- if (zoomNotFound && inside) {
- return null;
- }
-
- return inside ? zoom : zoom - 1;
- },
-
- getSize: function () {
- if (!this._size || this._sizeChanged) {
- this._size = new L.Point(
- this._container.clientWidth,
- this._container.clientHeight);
-
- this._sizeChanged = false;
- }
- return this._size.clone();
- },
-
- getPixelBounds: function () {
- var topLeftPoint = this._getTopLeftPoint();
- return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
- },
-
- getPixelOrigin: function () {
- return this._initialTopLeftPoint;
- },
-
- getPanes: function () {
- return this._panes;
- },
-
- getContainer: function () {
- return this._container;
- },
-
-
- // TODO replace with universal implementation after refactoring projections
-
- getZoomScale: function (toZoom) {
- var crs = this.options.crs;
- return crs.scale(toZoom) / crs.scale(this._zoom);
- },
-
- getScaleZoom: function (scale) {
- return this._zoom + (Math.log(scale) / Math.LN2);
- },
-
-
- // conversion methods
-
- project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
- zoom = zoom === undefined ? this._zoom : zoom;
- return this.options.crs.latLngToPoint(L.latLng(latlng), zoom);
- },
-
- unproject: function (point, zoom) { // (Point[, Number]) -> LatLng
- zoom = zoom === undefined ? this._zoom : zoom;
- return this.options.crs.pointToLatLng(L.point(point), zoom);
- },
-
- layerPointToLatLng: function (point) { // (Point)
- var projectedPoint = L.point(point).add(this._initialTopLeftPoint);
- return this.unproject(projectedPoint);
- },
-
- latLngToLayerPoint: function (latlng) { // (LatLng)
- var projectedPoint = this.project(L.latLng(latlng))._round();
- return projectedPoint._subtract(this._initialTopLeftPoint);
- },
-
- containerPointToLayerPoint: function (point) { // (Point)
- return L.point(point).subtract(this._getMapPanePos());
- },
-
- layerPointToContainerPoint: function (point) { // (Point)
- return L.point(point).add(this._getMapPanePos());
- },
-
- containerPointToLatLng: function (point) {
- var layerPoint = this.containerPointToLayerPoint(L.point(point));
- return this.layerPointToLatLng(layerPoint);
- },
-
- latLngToContainerPoint: function (latlng) {
- return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
- },
-
- mouseEventToContainerPoint: function (e) { // (MouseEvent)
- return L.DomEvent.getMousePosition(e, this._container);
- },
-
- mouseEventToLayerPoint: function (e) { // (MouseEvent)
- return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
- },
-
- mouseEventToLatLng: function (e) { // (MouseEvent)
- return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
- },
-
-
- // map initialization methods
-
- _initContainer: function (id) {
- var container = this._container = L.DomUtil.get(id);
-
- if (container._leaflet) {
- throw new Error("Map container is already initialized.");
- }
-
- container._leaflet = true;
- },
-
- _initLayout: function () {
- var container = this._container;
-
- L.DomUtil.addClass(container, 'leaflet-container');
-
- if (L.Browser.touch) {
- L.DomUtil.addClass(container, 'leaflet-touch');
- }
-
- if (this.options.fadeAnimation) {
- L.DomUtil.addClass(container, 'leaflet-fade-anim');
- }
-
- var position = L.DomUtil.getStyle(container, 'position');
-
- if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
- container.style.position = 'relative';
- }
-
- this._initPanes();
-
- if (this._initControlPos) {
- this._initControlPos();
- }
- },
-
- _initPanes: function () {
- var panes = this._panes = {};
-
- this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
-
- this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
- panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
- panes.shadowPane = this._createPane('leaflet-shadow-pane');
- panes.overlayPane = this._createPane('leaflet-overlay-pane');
- panes.markerPane = this._createPane('leaflet-marker-pane');
- panes.popupPane = this._createPane('leaflet-popup-pane');
-
- var zoomHide = ' leaflet-zoom-hide';
-
- if (!this.options.markerZoomAnimation) {
- L.DomUtil.addClass(panes.markerPane, zoomHide);
- L.DomUtil.addClass(panes.shadowPane, zoomHide);
- L.DomUtil.addClass(panes.popupPane, zoomHide);
- }
- },
-
- _createPane: function (className, container) {
- return L.DomUtil.create('div', className, container || this._panes.objectsPane);
- },
-
- _initLayers: function (layers) {
- layers = layers ? (L.Util.isArray(layers) ? layers : [layers]) : [];
-
- this._layers = {};
- this._zoomBoundLayers = {};
- this._tileLayersNum = 0;
-
- var i, len;
-
- for (i = 0, len = layers.length; i < len; i++) {
- this.addLayer(layers[i]);
- }
- },
-
-
- // private methods that modify map state
-
- _resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
-
- var zoomChanged = (this._zoom !== zoom);
-
- if (!afterZoomAnim) {
- this.fire('movestart');
-
- if (zoomChanged) {
- this.fire('zoomstart');
- }
- }
-
- this._zoom = zoom;
-
- this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
-
- if (!preserveMapOffset) {
- L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
- } else {
- this._initialTopLeftPoint._add(this._getMapPanePos());
- }
-
- this._tileLayersToLoad = this._tileLayersNum;
-
- var loading = !this._loaded;
- this._loaded = true;
-
- this.fire('viewreset', {hard: !preserveMapOffset});
-
- this.fire('move');
-
- if (zoomChanged || afterZoomAnim) {
- this.fire('zoomend');
- }
-
- this.fire('moveend', {hard: !preserveMapOffset});
-
- if (loading) {
- this.fire('load');
- }
- },
-
- _rawPanBy: function (offset) {
- L.DomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
- },
-
- _updateZoomLevels: function () {
- var i,
- minZoom = Infinity,
- maxZoom = -Infinity;
-
- for (i in this._zoomBoundLayers) {
- if (this._zoomBoundLayers.hasOwnProperty(i)) {
- var layer = this._zoomBoundLayers[i];
- if (!isNaN(layer.options.minZoom)) {
- minZoom = Math.min(minZoom, layer.options.minZoom);
- }
- if (!isNaN(layer.options.maxZoom)) {
- maxZoom = Math.max(maxZoom, layer.options.maxZoom);
- }
- }
- }
-
- if (i === undefined) { // we have no tilelayers
- this._layersMaxZoom = this._layersMinZoom = undefined;
- } else {
- this._layersMaxZoom = maxZoom;
- this._layersMinZoom = minZoom;
- }
- },
-
- // map events
-
- _initEvents: function () {
- if (!L.DomEvent) { return; }
-
- L.DomEvent.on(this._container, 'click', this._onMouseClick, this);
-
- var events = ['dblclick', 'mousedown', 'mouseup', 'mouseenter',
- 'mouseleave', 'mousemove', 'contextmenu'],
- i, len;
-
- for (i = 0, len = events.length; i < len; i++) {
- L.DomEvent.on(this._container, events[i], this._fireMouseEvent, this);
- }
-
- if (this.options.trackResize) {
- L.DomEvent.on(window, 'resize', this._onResize, this);
- }
- },
-
- _onResize: function () {
- L.Util.cancelAnimFrame(this._resizeRequest);
- this._resizeRequest = L.Util.requestAnimFrame(
- this.invalidateSize, this, false, this._container);
- },
-
- _onMouseClick: function (e) {
- if (!this._loaded || (this.dragging && this.dragging.moved())) { return; }
-
- this.fire('preclick');
- this._fireMouseEvent(e);
- },
-
- _fireMouseEvent: function (e) {
- if (!this._loaded) { return; }
-
- var type = e.type;
-
- type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
-
- if (!this.hasEventListeners(type)) { return; }
-
- if (type === 'contextmenu') {
- L.DomEvent.preventDefault(e);
- }
-
- var containerPoint = this.mouseEventToContainerPoint(e),
- layerPoint = this.containerPointToLayerPoint(containerPoint),
- latlng = this.layerPointToLatLng(layerPoint);
-
- this.fire(type, {
- latlng: latlng,
- layerPoint: layerPoint,
- containerPoint: containerPoint,
- originalEvent: e
- });
- },
-
- _onTileLayerLoad: function () {
- // TODO super-ugly, refactor!!!
- // clear scaled tiles after all new tiles are loaded (for performance)
- this._tileLayersToLoad--;
- if (this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {
- clearTimeout(this._clearTileBgTimer);
- this._clearTileBgTimer = setTimeout(L.bind(this._clearTileBg, this), 500);
- }
- },
-
- whenReady: function (callback, context) {
- if (this._loaded) {
- callback.call(context || this, this);
- } else {
- this.on('load', callback, context);
- }
- return this;
- },
-
-
- // private methods for getting map state
-
- _getMapPanePos: function () {
- return L.DomUtil.getPosition(this._mapPane);
- },
-
- _getTopLeftPoint: function () {
- if (!this._loaded) {
- throw new Error('Set map center and zoom first.');
- }
-
- return this._initialTopLeftPoint.subtract(this._getMapPanePos());
- },
-
- _getNewTopLeftPoint: function (center, zoom) {
- var viewHalf = this.getSize()._divideBy(2);
- // TODO round on display, not calculation to increase precision?
- return this.project(center, zoom)._subtract(viewHalf)._round();
- },
-
- _latLngToNewLayerPoint: function (latlng, newZoom, newCenter) {
- var topLeft = this._getNewTopLeftPoint(newCenter, newZoom).add(this._getMapPanePos());
- return this.project(latlng, newZoom)._subtract(topLeft);
- },
-
- _getCenterLayerPoint: function () {
- return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
- },
-
- _getCenterOffset: function (center) {
- return this.latLngToLayerPoint(center).subtract(this._getCenterLayerPoint());
- },
-
- _limitZoom: function (zoom) {
- var min = this.getMinZoom(),
- max = this.getMaxZoom();
-
- return Math.max(min, Math.min(max, zoom));
- }
-});
-
-L.map = function (id, options) {
- return new L.Map(id, options);
-};
-
-
/*
- * Mercator projection that takes into account that the Earth is not a perfect sphere.
- * Less popular than spherical mercator; used by projections like EPSG:3395.
- */
-
-L.Projection.Mercator = {
- MAX_LATITUDE: 85.0840591556,
-
- R_MINOR: 6356752.3142,
- R_MAJOR: 6378137,
-
- project: function (latlng) { // (LatLng) -> Point
- var d = L.LatLng.DEG_TO_RAD,
- max = this.MAX_LATITUDE,
- lat = Math.max(Math.min(max, latlng.lat), -max),
- r = this.R_MAJOR,
- r2 = this.R_MINOR,
- x = latlng.lng * d * r,
- y = lat * d,
- tmp = r2 / r,
- eccent = Math.sqrt(1.0 - tmp * tmp),
- con = eccent * Math.sin(y);
-
- con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
-
- var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
- y = -r2 * Math.log(ts);
-
- return new L.Point(x, y);
- },
-
- unproject: function (point) { // (Point, Boolean) -> LatLng
- var d = L.LatLng.RAD_TO_DEG,
- r = this.R_MAJOR,
- r2 = this.R_MINOR,
- lng = point.x * d / r,
- tmp = r2 / r,
- eccent = Math.sqrt(1 - (tmp * tmp)),
- ts = Math.exp(- point.y / r2),
- phi = (Math.PI / 2) - 2 * Math.atan(ts),
- numIter = 15,
- tol = 1e-7,
- i = numIter,
- dphi = 0.1,
- con;
-
- while ((Math.abs(dphi) > tol) && (--i > 0)) {
- con = eccent * Math.sin(phi);
- dphi = (Math.PI / 2) - 2 * Math.atan(ts *
- Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
- phi += dphi;
- }
-
- return new L.LatLng(phi * d, lng);
- }
-};
-
-
-
-L.CRS.EPSG3395 = L.extend({}, L.CRS, {
- code: 'EPSG:3395',
-
- projection: L.Projection.Mercator,
-
- transformation: (function () {
- var m = L.Projection.Mercator,
- r = m.R_MAJOR,
- r2 = m.R_MINOR;
-
- return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
- }())
-});
-
-
-/*
- * L.TileLayer is used for standard xyz-numbered tile layers.
- */
-
-L.TileLayer = L.Class.extend({
- includes: L.Mixin.Events,
-
- options: {
- minZoom: 0,
- maxZoom: 18,
- tileSize: 256,
- subdomains: 'abc',
- errorTileUrl: '',
- attribution: '',
- zoomOffset: 0,
- opacity: 1,
- /* (undefined works too)
- zIndex: null,
- tms: false,
- continuousWorld: false,
- noWrap: false,
- zoomReverse: false,
- detectRetina: false,
- reuseTiles: false,
- */
- unloadInvisibleTiles: L.Browser.mobile,
- updateWhenIdle: L.Browser.mobile
- },
-
- initialize: function (url, options) {
- options = L.setOptions(this, options);
-
- // detecting retina displays, adjusting tileSize and zoom levels
- if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) {
-
- options.tileSize = Math.floor(options.tileSize / 2);
- options.zoomOffset++;
-
- if (options.minZoom > 0) {
- options.minZoom--;
- }
- this.options.maxZoom--;
- }
-
- this._url = url;
-
- var subdomains = this.options.subdomains;
-
- if (typeof subdomains === 'string') {
- this.options.subdomains = subdomains.split('');
- }
- },
-
- onAdd: function (map) {
- this._map = map;
-
- // create a container div for tiles
- this._initContainer();
-
- // create an image to clone for tiles
- this._createTileProto();
-
- // set up events
- map.on({
- 'viewreset': this._resetCallback,
- 'moveend': this._update
- }, this);
-
- if (!this.options.updateWhenIdle) {
- this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
- map.on('move', this._limitedUpdate, this);
- }
-
- this._reset();
- this._update();
- },
-
- addTo: function (map) {
- map.addLayer(this);
- return this;
- },
-
- onRemove: function (map) {
- this._container.parentNode.removeChild(this._container);
-
- map.off({
- 'viewreset': this._resetCallback,
- 'moveend': this._update
- }, this);
-
- if (!this.options.updateWhenIdle) {
- map.off('move', this._limitedUpdate, this);
- }
-
- this._container = null;
- this._map = null;
- },
-
- bringToFront: function () {
- var pane = this._map._panes.tilePane;
-
- if (this._container) {
- pane.appendChild(this._container);
- this._setAutoZIndex(pane, Math.max);
- }
-
- return this;
- },
-
- bringToBack: function () {
- var pane = this._map._panes.tilePane;
-
- if (this._container) {
- pane.insertBefore(this._container, pane.firstChild);
- this._setAutoZIndex(pane, Math.min);
- }
-
- return this;
- },
-
- getAttribution: function () {
- return this.options.attribution;
- },
-
- setOpacity: function (opacity) {
- this.options.opacity = opacity;
-
- if (this._map) {
- this._updateOpacity();
- }
-
- return this;
- },
-
- setZIndex: function (zIndex) {
- this.options.zIndex = zIndex;
- this._updateZIndex();
-
- return this;
- },
-
- setUrl: function (url, noRedraw) {
- this._url = url;
-
- if (!noRedraw) {
- this.redraw();
- }
-
- return this;
- },
-
- redraw: function () {
- if (this._map) {
- this._map._panes.tilePane.empty = false;
- this._reset(true);
- this._update();
- }
- return this;
- },
-
- _updateZIndex: function () {
- if (this._container && this.options.zIndex !== undefined) {
- this._container.style.zIndex = this.options.zIndex;
- }
- },
-
- _setAutoZIndex: function (pane, compare) {
-
- var layers = pane.children,
- edgeZIndex = -compare(Infinity, -Infinity), // -Infinity for max, Infinity for min
- zIndex, i, len;
-
- for (i = 0, len = layers.length; i < len; i++) {
-
- if (layers[i] !== this._container) {
- zIndex = parseInt(layers[i].style.zIndex, 10);
-
- if (!isNaN(zIndex)) {
- edgeZIndex = compare(edgeZIndex, zIndex);
- }
- }
- }
-
- this.options.zIndex = this._container.style.zIndex =
- (isFinite(edgeZIndex) ? edgeZIndex : 0) + compare(1, -1);
- },
-
- _updateOpacity: function () {
- L.DomUtil.setOpacity(this._container, this.options.opacity);
-
- // stupid webkit hack to force redrawing of tiles
- var i,
- tiles = this._tiles;
-
- if (L.Browser.webkit) {
- for (i in tiles) {
- if (tiles.hasOwnProperty(i)) {
- tiles[i].style.webkitTransform += ' translate(0,0)';
- }
- }
- }
- },
-
- _initContainer: function () {
- var tilePane = this._map._panes.tilePane;
-
- if (!this._container || tilePane.empty) {
- this._container = L.DomUtil.create('div', 'leaflet-layer');
-
- this._updateZIndex();
-
- tilePane.appendChild(this._container);
-
- if (this.options.opacity < 1) {
- this._updateOpacity();
- }
- }
- },
-
- _resetCallback: function (e) {
- this._reset(e.hard);
- },
-
- _reset: function (clearOldContainer) {
- var tiles = this._tiles;
-
- for (var key in tiles) {
- if (tiles.hasOwnProperty(key)) {
- this.fire('tileunload', {tile: tiles[key]});
- }
- }
-
- this._tiles = {};
- this._tilesToLoad = 0;
-
- if (this.options.reuseTiles) {
- this._unusedTiles = [];
- }
-
- if (clearOldContainer && this._container) {
- this._container.innerHTML = "";
- }
-
- this._initContainer();
- },
-
- _update: function () {
-
- if (!this._map) { return; }
-
- var bounds = this._map.getPixelBounds(),
- zoom = this._map.getZoom(),
- tileSize = this.options.tileSize;
-
- if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {
- return;
- }
-
- var nwTilePoint = new L.Point(
- Math.floor(bounds.min.x / tileSize),
- Math.floor(bounds.min.y / tileSize)),
-
- seTilePoint = new L.Point(
- Math.floor(bounds.max.x / tileSize),
- Math.floor(bounds.max.y / tileSize)),
-
- tileBounds = new L.Bounds(nwTilePoint, seTilePoint);
-
- this._addTilesFromCenterOut(tileBounds);
-
- if (this.options.unloadInvisibleTiles || this.options.reuseTiles) {
- this._removeOtherTiles(tileBounds);
- }
- },
-
- _addTilesFromCenterOut: function (bounds) {
- var queue = [],
- center = bounds.getCenter();
-
- var j, i, point;
-
- for (j = bounds.min.y; j <= bounds.max.y; j++) {
- for (i = bounds.min.x; i <= bounds.max.x; i++) {
- point = new L.Point(i, j);
-
- if (this._tileShouldBeLoaded(point)) {
- queue.push(point);
- }
- }
- }
-
- var tilesToLoad = queue.length;
-
- if (tilesToLoad === 0) { return; }
-
- // load tiles in order of their distance to center
- queue.sort(function (a, b) {
- return a.distanceTo(center) - b.distanceTo(center);
- });
-
- var fragment = document.createDocumentFragment();
-
- // if its the first batch of tiles to load
- if (!this._tilesToLoad) {
- this.fire('loading');
- }
-
- this._tilesToLoad += tilesToLoad;
-
- for (i = 0; i < tilesToLoad; i++) {
- this._addTile(queue[i], fragment);
- }
-
- this._container.appendChild(fragment);
- },
-
- _tileShouldBeLoaded: function (tilePoint) {
- if ((tilePoint.x + ':' + tilePoint.y) in this._tiles) {
- return false; // already loaded
- }
-
- if (!this.options.continuousWorld) {
- var limit = this._getWrapTileNum();
-
- if (this.options.noWrap && (tilePoint.x < 0 || tilePoint.x >= limit) ||
- tilePoint.y < 0 || tilePoint.y >= limit) {
- return false; // exceeds world bounds
- }
- }
-
- return true;
- },
-
- _removeOtherTiles: function (bounds) {
- var kArr, x, y, key;
-
- for (key in this._tiles) {
- if (this._tiles.hasOwnProperty(key)) {
- kArr = key.split(':');
- x = parseInt(kArr[0], 10);
- y = parseInt(kArr[1], 10);
-
- // remove tile if it's out of bounds
- if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
- this._removeTile(key);
- }
- }
- }
- },
-
- _removeTile: function (key) {
- var tile = this._tiles[key];
-
- this.fire("tileunload", {tile: tile, url: tile.src});
-
- if (this.options.reuseTiles) {
- L.DomUtil.removeClass(tile, 'leaflet-tile-loaded');
- this._unusedTiles.push(tile);
-
- } else if (tile.parentNode === this._container) {
- this._container.removeChild(tile);
- }
-
- // for https://github.com/CloudMade/Leaflet/issues/137
- if (!L.Browser.android) {
- tile.src = L.Util.emptyImageUrl;
- }
-
- delete this._tiles[key];
- },
-
- _addTile: function (tilePoint, container) {
- var tilePos = this._getTilePos(tilePoint);
-
- // get unused tile - or create a new tile
- var tile = this._getTile();
-
- /*
- Chrome 20 layouts much faster with top/left (verify with timeline, frames)
- Android 4 browser has display issues with top/left and requires transform instead
- Android 3 browser not tested
- Android 2 browser requires top/left or tiles disappear on load or first drag
- (reappear after zoom) https://github.com/CloudMade/Leaflet/issues/866
- (other browsers don't currently care) - see debug/hacks/jitter.html for an example
- */
- L.DomUtil.setPosition(tile, tilePos, L.Browser.chrome || L.Browser.android23);
-
- this._tiles[tilePoint.x + ':' + tilePoint.y] = tile;
-
- this._loadTile(tile, tilePoint);
-
- if (tile.parentNode !== this._container) {
- container.appendChild(tile);
- }
- },
-
- _getZoomForUrl: function () {
-
- var options = this.options,
- zoom = this._map.getZoom();
-
- if (options.zoomReverse) {
- zoom = options.maxZoom - zoom;
- }
-
- return zoom + options.zoomOffset;
- },
-
- _getTilePos: function (tilePoint) {
- var origin = this._map.getPixelOrigin(),
- tileSize = this.options.tileSize;
-
- return tilePoint.multiplyBy(tileSize).subtract(origin);
- },
-
- // image-specific code (override to implement e.g. Canvas or SVG tile layer)
-
- getTileUrl: function (tilePoint) {
- this._adjustTilePoint(tilePoint);
-
- return L.Util.template(this._url, L.extend({
- s: this._getSubdomain(tilePoint),
- z: this._getZoomForUrl(),
- x: tilePoint.x,
- y: tilePoint.y
- }, this.options));
- },
-
- _getWrapTileNum: function () {
- // TODO refactor, limit is not valid for non-standard projections
- return Math.pow(2, this._getZoomForUrl());
- },
-
- _adjustTilePoint: function (tilePoint) {
-
- var limit = this._getWrapTileNum();
-
- // wrap tile coordinates
- if (!this.options.continuousWorld && !this.options.noWrap) {
- tilePoint.x = ((tilePoint.x % limit) + limit) % limit;
- }
-
- if (this.options.tms) {
- tilePoint.y = limit - tilePoint.y - 1;
- }
- },
-
- _getSubdomain: function (tilePoint) {
- var index = (tilePoint.x + tilePoint.y) % this.options.subdomains.length;
- return this.options.subdomains[index];
- },
-
- _createTileProto: function () {
- var img = this._tileImg = L.DomUtil.create('img', 'leaflet-tile');
- img.style.width = img.style.height = this.options.tileSize + 'px';
- img.galleryimg = 'no';
- },
-
- _getTile: function () {
- if (this.options.reuseTiles && this._unusedTiles.length > 0) {
- var tile = this._unusedTiles.pop();
- this._resetTile(tile);
- return tile;
- }
- return this._createTile();
- },
-
- // Override if data stored on a tile needs to be cleaned up before reuse
- _resetTile: function (/*tile*/) {},
-
- _createTile: function () {
- var tile = this._tileImg.cloneNode(false);
- tile.onselectstart = tile.onmousemove = L.Util.falseFn;
- return tile;
- },
-
- _loadTile: function (tile, tilePoint) {
- tile._layer = this;
- tile.onload = this._tileOnLoad;
- tile.onerror = this._tileOnError;
-
- tile.src = this.getTileUrl(tilePoint);
- },
-
- _tileLoaded: function () {
- this._tilesToLoad--;
- if (!this._tilesToLoad) {
- this.fire('load');
- }
- },
-
- _tileOnLoad: function () {
- var layer = this._layer;
-
- //Only if we are loading an actual image
- if (this.src !== L.Util.emptyImageUrl) {
- L.DomUtil.addClass(this, 'leaflet-tile-loaded');
-
- layer.fire('tileload', {
- tile: this,
- url: this.src
- });
- }
-
- layer._tileLoaded();
- },
-
- _tileOnError: function () {
- var layer = this._layer;
-
- layer.fire('tileerror', {
- tile: this,
- url: this.src
- });
-
- var newUrl = layer.options.errorTileUrl;
- if (newUrl) {
- this.src = newUrl;
- }
-
- layer._tileLoaded();
- }
-});
-
-L.tileLayer = function (url, options) {
- return new L.TileLayer(url, options);
-};
-
-
-/*
- * L.TileLayer.WMS is used for putting WMS tile layers on the map.
- */
-
-L.TileLayer.WMS = L.TileLayer.extend({
-
- defaultWmsParams: {
- service: 'WMS',
- request: 'GetMap',
- version: '1.1.1',
- layers: '',
- styles: '',
- format: 'image/jpeg',
- transparent: false
- },
-
- initialize: function (url, options) { // (String, Object)
-
- this._url = url;
-
- var wmsParams = L.extend({}, this.defaultWmsParams);
-
- if (options.detectRetina && L.Browser.retina) {
- wmsParams.width = wmsParams.height = this.options.tileSize * 2;
- } else {
- wmsParams.width = wmsParams.height = this.options.tileSize;
- }
-
- for (var i in options) {
- // all keys that are not TileLayer options go to WMS params
- if (!this.options.hasOwnProperty(i)) {
- wmsParams[i] = options[i];
- }
- }
-
- this.wmsParams = wmsParams;
-
- L.setOptions(this, options);
- },
-
- onAdd: function (map) {
-
- var projectionKey = parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs';
- this.wmsParams[projectionKey] = map.options.crs.code;
-
- L.TileLayer.prototype.onAdd.call(this, map);
- },
-
- getTileUrl: function (tilePoint, zoom) { // (Point, Number) -> String
-
- this._adjustTilePoint(tilePoint);
-
- var map = this._map,
- crs = map.options.crs,
- tileSize = this.options.tileSize,
-
- nwPoint = tilePoint.multiplyBy(tileSize),
- sePoint = nwPoint.add(new L.Point(tileSize, tileSize)),
-
- nw = crs.project(map.unproject(nwPoint, zoom)),
- se = crs.project(map.unproject(sePoint, zoom)),
-
- bbox = [nw.x, se.y, se.x, nw.y].join(','),
-
- url = L.Util.template(this._url, {s: this._getSubdomain(tilePoint)});
-
- return url + L.Util.getParamString(this.wmsParams, url) + "&bbox=" + bbox;
- },
-
- setParams: function (params, noRedraw) {
-
- L.extend(this.wmsParams, params);
-
- if (!noRedraw) {
- this.redraw();
- }
-
- return this;
- }
-});
-
-L.tileLayer.wms = function (url, options) {
- return new L.TileLayer.WMS(url, options);
-};
-
-
-/*
- * L.TileLayer.Canvas is a class that you can use as a base for creating
- * dynamically drawn Canvas-based tile layers.
- */
-
-L.TileLayer.Canvas = L.TileLayer.extend({
- options: {
- async: false
- },
-
- initialize: function (options) {
- L.setOptions(this, options);
- },
-
- redraw: function () {
- var tiles = this._tiles;
-
- for (var i in tiles) {
- if (tiles.hasOwnProperty(i)) {
- this._redrawTile(tiles[i]);
- }
- }
- },
-
- _redrawTile: function (tile) {
- this.drawTile(tile, tile._tilePoint, this._map._zoom);
- },
-
- _createTileProto: function () {
- var proto = this._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');
- proto.width = proto.height = this.options.tileSize;
- },
-
- _createTile: function () {
- var tile = this._canvasProto.cloneNode(false);
- tile.onselectstart = tile.onmousemove = L.Util.falseFn;
- return tile;
- },
-
- _loadTile: function (tile, tilePoint) {
- tile._layer = this;
- tile._tilePoint = tilePoint;
-
- this._redrawTile(tile);
-
- if (!this.options.async) {
- this.tileDrawn(tile);
- }
- },
-
- drawTile: function (/*tile, tilePoint*/) {
- // override with rendering code
- },
-
- tileDrawn: function (tile) {
- this._tileOnLoad.call(tile);
- }
-});
-
-
-L.tileLayer.canvas = function (options) {
- return new L.TileLayer.Canvas(options);
-};
-
-
-/*
- * L.ImageOverlay is used to overlay images over the map (to specific geographical bounds).
- */
-
-L.ImageOverlay = L.Class.extend({
- includes: L.Mixin.Events,
-
- options: {
- opacity: 1
- },
-
- initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
- this._url = url;
- this._bounds = L.latLngBounds(bounds);
-
- L.setOptions(this, options);
- },
-
- onAdd: function (map) {
- this._map = map;
-
- if (!this._image) {
- this._initImage();
- }
-
- map._panes.overlayPane.appendChild(this._image);
-
- map.on('viewreset', this._reset, this);
-
- if (map.options.zoomAnimation && L.Browser.any3d) {
- map.on('zoomanim', this._animateZoom, this);
- }
-
- this._reset();
- },
-
- onRemove: function (map) {
- map.getPanes().overlayPane.removeChild(this._image);
-
- map.off('viewreset', this._reset, this);
-
- if (map.options.zoomAnimation) {
- map.off('zoomanim', this._animateZoom, this);
- }
- },
-
- addTo: function (map) {
- map.addLayer(this);
- return this;
- },
-
- setOpacity: function (opacity) {
- this.options.opacity = opacity;
- this._updateOpacity();
- return this;
- },
-
- // TODO remove bringToFront/bringToBack duplication from TileLayer/Path
- bringToFront: function () {
- if (this._image) {
- this._map._panes.overlayPane.appendChild(this._image);
- }
- return this;
- },
-
- bringToBack: function () {
- var pane = this._map._panes.overlayPane;
- if (this._image) {
- pane.insertBefore(this._image, pane.firstChild);
- }
- return this;
- },
-
- _initImage: function () {
- this._image = L.DomUtil.create('img', 'leaflet-image-layer');
-
- if (this._map.options.zoomAnimation && L.Browser.any3d) {
- L.DomUtil.addClass(this._image, 'leaflet-zoom-animated');
- } else {
- L.DomUtil.addClass(this._image, 'leaflet-zoom-hide');
- }
-
- this._updateOpacity();
-
- //TODO createImage util method to remove duplication
- L.extend(this._image, {
- galleryimg: 'no',
- onselectstart: L.Util.falseFn,
- onmousemove: L.Util.falseFn,
- onload: L.bind(this._onImageLoad, this),
- src: this._url
- });
- },
-
- _animateZoom: function (e) {
- var map = this._map,
- image = this._image,
- scale = map.getZoomScale(e.zoom),
- nw = this._bounds.getNorthWest(),
- se = this._bounds.getSouthEast(),
-
- topLeft = map._latLngToNewLayerPoint(nw, e.zoom, e.center),
- size = map._latLngToNewLayerPoint(se, e.zoom, e.center)._subtract(topLeft),
- origin = topLeft._add(size._multiplyBy((1 / 2) * (1 - 1 / scale)));
-
- image.style[L.DomUtil.TRANSFORM] =
- L.DomUtil.getTranslateString(origin) + ' scale(' + scale + ') ';
- },
-
- _reset: function () {
- var image = this._image,
- topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
- size = this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft);
-
- L.DomUtil.setPosition(image, topLeft);
-
- image.style.width = size.x + 'px';
- image.style.height = size.y + 'px';
- },
-
- _onImageLoad: function () {
- this.fire('load');
- },
-
- _updateOpacity: function () {
- L.DomUtil.setOpacity(this._image, this.options.opacity);
- }
-});
-
-L.imageOverlay = function (url, bounds, options) {
- return new L.ImageOverlay(url, bounds, options);
-};
-
-
-/*
- * L.Icon is an image-based icon class that you can use with L.Marker for custom markers.
- */
-
-L.Icon = L.Class.extend({
- options: {
- /*
- iconUrl: (String) (required)
- iconRetinaUrl: (String) (optional, used for retina devices if detected)
- iconSize: (Point) (can be set through CSS)
- iconAnchor: (Point) (centered by default, can be set in CSS with negative margins)
- popupAnchor: (Point) (if not specified, popup opens in the anchor point)
- shadowUrl: (Point) (no shadow by default)
- shadowRetinaUrl: (String) (optional, used for retina devices if detected)
- shadowSize: (Point)
- shadowAnchor: (Point)
- */
- className: ''
- },
-
- initialize: function (options) {
- L.setOptions(this, options);
- },
-
- createIcon: function () {
- return this._createIcon('icon');
- },
-
- createShadow: function () {
- return this._createIcon('shadow');
- },
-
- _createIcon: function (name) {
- var src = this._getIconUrl(name);
-
- if (!src) {
- if (name === 'icon') {
- throw new Error("iconUrl not set in Icon options (see the docs).");
- }
- return null;
- }
-
- var img = this._createImg(src);
- this._setIconStyles(img, name);
-
- return img;
- },
-
- _setIconStyles: function (img, name) {
- var options = this.options,
- size = L.point(options[name + 'Size']),
- anchor;
-
- if (name === 'shadow') {
- anchor = L.point(options.shadowAnchor || options.iconAnchor);
- } else {
- anchor = L.point(options.iconAnchor);
- }
-
- if (!anchor && size) {
- anchor = size.divideBy(2, true);
- }
-
- img.className = 'leaflet-marker-' + name + ' ' + options.className;
-
- if (anchor) {
- img.style.marginLeft = (-anchor.x) + 'px';
- img.style.marginTop = (-anchor.y) + 'px';
- }
-
- if (size) {
- img.style.width = size.x + 'px';
- img.style.height = size.y + 'px';
- }
- },
-
- _createImg: function (src) {
- var el;
-
- if (!L.Browser.ie6) {
- el = document.createElement('img');
- el.src = src;
- } else {
- el = document.createElement('div');
- el.style.filter =
- 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '")';
- }
- return el;
- },
-
- _getIconUrl: function (name) {
- if (L.Browser.retina && this.options[name + 'RetinaUrl']) {
- return this.options[name + 'RetinaUrl'];
- }
- return this.options[name + 'Url'];
- }
-});
-
-L.icon = function (options) {
- return new L.Icon(options);
-};
-
-
-/*
* L.Icon.Default is the blue marker icon used by default in Leaflet.
*/
L.Icon.Default = L.Icon.extend({
options: {
- iconSize: new L.Point(25, 41),
- iconAnchor: new L.Point(12, 41),
- popupAnchor: new L.Point(1, -34),
+ iconSize: [25, 41],
+ iconAnchor: [12, 41],
+ popupAnchor: [1, -34],
- shadowSize: new L.Point(41, 41)
+ shadowSize: [41, 41]
},
_getIconUrl: function (name) {
@@ -3021,13 +3360,13 @@
}
if (L.Browser.retina && name === 'icon') {
- name += '@2x';
+ name += '-2x';
}
var path = L.Icon.Default.imagePath;
if (!path) {
- throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");
+ throw new Error('Couldn\'t autodetect L.Icon.Default.imagePath, set it manually.');
}
return path + '/marker-' + name + '.png';
@@ -3036,292 +3375,330 @@
L.Icon.Default.imagePath = (function () {
var scripts = document.getElementsByTagName('script'),
- leafletRe = /\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;
+ leafletRe = /[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;
- var i, len, src, matches;
+ var i, len, src, matches, path;
for (i = 0, len = scripts.length; i < len; i++) {
src = scripts[i].src;
matches = src.match(leafletRe);
if (matches) {
- return src.split(leafletRe)[0] + '/images';
+ path = src.split(leafletRe)[0];
+ return (path ? path + '/' : '') + 'images';
}
}
}());
-/*
- * L.Marker is used to display clickable/draggable icons on the map.
- */
+/*
+ * L.Marker is used to display clickable/draggable icons on the map.
+ */
+
+L.Marker = L.Class.extend({
+
+ includes: L.Mixin.Events,
+
+ options: {
+ icon: new L.Icon.Default(),
+ title: '',
+ clickable: true,
+ draggable: false,
+ keyboard: true,
+ zIndexOffset: 0,
+ opacity: 1,
+ riseOnHover: false,
+ riseOffset: 250
+ },
+
+ initialize: function (latlng, options) {
+ L.setOptions(this, options);
+ this._latlng = L.latLng(latlng);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ map.on('viewreset', this.update, this);
+
+ this._initIcon();
+ this.update();
+
+ if (map.options.zoomAnimation && map.options.markerZoomAnimation) {
+ map.on('zoomanim', this._animateZoom, this);
+ }
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ if (this.dragging) {
+ this.dragging.disable();
+ }
+
+ this._removeIcon();
+ this._removeShadow();
+
+ this.fire('remove');
+
+ map.off({
+ 'viewreset': this.update,
+ 'zoomanim': this._animateZoom
+ }, this);
+
+ this._map = null;
+ },
+
+ getLatLng: function () {
+ return this._latlng;
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = L.latLng(latlng);
+
+ this.update();
+
+ return this.fire('move', { latlng: this._latlng });
+ },
+
+ setZIndexOffset: function (offset) {
+ this.options.zIndexOffset = offset;
+ this.update();
+
+ return this;
+ },
+
+ setIcon: function (icon) {
+
+ this.options.icon = icon;
+
+ if (this._map) {
+ this._initIcon();
+ this.update();
+ }
+
+ return this;
+ },
+
+ update: function () {
+ if (this._icon) {
+ var pos = this._map.latLngToLayerPoint(this._latlng).round();
+ this._setPos(pos);
+ }
+
+ return this;
+ },
+
+ _initIcon: function () {
+ var options = this.options,
+ map = this._map,
+ animation = (map.options.zoomAnimation && map.options.markerZoomAnimation),
+ classToAdd = animation ? 'leaflet-zoom-animated' : 'leaflet-zoom-hide';
+
+ var icon = options.icon.createIcon(this._icon),
+ addIcon = false;
+
+ // if we're not reusing the icon, remove the old one and init new one
+ if (icon !== this._icon) {
+ if (this._icon) {
+ this._removeIcon();
+ }
+ addIcon = true;
+
+ if (options.title) {
+ icon.title = options.title;
+ }
+ }
+
+ L.DomUtil.addClass(icon, classToAdd);
+
+ if (options.keyboard) {
+ icon.tabIndex = '0';
+ }
+
+ this._icon = icon;
+
+ this._initInteraction();
+
+ if (options.riseOnHover) {
+ L.DomEvent
+ .on(icon, 'mouseover', this._bringToFront, this)
+ .on(icon, 'mouseout', this._resetZIndex, this);
+ }
+
+ var newShadow = options.icon.createShadow(this._shadow),
+ addShadow = false;
+
+ if (newShadow !== this._shadow) {
+ this._removeShadow();
+ addShadow = true;
+
+ if (newShadow) {
+ L.DomUtil.addClass(newShadow, classToAdd);
+ }
+ }
+ this._shadow = newShadow;
+
+
+ if (options.opacity < 1) {
+ this._updateOpacity();
+ }
+
+
+ var panes = this._map._panes;
+
+ if (addIcon) {
+ panes.markerPane.appendChild(this._icon);
+ }
+
+ if (newShadow && addShadow) {
+ panes.shadowPane.appendChild(this._shadow);
+ }
+ },
+
+ _removeIcon: function () {
+ if (this.options.riseOnHover) {
+ L.DomEvent
+ .off(this._icon, 'mouseover', this._bringToFront)
+ .off(this._icon, 'mouseout', this._resetZIndex);
+ }
+
+ this._map._panes.markerPane.removeChild(this._icon);
+
+ this._icon = null;
+ },
+
+ _removeShadow: function () {
+ if (this._shadow) {
+ this._map._panes.shadowPane.removeChild(this._shadow);
+ }
+ this._shadow = null;
+ },
+
+ _setPos: function (pos) {
+ L.DomUtil.setPosition(this._icon, pos);
+
+ if (this._shadow) {
+ L.DomUtil.setPosition(this._shadow, pos);
+ }
+
+ this._zIndex = pos.y + this.options.zIndexOffset;
+
+ this._resetZIndex();
+ },
+
+ _updateZIndex: function (offset) {
+ this._icon.style.zIndex = this._zIndex + offset;
+ },
+
+ _animateZoom: function (opt) {
+ var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
+
+ this._setPos(pos);
+ },
+
+ _initInteraction: function () {
+
+ if (!this.options.clickable) { return; }
+
+ // TODO refactor into something shared with Map/Path/etc. to DRY it up
+
+ var icon = this._icon,
+ events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu'];
+
+ L.DomUtil.addClass(icon, 'leaflet-clickable');
+ L.DomEvent.on(icon, 'click', this._onMouseClick, this);
+ L.DomEvent.on(icon, 'keypress', this._onKeyPress, this);
+
+ for (var i = 0; i < events.length; i++) {
+ L.DomEvent.on(icon, events[i], this._fireMouseEvent, this);
+ }
+
+ if (L.Handler.MarkerDrag) {
+ this.dragging = new L.Handler.MarkerDrag(this);
+
+ if (this.options.draggable) {
+ this.dragging.enable();
+ }
+ }
+ },
+
+ _onMouseClick: function (e) {
+ var wasDragged = this.dragging && this.dragging.moved();
+
+ if (this.hasEventListeners(e.type) || wasDragged) {
+ L.DomEvent.stopPropagation(e);
+ }
+
+ if (wasDragged) { return; }
+
+ if ((!this.dragging || !this.dragging._enabled) && this._map.dragging && this._map.dragging.moved()) { return; }
+
+ this.fire(e.type, {
+ originalEvent: e,
+ latlng: this._latlng
+ });
+ },
+
+ _onKeyPress: function (e) {
+ if (e.keyCode === 13) {
+ this.fire('click', {
+ originalEvent: e,
+ latlng: this._latlng
+ });
+ }
+ },
+
+ _fireMouseEvent: function (e) {
+
+ this.fire(e.type, {
+ originalEvent: e,
+ latlng: this._latlng
+ });
+
+ // TODO proper custom event propagation
+ // this line will always be called if marker is in a FeatureGroup
+ if (e.type === 'contextmenu' && this.hasEventListeners(e.type)) {
+ L.DomEvent.preventDefault(e);
+ }
+ if (e.type !== 'mousedown') {
+ L.DomEvent.stopPropagation(e);
+ } else {
+ L.DomEvent.preventDefault(e);
+ }
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+ if (this._map) {
+ this._updateOpacity();
+ }
+ },
+
+ _updateOpacity: function () {
+ L.DomUtil.setOpacity(this._icon, this.options.opacity);
+ if (this._shadow) {
+ L.DomUtil.setOpacity(this._shadow, this.options.opacity);
+ }
+ },
+
+ _bringToFront: function () {
+ this._updateZIndex(this.options.riseOffset);
+ },
+
+ _resetZIndex: function () {
+ this._updateZIndex(0);
+ }
+});
+
+L.marker = function (latlng, options) {
+ return new L.Marker(latlng, options);
+};
-L.Marker = L.Class.extend({
- includes: L.Mixin.Events,
-
- options: {
- icon: new L.Icon.Default(),
- title: '',
- clickable: true,
- draggable: false,
- zIndexOffset: 0,
- opacity: 1,
- riseOnHover: false,
- riseOffset: 250
- },
-
- initialize: function (latlng, options) {
- L.setOptions(this, options);
- this._latlng = L.latLng(latlng);
- },
-
- onAdd: function (map) {
- this._map = map;
-
- map.on('viewreset', this.update, this);
-
- this._initIcon();
- this.update();
-
- if (map.options.zoomAnimation && map.options.markerZoomAnimation) {
- map.on('zoomanim', this._animateZoom, this);
- }
- },
-
- addTo: function (map) {
- map.addLayer(this);
- return this;
- },
-
- onRemove: function (map) {
- this._removeIcon();
-
- this.fire('remove');
-
- map.off({
- 'viewreset': this.update,
- 'zoomanim': this._animateZoom
- }, this);
-
- this._map = null;
- },
-
- getLatLng: function () {
- return this._latlng;
- },
-
- setLatLng: function (latlng) {
- this._latlng = L.latLng(latlng);
-
- this.update();
-
- return this.fire('move', { latlng: this._latlng });
- },
-
- setZIndexOffset: function (offset) {
- this.options.zIndexOffset = offset;
- this.update();
-
- return this;
- },
-
- setIcon: function (icon) {
- if (this._map) {
- this._removeIcon();
- }
-
- this.options.icon = icon;
-
- if (this._map) {
- this._initIcon();
- this.update();
- }
-
- return this;
- },
-
- update: function () {
- if (this._icon) {
- var pos = this._map.latLngToLayerPoint(this._latlng).round();
- this._setPos(pos);
- }
-
- return this;
- },
-
- _initIcon: function () {
- var options = this.options,
- map = this._map,
- animation = (map.options.zoomAnimation && map.options.markerZoomAnimation),
- classToAdd = animation ? 'leaflet-zoom-animated' : 'leaflet-zoom-hide',
- needOpacityUpdate = false;
-
- if (!this._icon) {
- this._icon = options.icon.createIcon();
-
- if (options.title) {
- this._icon.title = options.title;
- }
-
- this._initInteraction();
- needOpacityUpdate = (this.options.opacity < 1);
-
- L.DomUtil.addClass(this._icon, classToAdd);
-
- if (options.riseOnHover) {
- L.DomEvent
- .on(this._icon, 'mouseover', this._bringToFront, this)
- .on(this._icon, 'mouseout', this._resetZIndex, this);
- }
- }
-
- if (!this._shadow) {
- this._shadow = options.icon.createShadow();
-
- if (this._shadow) {
- L.DomUtil.addClass(this._shadow, classToAdd);
- needOpacityUpdate = (this.options.opacity < 1);
- }
- }
-
- if (needOpacityUpdate) {
- this._updateOpacity();
- }
-
- var panes = this._map._panes;
-
- panes.markerPane.appendChild(this._icon);
-
- if (this._shadow) {
- panes.shadowPane.appendChild(this._shadow);
- }
- },
-
- _removeIcon: function () {
- var panes = this._map._panes;
-
- if (this.options.riseOnHover) {
- L.DomEvent
- .off(this._icon, 'mouseover', this._bringToFront)
- .off(this._icon, 'mouseout', this._resetZIndex);
- }
-
- panes.markerPane.removeChild(this._icon);
-
- if (this._shadow) {
- panes.shadowPane.removeChild(this._shadow);
- }
-
- this._icon = this._shadow = null;
- },
-
- _setPos: function (pos) {
- L.DomUtil.setPosition(this._icon, pos);
-
- if (this._shadow) {
- L.DomUtil.setPosition(this._shadow, pos);
- }
-
- this._zIndex = pos.y + this.options.zIndexOffset;
-
- this._resetZIndex();
- },
-
- _updateZIndex: function (offset) {
- this._icon.style.zIndex = this._zIndex + offset;
- },
-
- _animateZoom: function (opt) {
- var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
-
- this._setPos(pos);
- },
-
- _initInteraction: function () {
-
- if (!this.options.clickable) { return; }
-
- // TODO refactor into something shared with Map/Path/etc. to DRY it up
-
- var icon = this._icon,
- events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu'];
-
- L.DomUtil.addClass(icon, 'leaflet-clickable');
- L.DomEvent.on(icon, 'click', this._onMouseClick, this);
-
- for (var i = 0; i < events.length; i++) {
- L.DomEvent.on(icon, events[i], this._fireMouseEvent, this);
- }
-
- if (L.Handler.MarkerDrag) {
- this.dragging = new L.Handler.MarkerDrag(this);
-
- if (this.options.draggable) {
- this.dragging.enable();
- }
- }
- },
-
- _onMouseClick: function (e) {
- var wasDragged = this.dragging && this.dragging.moved();
-
- if (this.hasEventListeners(e.type) || wasDragged) {
- L.DomEvent.stopPropagation(e);
- }
-
- if (wasDragged) { return; }
-
- if ((!this.dragging || !this.dragging._enabled) && this._map.dragging && this._map.dragging.moved()) { return; }
-
- this.fire(e.type, {
- originalEvent: e
- });
- },
-
- _fireMouseEvent: function (e) {
-
- this.fire(e.type, {
- originalEvent: e
- });
-
- // TODO proper custom event propagation
- // this line will always be called if marker is in a FeatureGroup
- if (e.type === 'contextmenu' && this.hasEventListeners(e.type)) {
- L.DomEvent.preventDefault(e);
- }
- if (e.type !== 'mousedown') {
- L.DomEvent.stopPropagation(e);
- }
- },
-
- setOpacity: function (opacity) {
- this.options.opacity = opacity;
- if (this._map) {
- this._updateOpacity();
- }
- },
-
- _updateOpacity: function () {
- L.DomUtil.setOpacity(this._icon, this.options.opacity);
- if (this._shadow) {
- L.DomUtil.setOpacity(this._shadow, this.options.opacity);
- }
- },
-
- _bringToFront: function () {
- this._updateZIndex(this.options.riseOffset);
- },
-
- _resetZIndex: function () {
- this._updateZIndex(0);
- }
-});
-
-L.marker = function (latlng, options) {
- return new L.Marker(latlng, options);
-};
-
-
/*
* L.DivIcon is a lightweight HTML-based icon class (as opposed to the image-based L.Icon)
* to use with L.Marker.
@@ -3329,22 +3706,25 @@
L.DivIcon = L.Icon.extend({
options: {
- iconSize: new L.Point(12, 12), // also can be set through CSS
+ iconSize: [12, 12], // also can be set through CSS
/*
iconAnchor: (Point)
popupAnchor: (Point)
html: (String)
bgPos: (Point)
*/
- className: 'leaflet-div-icon'
+ className: 'leaflet-div-icon',
+ html: false
},
- createIcon: function () {
- var div = document.createElement('div'),
+ createIcon: function (oldIcon) {
+ var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
options = this.options;
- if (options.html) {
+ if (options.html !== false) {
div.innerHTML = options.html;
+ } else {
+ div.innerHTML = '';
}
if (options.bgPos) {
@@ -3366,2596 +3746,2801 @@
};
-/*
- * L.Popup is used for displaying popups on the map.
- */
+/*
+ * L.Popup is used for displaying popups on the map.
+ */
+
+L.Map.mergeOptions({
+ closePopupOnClick: true
+});
+
+L.Popup = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ minWidth: 50,
+ maxWidth: 300,
+ maxHeight: null,
+ autoPan: true,
+ closeButton: true,
+ offset: [0, 7],
+ autoPanPadding: [5, 5],
+ keepInView: false,
+ className: '',
+ zoomAnimation: true
+ },
+
+ initialize: function (options, source) {
+ L.setOptions(this, options);
+
+ this._source = source;
+ this._animated = L.Browser.any3d && this.options.zoomAnimation;
+ this._isOpen = false;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._container) {
+ this._initLayout();
+ }
+ this._updateContent();
+
+ var animFade = map.options.fadeAnimation;
+
+ if (animFade) {
+ L.DomUtil.setOpacity(this._container, 0);
+ }
+ map._panes.popupPane.appendChild(this._container);
+
+ map.on(this._getEvents(), this);
+
+ this._update();
+
+ if (animFade) {
+ L.DomUtil.setOpacity(this._container, 1);
+ }
+
+ this.fire('open');
+
+ map.fire('popupopen', {popup: this});
+
+ if (this._source) {
+ this._source.fire('popupopen', {popup: this});
+ }
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ openOn: function (map) {
+ map.openPopup(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ map._panes.popupPane.removeChild(this._container);
+
+ L.Util.falseFn(this._container.offsetWidth); // force reflow
+
+ map.off(this._getEvents(), this);
+
+ if (map.options.fadeAnimation) {
+ L.DomUtil.setOpacity(this._container, 0);
+ }
+
+ this._map = null;
+
+ this.fire('close');
+
+ map.fire('popupclose', {popup: this});
+
+ if (this._source) {
+ this._source.fire('popupclose', {popup: this});
+ }
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = L.latLng(latlng);
+ this._update();
+ return this;
+ },
+
+ setContent: function (content) {
+ this._content = content;
+ this._update();
+ return this;
+ },
+
+ _getEvents: function () {
+ var events = {
+ viewreset: this._updatePosition
+ };
+
+ if (this._animated) {
+ events.zoomanim = this._zoomAnimation;
+ }
+ if ('closeOnClick' in this.options ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
+ events.preclick = this._close;
+ }
+ if (this.options.keepInView) {
+ events.moveend = this._adjustPan;
+ }
+
+ return events;
+ },
+
+ _close: function () {
+ if (this._map) {
+ this._map.closePopup(this);
+ }
+ },
+
+ _initLayout: function () {
+ var prefix = 'leaflet-popup',
+ containerClass = prefix + ' ' + this.options.className + ' leaflet-zoom-' +
+ (this._animated ? 'animated' : 'hide'),
+ container = this._container = L.DomUtil.create('div', containerClass),
+ closeButton;
+
+ if (this.options.closeButton) {
+ closeButton = this._closeButton =
+ L.DomUtil.create('a', prefix + '-close-button', container);
+ closeButton.href = '#close';
+ closeButton.innerHTML = '×';
+ L.DomEvent.disableClickPropagation(closeButton);
+
+ L.DomEvent.on(closeButton, 'click', this._onCloseButtonClick, this);
+ }
+
+ var wrapper = this._wrapper =
+ L.DomUtil.create('div', prefix + '-content-wrapper', container);
+ L.DomEvent.disableClickPropagation(wrapper);
+
+ this._contentNode = L.DomUtil.create('div', prefix + '-content', wrapper);
+ L.DomEvent.on(this._contentNode, 'mousewheel', L.DomEvent.stopPropagation);
+ L.DomEvent.on(wrapper, 'contextmenu', L.DomEvent.stopPropagation);
+ this._tipContainer = L.DomUtil.create('div', prefix + '-tip-container', container);
+ this._tip = L.DomUtil.create('div', prefix + '-tip', this._tipContainer);
+ },
+
+ _update: function () {
+ if (!this._map) { return; }
+
+ this._container.style.visibility = 'hidden';
+
+ this._updateContent();
+ this._updateLayout();
+ this._updatePosition();
+
+ this._container.style.visibility = '';
+
+ this._adjustPan();
+ },
+
+ _updateContent: function () {
+ if (!this._content) { return; }
+
+ if (typeof this._content === 'string') {
+ this._contentNode.innerHTML = this._content;
+ } else {
+ while (this._contentNode.hasChildNodes()) {
+ this._contentNode.removeChild(this._contentNode.firstChild);
+ }
+ this._contentNode.appendChild(this._content);
+ }
+ this.fire('contentupdate');
+ },
+
+ _updateLayout: function () {
+ var container = this._contentNode,
+ style = container.style;
+
+ style.width = '';
+ style.whiteSpace = 'nowrap';
+
+ var width = container.offsetWidth;
+ width = Math.min(width, this.options.maxWidth);
+ width = Math.max(width, this.options.minWidth);
+
+ style.width = (width + 1) + 'px';
+ style.whiteSpace = '';
+
+ style.height = '';
+
+ var height = container.offsetHeight,
+ maxHeight = this.options.maxHeight,
+ scrolledClass = 'leaflet-popup-scrolled';
+
+ if (maxHeight && height > maxHeight) {
+ style.height = maxHeight + 'px';
+ L.DomUtil.addClass(container, scrolledClass);
+ } else {
+ L.DomUtil.removeClass(container, scrolledClass);
+ }
+
+ this._containerWidth = this._container.offsetWidth;
+ },
+
+ _updatePosition: function () {
+ if (!this._map) { return; }
+
+ var pos = this._map.latLngToLayerPoint(this._latlng),
+ animated = this._animated,
+ offset = L.point(this.options.offset);
+
+ if (animated) {
+ L.DomUtil.setPosition(this._container, pos);
+ }
+
+ this._containerBottom = -offset.y - (animated ? 0 : pos.y);
+ this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x + (animated ? 0 : pos.x);
+
+ // bottom position the popup in case the height of the popup changes (images loading etc)
+ this._container.style.bottom = this._containerBottom + 'px';
+ this._container.style.left = this._containerLeft + 'px';
+ },
+
+ _zoomAnimation: function (opt) {
+ var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
+
+ L.DomUtil.setPosition(this._container, pos);
+ },
+
+ _adjustPan: function () {
+ if (!this.options.autoPan) { return; }
+
+ var map = this._map,
+ containerHeight = this._container.offsetHeight,
+ containerWidth = this._containerWidth,
+
+ layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);
+
+ if (this._animated) {
+ layerPos._add(L.DomUtil.getPosition(this._container));
+ }
+
+ var containerPos = map.layerPointToContainerPoint(layerPos),
+ padding = L.point(this.options.autoPanPadding),
+ size = map.getSize(),
+ dx = 0,
+ dy = 0;
+
+ if (containerPos.x + containerWidth > size.x) { // right
+ dx = containerPos.x + containerWidth - size.x + padding.x;
+ }
+ if (containerPos.x - dx < 0) { // left
+ dx = containerPos.x - padding.x;
+ }
+ if (containerPos.y + containerHeight > size.y) { // bottom
+ dy = containerPos.y + containerHeight - size.y + padding.y;
+ }
+ if (containerPos.y - dy < 0) { // top
+ dy = containerPos.y - padding.y;
+ }
+
+ if (dx || dy) {
+ map
+ .fire('autopanstart')
+ .panBy([dx, dy]);
+ }
+ },
+
+ _onCloseButtonClick: function (e) {
+ this._close();
+ L.DomEvent.stop(e);
+ }
+});
+
+L.popup = function (options, source) {
+ return new L.Popup(options, source);
+};
+
+
+L.Map.include({
+ openPopup: function (popup, latlng, options) { // (Popup) or (String || HTMLElement, LatLng[, Object])
+ this.closePopup();
+
+ if (!(popup instanceof L.Popup)) {
+ var content = popup;
+
+ popup = new L.Popup(options)
+ .setLatLng(latlng)
+ .setContent(content);
+ }
+ popup._isOpen = true;
+
+ this._popup = popup;
+ return this.addLayer(popup);
+ },
+
+ closePopup: function (popup) {
+ if (!popup || popup === this._popup) {
+ popup = this._popup;
+ this._popup = null;
+ }
+ if (popup) {
+ this.removeLayer(popup);
+ popup._isOpen = false;
+ }
+ return this;
+ }
+});
-L.Map.mergeOptions({
- closePopupOnClick: true
-});
-L.Popup = L.Class.extend({
- includes: L.Mixin.Events,
+/*
+ * Popup extension to L.Marker, adding popup-related methods.
+ */
+
+L.Marker.include({
+ openPopup: function () {
+ if (this._popup && this._map && !this._map.hasLayer(this._popup)) {
+ this._popup.setLatLng(this._latlng);
+ this._map.openPopup(this._popup);
+ }
+
+ return this;
+ },
+
+ closePopup: function () {
+ if (this._popup) {
+ this._popup._close();
+ }
+ return this;
+ },
+
+ togglePopup: function () {
+ if (this._popup) {
+ if (this._popup._isOpen) {
+ this.closePopup();
+ } else {
+ this.openPopup();
+ }
+ }
+ return this;
+ },
+
+ bindPopup: function (content, options) {
+ var anchor = L.point(this.options.icon.options.popupAnchor || [0, 0]);
+
+ anchor = anchor.add(L.Popup.prototype.options.offset);
+
+ if (options && options.offset) {
+ anchor = anchor.add(options.offset);
+ }
+
+ options = L.extend({offset: anchor}, options);
+
+ if (!this._popup) {
+ this
+ .on('click', this.togglePopup, this)
+ .on('remove', this.closePopup, this)
+ .on('move', this._movePopup, this);
+ }
+
+ if (content instanceof L.Popup) {
+ L.setOptions(content, options);
+ this._popup = content;
+ } else {
+ this._popup = new L.Popup(options, this)
+ .setContent(content);
+ }
+
+ return this;
+ },
+
+ setPopupContent: function (content) {
+ if (this._popup) {
+ this._popup.setContent(content);
+ }
+ return this;
+ },
+
+ unbindPopup: function () {
+ if (this._popup) {
+ this._popup = null;
+ this
+ .off('click', this.togglePopup)
+ .off('remove', this.closePopup)
+ .off('move', this._movePopup);
+ }
+ return this;
+ },
+
+ _movePopup: function (e) {
+ this._popup.setLatLng(e.latlng);
+ }
+});
- options: {
- minWidth: 50,
- maxWidth: 300,
- maxHeight: null,
- autoPan: true,
- closeButton: true,
- offset: new L.Point(0, 6),
- autoPanPadding: new L.Point(5, 5),
- className: '',
- zoomAnimation: true
- },
- initialize: function (options, source) {
- L.setOptions(this, options);
+/*
+ * L.LayerGroup is a class to combine several layers into one so that
+ * you can manipulate the group (e.g. add/remove it) as one layer.
+ */
+
+L.LayerGroup = L.Class.extend({
+ initialize: function (layers) {
+ this._layers = {};
+
+ var i, len;
+
+ if (layers) {
+ for (i = 0, len = layers.length; i < len; i++) {
+ this.addLayer(layers[i]);
+ }
+ }
+ },
+
+ addLayer: function (layer) {
+ var id = this.getLayerId(layer);
+
+ this._layers[id] = layer;
+
+ if (this._map) {
+ this._map.addLayer(layer);
+ }
+
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = layer in this._layers ? layer : this.getLayerId(layer);
+
+ if (this._map && this._layers[id]) {
+ this._map.removeLayer(this._layers[id]);
+ }
+
+ delete this._layers[id];
+
+ return this;
+ },
+
+ hasLayer: function (layer) {
+ if (!layer) { return false; }
+
+ return (layer in this._layers || this.getLayerId(layer) in this._layers);
+ },
+
+ clearLayers: function () {
+ this.eachLayer(this.removeLayer, this);
+ return this;
+ },
+
+ invoke: function (methodName) {
+ var args = Array.prototype.slice.call(arguments, 1),
+ i, layer;
+
+ for (i in this._layers) {
+ layer = this._layers[i];
+
+ if (layer[methodName]) {
+ layer[methodName].apply(layer, args);
+ }
+ }
+
+ return this;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ this.eachLayer(map.addLayer, map);
+ },
+
+ onRemove: function (map) {
+ this.eachLayer(map.removeLayer, map);
+ this._map = null;
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ eachLayer: function (method, context) {
+ for (var i in this._layers) {
+ method.call(context, this._layers[i]);
+ }
+ return this;
+ },
+
+ getLayer: function (id) {
+ return this._layers[id];
+ },
+
+ getLayers: function () {
+ var layers = [];
+
+ for (var i in this._layers) {
+ layers.push(this._layers[i]);
+ }
+ return layers;
+ },
+
+ setZIndex: function (zIndex) {
+ return this.invoke('setZIndex', zIndex);
+ },
+
+ getLayerId: function (layer) {
+ return L.stamp(layer);
+ }
+});
+
+L.layerGroup = function (layers) {
+ return new L.LayerGroup(layers);
+};
- this._source = source;
- this._animated = L.Browser.any3d && this.options.zoomAnimation;
- },
- onAdd: function (map) {
- this._map = map;
+/*
+ * L.FeatureGroup extends L.LayerGroup by introducing mouse events and additional methods
+ * shared between a group of interactive layers (like vectors or markers).
+ */
+
+L.FeatureGroup = L.LayerGroup.extend({
+ includes: L.Mixin.Events,
+
+ statics: {
+ EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'
+ },
+
+ addLayer: function (layer) {
+ if (this.hasLayer(layer)) {
+ return this;
+ }
+
+ layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
+
+ L.LayerGroup.prototype.addLayer.call(this, layer);
+
+ if (this._popupContent && layer.bindPopup) {
+ layer.bindPopup(this._popupContent, this._popupOptions);
+ }
+
+ return this.fire('layeradd', {layer: layer});
+ },
+
+ removeLayer: function (layer) {
+ if (layer in this._layers) {
+ layer = this._layers[layer];
+ }
+
+ layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
+
+ L.LayerGroup.prototype.removeLayer.call(this, layer);
+
+ if (this._popupContent) {
+ this.invoke('unbindPopup');
+ }
+
+ return this.fire('layerremove', {layer: layer});
+ },
+
+ bindPopup: function (content, options) {
+ this._popupContent = content;
+ this._popupOptions = options;
+ return this.invoke('bindPopup', content, options);
+ },
+
+ setStyle: function (style) {
+ return this.invoke('setStyle', style);
+ },
+
+ bringToFront: function () {
+ return this.invoke('bringToFront');
+ },
+
+ bringToBack: function () {
+ return this.invoke('bringToBack');
+ },
+
+ getBounds: function () {
+ var bounds = new L.LatLngBounds();
+
+ this.eachLayer(function (layer) {
+ bounds.extend(layer instanceof L.Marker ? layer.getLatLng() : layer.getBounds());
+ });
+
+ return bounds;
+ },
+
+ _propagateEvent: function (e) {
+ if (!e.layer) {
+ e.layer = e.target;
+ }
+ e.target = this;
+
+ this.fire(e.type, e);
+ }
+});
+
+L.featureGroup = function (layers) {
+ return new L.FeatureGroup(layers);
+};
- if (!this._container) {
- this._initLayout();
- }
- this._updateContent();
- var animFade = map.options.fadeAnimation;
+/*
+ * L.Path is a base class for rendering vector paths on a map. Inherited by Polyline, Circle, etc.
+ */
+
+L.Path = L.Class.extend({
+ includes: [L.Mixin.Events],
+
+ statics: {
+ // how much to extend the clip area around the map view
+ // (relative to its size, e.g. 0.5 is half the screen in each direction)
+ // set it so that SVG element doesn't exceed 1280px (vectors flicker on dragend if it is)
+ CLIP_PADDING: L.Browser.mobile ?
+ Math.max(0, Math.min(0.5,
+ (1280 / Math.max(window.innerWidth, window.innerHeight) - 1) / 2)) : 0.5
+ },
+
+ options: {
+ stroke: true,
+ color: '#0033ff',
+ dashArray: null,
+ weight: 5,
+ opacity: 0.5,
+
+ fill: false,
+ fillColor: null, //same as color by default
+ fillOpacity: 0.2,
+
+ clickable: true
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._container) {
+ this._initElements();
+ this._initEvents();
+ }
+
+ this.projectLatlngs();
+ this._updatePath();
+
+ if (this._container) {
+ this._map._pathRoot.appendChild(this._container);
+ }
+
+ this.fire('add');
+
+ map.on({
+ 'viewreset': this.projectLatlngs,
+ 'moveend': this._updatePath
+ }, this);
+ },
+
+ addTo: function (map) {
+ map.addLayer(this);
+ return this;
+ },
+
+ onRemove: function (map) {
+ map._pathRoot.removeChild(this._container);
+
+ // Need to fire remove event before we set _map to null as the event hooks might need the object
+ this.fire('remove');
+ this._map = null;
+
+ if (L.Browser.vml) {
+ this._container = null;
+ this._stroke = null;
+ this._fill = null;
+ }
+
+ map.off({
+ 'viewreset': this.projectLatlngs,
+ 'moveend': this._updatePath
+ }, this);
+ },
+
+ projectLatlngs: function () {
+ // do all projection stuff here
+ },
+
+ setStyle: function (style) {
+ L.setOptions(this, style);
+
+ if (this._container) {
+ this._updateStyle();
+ }
+
+ return this;
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this.projectLatlngs();
+ this._updatePath();
+ }
+ return this;
+ }
+});
+
+L.Map.include({
+ _updatePathViewport: function () {
+ var p = L.Path.CLIP_PADDING,
+ size = this.getSize(),
+ panePos = L.DomUtil.getPosition(this._mapPane),
+ min = panePos.multiplyBy(-1)._subtract(size.multiplyBy(p)._round()),
+ max = min.add(size.multiplyBy(1 + p * 2)._round());
+
+ this._pathViewport = new L.Bounds(min, max);
+ }
+});
- if (animFade) {
- L.DomUtil.setOpacity(this._container, 0);
- }
- map._panes.popupPane.appendChild(this._container);
- map.on('viewreset', this._updatePosition, this);
+/*
+ * Extends L.Path with SVG-specific rendering code.
+ */
+
+L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
+
+L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
+
+L.Path = L.Path.extend({
+ statics: {
+ SVG: L.Browser.svg
+ },
+
+ bringToFront: function () {
+ var root = this._map._pathRoot,
+ path = this._container;
+
+ if (path && root.lastChild !== path) {
+ root.appendChild(path);
+ }
+ return this;
+ },
+
+ bringToBack: function () {
+ var root = this._map._pathRoot,
+ path = this._container,
+ first = root.firstChild;
+
+ if (path && first !== path) {
+ root.insertBefore(path, first);
+ }
+ return this;
+ },
+
+ getPathString: function () {
+ // form path string here
+ },
+
+ _createElement: function (name) {
+ return document.createElementNS(L.Path.SVG_NS, name);
+ },
+
+ _initElements: function () {
+ this._map._initPathRoot();
+ this._initPath();
+ this._initStyle();
+ },
+
+ _initPath: function () {
+ this._container = this._createElement('g');
+
+ this._path = this._createElement('path');
+ this._container.appendChild(this._path);
+ },
+
+ _initStyle: function () {
+ if (this.options.stroke) {
+ this._path.setAttribute('stroke-linejoin', 'round');
+ this._path.setAttribute('stroke-linecap', 'round');
+ }
+ if (this.options.fill) {
+ this._path.setAttribute('fill-rule', 'evenodd');
+ }
+ if (this.options.pointerEvents) {
+ this._path.setAttribute('pointer-events', this.options.pointerEvents);
+ }
+ if (!this.options.clickable && !this.options.pointerEvents) {
+ this._path.setAttribute('pointer-events', 'none');
+ }
+ this._updateStyle();
+ },
+
+ _updateStyle: function () {
+ if (this.options.stroke) {
+ this._path.setAttribute('stroke', this.options.color);
+ this._path.setAttribute('stroke-opacity', this.options.opacity);
+ this._path.setAttribute('stroke-width', this.options.weight);
+ if (this.options.dashArray) {
+ this._path.setAttribute('stroke-dasharray', this.options.dashArray);
+ } else {
+ this._path.removeAttribute('stroke-dasharray');
+ }
+ } else {
+ this._path.setAttribute('stroke', 'none');
+ }
+ if (this.options.fill) {
+ this._path.setAttribute('fill', this.options.fillColor || this.options.color);
+ this._path.setAttribute('fill-opacity', this.options.fillOpacity);
+ } else {
+ this._path.setAttribute('fill', 'none');
+ }
+ },
+
+ _updatePath: function () {
+ var str = this.getPathString();
+ if (!str) {
+ // fix webkit empty string parsing bug
+ str = 'M0 0';
+ }
+ this._path.setAttribute('d', str);
+ },
+
+ // TODO remove duplication with L.Map
+ _initEvents: function () {
+ if (this.options.clickable) {
+ if (L.Browser.svg || !L.Browser.vml) {
+ this._path.setAttribute('class', 'leaflet-clickable');
+ }
+
+ L.DomEvent.on(this._container, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseover',
+ 'mouseout', 'mousemove', 'contextmenu'];
+ for (var i = 0; i < events.length; i++) {
+ L.DomEvent.on(this._container, events[i], this._fireMouseEvent, this);
+ }
+ }
+ },
+
+ _onMouseClick: function (e) {
+ if (this._map.dragging && this._map.dragging.moved()) { return; }
+
+ this._fireMouseEvent(e);
+ },
+
+ _fireMouseEvent: function (e) {
+ if (!this.hasEventListeners(e.type)) { return; }
+
+ var map = this._map,
+ containerPoint = map.mouseEventToContainerPoint(e),
+ layerPoint = map.containerPointToLayerPoint(containerPoint),
+ latlng = map.layerPointToLatLng(layerPoint);
+
+ this.fire(e.type, {
+ latlng: latlng,
+ layerPoint: layerPoint,
+ containerPoint: containerPoint,
+ originalEvent: e
+ });
+
+ if (e.type === 'contextmenu') {
+ L.DomEvent.preventDefault(e);
+ }
+ if (e.type !== 'mousemove') {
+ L.DomEvent.stopPropagation(e);
+ }
+ }
+});
+
+L.Map.include({
+ _initPathRoot: function () {
+ if (!this._pathRoot) {
+ this._pathRoot = L.Path.prototype._createElement('svg');
+ this._panes.overlayPane.appendChild(this._pathRoot);
+
+ if (this.options.zoomAnimation && L.Browser.any3d) {
+ this._pathRoot.setAttribute('class', ' leaflet-zoom-animated');
+
+ this.on({
+ 'zoomanim': this._animatePathZoom,
+ 'zoomend': this._endPathZoom
+ });
+ } else {
+ this._pathRoot.setAttribute('class', ' leaflet-zoom-hide');
+ }
+
+ this.on('moveend', this._updateSvgViewport);
+ this._updateSvgViewport();
+ }
+ },
+
+ _animatePathZoom: function (e) {
+ var scale = this.getZoomScale(e.zoom),
+ offset = this._getCenterOffset(e.center)._multiplyBy(-scale)._add(this._pathViewport.min);
+
+ this._pathRoot.style[L.DomUtil.TRANSFORM] =
+ L.DomUtil.getTranslateString(offset) + ' scale(' + scale + ') ';
+
+ this._pathZooming = true;
+ },
+
+ _endPathZoom: function () {
+ this._pathZooming = false;
+ },
+
+ _updateSvgViewport: function () {
+
+ if (this._pathZooming) {
+ // Do not update SVGs while a zoom animation is going on otherwise the animation will break.
+ // When the zoom animation ends we will be updated again anyway
+ // This fixes the case where you do a momentum move and zoom while the move is still ongoing.
+ return;
+ }
+
+ this._updatePathViewport();
+
+ var vp = this._pathViewport,
+ min = vp.min,
+ max = vp.max,
+ width = max.x - min.x,
+ height = max.y - min.y,
+ root = this._pathRoot,
+ pane = this._panes.overlayPane;
+
+ // Hack to make flicker on drag end on mobile webkit less irritating
+ if (L.Browser.mobileWebkit) {
+ pane.removeChild(root);
+ }
+
+ L.DomUtil.setPosition(root, min);
+ root.setAttribute('width', width);
+ root.setAttribute('height', height);
+ root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
+
+ if (L.Browser.mobileWebkit) {
+ pane.appendChild(root);
+ }
+ }
+});
- if (this._animated) {
- map.on('zoomanim', this._zoomAnimation, this);
- }
- if (map.options.closePopupOnClick) {
- map.on('preclick', this._close, this);
- }
+/*
+ * Popup extension to L.Path (polylines, polygons, circles), adding popup-related methods.
+ */
+
+L.Path.include({
+
+ bindPopup: function (content, options) {
+
+ if (content instanceof L.Popup) {
+ this._popup = content;
+ } else {
+ if (!this._popup || options) {
+ this._popup = new L.Popup(options, this);
+ }
+ this._popup.setContent(content);
+ }
+
+ if (!this._popupHandlersAdded) {
+ this
+ .on('click', this._openPopup, this)
+ .on('remove', this.closePopup, this);
+
+ this._popupHandlersAdded = true;
+ }
+
+ return this;
+ },
+
+ unbindPopup: function () {
+ if (this._popup) {
+ this._popup = null;
+ this
+ .off('click', this._openPopup)
+ .off('remove', this.closePopup);
+
+ this._popupHandlersAdded = false;
+ }
+ return this;
+ },
+
+ openPopup: function (latlng) {
+
+ if (this._popup) {
+ // open the popup from one of the path's points if not specified
+ latlng = latlng || this._latlng ||
+ this._latlngs[Math.floor(this._latlngs.length / 2)];
+
+ this._openPopup({latlng: latlng});
+ }
+
+ return this;
+ },
+
+ closePopup: function () {
+ if (this._popup) {
+ this._popup._close();
+ }
+ return this;
+ },
+
+ _openPopup: function (e) {
+ this._popup.setLatLng(e.latlng);
+ this._map.openPopup(this._popup);
+ }
+});
- this._update();
- if (animFade) {
- L.DomUtil.setOpacity(this._container, 1);
- }
- },
+/*
+ * Vector rendering for IE6-8 through VML.
+ * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
+ */
+
+L.Browser.vml = !L.Browser.svg && (function () {
+ try {
+ var div = document.createElement('div');
+ div.innerHTML = '<v:shape adj="1"/>';
+
+ var shape = div.firstChild;
+ shape.style.behavior = 'url(#default#VML)';
+
+ return shape && (typeof shape.adj === 'object');
+
+ } catch (e) {
+ return false;
+ }
+}());
+
+L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
+ statics: {
+ VML: true,
+ CLIP_PADDING: 0.02
+ },
+
+ _createElement: (function () {
+ try {
+ document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
+ return function (name) {
+ return document.createElement('<lvml:' + name + ' class="lvml">');
+ };
+ } catch (e) {
+ return function (name) {
+ return document.createElement(
+ '<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
+ };
+ }
+ }()),
+
+ _initPath: function () {
+ var container = this._container = this._createElement('shape');
+ L.DomUtil.addClass(container, 'leaflet-vml-shape');
+ if (this.options.clickable) {
+ L.DomUtil.addClass(container, 'leaflet-clickable');
+ }
+ container.coordsize = '1 1';
+
+ this._path = this._createElement('path');
+ container.appendChild(this._path);
+
+ this._map._pathRoot.appendChild(container);
+ },
+
+ _initStyle: function () {
+ this._updateStyle();
+ },
+
+ _updateStyle: function () {
+ var stroke = this._stroke,
+ fill = this._fill,
+ options = this.options,
+ container = this._container;
+
+ container.stroked = options.stroke;
+ container.filled = options.fill;
+
+ if (options.stroke) {
+ if (!stroke) {
+ stroke = this._stroke = this._createElement('stroke');
+ stroke.endcap = 'round';
+ container.appendChild(stroke);
+ }
+ stroke.weight = options.weight + 'px';
+ stroke.color = options.color;
+ stroke.opacity = options.opacity;
+
+ if (options.dashArray) {
+ stroke.dashStyle = options.dashArray instanceof Array ?
+ options.dashArray.join(' ') :
+ options.dashArray.replace(/( *, *)/g, ' ');
+ } else {
+ stroke.dashStyle = '';
+ }
+
+ } else if (stroke) {
+ container.removeChild(stroke);
+ this._stroke = null;
+ }
+
+ if (options.fill) {
+ if (!fill) {
+ fill = this._fill = this._createElement('fill');
+ container.appendChild(fill);
+ }
+ fill.color = options.fillColor || options.color;
+ fill.opacity = options.fillOpacity;
+
+ } else if (fill) {
+ container.removeChild(fill);
+ this._fill = null;
+ }
+ },
+
+ _updatePath: function () {
+ var style = this._container.style;
+
+ style.display = 'none';
+ this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
+ style.display = '';
+ }
+});
+
+L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
+ _initPathRoot: function () {
+ if (this._pathRoot) { return; }
+
+ var root = this._pathRoot = document.createElement('div');
+ root.className = 'leaflet-vml-container';
+ this._panes.overlayPane.appendChild(root);
+
+ this.on('moveend', this._updatePathViewport);
+ this._updatePathViewport();
+ }
+});
- addTo: function (map) {
- map.addLayer(this);
- return this;
- },
- openOn: function (map) {
- map.openPopup(this);
- return this;
- },
+/*
+ * Vector rendering for all browsers that support canvas.
+ */
+
+L.Browser.canvas = (function () {
+ return !!document.createElement('canvas').getContext;
+}());
+
+L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
+ statics: {
+ //CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
+ CANVAS: true,
+ SVG: false
+ },
+
+ redraw: function () {
+ if (this._map) {
+ this.projectLatlngs();
+ this._requestUpdate();
+ }
+ return this;
+ },
+
+ setStyle: function (style) {
+ L.setOptions(this, style);
+
+ if (this._map) {
+ this._updateStyle();
+ this._requestUpdate();
+ }
+ return this;
+ },
+
+ onRemove: function (map) {
+ map
+ .off('viewreset', this.projectLatlngs, this)
+ .off('moveend', this._updatePath, this);
+
+ if (this.options.clickable) {
+ this._map.off('click', this._onClick, this);
+ this._map.off('mousemove', this._onMouseMove, this);
+ }
+
+ this._requestUpdate();
+
+ this._map = null;
+ },
+
+ _requestUpdate: function () {
+ if (this._map && !L.Path._updateRequest) {
+ L.Path._updateRequest = L.Util.requestAnimFrame(this._fireMapMoveEnd, this._map);
+ }
+ },
+
+ _fireMapMoveEnd: function () {
+ L.Path._updateRequest = null;
+ this.fire('moveend');
+ },
+
+ _initElements: function () {
+ this._map._initPathRoot();
+ this._ctx = this._map._canvasCtx;
+ },
+
+ _updateStyle: function () {
+ var options = this.options;
+
+ if (options.stroke) {
+ this._ctx.lineWidth = options.weight;
+ this._ctx.strokeStyle = options.color;
+ }
+ if (options.fill) {
+ this._ctx.fillStyle = options.fillColor || options.color;
+ }
+ },
+
+ _drawPath: function () {
+ var i, j, len, len2, point, drawMethod;
+
+ this._ctx.beginPath();
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
+ point = this._parts[i][j];
+ drawMethod = (j === 0 ? 'move' : 'line') + 'To';
+
+ this._ctx[drawMethod](point.x, point.y);
+ }
+ // TODO refactor ugly hack
+ if (this instanceof L.Polygon) {
+ this._ctx.closePath();
+ }
+ }
+ },
+
+ _checkIfEmpty: function () {
+ return !this._parts.length;
+ },
+
+ _updatePath: function () {
+ if (this._checkIfEmpty()) { return; }
+
+ var ctx = this._ctx,
+ options = this.options;
+
+ this._drawPath();
+ ctx.save();
+ this._updateStyle();
+
+ if (options.fill) {
+ ctx.globalAlpha = options.fillOpacity;
+ ctx.fill();
+ }
+
+ if (options.stroke) {
+ ctx.globalAlpha = options.opacity;
+ ctx.stroke();
+ }
+
+ ctx.restore();
+
+ // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
+ },
+
+ _initEvents: function () {
+ if (this.options.clickable) {
+ // TODO dblclick
+ this._map.on('mousemove', this._onMouseMove, this);
+ this._map.on('click', this._onClick, this);
+ }
+ },
+
+ _onClick: function (e) {
+ if (this._containsPoint(e.layerPoint)) {
+ this.fire('click', e);
+ }
+ },
+
+ _onMouseMove: function (e) {
+ if (!this._map || this._map._animatingZoom) { return; }
+
+ // TODO don't do on each move
+ if (this._containsPoint(e.layerPoint)) {
+ this._ctx.canvas.style.cursor = 'pointer';
+ this._mouseInside = true;
+ this.fire('mouseover', e);
+
+ } else if (this._mouseInside) {
+ this._ctx.canvas.style.cursor = '';
+ this._mouseInside = false;
+ this.fire('mouseout', e);
+ }
+ }
+});
+
+L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
+ _initPathRoot: function () {
+ var root = this._pathRoot,
+ ctx;
+
+ if (!root) {
+ root = this._pathRoot = document.createElement('canvas');
+ root.style.position = 'absolute';
+ ctx = this._canvasCtx = root.getContext('2d');
+
+ ctx.lineCap = 'round';
+ ctx.lineJoin = 'round';
+
+ this._panes.overlayPane.appendChild(root);
+
+ if (this.options.zoomAnimation) {
+ this._pathRoot.className = 'leaflet-zoom-animated';
+ this.on('zoomanim', this._animatePathZoom);
+ this.on('zoomend', this._endPathZoom);
+ }
+ this.on('moveend', this._updateCanvasViewport);
+ this._updateCanvasViewport();
+ }
+ },
+
+ _updateCanvasViewport: function () {
+ // don't redraw while zooming. See _updateSvgViewport for more details
+ if (this._pathZooming) { return; }
+ this._updatePathViewport();
+
+ var vp = this._pathViewport,
+ min = vp.min,
+ size = vp.max.subtract(min),
+ root = this._pathRoot;
+
+ //TODO check if this works properly on mobile webkit
+ L.DomUtil.setPosition(root, min);
+ root.width = size.x;
+ root.height = size.y;
+ root.getContext('2d').translate(-min.x, -min.y);
+ }
+});
- onRemove: function (map) {
- map._panes.popupPane.removeChild(this._container);
- L.Util.falseFn(this._container.offsetWidth); // force reflow
+/*
+ * L.LineUtil contains different utility functions for line segments
+ * and polylines (clipping, simplification, distances, etc.)
+ */
+
+/*jshint bitwise:false */ // allow bitwise oprations for this file
+
+L.LineUtil = {
+
+ // Simplify polyline with vertex reduction and Douglas-Peucker simplification.
+ // Improves rendering performance dramatically by lessening the number of points to draw.
+
+ simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
+ if (!tolerance || !points.length) {
+ return points.slice();
+ }
+
+ var sqTolerance = tolerance * tolerance;
+
+ // stage 1: vertex reduction
+ points = this._reducePoints(points, sqTolerance);
+
+ // stage 2: Douglas-Peucker simplification
+ points = this._simplifyDP(points, sqTolerance);
+
+ return points;
+ },
+
+ // distance from a point to a segment between two points
+ pointToSegmentDistance: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+ return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
+ },
+
+ closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+ return this._sqClosestPointOnSegment(p, p1, p2);
+ },
+
+ // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
+ _simplifyDP: function (points, sqTolerance) {
+
+ var len = points.length,
+ ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
+ markers = new ArrayConstructor(len);
+
+ markers[0] = markers[len - 1] = 1;
+
+ this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
+
+ var i,
+ newPoints = [];
+
+ for (i = 0; i < len; i++) {
+ if (markers[i]) {
+ newPoints.push(points[i]);
+ }
+ }
+
+ return newPoints;
+ },
+
+ _simplifyDPStep: function (points, markers, sqTolerance, first, last) {
+
+ var maxSqDist = 0,
+ index, i, sqDist;
+
+ for (i = first + 1; i <= last - 1; i++) {
+ sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
+
+ if (sqDist > maxSqDist) {
+ index = i;
+ maxSqDist = sqDist;
+ }
+ }
+
+ if (maxSqDist > sqTolerance) {
+ markers[index] = 1;
+
+ this._simplifyDPStep(points, markers, sqTolerance, first, index);
+ this._simplifyDPStep(points, markers, sqTolerance, index, last);
+ }
+ },
+
+ // reduce points that are too close to each other to a single point
+ _reducePoints: function (points, sqTolerance) {
+ var reducedPoints = [points[0]];
+
+ for (var i = 1, prev = 0, len = points.length; i < len; i++) {
+ if (this._sqDist(points[i], points[prev]) > sqTolerance) {
+ reducedPoints.push(points[i]);
+ prev = i;
+ }
+ }
+ if (prev < len - 1) {
+ reducedPoints.push(points[len - 1]);
+ }
+ return reducedPoints;
+ },
+
+ // Cohen-Sutherland line clipping algorithm.
+ // Used to avoid rendering parts of a polyline that are not currently visible.
+
+ clipSegment: function (a, b, bounds, useLastCode) {
+ var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
+ codeB = this._getBitCode(b, bounds),
+
+ codeOut, p, newCode;
+
+ // save 2nd code to avoid calculating it on the next segment
+ this._lastCode = codeB;
+
+ while (true) {
+ // if a,b is inside the clip window (trivial accept)
+ if (!(codeA | codeB)) {
+ return [a, b];
+ // if a,b is outside the clip window (trivial reject)
+ } else if (codeA & codeB) {
+ return false;
+ // other cases
+ } else {
+ codeOut = codeA || codeB;
+ p = this._getEdgeIntersection(a, b, codeOut, bounds);
+ newCode = this._getBitCode(p, bounds);
+
+ if (codeOut === codeA) {
+ a = p;
+ codeA = newCode;
+ } else {
+ b = p;
+ codeB = newCode;
+ }
+ }
+ }
+ },
+
+ _getEdgeIntersection: function (a, b, code, bounds) {
+ var dx = b.x - a.x,
+ dy = b.y - a.y,
+ min = bounds.min,
+ max = bounds.max;
+
+ if (code & 8) { // top
+ return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
+ } else if (code & 4) { // bottom
+ return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
+ } else if (code & 2) { // right
+ return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
+ } else if (code & 1) { // left
+ return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
+ }
+ },
+
+ _getBitCode: function (/*Point*/ p, bounds) {
+ var code = 0;
+
+ if (p.x < bounds.min.x) { // left
+ code |= 1;
+ } else if (p.x > bounds.max.x) { // right
+ code |= 2;
+ }
+ if (p.y < bounds.min.y) { // bottom
+ code |= 4;
+ } else if (p.y > bounds.max.y) { // top
+ code |= 8;
+ }
+
+ return code;
+ },
+
+ // square distance (to avoid unnecessary Math.sqrt calls)
+ _sqDist: function (p1, p2) {
+ var dx = p2.x - p1.x,
+ dy = p2.y - p1.y;
+ return dx * dx + dy * dy;
+ },
+
+ // return closest point on segment or distance to that point
+ _sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
+ var x = p1.x,
+ y = p1.y,
+ dx = p2.x - x,
+ dy = p2.y - y,
+ dot = dx * dx + dy * dy,
+ t;
+
+ if (dot > 0) {
+ t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
+
+ if (t > 1) {
+ x = p2.x;
+ y = p2.y;
+ } else if (t > 0) {
+ x += dx * t;
+ y += dy * t;
+ }
+ }
+
+ dx = p.x - x;
+ dy = p.y - y;
+
+ return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
+ }
+};
- map.off({
- viewreset: this._updatePosition,
- preclick: this._close,
- zoomanim: this._zoomAnimation
- }, this);
- if (map.options.fadeAnimation) {
- L.DomUtil.setOpacity(this._container, 0);
- }
+/*
+ * L.Polyline is used to display polylines on a map.
+ */
+
+L.Polyline = L.Path.extend({
+ initialize: function (latlngs, options) {
+ L.Path.prototype.initialize.call(this, options);
+
+ this._latlngs = this._convertLatLngs(latlngs);
+ },
+
+ options: {
+ // how much to simplify the polyline on each zoom level
+ // more = better performance and smoother look, less = more accurate
+ smoothFactor: 1.0,
+ noClip: false
+ },
+
+ projectLatlngs: function () {
+ this._originalPoints = [];
+
+ for (var i = 0, len = this._latlngs.length; i < len; i++) {
+ this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
+ }
+ },
+
+ getPathString: function () {
+ for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
+ str += this._getPathPartStr(this._parts[i]);
+ }
+ return str;
+ },
+
+ getLatLngs: function () {
+ return this._latlngs;
+ },
+
+ setLatLngs: function (latlngs) {
+ this._latlngs = this._convertLatLngs(latlngs);
+ return this.redraw();
+ },
+
+ addLatLng: function (latlng) {
+ this._latlngs.push(L.latLng(latlng));
+ return this.redraw();
+ },
+
+ spliceLatLngs: function () { // (Number index, Number howMany)
+ var removed = [].splice.apply(this._latlngs, arguments);
+ this._convertLatLngs(this._latlngs, true);
+ this.redraw();
+ return removed;
+ },
+
+ closestLayerPoint: function (p) {
+ var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
+
+ for (var j = 0, jLen = parts.length; j < jLen; j++) {
+ var points = parts[j];
+ for (var i = 1, len = points.length; i < len; i++) {
+ p1 = points[i - 1];
+ p2 = points[i];
+ var sqDist = L.LineUtil._sqClosestPointOnSegment(p, p1, p2, true);
+ if (sqDist < minDistance) {
+ minDistance = sqDist;
+ minPoint = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
+ }
+ }
+ }
+ if (minPoint) {
+ minPoint.distance = Math.sqrt(minDistance);
+ }
+ return minPoint;
+ },
+
+ getBounds: function () {
+ return new L.LatLngBounds(this.getLatLngs());
+ },
+
+ _convertLatLngs: function (latlngs, overwrite) {
+ var i, len, target = overwrite ? latlngs : [];
+
+ for (i = 0, len = latlngs.length; i < len; i++) {
+ if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') {
+ return;
+ }
+ target[i] = L.latLng(latlngs[i]);
+ }
+ return target;
+ },
+
+ _initEvents: function () {
+ L.Path.prototype._initEvents.call(this);
+ },
+
+ _getPathPartStr: function (points) {
+ var round = L.Path.VML;
+
+ for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
+ p = points[j];
+ if (round) {
+ p._round();
+ }
+ str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
+ }
+ return str;
+ },
+
+ _clipPoints: function () {
+ var points = this._originalPoints,
+ len = points.length,
+ i, k, segment;
+
+ if (this.options.noClip) {
+ this._parts = [points];
+ return;
+ }
+
+ this._parts = [];
+
+ var parts = this._parts,
+ vp = this._map._pathViewport,
+ lu = L.LineUtil;
+
+ for (i = 0, k = 0; i < len - 1; i++) {
+ segment = lu.clipSegment(points[i], points[i + 1], vp, i);
+ if (!segment) {
+ continue;
+ }
+
+ parts[k] = parts[k] || [];
+ parts[k].push(segment[0]);
+
+ // if segment goes out of screen, or it's the last one, it's the end of the line part
+ if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
+ parts[k].push(segment[1]);
+ k++;
+ }
+ }
+ },
+
+ // simplify each clipped part of the polyline
+ _simplifyPoints: function () {
+ var parts = this._parts,
+ lu = L.LineUtil;
+
+ for (var i = 0, len = parts.length; i < len; i++) {
+ parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
+ }
+ },
+
+ _updatePath: function () {
+ if (!this._map) { return; }
+
+ this._clipPoints();
+ this._simplifyPoints();
+
+ L.Path.prototype._updatePath.call(this);
+ }
+});
+
+L.polyline = function (latlngs, options) {
+ return new L.Polyline(latlngs, options);
+};
- this._map = null;
- },
- setLatLng: function (latlng) {
- this._latlng = L.latLng(latlng);
- this._update();
- return this;
- },
+/*
+ * L.PolyUtil contains utility functions for polygons (clipping, etc.).
+ */
+
+/*jshint bitwise:false */ // allow bitwise operations here
+
+L.PolyUtil = {};
+
+/*
+ * Sutherland-Hodgeman polygon clipping algorithm.
+ * Used to avoid rendering parts of a polygon that are not currently visible.
+ */
+L.PolyUtil.clipPolygon = function (points, bounds) {
+ var clippedPoints,
+ edges = [1, 4, 2, 8],
+ i, j, k,
+ a, b,
+ len, edge, p,
+ lu = L.LineUtil;
+
+ for (i = 0, len = points.length; i < len; i++) {
+ points[i]._code = lu._getBitCode(points[i], bounds);
+ }
+
+ // for each edge (left, bottom, right, top)
+ for (k = 0; k < 4; k++) {
+ edge = edges[k];
+ clippedPoints = [];
+
+ for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
+ a = points[i];
+ b = points[j];
+
+ // if a is inside the clip window
+ if (!(a._code & edge)) {
+ // if b is outside the clip window (a->b goes out of screen)
+ if (b._code & edge) {
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
+ p._code = lu._getBitCode(p, bounds);
+ clippedPoints.push(p);
+ }
+ clippedPoints.push(a);
+
+ // else if b is inside the clip window (a->b enters the screen)
+ } else if (!(b._code & edge)) {
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
+ p._code = lu._getBitCode(p, bounds);
+ clippedPoints.push(p);
+ }
+ }
+ points = clippedPoints;
+ }
+
+ return points;
+};
- setContent: function (content) {
- this._content = content;
- this._update();
- return this;
- },
- _close: function () {
- var map = this._map;
+/*
+ * L.Polygon is used to display polygons on a map.
+ */
+
+L.Polygon = L.Polyline.extend({
+ options: {
+ fill: true
+ },
+
+ initialize: function (latlngs, options) {
+ var i, len, hole;
+
+ L.Polyline.prototype.initialize.call(this, latlngs, options);
+
+ if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
+ this._latlngs = this._convertLatLngs(latlngs[0]);
+ this._holes = latlngs.slice(1);
+
+ for (i = 0, len = this._holes.length; i < len; i++) {
+ hole = this._holes[i] = this._convertLatLngs(this._holes[i]);
+ if (hole[0].equals(hole[hole.length - 1])) {
+ hole.pop();
+ }
+ }
+ }
+
+ // filter out last point if its equal to the first one
+ latlngs = this._latlngs;
+
+ if (latlngs.length >= 2 && latlngs[0].equals(latlngs[latlngs.length - 1])) {
+ latlngs.pop();
+ }
+ },
+
+ projectLatlngs: function () {
+ L.Polyline.prototype.projectLatlngs.call(this);
+
+ // project polygon holes points
+ // TODO move this logic to Polyline to get rid of duplication
+ this._holePoints = [];
+
+ if (!this._holes) { return; }
+
+ var i, j, len, len2;
+
+ for (i = 0, len = this._holes.length; i < len; i++) {
+ this._holePoints[i] = [];
+
+ for (j = 0, len2 = this._holes[i].length; j < len2; j++) {
+ this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
+ }
+ }
+ },
+
+ _clipPoints: function () {
+ var points = this._originalPoints,
+ newParts = [];
+
+ this._parts = [points].concat(this._holePoints);
+
+ if (this.options.noClip) { return; }
+
+ for (var i = 0, len = this._parts.length; i < len; i++) {
+ var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
+ if (clipped.length) {
+ newParts.push(clipped);
+ }
+ }
+
+ this._parts = newParts;
+ },
+
+ _getPathPartStr: function (points) {
+ var str = L.Polyline.prototype._getPathPartStr.call(this, points);
+ return str + (L.Browser.svg ? 'z' : 'x');
+ }
+});
+
+L.polygon = function (latlngs, options) {
+ return new L.Polygon(latlngs, options);
+};
- if (map) {
- map._popup = null;
- map
- .removeLayer(this)
- .fire('popupclose', {popup: this});
- }
- },
+/*
+ * Contains L.MultiPolyline and L.MultiPolygon layers.
+ */
+
+(function () {
+ function createMulti(Klass) {
+
+ return L.FeatureGroup.extend({
+
+ initialize: function (latlngs, options) {
+ this._layers = {};
+ this._options = options;
+ this.setLatLngs(latlngs);
+ },
+
+ setLatLngs: function (latlngs) {
+ var i = 0,
+ len = latlngs.length;
+
+ this.eachLayer(function (layer) {
+ if (i < len) {
+ layer.setLatLngs(latlngs[i++]);
+ } else {
+ this.removeLayer(layer);
+ }
+ }, this);
+
+ while (i < len) {
+ this.addLayer(new Klass(latlngs[i++], this._options));
+ }
+
+ return this;
+ }
+ });
+ }
+
+ L.MultiPolyline = createMulti(L.Polyline);
+ L.MultiPolygon = createMulti(L.Polygon);
+
+ L.multiPolyline = function (latlngs, options) {
+ return new L.MultiPolyline(latlngs, options);
+ };
+
+ L.multiPolygon = function (latlngs, options) {
+ return new L.MultiPolygon(latlngs, options);
+ };
+}());
- _initLayout: function () {
- var prefix = 'leaflet-popup',
- containerClass = prefix + ' ' + this.options.className + ' leaflet-zoom-' +
- (this._animated ? 'animated' : 'hide'),
- container = this._container = L.DomUtil.create('div', containerClass),
- closeButton;
- if (this.options.closeButton) {
- closeButton = this._closeButton =
- L.DomUtil.create('a', prefix + '-close-button', container);
- closeButton.href = '#close';
- closeButton.innerHTML = '×';
+/*
+ * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
+ */
+
+L.Rectangle = L.Polygon.extend({
+ initialize: function (latLngBounds, options) {
+ L.Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
+ },
+
+ setBounds: function (latLngBounds) {
+ this.setLatLngs(this._boundsToLatLngs(latLngBounds));
+ },
+
+ _boundsToLatLngs: function (latLngBounds) {
+ latLngBounds = L.latLngBounds(latLngBounds);
+ return [
+ latLngBounds.getSouthWest(),
+ latLngBounds.getNorthWest(),
+ latLngBounds.getNorthEast(),
+ latLngBounds.getSouthEast()
+ ];
+ }
+});
+
+L.rectangle = function (latLngBounds, options) {
+ return new L.Rectangle(latLngBounds, options);
+};
- L.DomEvent.on(closeButton, 'click', this._onCloseButtonClick, this);
- }
- var wrapper = this._wrapper =
- L.DomUtil.create('div', prefix + '-content-wrapper', container);
- L.DomEvent.disableClickPropagation(wrapper);
+/*
+ * L.Circle is a circle overlay (with a certain radius in meters).
+ */
+
+L.Circle = L.Path.extend({
+ initialize: function (latlng, radius, options) {
+ L.Path.prototype.initialize.call(this, options);
+
+ this._latlng = L.latLng(latlng);
+ this._mRadius = radius;
+ },
+
+ options: {
+ fill: true
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = L.latLng(latlng);
+ return this.redraw();
+ },
+
+ setRadius: function (radius) {
+ this._mRadius = radius;
+ return this.redraw();
+ },
+
+ projectLatlngs: function () {
+ var lngRadius = this._getLngRadius(),
+ latlng = this._latlng,
+ pointLeft = this._map.latLngToLayerPoint([latlng.lat, latlng.lng - lngRadius]);
+
+ this._point = this._map.latLngToLayerPoint(latlng);
+ this._radius = Math.max(this._point.x - pointLeft.x, 1);
+ },
+
+ getBounds: function () {
+ var lngRadius = this._getLngRadius(),
+ latRadius = (this._mRadius / 40075017) * 360,
+ latlng = this._latlng;
+
+ return new L.LatLngBounds(
+ [latlng.lat - latRadius, latlng.lng - lngRadius],
+ [latlng.lat + latRadius, latlng.lng + lngRadius]);
+ },
+
+ getLatLng: function () {
+ return this._latlng;
+ },
+
+ getPathString: function () {
+ var p = this._point,
+ r = this._radius;
+
+ if (this._checkIfEmpty()) {
+ return '';
+ }
+
+ if (L.Browser.svg) {
+ return 'M' + p.x + ',' + (p.y - r) +
+ 'A' + r + ',' + r + ',0,1,1,' +
+ (p.x - 0.1) + ',' + (p.y - r) + ' z';
+ } else {
+ p._round();
+ r = Math.round(r);
+ return 'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r + ' 0,' + (65535 * 360);
+ }
+ },
+
+ getRadius: function () {
+ return this._mRadius;
+ },
+
+ // TODO Earth hardcoded, move into projection code!
+
+ _getLatRadius: function () {
+ return (this._mRadius / 40075017) * 360;
+ },
+
+ _getLngRadius: function () {
+ return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
+ },
+
+ _checkIfEmpty: function () {
+ if (!this._map) {
+ return false;
+ }
+ var vp = this._map._pathViewport,
+ r = this._radius,
+ p = this._point;
+
+ return p.x - r > vp.max.x || p.y - r > vp.max.y ||
+ p.x + r < vp.min.x || p.y + r < vp.min.y;
+ }
+});
+
+L.circle = function (latlng, radius, options) {
+ return new L.Circle(latlng, radius, options);
+};
- this._contentNode = L.DomUtil.create('div', prefix + '-content', wrapper);
- L.DomEvent.on(this._contentNode, 'mousewheel', L.DomEvent.stopPropagation);
- this._tipContainer = L.DomUtil.create('div', prefix + '-tip-container', container);
- this._tip = L.DomUtil.create('div', prefix + '-tip', this._tipContainer);
- },
+/*
+ * L.CircleMarker is a circle overlay with a permanent pixel radius.
+ */
+
+L.CircleMarker = L.Circle.extend({
+ options: {
+ radius: 10,
+ weight: 2
+ },
+
+ initialize: function (latlng, options) {
+ L.Circle.prototype.initialize.call(this, latlng, null, options);
+ this._radius = this.options.radius;
+ },
+
+ projectLatlngs: function () {
+ this._point = this._map.latLngToLayerPoint(this._latlng);
+ },
+
+ _updateStyle : function () {
+ L.Circle.prototype._updateStyle.call(this);
+ this.setRadius(this.options.radius);
+ },
+
+ setRadius: function (radius) {
+ this.options.radius = this._radius = radius;
+ return this.redraw();
+ }
+});
+
+L.circleMarker = function (latlng, options) {
+ return new L.CircleMarker(latlng, options);
+};
- _update: function () {
- if (!this._map) { return; }
- this._container.style.visibility = 'hidden';
+/*
+ * Extends L.Polyline to be able to manually detect clicks on Canvas-rendered polylines.
+ */
+
+L.Polyline.include(!L.Path.CANVAS ? {} : {
+ _containsPoint: function (p, closed) {
+ var i, j, k, len, len2, dist, part,
+ w = this.options.weight / 2;
+
+ if (L.Browser.touch) {
+ w += 10; // polyline click tolerance on touch devices
+ }
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ part = this._parts[i];
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+ if (!closed && (j === 0)) {
+ continue;
+ }
+
+ dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
+
+ if (dist <= w) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+});
- this._updateContent();
- this._updateLayout();
- this._updatePosition();
- this._container.style.visibility = '';
+/*
+ * Extends L.Polygon to be able to manually detect clicks on Canvas-rendered polygons.
+ */
+
+L.Polygon.include(!L.Path.CANVAS ? {} : {
+ _containsPoint: function (p) {
+ var inside = false,
+ part, p1, p2,
+ i, j, k,
+ len, len2;
+
+ // TODO optimization: check if within bounds first
+
+ if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
+ // click on polygon border
+ return true;
+ }
+
+ // ray casting algorithm for detecting if point is in polygon
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ part = this._parts[i];
+
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+ p1 = part[j];
+ p2 = part[k];
+
+ if (((p1.y > p.y) !== (p2.y > p.y)) &&
+ (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
+ inside = !inside;
+ }
+ }
+ }
+
+ return inside;
+ }
+});
- this._adjustPan();
- },
- _updateContent: function () {
- if (!this._content) { return; }
+/*
+ * Extends L.Circle with Canvas-specific code.
+ */
+
+L.Circle.include(!L.Path.CANVAS ? {} : {
+ _drawPath: function () {
+ var p = this._point;
+ this._ctx.beginPath();
+ this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2, false);
+ },
+
+ _containsPoint: function (p) {
+ var center = this._point,
+ w2 = this.options.stroke ? this.options.weight / 2 : 0;
+
+ return (p.distanceTo(center) <= this._radius + w2);
+ }
+});
- if (typeof this._content === 'string') {
- this._contentNode.innerHTML = this._content;
- } else {
- while (this._contentNode.hasChildNodes()) {
- this._contentNode.removeChild(this._contentNode.firstChild);
- }
- this._contentNode.appendChild(this._content);
- }
- this.fire('contentupdate');
- },
- _updateLayout: function () {
- var container = this._contentNode,
- style = container.style;
-
- style.width = '';
- style.whiteSpace = 'nowrap';
-
- var width = container.offsetWidth;
- width = Math.min(width, this.options.maxWidth);
- width = Math.max(width, this.options.minWidth);
-
- style.width = (width + 1) + 'px';
- style.whiteSpace = '';
-
- style.height = '';
-
- var height = container.offsetHeight,
- maxHeight = this.options.maxHeight,
- scrolledClass = 'leaflet-popup-scrolled';
-
- if (maxHeight && height > maxHeight) {
- style.height = maxHeight + 'px';
- L.DomUtil.addClass(container, scrolledClass);
- } else {
- L.DomUtil.removeClass(container, scrolledClass);
- }
-
- this._containerWidth = this._container.offsetWidth;
- },
-
- _updatePosition: function () {
- if (!this._map) { return; }
-
- var pos = this._map.latLngToLayerPoint(this._latlng),
- animated = this._animated,
- offset = this.options.offset;
-
- if (animated) {
- L.DomUtil.setPosition(this._container, pos);
- }
-
- this._containerBottom = -offset.y - (animated ? 0 : pos.y);
- this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x + (animated ? 0 : pos.x);
-
- //Bottom position the popup in case the height of the popup changes (images loading etc)
- this._container.style.bottom = this._containerBottom + 'px';
- this._container.style.left = this._containerLeft + 'px';
- },
-
- _zoomAnimation: function (opt) {
- var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
-
- L.DomUtil.setPosition(this._container, pos);
- },
-
- _adjustPan: function () {
- if (!this.options.autoPan) { return; }
-
- var map = this._map,
- containerHeight = this._container.offsetHeight,
- containerWidth = this._containerWidth,
-
- layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);
-
- if (this._animated) {
- layerPos._add(L.DomUtil.getPosition(this._container));
- }
-
- var containerPos = map.layerPointToContainerPoint(layerPos),
- padding = this.options.autoPanPadding,
- size = map.getSize(),
- dx = 0,
- dy = 0;
-
- if (containerPos.x < 0) {
- dx = containerPos.x - padding.x;
- }
- if (containerPos.x + containerWidth > size.x) {
- dx = containerPos.x + containerWidth - size.x + padding.x;
- }
- if (containerPos.y < 0) {
- dy = containerPos.y - padding.y;
- }
- if (containerPos.y + containerHeight > size.y) {
- dy = containerPos.y + containerHeight - size.y + padding.y;
- }
-
- if (dx || dy) {
- map.panBy(new L.Point(dx, dy));
- }
- },
-
- _onCloseButtonClick: function (e) {
- this._close();
- L.DomEvent.stop(e);
- }
-});
-
-L.popup = function (options, source) {
- return new L.Popup(options, source);
-};
-
-
/*
- * Popup extension to L.Marker, adding popup-related methods.
+ * CircleMarker canvas specific drawing parts.
*/
-L.Marker.include({
- openPopup: function () {
- if (this._popup && this._map) {
- this._popup.setLatLng(this._latlng);
- this._map.openPopup(this._popup);
- }
-
- return this;
- },
-
- closePopup: function () {
- if (this._popup) {
- this._popup._close();
- }
- return this;
- },
-
- bindPopup: function (content, options) {
- var anchor = L.point(this.options.icon.options.popupAnchor) || new L.Point(0, 0);
-
- anchor = anchor.add(L.Popup.prototype.options.offset);
-
- if (options && options.offset) {
- anchor = anchor.add(options.offset);
- }
-
- options = L.extend({offset: anchor}, options);
-
- if (!this._popup) {
- this
- .on('click', this.openPopup, this)
- .on('remove', this.closePopup, this)
- .on('move', this._movePopup, this);
- }
-
- this._popup = new L.Popup(options, this)
- .setContent(content);
-
- return this;
- },
-
- unbindPopup: function () {
- if (this._popup) {
- this._popup = null;
- this
- .off('click', this.openPopup)
- .off('remove', this.closePopup)
- .off('move', this._movePopup);
- }
- return this;
- },
-
- _movePopup: function (e) {
- this._popup.setLatLng(e.latlng);
- }
-});
-
-
-/*
- * Adds popup-related methods to L.Map.
- */
-
-L.Map.include({
- openPopup: function (popup) {
- this.closePopup();
-
- this._popup = popup;
-
- return this
- .addLayer(popup)
- .fire('popupopen', {popup: this._popup});
- },
-
- closePopup: function () {
- if (this._popup) {
- this._popup._close();
- }
- return this;
- }
-});
-
-
-/*
- * L.LayerGroup is a class to combine several layers into one so that
- * you can manipulate the group (e.g. add/remove it) as one layer.
- */
-
-L.LayerGroup = L.Class.extend({
- initialize: function (layers) {
- this._layers = {};
-
- var i, len;
-
- if (layers) {
- for (i = 0, len = layers.length; i < len; i++) {
- this.addLayer(layers[i]);
- }
- }
- },
-
- addLayer: function (layer) {
- var id = L.stamp(layer);
-
- this._layers[id] = layer;
-
- if (this._map) {
- this._map.addLayer(layer);
- }
-
- return this;
- },
-
- removeLayer: function (layer) {
- var id = L.stamp(layer);
-
- delete this._layers[id];
-
- if (this._map) {
- this._map.removeLayer(layer);
- }
-
- return this;
- },
-
- clearLayers: function () {
- this.eachLayer(this.removeLayer, this);
- return this;
- },
-
- invoke: function (methodName) {
- var args = Array.prototype.slice.call(arguments, 1),
- i, layer;
-
- for (i in this._layers) {
- if (this._layers.hasOwnProperty(i)) {
- layer = this._layers[i];
-
- if (layer[methodName]) {
- layer[methodName].apply(layer, args);
- }
- }
- }
-
- return this;
- },
-
- onAdd: function (map) {
- this._map = map;
- this.eachLayer(map.addLayer, map);
- },
-
- onRemove: function (map) {
- this.eachLayer(map.removeLayer, map);
- this._map = null;
- },
-
- addTo: function (map) {
- map.addLayer(this);
- return this;
- },
-
- eachLayer: function (method, context) {
- for (var i in this._layers) {
- if (this._layers.hasOwnProperty(i)) {
- method.call(context, this._layers[i]);
- }
- }
- },
-
- setZIndex: function (zIndex) {
- return this.invoke('setZIndex', zIndex);
- }
-});
-
-L.layerGroup = function (layers) {
- return new L.LayerGroup(layers);
-};
-
-
-/*
- * L.FeatureGroup extends L.LayerGroup by introducing mouse events and additional methods
- * shared between a group of interactive layers (like vectors or markers).
- */
-
-L.FeatureGroup = L.LayerGroup.extend({
- includes: L.Mixin.Events,
-
- statics: {
- EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu'
- },
-
- addLayer: function (layer) {
- if (this._layers[L.stamp(layer)]) {
- return this;
- }
-
- layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
-
- L.LayerGroup.prototype.addLayer.call(this, layer);
-
- if (this._popupContent && layer.bindPopup) {
- layer.bindPopup(this._popupContent, this._popupOptions);
- }
-
- return this.fire('layeradd', {layer: layer});
- },
-
- removeLayer: function (layer) {
- layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
-
- L.LayerGroup.prototype.removeLayer.call(this, layer);
-
-
- if (this._popupContent) {
- this.invoke('unbindPopup');
- }
-
- return this.fire('layerremove', {layer: layer});
- },
-
- bindPopup: function (content, options) {
- this._popupContent = content;
- this._popupOptions = options;
- return this.invoke('bindPopup', content, options);
- },
-
- setStyle: function (style) {
- return this.invoke('setStyle', style);
- },
-
- bringToFront: function () {
- return this.invoke('bringToFront');
- },
-
- bringToBack: function () {
- return this.invoke('bringToBack');
- },
-
- getBounds: function () {
- var bounds = new L.LatLngBounds();
-
- this.eachLayer(function (layer) {
- bounds.extend(layer instanceof L.Marker ? layer.getLatLng() : layer.getBounds());
- });
-
- return bounds;
- },
-
- _propagateEvent: function (e) {
- e.layer = e.target;
- e.target = this;
-
- this.fire(e.type, e);
- }
-});
-
-L.featureGroup = function (layers) {
- return new L.FeatureGroup(layers);
-};
-
-
-/*
- * L.Path is a base class for rendering vector paths on a map. Inherited by Polyline, Circle, etc.
- */
-
-L.Path = L.Class.extend({
- includes: [L.Mixin.Events],
-
- statics: {
- // how much to extend the clip area around the map view
- // (relative to its size, e.g. 0.5 is half the screen in each direction)
- // set it so that SVG element doesn't exceed 1280px (vectors flicker on dragend if it is)
- CLIP_PADDING: L.Browser.mobile ?
- Math.max(0, Math.min(0.5,
- (1280 / Math.max(window.innerWidth, window.innerHeight) - 1) / 2)) : 0.5
- },
-
- options: {
- stroke: true,
- color: '#0033ff',
- dashArray: null,
- weight: 5,
- opacity: 0.5,
-
- fill: false,
- fillColor: null, //same as color by default
- fillOpacity: 0.2,
-
- clickable: true
- },
-
- initialize: function (options) {
- L.setOptions(this, options);
- },
-
- onAdd: function (map) {
- this._map = map;
-
- if (!this._container) {
- this._initElements();
- this._initEvents();
- }
-
- this.projectLatlngs();
- this._updatePath();
-
- if (this._container) {
- this._map._pathRoot.appendChild(this._container);
- }
-
- this.fire('add');
-
- map.on({
- 'viewreset': this.projectLatlngs,
- 'moveend': this._updatePath
- }, this);
- },
-
- addTo: function (map) {
- map.addLayer(this);
- return this;
- },
-
- onRemove: function (map) {
- map._pathRoot.removeChild(this._container);
-
- // Need to fire remove event before we set _map to null as the event hooks might need the object
- this.fire('remove');
- this._map = null;
-
- if (L.Browser.vml) {
- this._container = null;
- this._stroke = null;
- this._fill = null;
- }
-
- map.off({
- 'viewreset': this.projectLatlngs,
- 'moveend': this._updatePath
- }, this);
- },
-
- projectLatlngs: function () {
- // do all projection stuff here
- },
-
- setStyle: function (style) {
- L.setOptions(this, style);
-
- if (this._container) {
- this._updateStyle();
- }
-
- return this;
- },
-
- redraw: function () {
- if (this._map) {
- this.projectLatlngs();
- this._updatePath();
- }
- return this;
- }
-});
-
-L.Map.include({
- _updatePathViewport: function () {
- var p = L.Path.CLIP_PADDING,
- size = this.getSize(),
- panePos = L.DomUtil.getPosition(this._mapPane),
- min = panePos.multiplyBy(-1)._subtract(size.multiplyBy(p)._round()),
- max = min.add(size.multiplyBy(1 + p * 2)._round());
-
- this._pathViewport = new L.Bounds(min, max);
- }
-});
-
-
-/*
- * Extends L.Path with SVG-specific rendering code.
- */
-
-L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
-
-L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
-
-L.Path = L.Path.extend({
- statics: {
- SVG: L.Browser.svg
- },
-
- bringToFront: function () {
- var root = this._map._pathRoot,
- path = this._container;
-
- if (path && root.lastChild !== path) {
- root.appendChild(path);
- }
- return this;
- },
-
- bringToBack: function () {
- var root = this._map._pathRoot,
- path = this._container,
- first = root.firstChild;
-
- if (path && first !== path) {
- root.insertBefore(path, first);
- }
- return this;
- },
-
- getPathString: function () {
- // form path string here
- },
-
- _createElement: function (name) {
- return document.createElementNS(L.Path.SVG_NS, name);
- },
-
- _initElements: function () {
- this._map._initPathRoot();
- this._initPath();
- this._initStyle();
- },
-
- _initPath: function () {
- this._container = this._createElement('g');
-
- this._path = this._createElement('path');
- this._container.appendChild(this._path);
- },
-
- _initStyle: function () {
- if (this.options.stroke) {
- this._path.setAttribute('stroke-linejoin', 'round');
- this._path.setAttribute('stroke-linecap', 'round');
- }
- if (this.options.fill) {
- this._path.setAttribute('fill-rule', 'evenodd');
- }
- this._updateStyle();
- },
-
+L.CircleMarker.include(!L.Path.CANVAS ? {} : {
_updateStyle: function () {
- if (this.options.stroke) {
- this._path.setAttribute('stroke', this.options.color);
- this._path.setAttribute('stroke-opacity', this.options.opacity);
- this._path.setAttribute('stroke-width', this.options.weight);
- if (this.options.dashArray) {
- this._path.setAttribute('stroke-dasharray', this.options.dashArray);
- } else {
- this._path.removeAttribute('stroke-dasharray');
- }
- } else {
- this._path.setAttribute('stroke', 'none');
- }
- if (this.options.fill) {
- this._path.setAttribute('fill', this.options.fillColor || this.options.color);
- this._path.setAttribute('fill-opacity', this.options.fillOpacity);
- } else {
- this._path.setAttribute('fill', 'none');
- }
- },
-
- _updatePath: function () {
- var str = this.getPathString();
- if (!str) {
- // fix webkit empty string parsing bug
- str = 'M0 0';
- }
- this._path.setAttribute('d', str);
- },
-
- // TODO remove duplication with L.Map
- _initEvents: function () {
- if (this.options.clickable) {
- if (L.Browser.svg || !L.Browser.vml) {
- this._path.setAttribute('class', 'leaflet-clickable');
- }
-
- L.DomEvent.on(this._container, 'click', this._onMouseClick, this);
-
- var events = ['dblclick', 'mousedown', 'mouseover',
- 'mouseout', 'mousemove', 'contextmenu'];
- for (var i = 0; i < events.length; i++) {
- L.DomEvent.on(this._container, events[i], this._fireMouseEvent, this);
- }
- }
- },
-
- _onMouseClick: function (e) {
- if (this._map.dragging && this._map.dragging.moved()) { return; }
-
- this._fireMouseEvent(e);
- },
-
- _fireMouseEvent: function (e) {
- if (!this.hasEventListeners(e.type)) { return; }
-
- var map = this._map,
- containerPoint = map.mouseEventToContainerPoint(e),
- layerPoint = map.containerPointToLayerPoint(containerPoint),
- latlng = map.layerPointToLatLng(layerPoint);
-
- this.fire(e.type, {
- latlng: latlng,
- layerPoint: layerPoint,
- containerPoint: containerPoint,
- originalEvent: e
- });
-
- if (e.type === 'contextmenu') {
- L.DomEvent.preventDefault(e);
- }
- if (e.type !== 'mousemove') {
- L.DomEvent.stopPropagation(e);
- }
+ L.Path.prototype._updateStyle.call(this);
}
});
-L.Map.include({
- _initPathRoot: function () {
- if (!this._pathRoot) {
- this._pathRoot = L.Path.prototype._createElement('svg');
- this._panes.overlayPane.appendChild(this._pathRoot);
- if (this.options.zoomAnimation && L.Browser.any3d) {
- this._pathRoot.setAttribute('class', ' leaflet-zoom-animated');
+/*
+ * L.GeoJSON turns any GeoJSON data into a Leaflet layer.
+ */
+
+L.GeoJSON = L.FeatureGroup.extend({
+
+ initialize: function (geojson, options) {
+ L.setOptions(this, options);
+
+ this._layers = {};
+
+ if (geojson) {
+ this.addData(geojson);
+ }
+ },
+
+ addData: function (geojson) {
+ var features = L.Util.isArray(geojson) ? geojson : geojson.features,
+ i, len;
+
+ if (features) {
+ for (i = 0, len = features.length; i < len; i++) {
+ // Only add this if geometry or geometries are set and not null
+ if (features[i].geometries || features[i].geometry || features[i].features) {
+ this.addData(features[i]);
+ }
+ }
+ return this;
+ }
+
+ var options = this.options;
+
+ if (options.filter && !options.filter(geojson)) { return; }
+
+ var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng);
+ layer.feature = L.GeoJSON.asFeature(geojson);
+
+ layer.defaultOptions = layer.options;
+ this.resetStyle(layer);
+
+ if (options.onEachFeature) {
+ options.onEachFeature(geojson, layer);
+ }
+
+ return this.addLayer(layer);
+ },
+
+ resetStyle: function (layer) {
+ var style = this.options.style;
+ if (style) {
+ // reset any custom styles
+ L.Util.extend(layer.options, layer.defaultOptions);
+
+ this._setLayerStyle(layer, style);
+ }
+ },
+
+ setStyle: function (style) {
+ this.eachLayer(function (layer) {
+ this._setLayerStyle(layer, style);
+ }, this);
+ },
+
+ _setLayerStyle: function (layer, style) {
+ if (typeof style === 'function') {
+ style = style(layer.feature);
+ }
+ if (layer.setStyle) {
+ layer.setStyle(style);
+ }
+ }
+});
+
+L.extend(L.GeoJSON, {
+ geometryToLayer: function (geojson, pointToLayer, coordsToLatLng) {
+ var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
+ coords = geometry.coordinates,
+ layers = [],
+ latlng, latlngs, i, len, layer;
+
+ coordsToLatLng = coordsToLatLng || this.coordsToLatLng;
+
+ switch (geometry.type) {
+ case 'Point':
+ latlng = coordsToLatLng(coords);
+ return pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
+
+ case 'MultiPoint':
+ for (i = 0, len = coords.length; i < len; i++) {
+ latlng = coordsToLatLng(coords[i]);
+ layer = pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
+ layers.push(layer);
+ }
+ return new L.FeatureGroup(layers);
+
+ case 'LineString':
+ latlngs = this.coordsToLatLngs(coords, 0, coordsToLatLng);
+ return new L.Polyline(latlngs);
+
+ case 'Polygon':
+ latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
+ return new L.Polygon(latlngs);
+
+ case 'MultiLineString':
+ latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
+ return new L.MultiPolyline(latlngs);
+
+ case 'MultiPolygon':
+ latlngs = this.coordsToLatLngs(coords, 2, coordsToLatLng);
+ return new L.MultiPolygon(latlngs);
+
+ case 'GeometryCollection':
+ for (i = 0, len = geometry.geometries.length; i < len; i++) {
+
+ layer = this.geometryToLayer({
+ geometry: geometry.geometries[i],
+ type: 'Feature',
+ properties: geojson.properties
+ }, pointToLayer, coordsToLatLng);
+
+ layers.push(layer);
+ }
+ return new L.FeatureGroup(layers);
+
+ default:
+ throw new Error('Invalid GeoJSON object.');
+ }
+ },
+
+ coordsToLatLng: function (coords) { // (Array[, Boolean]) -> LatLng
+ return new L.LatLng(coords[1], coords[0]);
+ },
+
+ coordsToLatLngs: function (coords, levelsDeep, coordsToLatLng) { // (Array[, Number, Function]) -> Array
+ var latlng, i, len,
+ latlngs = [];
+
+ for (i = 0, len = coords.length; i < len; i++) {
+ latlng = levelsDeep ?
+ this.coordsToLatLngs(coords[i], levelsDeep - 1, coordsToLatLng) :
+ (coordsToLatLng || this.coordsToLatLng)(coords[i]);
+
+ latlngs.push(latlng);
+ }
+
+ return latlngs;
+ },
+
+ latLngToCoords: function (latLng) {
+ return [latLng.lng, latLng.lat];
+ },
+
+ latLngsToCoords: function (latLngs) {
+ var coords = [];
+
+ for (var i = 0, len = latLngs.length; i < len; i++) {
+ coords.push(L.GeoJSON.latLngToCoords(latLngs[i]));
+ }
+
+ return coords;
+ },
+
+ getFeature: function (layer, newGeometry) {
+ return layer.feature ? L.extend({}, layer.feature, {geometry: newGeometry}) : L.GeoJSON.asFeature(newGeometry);
+ },
+
+ asFeature: function (geoJSON) {
+ if (geoJSON.type === 'Feature') {
+ return geoJSON;
+ }
+
+ return {
+ type: 'Feature',
+ properties: {},
+ geometry: geoJSON
+ };
+ }
+});
+
+var PointToGeoJSON = {
+ toGeoJSON: function () {
+ return L.GeoJSON.getFeature(this, {
+ type: 'Point',
+ coordinates: L.GeoJSON.latLngToCoords(this.getLatLng())
+ });
+ }
+};
+
+L.Marker.include(PointToGeoJSON);
+L.Circle.include(PointToGeoJSON);
+L.CircleMarker.include(PointToGeoJSON);
+
+L.Polyline.include({
+ toGeoJSON: function () {
+ return L.GeoJSON.getFeature(this, {
+ type: 'LineString',
+ coordinates: L.GeoJSON.latLngsToCoords(this.getLatLngs())
+ });
+ }
+});
+
+L.Polygon.include({
+ toGeoJSON: function () {
+ var coords = [L.GeoJSON.latLngsToCoords(this.getLatLngs())],
+ i, len, hole;
+
+ coords[0].push(coords[0][0]);
+
+ if (this._holes) {
+ for (i = 0, len = this._holes.length; i < len; i++) {
+ hole = L.GeoJSON.latLngsToCoords(this._holes[i]);
+ hole.push(hole[0]);
+ coords.push(hole);
+ }
+ }
+
+ return L.GeoJSON.getFeature(this, {
+ type: 'Polygon',
+ coordinates: coords
+ });
+ }
+});
+
+(function () {
+ function includeMulti(Klass, type) {
+ Klass.include({
+ toGeoJSON: function () {
+ var coords = [];
+
+ this.eachLayer(function (layer) {
+ coords.push(layer.toGeoJSON().geometry.coordinates);
+ });
+
+ return L.GeoJSON.getFeature(this, {
+ type: type,
+ coordinates: coords
+ });
+ }
+ });
+ }
+
+ includeMulti(L.MultiPolyline, 'MultiLineString');
+ includeMulti(L.MultiPolygon, 'MultiPolygon');
+}());
+
+L.LayerGroup.include({
+ toGeoJSON: function () {
+ var features = [];
+
+ this.eachLayer(function (layer) {
+ if (layer.toGeoJSON) {
+ features.push(L.GeoJSON.asFeature(layer.toGeoJSON()));
+ }
+ });
+
+ return {
+ type: 'FeatureCollection',
+ features: features
+ };
+ }
+});
+
+L.geoJson = function (geojson, options) {
+ return new L.GeoJSON(geojson, options);
+};
- this.on({
- 'zoomanim': this._animatePathZoom,
- 'zoomend': this._endPathZoom
- });
- } else {
- this._pathRoot.setAttribute('class', ' leaflet-zoom-hide');
- }
- this.on('moveend', this._updateSvgViewport);
- this._updateSvgViewport();
- }
- },
+/*
+ * L.DomEvent contains functions for working with DOM events.
+ */
+
+L.DomEvent = {
+ /* inspired by John Resig, Dean Edwards and YUI addEvent implementations */
+ addListener: function (obj, type, fn, context) { // (HTMLElement, String, Function[, Object])
+
+ var id = L.stamp(fn),
+ key = '_leaflet_' + type + id,
+ handler, originalHandler, newType;
+
+ if (obj[key]) { return this; }
+
+ handler = function (e) {
+ return fn.call(context || obj, e || L.DomEvent._getEvent());
+ };
+
+ if (L.Browser.msTouch && type.indexOf('touch') === 0) {
+ return this.addMsTouchListener(obj, type, handler, id);
+ }
+ if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
+ this.addDoubleTapListener(obj, handler, id);
+ }
+
+ if ('addEventListener' in obj) {
+
+ if (type === 'mousewheel') {
+ obj.addEventListener('DOMMouseScroll', handler, false);
+ obj.addEventListener(type, handler, false);
+
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+
+ originalHandler = handler;
+ newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
+
+ handler = function (e) {
+ if (!L.DomEvent._checkMouse(obj, e)) { return; }
+ return originalHandler(e);
+ };
+
+ obj.addEventListener(newType, handler, false);
+
+ } else if (type === 'click' && L.Browser.android) {
+ originalHandler = handler;
+ handler = function (e) {
+ return L.DomEvent._filterClick(e, originalHandler);
+ };
+
+ obj.addEventListener(type, handler, false);
+ } else {
+ obj.addEventListener(type, handler, false);
+ }
+
+ } else if ('attachEvent' in obj) {
+ obj.attachEvent('on' + type, handler);
+ }
+
+ obj[key] = handler;
+
+ return this;
+ },
+
+ removeListener: function (obj, type, fn) { // (HTMLElement, String, Function)
+
+ var id = L.stamp(fn),
+ key = '_leaflet_' + type + id,
+ handler = obj[key];
+
+ if (!handler) { return this; }
+
+ if (L.Browser.msTouch && type.indexOf('touch') === 0) {
+ this.removeMsTouchListener(obj, type, id);
+ } else if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
+ this.removeDoubleTapListener(obj, id);
+
+ } else if ('removeEventListener' in obj) {
+
+ if (type === 'mousewheel') {
+ obj.removeEventListener('DOMMouseScroll', handler, false);
+ obj.removeEventListener(type, handler, false);
+
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+ obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
+ } else {
+ obj.removeEventListener(type, handler, false);
+ }
+ } else if ('detachEvent' in obj) {
+ obj.detachEvent('on' + type, handler);
+ }
+
+ obj[key] = null;
+
+ return this;
+ },
+
+ stopPropagation: function (e) {
+
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ } else {
+ e.cancelBubble = true;
+ }
+ return this;
+ },
+
+ disableClickPropagation: function (el) {
+ var stop = L.DomEvent.stopPropagation;
+
+ for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
+ L.DomEvent.addListener(el, L.Draggable.START[i], stop);
+ }
+
+ return L.DomEvent
+ .addListener(el, 'click', L.DomEvent._fakeStop)
+ .addListener(el, 'dblclick', stop);
+ },
+
+ preventDefault: function (e) {
+
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ return this;
+ },
+
+ stop: function (e) {
+ return L.DomEvent.preventDefault(e).stopPropagation(e);
+ },
+
+ getMousePosition: function (e, container) {
+
+ var body = document.body,
+ docEl = document.documentElement,
+ x = e.pageX ? e.pageX : e.clientX + body.scrollLeft + docEl.scrollLeft,
+ y = e.pageY ? e.pageY : e.clientY + body.scrollTop + docEl.scrollTop,
+ pos = new L.Point(x, y);
+
+ return (container ? pos._subtract(L.DomUtil.getViewportOffset(container)) : pos);
+ },
+
+ getWheelDelta: function (e) {
+
+ var delta = 0;
+
+ if (e.wheelDelta) {
+ delta = e.wheelDelta / 120;
+ }
+ if (e.detail) {
+ delta = -e.detail / 3;
+ }
+ return delta;
+ },
+
+ _fakeStop: function stop(e) {
+ // fakes stopPropagation by setting a special event flag checked in Map mouse events handler
+ // jshint camelcase: false
+ e._leaflet_stop = true;
+ },
+
+ // check if element really left/entered the event target (for mouseenter/mouseleave)
+ _checkMouse: function (el, e) {
+
+ var related = e.relatedTarget;
+
+ if (!related) { return true; }
+
+ try {
+ while (related && (related !== el)) {
+ related = related.parentNode;
+ }
+ } catch (err) {
+ return false;
+ }
+ return (related !== el);
+ },
+
+ _getEvent: function () { // evil magic for IE
+ /*jshint noarg:false */
+ var e = window.event;
+ if (!e) {
+ var caller = arguments.callee.caller;
+ while (caller) {
+ e = caller['arguments'][0];
+ if (e && window.Event === e.constructor) {
+ break;
+ }
+ caller = caller.caller;
+ }
+ }
+ return e;
+ },
+
+ // this is a horrible workaround for a bug in Android where a single touch triggers two click events
+ _filterClick: function (e, handler) {
+ var timeStamp = (e.timeStamp || e.originalEvent.timeStamp),
+ elapsed = L.DomEvent._lastClick && (timeStamp - L.DomEvent._lastClick);
+
+ // are they closer together than 1000ms yet more than 100ms?
+ // Android typically triggers them ~300ms apart while multiple listeners
+ // on the same event should be triggered far faster;
+ // or check if click is simulated on the element, and if it is, reject any non-simulated events
+
+ if ((elapsed && elapsed > 100 && elapsed < 1000) || (e.target._simulatedClick && !e._simulated)) {
+ L.DomEvent.stop(e);
+ return;
+ }
+ L.DomEvent._lastClick = timeStamp;
+
+ return handler(e);
+ }
+};
+
+L.DomEvent.on = L.DomEvent.addListener;
+L.DomEvent.off = L.DomEvent.removeListener;
- _animatePathZoom: function (e) {
- var scale = this.getZoomScale(e.zoom),
- offset = this._getCenterOffset(e.center)._multiplyBy(-scale)._add(this._pathViewport.min);
- this._pathRoot.style[L.DomUtil.TRANSFORM] =
- L.DomUtil.getTranslateString(offset) + ' scale(' + scale + ') ';
+/*
+ * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
+ */
+
+L.Draggable = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ statics: {
+ START: L.Browser.touch ? ['touchstart', 'mousedown'] : ['mousedown'],
+ END: {
+ mousedown: 'mouseup',
+ touchstart: 'touchend',
+ MSPointerDown: 'touchend'
+ },
+ MOVE: {
+ mousedown: 'mousemove',
+ touchstart: 'touchmove',
+ MSPointerDown: 'touchmove'
+ }
+ },
+
+ initialize: function (element, dragStartTarget) {
+ this._element = element;
+ this._dragStartTarget = dragStartTarget || element;
+ },
+
+ enable: function () {
+ if (this._enabled) { return; }
+
+ for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
+ L.DomEvent.on(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
+ }
+
+ this._enabled = true;
+ },
+
+ disable: function () {
+ if (!this._enabled) { return; }
+
+ for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
+ L.DomEvent.off(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
+ }
+
+ this._enabled = false;
+ this._moved = false;
+ },
+
+ _onDown: function (e) {
+ if (e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
+
+ L.DomEvent
+ .stopPropagation(e);
+
+ if (L.Draggable._disabled) { return; }
+
+ L.DomUtil.disableImageDrag();
+ L.DomUtil.disableTextSelection();
+
+ var first = e.touches ? e.touches[0] : e,
+ el = first.target;
+
+ // if touching a link, highlight it
+ if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
+ L.DomUtil.addClass(el, 'leaflet-active');
+ }
+
+ this._moved = false;
+
+ if (this._moving) { return; }
+
+ this._startPoint = new L.Point(first.clientX, first.clientY);
+ this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
+
+ L.DomEvent
+ .on(document, L.Draggable.MOVE[e.type], this._onMove, this)
+ .on(document, L.Draggable.END[e.type], this._onUp, this);
+ },
+
+ _onMove: function (e) {
+ if (e.touches && e.touches.length > 1) { return; }
+
+ var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
+ newPoint = new L.Point(first.clientX, first.clientY),
+ offset = newPoint.subtract(this._startPoint);
+
+ if (!offset.x && !offset.y) { return; }
+
+ L.DomEvent.preventDefault(e);
+
+ if (!this._moved) {
+ this.fire('dragstart');
+
+ this._moved = true;
+ this._startPos = L.DomUtil.getPosition(this._element).subtract(offset);
+
+ if (!L.Browser.touch) {
+ L.DomUtil.addClass(document.body, 'leaflet-dragging');
+ }
+ }
+
+ this._newPos = this._startPos.add(offset);
+ this._moving = true;
+
+ L.Util.cancelAnimFrame(this._animRequest);
+ this._animRequest = L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
+ },
+
+ _updatePosition: function () {
+ this.fire('predrag');
+ L.DomUtil.setPosition(this._element, this._newPos);
+ this.fire('drag');
+ },
+
+ _onUp: function () {
+ if (!L.Browser.touch) {
+ L.DomUtil.removeClass(document.body, 'leaflet-dragging');
+ }
+
+ for (var i in L.Draggable.MOVE) {
+ L.DomEvent
+ .off(document, L.Draggable.MOVE[i], this._onMove)
+ .off(document, L.Draggable.END[i], this._onUp);
+ }
+
+ L.DomUtil.enableImageDrag();
+ L.DomUtil.enableTextSelection();
+
+ if (this._moved) {
+ // ensure drag is not fired after dragend
+ L.Util.cancelAnimFrame(this._animRequest);
+
+ this.fire('dragend');
+ }
+
+ this._moving = false;
+ }
+});
- this._pathZooming = true;
- },
- _endPathZoom: function () {
- this._pathZooming = false;
- },
-
- _updateSvgViewport: function () {
-
- if (this._pathZooming) {
- // Do not update SVGs while a zoom animation is going on otherwise the animation will break.
- // When the zoom animation ends we will be updated again anyway
- // This fixes the case where you do a momentum move and zoom while the move is still ongoing.
- return;
- }
-
- this._updatePathViewport();
-
- var vp = this._pathViewport,
- min = vp.min,
- max = vp.max,
- width = max.x - min.x,
- height = max.y - min.y,
- root = this._pathRoot,
- pane = this._panes.overlayPane;
-
- // Hack to make flicker on drag end on mobile webkit less irritating
- if (L.Browser.mobileWebkit) {
- pane.removeChild(root);
- }
-
- L.DomUtil.setPosition(root, min);
- root.setAttribute('width', width);
- root.setAttribute('height', height);
- root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
-
- if (L.Browser.mobileWebkit) {
- pane.appendChild(root);
- }
- }
-});
-
-
/*
- * Popup extension to L.Path (polylines, polygons, circles), adding popup-related methods.
- */
-
-L.Path.include({
-
- bindPopup: function (content, options) {
-
- if (!this._popup || options) {
- this._popup = new L.Popup(options, this);
- }
-
- this._popup.setContent(content);
-
- if (!this._popupHandlersAdded) {
- this
- .on('click', this._openPopup, this)
- .on('remove', this.closePopup, this);
-
- this._popupHandlersAdded = true;
- }
-
- return this;
- },
-
- unbindPopup: function () {
- if (this._popup) {
- this._popup = null;
- this
- .off('click', this._openPopup)
- .off('remove', this.closePopup);
-
- this._popupHandlersAdded = false;
- }
- return this;
- },
-
- openPopup: function (latlng) {
-
- if (this._popup) {
- // open the popup from one of the path's points if not specified
- latlng = latlng || this._latlng ||
- this._latlngs[Math.floor(this._latlngs.length / 2)];
-
- this._openPopup({latlng: latlng});
- }
-
- return this;
- },
-
- closePopup: function () {
- if (this._popup) {
- this._popup._close();
- }
- return this;
- },
-
- _openPopup: function (e) {
- this._popup.setLatLng(e.latlng);
- this._map.openPopup(this._popup);
- }
-});
-
-
-/*
- * Vector rendering for IE6-8 through VML.
- * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
- */
-
-L.Browser.vml = !L.Browser.svg && (function () {
- try {
- var div = document.createElement('div');
- div.innerHTML = '<v:shape adj="1"/>';
-
- var shape = div.firstChild;
- shape.style.behavior = 'url(#default#VML)';
-
- return shape && (typeof shape.adj === 'object');
-
- } catch (e) {
- return false;
- }
-}());
-
-L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
- statics: {
- VML: true,
- CLIP_PADDING: 0.02
- },
-
- _createElement: (function () {
- try {
- document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
- return function (name) {
- return document.createElement('<lvml:' + name + ' class="lvml">');
- };
- } catch (e) {
- return function (name) {
- return document.createElement(
- '<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
- };
- }
- }()),
-
- _initPath: function () {
- var container = this._container = this._createElement('shape');
- L.DomUtil.addClass(container, 'leaflet-vml-shape');
- if (this.options.clickable) {
- L.DomUtil.addClass(container, 'leaflet-clickable');
- }
- container.coordsize = '1 1';
-
- this._path = this._createElement('path');
- container.appendChild(this._path);
-
- this._map._pathRoot.appendChild(container);
- },
-
- _initStyle: function () {
- this._updateStyle();
- },
-
- _updateStyle: function () {
- var stroke = this._stroke,
- fill = this._fill,
- options = this.options,
- container = this._container;
-
- container.stroked = options.stroke;
- container.filled = options.fill;
-
- if (options.stroke) {
- if (!stroke) {
- stroke = this._stroke = this._createElement('stroke');
- stroke.endcap = 'round';
- container.appendChild(stroke);
- }
- stroke.weight = options.weight + 'px';
- stroke.color = options.color;
- stroke.opacity = options.opacity;
-
- if (options.dashArray) {
- stroke.dashStyle = options.dashArray instanceof Array ?
- options.dashArray.join(' ') :
- options.dashArray.replace(/ *, */g, ' ');
- } else {
- stroke.dashStyle = '';
- }
-
- } else if (stroke) {
- container.removeChild(stroke);
- this._stroke = null;
- }
-
- if (options.fill) {
- if (!fill) {
- fill = this._fill = this._createElement('fill');
- container.appendChild(fill);
- }
- fill.color = options.fillColor || options.color;
- fill.opacity = options.fillOpacity;
-
- } else if (fill) {
- container.removeChild(fill);
- this._fill = null;
- }
- },
-
- _updatePath: function () {
- var style = this._container.style;
-
- style.display = 'none';
- this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
- style.display = '';
- }
-});
-
-L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
- _initPathRoot: function () {
- if (this._pathRoot) { return; }
-
- var root = this._pathRoot = document.createElement('div');
- root.className = 'leaflet-vml-container';
- this._panes.overlayPane.appendChild(root);
-
- this.on('moveend', this._updatePathViewport);
- this._updatePathViewport();
- }
-});
-
-
-/*
- * Vector rendering for all browsers that support canvas.
- */
-
-L.Browser.canvas = (function () {
- return !!document.createElement('canvas').getContext;
-}());
-
-L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
- statics: {
- //CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
- CANVAS: true,
- SVG: false
- },
-
- redraw: function () {
- if (this._map) {
- this.projectLatlngs();
- this._requestUpdate();
- }
- return this;
- },
-
- setStyle: function (style) {
- L.setOptions(this, style);
-
- if (this._map) {
- this._updateStyle();
- this._requestUpdate();
- }
- return this;
- },
-
- onRemove: function (map) {
- map
- .off('viewreset', this.projectLatlngs, this)
- .off('moveend', this._updatePath, this);
-
- if (this.options.clickable) {
- this._map.off('click', this._onClick, this);
- }
-
- this._requestUpdate();
-
- this._map = null;
- },
-
- _requestUpdate: function () {
- if (this._map && !L.Path._updateRequest) {
- L.Path._updateRequest = L.Util.requestAnimFrame(this._fireMapMoveEnd, this._map);
- }
- },
-
- _fireMapMoveEnd: function () {
- L.Path._updateRequest = null;
- this.fire('moveend');
- },
-
- _initElements: function () {
- this._map._initPathRoot();
- this._ctx = this._map._canvasCtx;
- },
-
- _updateStyle: function () {
- var options = this.options;
-
- if (options.stroke) {
- this._ctx.lineWidth = options.weight;
- this._ctx.strokeStyle = options.color;
- }
- if (options.fill) {
- this._ctx.fillStyle = options.fillColor || options.color;
- }
- },
-
- _drawPath: function () {
- var i, j, len, len2, point, drawMethod;
-
- this._ctx.beginPath();
-
- for (i = 0, len = this._parts.length; i < len; i++) {
- for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
- point = this._parts[i][j];
- drawMethod = (j === 0 ? 'move' : 'line') + 'To';
-
- this._ctx[drawMethod](point.x, point.y);
- }
- // TODO refactor ugly hack
- if (this instanceof L.Polygon) {
- this._ctx.closePath();
- }
- }
- },
-
- _checkIfEmpty: function () {
- return !this._parts.length;
- },
-
- _updatePath: function () {
- if (this._checkIfEmpty()) { return; }
-
- var ctx = this._ctx,
- options = this.options;
-
- this._drawPath();
- ctx.save();
- this._updateStyle();
-
- if (options.fill) {
- ctx.globalAlpha = options.fillOpacity;
- ctx.fill();
- }
-
- if (options.stroke) {
- ctx.globalAlpha = options.opacity;
- ctx.stroke();
- }
-
- ctx.restore();
-
- // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
- },
-
- _initEvents: function () {
- if (this.options.clickable) {
- // TODO hand cursor
- // TODO mouseover, mouseout, dblclick
- this._map.on('click', this._onClick, this);
- }
- },
-
- _onClick: function (e) {
- if (this._containsPoint(e.layerPoint)) {
- this.fire('click', {
- latlng: e.latlng,
- layerPoint: e.layerPoint,
- containerPoint: e.containerPoint,
- originalEvent: e
- });
- }
- }
-});
-
-L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
- _initPathRoot: function () {
- var root = this._pathRoot,
- ctx;
-
- if (!root) {
- root = this._pathRoot = document.createElement("canvas");
- root.style.position = 'absolute';
- ctx = this._canvasCtx = root.getContext('2d');
-
- ctx.lineCap = "round";
- ctx.lineJoin = "round";
-
- this._panes.overlayPane.appendChild(root);
-
- if (this.options.zoomAnimation) {
- this._pathRoot.className = 'leaflet-zoom-animated';
- this.on('zoomanim', this._animatePathZoom);
- this.on('zoomend', this._endPathZoom);
- }
- this.on('moveend', this._updateCanvasViewport);
- this._updateCanvasViewport();
- }
- },
-
- _updateCanvasViewport: function () {
- // don't redraw while zooming. See _updateSvgViewport for more details
- if (this._pathZooming) { return; }
- this._updatePathViewport();
-
- var vp = this._pathViewport,
- min = vp.min,
- size = vp.max.subtract(min),
- root = this._pathRoot;
-
- //TODO check if this works properly on mobile webkit
- L.DomUtil.setPosition(root, min);
- root.width = size.x;
- root.height = size.y;
- root.getContext('2d').translate(-min.x, -min.y);
- }
-});
-
-
-/*
- * L.LineUtil contains different utility functions for line segments
- * and polylines (clipping, simplification, distances, etc.)
- */
-
-/*jshint bitwise:false */ // allow bitwise oprations for this file
-
-L.LineUtil = {
-
- // Simplify polyline with vertex reduction and Douglas-Peucker simplification.
- // Improves rendering performance dramatically by lessening the number of points to draw.
-
- simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
- if (!tolerance || !points.length) {
- return points.slice();
- }
-
- var sqTolerance = tolerance * tolerance;
-
- // stage 1: vertex reduction
- points = this._reducePoints(points, sqTolerance);
-
- // stage 2: Douglas-Peucker simplification
- points = this._simplifyDP(points, sqTolerance);
-
- return points;
- },
-
- // distance from a point to a segment between two points
- pointToSegmentDistance: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
- return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
- },
-
- closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
- return this._sqClosestPointOnSegment(p, p1, p2);
- },
-
- // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
- _simplifyDP: function (points, sqTolerance) {
-
- var len = points.length,
- ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
- markers = new ArrayConstructor(len);
-
- markers[0] = markers[len - 1] = 1;
-
- this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
-
- var i,
- newPoints = [];
-
- for (i = 0; i < len; i++) {
- if (markers[i]) {
- newPoints.push(points[i]);
- }
- }
-
- return newPoints;
- },
-
- _simplifyDPStep: function (points, markers, sqTolerance, first, last) {
-
- var maxSqDist = 0,
- index, i, sqDist;
-
- for (i = first + 1; i <= last - 1; i++) {
- sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
-
- if (sqDist > maxSqDist) {
- index = i;
- maxSqDist = sqDist;
- }
- }
-
- if (maxSqDist > sqTolerance) {
- markers[index] = 1;
-
- this._simplifyDPStep(points, markers, sqTolerance, first, index);
- this._simplifyDPStep(points, markers, sqTolerance, index, last);
- }
- },
-
- // reduce points that are too close to each other to a single point
- _reducePoints: function (points, sqTolerance) {
- var reducedPoints = [points[0]];
-
- for (var i = 1, prev = 0, len = points.length; i < len; i++) {
- if (this._sqDist(points[i], points[prev]) > sqTolerance) {
- reducedPoints.push(points[i]);
- prev = i;
- }
- }
- if (prev < len - 1) {
- reducedPoints.push(points[len - 1]);
- }
- return reducedPoints;
- },
-
- // Cohen-Sutherland line clipping algorithm.
- // Used to avoid rendering parts of a polyline that are not currently visible.
-
- clipSegment: function (a, b, bounds, useLastCode) {
- var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
- codeB = this._getBitCode(b, bounds),
-
- codeOut, p, newCode;
-
- // save 2nd code to avoid calculating it on the next segment
- this._lastCode = codeB;
-
- while (true) {
- // if a,b is inside the clip window (trivial accept)
- if (!(codeA | codeB)) {
- return [a, b];
- // if a,b is outside the clip window (trivial reject)
- } else if (codeA & codeB) {
- return false;
- // other cases
- } else {
- codeOut = codeA || codeB,
- p = this._getEdgeIntersection(a, b, codeOut, bounds),
- newCode = this._getBitCode(p, bounds);
-
- if (codeOut === codeA) {
- a = p;
- codeA = newCode;
- } else {
- b = p;
- codeB = newCode;
- }
- }
- }
- },
-
- _getEdgeIntersection: function (a, b, code, bounds) {
- var dx = b.x - a.x,
- dy = b.y - a.y,
- min = bounds.min,
- max = bounds.max;
-
- if (code & 8) { // top
- return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
- } else if (code & 4) { // bottom
- return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
- } else if (code & 2) { // right
- return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
- } else if (code & 1) { // left
- return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
- }
- },
-
- _getBitCode: function (/*Point*/ p, bounds) {
- var code = 0;
-
- if (p.x < bounds.min.x) { // left
- code |= 1;
- } else if (p.x > bounds.max.x) { // right
- code |= 2;
- }
- if (p.y < bounds.min.y) { // bottom
- code |= 4;
- } else if (p.y > bounds.max.y) { // top
- code |= 8;
- }
-
- return code;
- },
-
- // square distance (to avoid unnecessary Math.sqrt calls)
- _sqDist: function (p1, p2) {
- var dx = p2.x - p1.x,
- dy = p2.y - p1.y;
- return dx * dx + dy * dy;
- },
-
- // return closest point on segment or distance to that point
- _sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
- var x = p1.x,
- y = p1.y,
- dx = p2.x - x,
- dy = p2.y - y,
- dot = dx * dx + dy * dy,
- t;
-
- if (dot > 0) {
- t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
-
- if (t > 1) {
- x = p2.x;
- y = p2.y;
- } else if (t > 0) {
- x += dx * t;
- y += dy * t;
- }
- }
-
- dx = p.x - x;
- dy = p.y - y;
-
- return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
- }
-};
-
-
-/*
- * L.Polygon is used to display polylines on a map.
- */
-
-L.Polyline = L.Path.extend({
- initialize: function (latlngs, options) {
- L.Path.prototype.initialize.call(this, options);
-
- this._latlngs = this._convertLatLngs(latlngs);
- },
-
- options: {
- // how much to simplify the polyline on each zoom level
- // more = better performance and smoother look, less = more accurate
- smoothFactor: 1.0,
- noClip: false
- },
-
- projectLatlngs: function () {
- this._originalPoints = [];
-
- for (var i = 0, len = this._latlngs.length; i < len; i++) {
- this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
- }
- },
-
- getPathString: function () {
- for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
- str += this._getPathPartStr(this._parts[i]);
- }
- return str;
- },
-
- getLatLngs: function () {
- return this._latlngs;
- },
-
- setLatLngs: function (latlngs) {
- this._latlngs = this._convertLatLngs(latlngs);
- return this.redraw();
- },
-
- addLatLng: function (latlng) {
- this._latlngs.push(L.latLng(latlng));
- return this.redraw();
- },
-
- spliceLatLngs: function () { // (Number index, Number howMany)
- var removed = [].splice.apply(this._latlngs, arguments);
- this._convertLatLngs(this._latlngs);
- this.redraw();
- return removed;
- },
-
- closestLayerPoint: function (p) {
- var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
-
- for (var j = 0, jLen = parts.length; j < jLen; j++) {
- var points = parts[j];
- for (var i = 1, len = points.length; i < len; i++) {
- p1 = points[i - 1];
- p2 = points[i];
- var sqDist = L.LineUtil._sqClosestPointOnSegment(p, p1, p2, true);
- if (sqDist < minDistance) {
- minDistance = sqDist;
- minPoint = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
- }
- }
- }
- if (minPoint) {
- minPoint.distance = Math.sqrt(minDistance);
- }
- return minPoint;
- },
-
- getBounds: function () {
- var bounds = new L.LatLngBounds(),
- latLngs = this.getLatLngs(),
- i, len;
-
- for (i = 0, len = latLngs.length; i < len; i++) {
- bounds.extend(latLngs[i]);
- }
-
- return bounds;
- },
-
- _convertLatLngs: function (latlngs) {
- var i, len;
- for (i = 0, len = latlngs.length; i < len; i++) {
- if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') {
- return;
- }
- latlngs[i] = L.latLng(latlngs[i]);
- }
- return latlngs;
- },
-
- _initEvents: function () {
- L.Path.prototype._initEvents.call(this);
- },
-
- _getPathPartStr: function (points) {
- var round = L.Path.VML;
-
- for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
- p = points[j];
- if (round) {
- p._round();
- }
- str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
- }
- return str;
- },
-
- _clipPoints: function () {
- var points = this._originalPoints,
- len = points.length,
- i, k, segment;
-
- if (this.options.noClip) {
- this._parts = [points];
- return;
- }
-
- this._parts = [];
-
- var parts = this._parts,
- vp = this._map._pathViewport,
- lu = L.LineUtil;
-
- for (i = 0, k = 0; i < len - 1; i++) {
- segment = lu.clipSegment(points[i], points[i + 1], vp, i);
- if (!segment) {
- continue;
- }
-
- parts[k] = parts[k] || [];
- parts[k].push(segment[0]);
-
- // if segment goes out of screen, or it's the last one, it's the end of the line part
- if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
- parts[k].push(segment[1]);
- k++;
- }
- }
- },
-
- // simplify each clipped part of the polyline
- _simplifyPoints: function () {
- var parts = this._parts,
- lu = L.LineUtil;
-
- for (var i = 0, len = parts.length; i < len; i++) {
- parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
- }
- },
-
- _updatePath: function () {
- if (!this._map) { return; }
-
- this._clipPoints();
- this._simplifyPoints();
-
- L.Path.prototype._updatePath.call(this);
- }
-});
-
-L.polyline = function (latlngs, options) {
- return new L.Polyline(latlngs, options);
-};
-
-
-/*
- * L.PolyUtil contains utility functions for polygons (clipping, etc.).
- */
-
-/*jshint bitwise:false */ // allow bitwise operations here
-
-L.PolyUtil = {};
-
-/*
- * Sutherland-Hodgeman polygon clipping algorithm.
- * Used to avoid rendering parts of a polygon that are not currently visible.
- */
-L.PolyUtil.clipPolygon = function (points, bounds) {
- var clippedPoints,
- edges = [1, 4, 2, 8],
- i, j, k,
- a, b,
- len, edge, p,
- lu = L.LineUtil;
-
- for (i = 0, len = points.length; i < len; i++) {
- points[i]._code = lu._getBitCode(points[i], bounds);
- }
-
- // for each edge (left, bottom, right, top)
- for (k = 0; k < 4; k++) {
- edge = edges[k];
- clippedPoints = [];
-
- for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
- a = points[i];
- b = points[j];
-
- // if a is inside the clip window
- if (!(a._code & edge)) {
- // if b is outside the clip window (a->b goes out of screen)
- if (b._code & edge) {
- p = lu._getEdgeIntersection(b, a, edge, bounds);
- p._code = lu._getBitCode(p, bounds);
- clippedPoints.push(p);
- }
- clippedPoints.push(a);
-
- // else if b is inside the clip window (a->b enters the screen)
- } else if (!(b._code & edge)) {
- p = lu._getEdgeIntersection(b, a, edge, bounds);
- p._code = lu._getBitCode(p, bounds);
- clippedPoints.push(p);
- }
- }
- points = clippedPoints;
- }
-
- return points;
-};
-
-
-/*
- * L.Polygon is used to display polygons on a map.
- */
-
-L.Polygon = L.Polyline.extend({
- options: {
- fill: true
- },
-
- initialize: function (latlngs, options) {
- L.Polyline.prototype.initialize.call(this, latlngs, options);
-
- if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
- this._latlngs = this._convertLatLngs(latlngs[0]);
- this._holes = latlngs.slice(1);
- }
- },
-
- projectLatlngs: function () {
- L.Polyline.prototype.projectLatlngs.call(this);
-
- // project polygon holes points
- // TODO move this logic to Polyline to get rid of duplication
- this._holePoints = [];
-
- if (!this._holes) { return; }
-
- var i, j, len, len2;
-
- for (i = 0, len = this._holes.length; i < len; i++) {
- this._holePoints[i] = [];
-
- for (j = 0, len2 = this._holes[i].length; j < len2; j++) {
- this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
- }
- }
- },
-
- _clipPoints: function () {
- var points = this._originalPoints,
- newParts = [];
-
- this._parts = [points].concat(this._holePoints);
-
- if (this.options.noClip) { return; }
-
- for (var i = 0, len = this._parts.length; i < len; i++) {
- var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
- if (clipped.length) {
- newParts.push(clipped);
- }
- }
-
- this._parts = newParts;
- },
-
- _getPathPartStr: function (points) {
- var str = L.Polyline.prototype._getPathPartStr.call(this, points);
- return str + (L.Browser.svg ? 'z' : 'x');
- }
-});
-
-L.polygon = function (latlngs, options) {
- return new L.Polygon(latlngs, options);
-};
-
-
-/*
- * Contains L.MultiPolyline and L.MultiPolygon layers.
- */
-
-(function () {
- function createMulti(Klass) {
-
- return L.FeatureGroup.extend({
-
- initialize: function (latlngs, options) {
- this._layers = {};
- this._options = options;
- this.setLatLngs(latlngs);
- },
-
- setLatLngs: function (latlngs) {
- var i = 0,
- len = latlngs.length;
-
- this.eachLayer(function (layer) {
- if (i < len) {
- layer.setLatLngs(latlngs[i++]);
- } else {
- this.removeLayer(layer);
- }
- }, this);
-
- while (i < len) {
- this.addLayer(new Klass(latlngs[i++], this._options));
- }
-
- return this;
- }
- });
- }
-
- L.MultiPolyline = createMulti(L.Polyline);
- L.MultiPolygon = createMulti(L.Polygon);
-
- L.multiPolyline = function (latlngs, options) {
- return new L.MultiPolyline(latlngs, options);
- };
-
- L.multiPolygon = function (latlngs, options) {
- return new L.MultiPolygon(latlngs, options);
- };
-}());
-
-
-/*
- * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
- */
-
-L.Rectangle = L.Polygon.extend({
- initialize: function (latLngBounds, options) {
- L.Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
- },
-
- setBounds: function (latLngBounds) {
- this.setLatLngs(this._boundsToLatLngs(latLngBounds));
- },
-
- _boundsToLatLngs: function (latLngBounds) {
- latLngBounds = L.latLngBounds(latLngBounds);
- return [
- latLngBounds.getSouthWest(),
- latLngBounds.getNorthWest(),
- latLngBounds.getNorthEast(),
- latLngBounds.getSouthEast()
- ];
- }
-});
-
-L.rectangle = function (latLngBounds, options) {
- return new L.Rectangle(latLngBounds, options);
-};
-
-
-/*
- * L.Circle is a circle overlay (with a certain radius in meters).
- */
-
-L.Circle = L.Path.extend({
- initialize: function (latlng, radius, options) {
- L.Path.prototype.initialize.call(this, options);
-
- this._latlng = L.latLng(latlng);
- this._mRadius = radius;
- },
-
- options: {
- fill: true
- },
-
- setLatLng: function (latlng) {
- this._latlng = L.latLng(latlng);
- return this.redraw();
- },
-
- setRadius: function (radius) {
- this._mRadius = radius;
- return this.redraw();
- },
-
- projectLatlngs: function () {
- var lngRadius = this._getLngRadius(),
- latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngRadius),
- point2 = this._map.latLngToLayerPoint(latlng2);
-
- this._point = this._map.latLngToLayerPoint(this._latlng);
- this._radius = Math.max(Math.round(this._point.x - point2.x), 1);
- },
-
- getBounds: function () {
- var lngRadius = this._getLngRadius(),
- latRadius = (this._mRadius / 40075017) * 360,
- latlng = this._latlng,
- sw = new L.LatLng(latlng.lat - latRadius, latlng.lng - lngRadius),
- ne = new L.LatLng(latlng.lat + latRadius, latlng.lng + lngRadius);
-
- return new L.LatLngBounds(sw, ne);
- },
-
- getLatLng: function () {
- return this._latlng;
- },
-
- getPathString: function () {
- var p = this._point,
- r = this._radius;
-
- if (this._checkIfEmpty()) {
- return '';
- }
-
- if (L.Browser.svg) {
- return "M" + p.x + "," + (p.y - r) +
- "A" + r + "," + r + ",0,1,1," +
- (p.x - 0.1) + "," + (p.y - r) + " z";
- } else {
- p._round();
- r = Math.round(r);
- return "AL " + p.x + "," + p.y + " " + r + "," + r + " 0," + (65535 * 360);
- }
- },
-
- getRadius: function () {
- return this._mRadius;
- },
-
- // TODO Earth hardcoded, move into projection code!
-
- _getLatRadius: function () {
- return (this._mRadius / 40075017) * 360;
- },
-
- _getLngRadius: function () {
- return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
- },
-
- _checkIfEmpty: function () {
- if (!this._map) {
- return false;
- }
- var vp = this._map._pathViewport,
- r = this._radius,
- p = this._point;
-
- return p.x - r > vp.max.x || p.y - r > vp.max.y ||
- p.x + r < vp.min.x || p.y + r < vp.min.y;
- }
-});
-
-L.circle = function (latlng, radius, options) {
- return new L.Circle(latlng, radius, options);
-};
-
-
-/*
- * L.CircleMarker is a circle overlay with a permanent pixel radius.
- */
-
-L.CircleMarker = L.Circle.extend({
- options: {
- radius: 10,
- weight: 2
- },
-
- initialize: function (latlng, options) {
- L.Circle.prototype.initialize.call(this, latlng, null, options);
- this._radius = this.options.radius;
- },
-
- projectLatlngs: function () {
- this._point = this._map.latLngToLayerPoint(this._latlng);
- },
-
- _updateStyle : function () {
- L.Circle.prototype._updateStyle.call(this);
- this.setRadius(this.options.radius);
- },
-
- setRadius: function (radius) {
- this.options.radius = this._radius = radius;
- return this.redraw();
- }
-});
-
-L.circleMarker = function (latlng, options) {
- return new L.CircleMarker(latlng, options);
-};
-
-
-/*
- * Extends L.Polyline to be able to manually detect clicks on Canvas-rendered polylines.
- */
-
-L.Polyline.include(!L.Path.CANVAS ? {} : {
- _containsPoint: function (p, closed) {
- var i, j, k, len, len2, dist, part,
- w = this.options.weight / 2;
-
- if (L.Browser.touch) {
- w += 10; // polyline click tolerance on touch devices
- }
-
- for (i = 0, len = this._parts.length; i < len; i++) {
- part = this._parts[i];
- for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
- if (!closed && (j === 0)) {
- continue;
- }
-
- dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
-
- if (dist <= w) {
- return true;
- }
- }
- }
- return false;
- }
-});
-
-
-/*
- * Extends L.Polygon to be able to manually detect clicks on Canvas-rendered polygons.
- */
-
-L.Polygon.include(!L.Path.CANVAS ? {} : {
- _containsPoint: function (p) {
- var inside = false,
- part, p1, p2,
- i, j, k,
- len, len2;
-
- // TODO optimization: check if within bounds first
-
- if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
- // click on polygon border
- return true;
- }
-
- // ray casting algorithm for detecting if point is in polygon
-
- for (i = 0, len = this._parts.length; i < len; i++) {
- part = this._parts[i];
-
- for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
- p1 = part[j];
- p2 = part[k];
-
- if (((p1.y > p.y) !== (p2.y > p.y)) &&
- (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
- inside = !inside;
- }
- }
- }
-
- return inside;
- }
-});
-
-
-/*
- * Extends L.Circle with Canvas-specific code.
- */
-
-L.Circle.include(!L.Path.CANVAS ? {} : {
- _drawPath: function () {
- var p = this._point;
- this._ctx.beginPath();
- this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2, false);
- },
-
- _containsPoint: function (p) {
- var center = this._point,
- w2 = this.options.stroke ? this.options.weight / 2 : 0;
-
- return (p.distanceTo(center) <= this._radius + w2);
- }
-});
-
-
-/*
- * L.GeoJSON turns any GeoJSON data into a Leaflet layer.
- */
-
-L.GeoJSON = L.FeatureGroup.extend({
-
- initialize: function (geojson, options) {
- L.setOptions(this, options);
-
- this._layers = {};
-
- if (geojson) {
- this.addData(geojson);
- }
- },
-
- addData: function (geojson) {
- var features = L.Util.isArray(geojson) ? geojson : geojson.features,
- i, len;
-
- if (features) {
- for (i = 0, len = features.length; i < len; i++) {
- // Only add this if geometry or geometries are set and not null
- if (features[i].geometries || features[i].geometry || features[i].features) {
- this.addData(features[i]);
- }
- }
- return this;
- }
-
- var options = this.options;
-
- if (options.filter && !options.filter(geojson)) { return; }
-
- var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer);
- layer.feature = geojson;
-
- layer.defaultOptions = layer.options;
- this.resetStyle(layer);
-
- if (options.onEachFeature) {
- options.onEachFeature(geojson, layer);
- }
-
- return this.addLayer(layer);
- },
-
- resetStyle: function (layer) {
- var style = this.options.style;
- if (style) {
- // reset any custom styles
- L.Util.extend(layer.options, layer.defaultOptions);
-
- this._setLayerStyle(layer, style);
- }
- },
-
- setStyle: function (style) {
- this.eachLayer(function (layer) {
- this._setLayerStyle(layer, style);
- }, this);
- },
-
- _setLayerStyle: function (layer, style) {
- if (typeof style === 'function') {
- style = style(layer.feature);
- }
- if (layer.setStyle) {
- layer.setStyle(style);
- }
- }
-});
-
-L.extend(L.GeoJSON, {
- geometryToLayer: function (geojson, pointToLayer) {
- var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
- coords = geometry.coordinates,
- layers = [],
- latlng, latlngs, i, len, layer;
-
- switch (geometry.type) {
- case 'Point':
- latlng = this.coordsToLatLng(coords);
- return pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
-
- case 'MultiPoint':
- for (i = 0, len = coords.length; i < len; i++) {
- latlng = this.coordsToLatLng(coords[i]);
- layer = pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
- layers.push(layer);
- }
- return new L.FeatureGroup(layers);
-
- case 'LineString':
- latlngs = this.coordsToLatLngs(coords);
- return new L.Polyline(latlngs);
-
- case 'Polygon':
- latlngs = this.coordsToLatLngs(coords, 1);
- return new L.Polygon(latlngs);
-
- case 'MultiLineString':
- latlngs = this.coordsToLatLngs(coords, 1);
- return new L.MultiPolyline(latlngs);
-
- case 'MultiPolygon':
- latlngs = this.coordsToLatLngs(coords, 2);
- return new L.MultiPolygon(latlngs);
-
- case 'GeometryCollection':
- for (i = 0, len = geometry.geometries.length; i < len; i++) {
- layer = this.geometryToLayer({
- geometry: geometry.geometries[i],
- type: 'Feature',
- properties: geojson.properties
- }, pointToLayer);
- layers.push(layer);
- }
- return new L.FeatureGroup(layers);
-
- default:
- throw new Error('Invalid GeoJSON object.');
- }
- },
-
- coordsToLatLng: function (coords, reverse) { // (Array, Boolean) -> LatLng
- var lat = parseFloat(coords[reverse ? 0 : 1]),
- lng = parseFloat(coords[reverse ? 1 : 0]);
-
- return new L.LatLng(lat, lng);
- },
-
- coordsToLatLngs: function (coords, levelsDeep, reverse) { // (Array, Number, Boolean) -> Array
- var latlng,
- latlngs = [],
- i, len;
-
- for (i = 0, len = coords.length; i < len; i++) {
- latlng = levelsDeep ?
- this.coordsToLatLngs(coords[i], levelsDeep - 1, reverse) :
- this.coordsToLatLng(coords[i], reverse);
-
- latlngs.push(latlng);
- }
-
- return latlngs;
- }
-});
-
-L.geoJson = function (geojson, options) {
- return new L.GeoJSON(geojson, options);
-};
-
-
-/*
- * L.DomEvent contains functions for working with DOM events.
- */
-
-L.DomEvent = {
- /* inspired by John Resig, Dean Edwards and YUI addEvent implementations */
- addListener: function (obj, type, fn, context) { // (HTMLElement, String, Function[, Object])
-
- var id = L.stamp(fn),
- key = '_leaflet_' + type + id,
- handler, originalHandler, newType;
-
- if (obj[key]) { return this; }
-
- handler = function (e) {
- return fn.call(context || obj, e || L.DomEvent._getEvent());
- };
-
- if (L.Browser.msTouch && type.indexOf('touch') === 0) {
- return this.addMsTouchListener(obj, type, handler, id);
- }
- if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
- this.addDoubleTapListener(obj, handler, id);
- }
-
- if ('addEventListener' in obj) {
-
- if (type === 'mousewheel') {
- obj.addEventListener('DOMMouseScroll', handler, false);
- obj.addEventListener(type, handler, false);
-
- } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
-
- originalHandler = handler;
- newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
-
- handler = function (e) {
- if (!L.DomEvent._checkMouse(obj, e)) { return; }
- return originalHandler(e);
- };
-
- obj.addEventListener(newType, handler, false);
-
- } else {
- obj.addEventListener(type, handler, false);
- }
-
- } else if ('attachEvent' in obj) {
- obj.attachEvent("on" + type, handler);
- }
-
- obj[key] = handler;
-
- return this;
- },
-
- removeListener: function (obj, type, fn) { // (HTMLElement, String, Function)
-
- var id = L.stamp(fn),
- key = '_leaflet_' + type + id,
- handler = obj[key];
-
- if (!handler) { return; }
-
- if (L.Browser.msTouch && type.indexOf('touch') === 0) {
- this.removeMsTouchListener(obj, type, id);
- } else if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
- this.removeDoubleTapListener(obj, id);
-
- } else if ('removeEventListener' in obj) {
-
- if (type === 'mousewheel') {
- obj.removeEventListener('DOMMouseScroll', handler, false);
- obj.removeEventListener(type, handler, false);
-
- } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
- obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
- } else {
- obj.removeEventListener(type, handler, false);
- }
- } else if ('detachEvent' in obj) {
- obj.detachEvent("on" + type, handler);
- }
-
- obj[key] = null;
-
- return this;
- },
-
- stopPropagation: function (e) {
-
- if (e.stopPropagation) {
- e.stopPropagation();
- } else {
- e.cancelBubble = true;
- }
- return this;
- },
-
- disableClickPropagation: function (el) {
-
- var stop = L.DomEvent.stopPropagation;
-
- for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
- L.DomEvent.addListener(el, L.Draggable.START[i], stop);
- }
-
- return L.DomEvent
- .addListener(el, 'click', stop)
- .addListener(el, 'dblclick', stop);
- },
-
- preventDefault: function (e) {
-
- if (e.preventDefault) {
- e.preventDefault();
- } else {
- e.returnValue = false;
- }
- return this;
- },
-
- stop: function (e) {
- return L.DomEvent.preventDefault(e).stopPropagation(e);
- },
-
- getMousePosition: function (e, container) {
-
- var body = document.body,
- docEl = document.documentElement,
- x = e.pageX ? e.pageX : e.clientX + body.scrollLeft + docEl.scrollLeft,
- y = e.pageY ? e.pageY : e.clientY + body.scrollTop + docEl.scrollTop,
- pos = new L.Point(x, y);
-
- return (container ? pos._subtract(L.DomUtil.getViewportOffset(container)) : pos);
- },
-
- getWheelDelta: function (e) {
-
- var delta = 0;
-
- if (e.wheelDelta) {
- delta = e.wheelDelta / 120;
- }
- if (e.detail) {
- delta = -e.detail / 3;
- }
- return delta;
- },
-
- // check if element really left/entered the event target (for mouseenter/mouseleave)
- _checkMouse: function (el, e) {
-
- var related = e.relatedTarget;
-
- if (!related) { return true; }
-
- try {
- while (related && (related !== el)) {
- related = related.parentNode;
- }
- } catch (err) {
- return false;
- }
- return (related !== el);
- },
-
- _getEvent: function () { // evil magic for IE
- /*jshint noarg:false */
- var e = window.event;
- if (!e) {
- var caller = arguments.callee.caller;
- while (caller) {
- e = caller['arguments'][0];
- if (e && window.Event === e.constructor) {
- break;
- }
- caller = caller.caller;
- }
- }
- return e;
- }
-};
-
-L.DomEvent.on = L.DomEvent.addListener;
-L.DomEvent.off = L.DomEvent.removeListener;
-
-
-/*
- * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
- */
-
-L.Draggable = L.Class.extend({
- includes: L.Mixin.Events,
-
- statics: {
- START: L.Browser.touch ? ['touchstart', 'mousedown'] : ['mousedown'],
- END: {
- mousedown: 'mouseup',
- touchstart: 'touchend',
- MSPointerDown: 'touchend'
- },
- MOVE: {
- mousedown: 'mousemove',
- touchstart: 'touchmove',
- MSPointerDown: 'touchmove'
- },
- TAP_TOLERANCE: 15
- },
-
- initialize: function (element, dragStartTarget, longPress) {
- this._element = element;
- this._dragStartTarget = dragStartTarget || element;
- this._longPress = longPress && !L.Browser.msTouch;
- },
-
- enable: function () {
- if (this._enabled) { return; }
-
- for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
- L.DomEvent.on(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
- }
- this._enabled = true;
- },
-
- disable: function () {
- if (!this._enabled) { return; }
-
- for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
- L.DomEvent.off(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
- }
- this._enabled = false;
- this._moved = false;
- },
-
- _onDown: function (e) {
- if ((!L.Browser.touch && e.shiftKey) ||
- ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
-
- L.DomEvent.preventDefault(e);
- L.DomEvent.stopPropagation(e);
-
- if (L.Draggable._disabled) { return; }
-
- this._simulateClick = true;
-
- if (e.touches && e.touches.length > 1) {
- this._simulateClick = false;
- clearTimeout(this._longPressTimeout);
- return;
- }
-
- var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
- el = first.target;
-
- if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
- L.DomUtil.addClass(el, 'leaflet-active');
- }
-
- this._moved = false;
- if (this._moving) { return; }
-
- this._startPoint = new L.Point(first.clientX, first.clientY);
- this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
-
- //Touch contextmenu event emulation
- if (e.touches && e.touches.length === 1 && L.Browser.touch && this._longPress) {
- this._longPressTimeout = setTimeout(L.bind(function () {
- var dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
-
- if (dist < L.Draggable.TAP_TOLERANCE) {
- this._simulateClick = false;
- this._onUp();
- this._simulateEvent('contextmenu', first);
- }
- }, this), 1000);
- }
-
- L.DomEvent.on(document, L.Draggable.MOVE[e.type], this._onMove, this);
- L.DomEvent.on(document, L.Draggable.END[e.type], this._onUp, this);
- },
-
- _onMove: function (e) {
- if (e.touches && e.touches.length > 1) { return; }
-
- var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
- newPoint = new L.Point(first.clientX, first.clientY),
- diffVec = newPoint.subtract(this._startPoint);
-
- if (!diffVec.x && !diffVec.y) { return; }
-
- L.DomEvent.preventDefault(e);
-
- if (!this._moved) {
- this.fire('dragstart');
- this._moved = true;
-
- this._startPos = L.DomUtil.getPosition(this._element).subtract(diffVec);
-
- if (!L.Browser.touch) {
- L.DomUtil.disableTextSelection();
- this._setMovingCursor();
- }
- }
-
- this._newPos = this._startPos.add(diffVec);
- this._moving = true;
-
- L.Util.cancelAnimFrame(this._animRequest);
- this._animRequest = L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
- },
-
- _updatePosition: function () {
- this.fire('predrag');
- L.DomUtil.setPosition(this._element, this._newPos);
- this.fire('drag');
- },
-
- _onUp: function (e) {
- var simulateClickTouch;
- clearTimeout(this._longPressTimeout);
- if (this._simulateClick && e.changedTouches) {
- var first = e.changedTouches[0],
- el = first.target,
- dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
-
- if (el.tagName.toLowerCase() === 'a') {
- L.DomUtil.removeClass(el, 'leaflet-active');
- }
-
- if (dist < L.Draggable.TAP_TOLERANCE) {
- simulateClickTouch = first;
- }
- }
-
- if (!L.Browser.touch) {
- L.DomUtil.enableTextSelection();
- this._restoreCursor();
- }
-
- for (var i in L.Draggable.MOVE) {
- if (L.Draggable.MOVE.hasOwnProperty(i)) {
- L.DomEvent.off(document, L.Draggable.MOVE[i], this._onMove);
- L.DomEvent.off(document, L.Draggable.END[i], this._onUp);
- }
- }
-
- if (this._moved) {
- // ensure drag is not fired after dragend
- L.Util.cancelAnimFrame(this._animRequest);
-
- this.fire('dragend');
- }
- this._moving = false;
-
- if (simulateClickTouch) {
- this._moved = false;
- this._simulateEvent('click', simulateClickTouch);
- }
- },
-
- _setMovingCursor: function () {
- L.DomUtil.addClass(document.body, 'leaflet-dragging');
- },
-
- _restoreCursor: function () {
- L.DomUtil.removeClass(document.body, 'leaflet-dragging');
- },
-
- _simulateEvent: function (type, e) {
- var simulatedEvent = document.createEvent('MouseEvents');
-
- simulatedEvent.initMouseEvent(
- type, true, true, window, 1,
- e.screenX, e.screenY,
- e.clientX, e.clientY,
- false, false, false, false, 0, null);
-
- e.target.dispatchEvent(simulatedEvent);
- }
-});
-
-
-/*
L.Handler is a base class for handler classes that are used internally to inject
interaction features like dragging to classes like Map and Marker.
*/
@@ -5998,8 +6583,6 @@
inertiaThreshold: L.Browser.touch ? 32 : 18, // ms
easeLinearity: 0.25,
- longPress: true,
-
// TODO refactor, move to CRS
worldCopyJump: false
});
@@ -6009,7 +6592,7 @@
if (!this._draggable) {
var map = this._map;
- this._draggable = new L.Draggable(map._mapPane, map._container, map.options.longPress);
+ this._draggable = new L.Draggable(map._mapPane, map._container);
this._draggable.on({
'dragstart': this._onDragStart,
@@ -6072,10 +6655,10 @@
_onViewReset: function () {
// TODO fix hardcoded Earth values
var pxCenter = this._map.getSize()._divideBy(2),
- pxWorldCenter = this._map.latLngToLayerPoint(new L.LatLng(0, 0));
+ pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
- this._worldWidth = this._map.project(new L.LatLng(0, 180)).x;
+ this._worldWidth = this._map.project([0, 180]).x;
},
_onPreDrag: function () {
@@ -6098,6 +6681,8 @@
noInertia = !options.inertia || delay > options.inertiaThreshold || !this._positions[0];
+ map.fire('dragend');
+
if (noInertia) {
map.fire('moveend');
@@ -6108,7 +6693,7 @@
ease = options.easeLinearity,
speedVector = direction.multiplyBy(ease / duration),
- speed = speedVector.distanceTo(new L.Point(0, 0)),
+ speed = speedVector.distanceTo([0, 0]),
limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),
limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),
@@ -6116,21 +6701,19 @@
decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),
offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();
- L.Util.requestAnimFrame(function () {
- map.panBy(offset, decelerationDuration, ease);
- });
- }
+ if (!offset.x || !offset.y) {
+ map.fire('moveend');
- map.fire('dragend');
-
- if (options.maxBounds) {
- // TODO predrag validation instead of animation
- L.Util.requestAnimFrame(this._panInsideMaxBounds, map, true, map._container);
+ } else {
+ L.Util.requestAnimFrame(function () {
+ map.panBy(offset, {
+ duration: decelerationDuration,
+ easeLinearity: ease,
+ noMoveStart: true
+ });
+ });
+ }
}
- },
-
- _panInsideMaxBounds: function () {
- this.panInsideBounds(this.options.maxBounds);
}
});
@@ -6155,7 +6738,7 @@
},
_onDoubleClick: function (e) {
- this.setView(e.latlng, this._zoom + 1);
+ this.setZoomAround(e.containerPoint, this._zoom + 1);
}
});
@@ -6173,11 +6756,13 @@
L.Map.ScrollWheelZoom = L.Handler.extend({
addHooks: function () {
L.DomEvent.on(this._map._container, 'mousewheel', this._onWheelScroll, this);
+ L.DomEvent.on(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault);
this._delta = 0;
},
removeHooks: function () {
L.DomEvent.off(this._map._container, 'mousewheel', this._onWheelScroll);
+ L.DomEvent.off(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault);
},
_onWheelScroll: function (e) {
@@ -6204,134 +6789,127 @@
delta = this._delta,
zoom = map.getZoom();
- delta = delta > 0 ? Math.ceil(delta) : Math.round(delta);
+ delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);
delta = Math.max(Math.min(delta, 4), -4);
delta = map._limitZoom(zoom + delta) - zoom;
this._delta = 0;
-
this._startTime = null;
if (!delta) { return; }
- var newZoom = zoom + delta,
- newCenter = this._getCenterForScrollWheelZoom(newZoom);
-
- map.setView(newCenter, newZoom);
- },
-
- _getCenterForScrollWheelZoom: function (newZoom) {
- var map = this._map,
- scale = map.getZoomScale(newZoom),
- viewHalf = map.getSize()._divideBy(2),
- centerOffset = this._lastMousePos._subtract(viewHalf)._multiplyBy(1 - 1 / scale),
- newCenterPoint = map._getTopLeftPoint()._add(viewHalf)._add(centerOffset);
-
- return map.unproject(newCenterPoint);
+ map.setZoomAround(this._lastMousePos, zoom + delta);
}
});
L.Map.addInitHook('addHandler', 'scrollWheelZoom', L.Map.ScrollWheelZoom);
-/*
- * Extends the event handling code with double tap support for mobile browsers.
- */
+/*
+ * Extends the event handling code with double tap support for mobile browsers.
+ */
+
+L.extend(L.DomEvent, {
+
+ _touchstart: L.Browser.msTouch ? 'MSPointerDown' : 'touchstart',
+ _touchend: L.Browser.msTouch ? 'MSPointerUp' : 'touchend',
+
+ // inspired by Zepto touch code by Thomas Fuchs
+ addDoubleTapListener: function (obj, handler, id) {
+ var last,
+ doubleTap = false,
+ delay = 250,
+ touch,
+ pre = '_leaflet_',
+ touchstart = this._touchstart,
+ touchend = this._touchend,
+ trackedTouches = [];
+
+ function onTouchStart(e) {
+ var count;
+
+ if (L.Browser.msTouch) {
+ trackedTouches.push(e.pointerId);
+ count = trackedTouches.length;
+ } else {
+ count = e.touches.length;
+ }
+ if (count > 1) {
+ return;
+ }
+
+ var now = Date.now(),
+ delta = now - (last || now);
+
+ touch = e.touches ? e.touches[0] : e;
+ doubleTap = (delta > 0 && delta <= delay);
+ last = now;
+ }
+
+ function onTouchEnd(e) {
+ if (L.Browser.msTouch) {
+ var idx = trackedTouches.indexOf(e.pointerId);
+ if (idx === -1) {
+ return;
+ }
+ trackedTouches.splice(idx, 1);
+ }
+
+ if (doubleTap) {
+ if (L.Browser.msTouch) {
+ // work around .type being readonly with MSPointer* events
+ var newTouch = { },
+ prop;
+
+ // jshint forin:false
+ for (var i in touch) {
+ prop = touch[i];
+ if (typeof prop === 'function') {
+ newTouch[i] = prop.bind(touch);
+ } else {
+ newTouch[i] = prop;
+ }
+ }
+ touch = newTouch;
+ }
+ touch.type = 'dblclick';
+ handler(touch);
+ last = null;
+ }
+ }
+ obj[pre + touchstart + id] = onTouchStart;
+ obj[pre + touchend + id] = onTouchEnd;
+
+ // on msTouch we need to listen on the document, otherwise a drag starting on the map and moving off screen
+ // will not come through to us, so we will lose track of how many touches are ongoing
+ var endElement = L.Browser.msTouch ? document.documentElement : obj;
+
+ obj.addEventListener(touchstart, onTouchStart, false);
+ endElement.addEventListener(touchend, onTouchEnd, false);
+
+ if (L.Browser.msTouch) {
+ endElement.addEventListener('MSPointerCancel', onTouchEnd, false);
+ }
+
+ return this;
+ },
+
+ removeDoubleTapListener: function (obj, id) {
+ var pre = '_leaflet_';
+
+ obj.removeEventListener(this._touchstart, obj[pre + this._touchstart + id], false);
+ (L.Browser.msTouch ? document.documentElement : obj).removeEventListener(
+ this._touchend, obj[pre + this._touchend + id], false);
+
+ if (L.Browser.msTouch) {
+ document.documentElement.removeEventListener('MSPointerCancel', obj[pre + this._touchend + id], false);
+ }
+
+ return this;
+ }
+});
-L.extend(L.DomEvent, {
- _touchstart: L.Browser.msTouch ? 'MSPointerDown' : 'touchstart',
- _touchend: L.Browser.msTouch ? 'MSPointerUp' : 'touchend',
-
- // inspired by Zepto touch code by Thomas Fuchs
- addDoubleTapListener: function (obj, handler, id) {
- var last,
- doubleTap = false,
- delay = 250,
- touch,
- pre = '_leaflet_',
- touchstart = this._touchstart,
- touchend = this._touchend,
- trackedTouches = [];
-
- function onTouchStart(e) {
- var count;
- if (L.Browser.msTouch) {
- trackedTouches.push(e.pointerId);
- count = trackedTouches.length;
- } else {
- count = e.touches.length;
- }
- if (count > 1) {
- return;
- }
-
- var now = Date.now(),
- delta = now - (last || now);
-
- touch = e.touches ? e.touches[0] : e;
- doubleTap = (delta > 0 && delta <= delay);
- last = now;
- }
-
- function onTouchEnd(e) {
- /*jshint forin:false */
- if (L.Browser.msTouch) {
- var idx = trackedTouches.indexOf(e.pointerId);
- if (idx === -1) {
- return;
- }
- trackedTouches.splice(idx, 1);
- }
-
- if (doubleTap) {
- if (L.Browser.msTouch) {
- //Work around .type being readonly with MSPointer* events
- var newTouch = { },
- prop;
-
- for (var i in touch) {
- prop = touch[i];
- if (typeof prop === 'function') {
- newTouch[i] = prop.bind(touch);
- } else {
- newTouch[i] = prop;
- }
- }
- touch = newTouch;
- }
- touch.type = 'dblclick';
- handler(touch);
- last = null;
- }
- }
- obj[pre + touchstart + id] = onTouchStart;
- obj[pre + touchend + id] = onTouchEnd;
-
- //On msTouch we need to listen on the document otherwise a drag starting on the map and moving off screen will not come through to us
- // so we will lose track of how many touches are ongoing
- var endElement = L.Browser.msTouch ? document.documentElement : obj;
-
- obj.addEventListener(touchstart, onTouchStart, false);
- endElement.addEventListener(touchend, onTouchEnd, false);
- if (L.Browser.msTouch) {
- endElement.addEventListener('MSPointerCancel', onTouchEnd, false);
- }
- return this;
- },
-
- removeDoubleTapListener: function (obj, id) {
- var pre = '_leaflet_';
- obj.removeEventListener(this._touchstart, obj[pre + this._touchstart + id], false);
- (L.Browser.msTouch ? document.documentElement : obj).removeEventListener(this._touchend, obj[pre + this._touchend + id], false);
- if (L.Browser.msTouch) {
- document.documentElement.removeEventListener('MSPointerCancel', obj[pre + this._touchend + id], false);
- }
- return this;
- }
-});
-
-
/*
* Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.
*/
@@ -6526,10 +7104,10 @@
},
_onTouchMove: function (e) {
- if (!e.touches || e.touches.length !== 2) { return; }
-
var map = this._map;
+ if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
+
var p1 = map.mouseEventToLayerPoint(e.touches[0]),
p2 = map.mouseEventToLayerPoint(e.touches[1]);
@@ -6539,12 +7117,11 @@
if (this._scale === 1) { return; }
if (!this._moved) {
- L.DomUtil.addClass(map._mapPane, 'leaflet-zoom-anim leaflet-touching');
+ L.DomUtil.addClass(map._mapPane, 'leaflet-touching');
map
.fire('movestart')
- .fire('zoomstart')
- ._prepareTileBg();
+ .fire('zoomstart');
this._moved = true;
}
@@ -6559,28 +7136,23 @@
_updateOnMove: function () {
var map = this._map,
origin = this._getScaleOrigin(),
- center = map.layerPointToLatLng(origin);
+ center = map.layerPointToLatLng(origin),
+ zoom = map.getScaleZoom(this._scale);
- map.fire('zoomanim', {
- center: center,
- zoom: map.getScaleZoom(this._scale)
- });
-
- // Used 2 translates instead of transform-origin because of a very strange bug -
- // it didn't count the origin on the first touch-zoom but worked correctly afterwards
-
- map._tileBg.style[L.DomUtil.TRANSFORM] =
- L.DomUtil.getTranslateString(this._delta) + ' ' +
- L.DomUtil.getScaleString(this._scale, this._startCenter);
+ map._animateZoom(center, zoom, this._startCenter, this._scale, this._delta);
},
_onTouchEnd: function () {
- if (!this._moved || !this._zooming) { return; }
+ if (!this._moved || !this._zooming) {
+ this._zooming = false;
+ return;
+ }
var map = this._map;
this._zooming = false;
L.DomUtil.removeClass(map._mapPane, 'leaflet-touching');
+ L.Util.cancelAnimFrame(this._animRequest);
L.DomEvent
.off(document, 'touchmove', this._onTouchMove)
@@ -6594,14 +7166,10 @@
roundZoomDelta = (floatZoomDelta > 0 ?
Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
- zoom = map._limitZoom(oldZoom + roundZoomDelta);
+ zoom = map._limitZoom(oldZoom + roundZoomDelta),
+ scale = map.getZoomScale(zoom) / this._scale;
- map.fire('zoomanim', {
- center: center,
- zoom: zoom
- });
-
- map._runAnimation(center, zoom, map.getZoomScale(zoom) / this._scale, origin, true);
+ map._animateZoom(center, zoom, origin, scale);
},
_getScaleOrigin: function () {
@@ -6614,6 +7182,115 @@
/*
+ * L.Map.Tap is used to enable mobile hacks like quick taps and long hold.
+ */
+
+L.Map.mergeOptions({
+ tap: true,
+ tapTolerance: 15
+});
+
+L.Map.Tap = L.Handler.extend({
+ addHooks: function () {
+ L.DomEvent.on(this._map._container, 'touchstart', this._onDown, this);
+ },
+
+ removeHooks: function () {
+ L.DomEvent.off(this._map._container, 'touchstart', this._onDown, this);
+ },
+
+ _onDown: function (e) {
+ if (!e.touches) { return; }
+
+ L.DomEvent.preventDefault(e);
+
+ this._fireClick = true;
+
+ // don't simulate click or track longpress if more than 1 touch
+ if (e.touches.length > 1) {
+ this._fireClick = false;
+ clearTimeout(this._holdTimeout);
+ return;
+ }
+
+ var first = e.touches[0],
+ el = first.target;
+
+ this._startPos = this._newPos = new L.Point(first.clientX, first.clientY);
+
+ // if touching a link, highlight it
+ if (el.tagName.toLowerCase() === 'a') {
+ L.DomUtil.addClass(el, 'leaflet-active');
+ }
+
+ // simulate long hold but setting a timeout
+ this._holdTimeout = setTimeout(L.bind(function () {
+ if (this._isTapValid()) {
+ this._fireClick = false;
+ this._onUp();
+ this._simulateEvent('contextmenu', first);
+ }
+ }, this), 1000);
+
+ L.DomEvent
+ .on(document, 'touchmove', this._onMove, this)
+ .on(document, 'touchend', this._onUp, this);
+ },
+
+ _onUp: function (e) {
+ clearTimeout(this._holdTimeout);
+
+ L.DomEvent
+ .off(document, 'touchmove', this._onMove, this)
+ .off(document, 'touchend', this._onUp, this);
+
+ if (this._fireClick && e && e.changedTouches) {
+
+ var first = e.changedTouches[0],
+ el = first.target;
+
+ if (el.tagName.toLowerCase() === 'a') {
+ L.DomUtil.removeClass(el, 'leaflet-active');
+ }
+
+ // simulate click if the touch didn't move too much
+ if (this._isTapValid()) {
+ this._simulateEvent('click', first);
+ }
+ }
+ },
+
+ _isTapValid: function () {
+ return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
+ },
+
+ _onMove: function (e) {
+ var first = e.touches[0];
+ this._newPos = new L.Point(first.clientX, first.clientY);
+ },
+
+ _simulateEvent: function (type, e) {
+ var simulatedEvent = document.createEvent('MouseEvents');
+
+ simulatedEvent._simulated = true;
+ e.target._simulatedClick = true;
+
+ simulatedEvent.initMouseEvent(
+ type, true, true, window, 1,
+ e.screenX, e.screenY,
+ e.clientX, e.clientY,
+ false, false, false, false, 0, null);
+
+ e.target.dispatchEvent(simulatedEvent);
+ }
+});
+
+if (L.Browser.touch && !L.Browser.msTouch) {
+ L.Map.addInitHook('addHandler', 'tap', L.Map.Tap);
+}
+
+
+/*
* L.Handler.ShiftDragZoom is used to add shift-drag zoom interaction to the map
* (zoom to a selected bounding box), enabled by default.
*/
@@ -6641,6 +7318,7 @@
if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
L.DomUtil.disableTextSelection();
+ L.DomUtil.disableImageDrag();
this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
@@ -6653,9 +7331,9 @@
L.DomEvent
.on(document, 'mousemove', this._onMouseMove, this)
.on(document, 'mouseup', this._onMouseUp, this)
- .preventDefault(e);
+ .on(document, 'keydown', this._onKeyDown, this);
- this._map.fire("boxzoomstart");
+ this._map.fire('boxzoomstart');
},
_onMouseMove: function (e) {
@@ -6676,16 +7354,23 @@
box.style.height = (Math.max(0, Math.abs(offset.y) - 4)) + 'px';
},
- _onMouseUp: function (e) {
+ _finish: function () {
this._pane.removeChild(this._box);
this._container.style.cursor = '';
L.DomUtil.enableTextSelection();
+ L.DomUtil.enableImageDrag();
L.DomEvent
.off(document, 'mousemove', this._onMouseMove)
- .off(document, 'mouseup', this._onMouseUp);
+ .off(document, 'mouseup', this._onMouseUp)
+ .off(document, 'keydown', this._onKeyDown);
+ },
+ _onMouseUp: function (e) {
+
+ this._finish();
+
var map = this._map,
layerPoint = map.mouseEventToLayerPoint(e);
@@ -6697,9 +7382,15 @@
map.fitBounds(bounds);
- map.fire("boxzoomend", {
+ map.fire('boxzoomend', {
boxZoomBounds: bounds
});
+ },
+
+ _onKeyDown: function (e) {
+ if (e.keyCode === 27) {
+ this._finish();
+ }
}
});
@@ -6739,7 +7430,7 @@
// make the container focusable by tabbing
if (container.tabIndex === -1) {
- container.tabIndex = "0";
+ container.tabIndex = '0';
}
L.DomEvent
@@ -6768,9 +7459,16 @@
},
_onMouseDown: function () {
- if (!this._focused) {
- this._map._container.focus();
- }
+ if (this._focused) { return; }
+
+ var body = document.body,
+ docEl = document.documentElement,
+ top = body.scrollTop || docEl.scrollTop,
+ left = body.scrollTop || docEl.scrollLeft;
+
+ this._map._container.focus();
+
+ window.scrollTo(left, top);
},
_onFocus: function () {
@@ -6827,14 +7525,17 @@
var key = e.keyCode,
map = this._map;
- if (this._panKeys.hasOwnProperty(key)) {
+ if (key in this._panKeys) {
+
+ if (map._panAnim && map._panAnim._inProgress) { return; }
+
map.panBy(this._panKeys[key]);
if (map.options.maxBounds) {
map.panInsideBounds(map.options.maxBounds);
}
- } else if (this._zoomKeys.hasOwnProperty(key)) {
+ } else if (key in this._zoomKeys) {
map.setZoom(map.getZoom() + this._zoomKeys[key]);
} else {
@@ -6860,15 +7561,22 @@
addHooks: function () {
var icon = this._marker._icon;
if (!this._draggable) {
- this._draggable = new L.Draggable(icon, icon)
- .on('dragstart', this._onDragStart, this)
- .on('drag', this._onDrag, this)
- .on('dragend', this._onDragEnd, this);
+ this._draggable = new L.Draggable(icon, icon);
}
+
+ this._draggable
+ .on('dragstart', this._onDragStart, this)
+ .on('drag', this._onDrag, this)
+ .on('dragend', this._onDragEnd, this);
this._draggable.enable();
},
removeHooks: function () {
+ this._draggable
+ .off('dragstart', this._onDragStart, this)
+ .off('drag', this._onDrag, this)
+ .off('dragend', this._onDragEnd, this);
+
this._draggable.disable();
},
@@ -6909,577 +7617,325 @@
});
-/*
- * L.Handler.PolyEdit is an editing handler for polylines and polygons.
- */
+/*
+ * L.Control is a base class for implementing map controls. Handles positioning.
+ * All other controls extend from this class.
+ */
+
+L.Control = L.Class.extend({
+ options: {
+ position: 'topright'
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+ },
+
+ getPosition: function () {
+ return this.options.position;
+ },
+
+ setPosition: function (position) {
+ var map = this._map;
+
+ if (map) {
+ map.removeControl(this);
+ }
+
+ this.options.position = position;
+
+ if (map) {
+ map.addControl(this);
+ }
+
+ return this;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ addTo: function (map) {
+ this._map = map;
+
+ var container = this._container = this.onAdd(map),
+ pos = this.getPosition(),
+ corner = map._controlCorners[pos];
+
+ L.DomUtil.addClass(container, 'leaflet-control');
+
+ if (pos.indexOf('bottom') !== -1) {
+ corner.insertBefore(container, corner.firstChild);
+ } else {
+ corner.appendChild(container);
+ }
+
+ return this;
+ },
+
+ removeFrom: function (map) {
+ var pos = this.getPosition(),
+ corner = map._controlCorners[pos];
+
+ corner.removeChild(this._container);
+ this._map = null;
+
+ if (this.onRemove) {
+ this.onRemove(map);
+ }
+
+ return this;
+ }
+});
+
+L.control = function (options) {
+ return new L.Control(options);
+};
+
+
+// adds control-related methods to L.Map
+
+L.Map.include({
+ addControl: function (control) {
+ control.addTo(this);
+ return this;
+ },
+
+ removeControl: function (control) {
+ control.removeFrom(this);
+ return this;
+ },
+
+ _initControlPos: function () {
+ var corners = this._controlCorners = {},
+ l = 'leaflet-',
+ container = this._controlContainer =
+ L.DomUtil.create('div', l + 'control-container', this._container);
+
+ function createCorner(vSide, hSide) {
+ var className = l + vSide + ' ' + l + hSide;
+
+ corners[vSide + hSide] = L.DomUtil.create('div', className, container);
+ }
+
+ createCorner('top', 'left');
+ createCorner('top', 'right');
+ createCorner('bottom', 'left');
+ createCorner('bottom', 'right');
+ },
+
+ _clearControlPos: function () {
+ this._container.removeChild(this._controlContainer);
+ }
+});
-L.Handler.PolyEdit = L.Handler.extend({
- options: {
- icon: new L.DivIcon({
- iconSize: new L.Point(8, 8),
- className: 'leaflet-div-icon leaflet-editing-icon'
- })
- },
- initialize: function (poly, options) {
- this._poly = poly;
- L.setOptions(this, options);
- },
+/*
+ * L.Control.Zoom is used for the default zoom buttons on the map.
+ */
+
+L.Control.Zoom = L.Control.extend({
+ options: {
+ position: 'topleft'
+ },
+
+ onAdd: function (map) {
+ var zoomName = 'leaflet-control-zoom',
+ container = L.DomUtil.create('div', zoomName + ' leaflet-bar');
+
+ this._map = map;
+
+ this._zoomInButton = this._createButton(
+ '+', 'Zoom in', zoomName + '-in', container, this._zoomIn, this);
+ this._zoomOutButton = this._createButton(
+ '-', 'Zoom out', zoomName + '-out', container, this._zoomOut, this);
+
+ map.on('zoomend zoomlevelschange', this._updateDisabled, this);
+
+ return container;
+ },
+
+ onRemove: function (map) {
+ map.off('zoomend zoomlevelschange', this._updateDisabled, this);
+ },
+
+ _zoomIn: function (e) {
+ this._map.zoomIn(e.shiftKey ? 3 : 1);
+ },
+
+ _zoomOut: function (e) {
+ this._map.zoomOut(e.shiftKey ? 3 : 1);
+ },
+
+ _createButton: function (html, title, className, container, fn, context) {
+ var link = L.DomUtil.create('a', className, container);
+ link.innerHTML = html;
+ link.href = '#';
+ link.title = title;
+
+ var stop = L.DomEvent.stopPropagation;
+
+ L.DomEvent
+ .on(link, 'click', stop)
+ .on(link, 'mousedown', stop)
+ .on(link, 'dblclick', stop)
+ .on(link, 'click', L.DomEvent.preventDefault)
+ .on(link, 'click', fn, context);
+
+ return link;
+ },
+
+ _updateDisabled: function () {
+ var map = this._map,
+ className = 'leaflet-disabled';
+
+ L.DomUtil.removeClass(this._zoomInButton, className);
+ L.DomUtil.removeClass(this._zoomOutButton, className);
+
+ if (map._zoom === map.getMinZoom()) {
+ L.DomUtil.addClass(this._zoomOutButton, className);
+ }
+ if (map._zoom === map.getMaxZoom()) {
+ L.DomUtil.addClass(this._zoomInButton, className);
+ }
+ }
+});
+
+L.Map.mergeOptions({
+ zoomControl: true
+});
+
+L.Map.addInitHook(function () {
+ if (this.options.zoomControl) {
+ this.zoomControl = new L.Control.Zoom();
+ this.addControl(this.zoomControl);
+ }
+});
+
+L.control.zoom = function (options) {
+ return new L.Control.Zoom(options);
+};
+
- addHooks: function () {
- if (this._poly._map) {
- if (!this._markerGroup) {
- this._initMarkers();
- }
- this._poly._map.addLayer(this._markerGroup);
- }
- },
- removeHooks: function () {
- if (this._poly._map) {
- this._poly._map.removeLayer(this._markerGroup);
- delete this._markerGroup;
- delete this._markers;
- }
- },
+/*
+ * L.Control.Attribution is used for displaying attribution on the map (added by default).
+ */
+
+L.Control.Attribution = L.Control.extend({
+ options: {
+ position: 'bottomright',
+ prefix: '<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'
+ },
+
+ initialize: function (options) {
+ L.setOptions(this, options);
+
+ this._attributions = {};
+ },
+
+ onAdd: function (map) {
+ this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
+ L.DomEvent.disableClickPropagation(this._container);
+
+ map
+ .on('layeradd', this._onLayerAdd, this)
+ .on('layerremove', this._onLayerRemove, this);
+
+ this._update();
+
+ return this._container;
+ },
+
+ onRemove: function (map) {
+ map
+ .off('layeradd', this._onLayerAdd)
+ .off('layerremove', this._onLayerRemove);
+
+ },
+
+ setPrefix: function (prefix) {
+ this.options.prefix = prefix;
+ this._update();
+ return this;
+ },
+
+ addAttribution: function (text) {
+ if (!text) { return; }
+
+ if (!this._attributions[text]) {
+ this._attributions[text] = 0;
+ }
+ this._attributions[text]++;
+
+ this._update();
+
+ return this;
+ },
+
+ removeAttribution: function (text) {
+ if (!text) { return; }
+
+ if (this._attributions[text]) {
+ this._attributions[text]--;
+ this._update();
+ }
+
+ return this;
+ },
+
+ _update: function () {
+ if (!this._map) { return; }
+
+ var attribs = [];
+
+ for (var i in this._attributions) {
+ if (this._attributions[i]) {
+ attribs.push(i);
+ }
+ }
+
+ var prefixAndAttribs = [];
+
+ if (this.options.prefix) {
+ prefixAndAttribs.push(this.options.prefix);
+ }
+ if (attribs.length) {
+ prefixAndAttribs.push(attribs.join(', '));
+ }
+
+ this._container.innerHTML = prefixAndAttribs.join(' | ');
+ },
+
+ _onLayerAdd: function (e) {
+ if (e.layer.getAttribution) {
+ this.addAttribution(e.layer.getAttribution());
+ }
+ },
+
+ _onLayerRemove: function (e) {
+ if (e.layer.getAttribution) {
+ this.removeAttribution(e.layer.getAttribution());
+ }
+ }
+});
+
+L.Map.mergeOptions({
+ attributionControl: true
+});
+
+L.Map.addInitHook(function () {
+ if (this.options.attributionControl) {
+ this.attributionControl = (new L.Control.Attribution()).addTo(this);
+ }
+});
+
+L.control.attribution = function (options) {
+ return new L.Control.Attribution(options);
+};
- updateMarkers: function () {
- this._markerGroup.clearLayers();
- this._initMarkers();
- },
- _initMarkers: function () {
- if (!this._markerGroup) {
- this._markerGroup = new L.LayerGroup();
- }
- this._markers = [];
-
- var latlngs = this._poly._latlngs,
- i, j, len, marker;
-
- // TODO refactor holes implementation in Polygon to support it here
-
- for (i = 0, len = latlngs.length; i < len; i++) {
-
- marker = this._createMarker(latlngs[i], i);
- marker.on('click', this._onMarkerClick, this);
- this._markers.push(marker);
- }
-
- var markerLeft, markerRight;
-
- for (i = 0, j = len - 1; i < len; j = i++) {
- if (i === 0 && !(L.Polygon && (this._poly instanceof L.Polygon))) {
- continue;
- }
-
- markerLeft = this._markers[j];
- markerRight = this._markers[i];
-
- this._createMiddleMarker(markerLeft, markerRight);
- this._updatePrevNext(markerLeft, markerRight);
- }
- },
-
- _createMarker: function (latlng, index) {
- var marker = new L.Marker(latlng, {
- draggable: true,
- icon: this.options.icon
- });
-
- marker._origLatLng = latlng;
- marker._index = index;
-
- marker.on('drag', this._onMarkerDrag, this);
- marker.on('dragend', this._fireEdit, this);
-
- this._markerGroup.addLayer(marker);
-
- return marker;
- },
-
- _fireEdit: function () {
- this._poly.fire('edit');
- },
-
- _onMarkerDrag: function (e) {
- var marker = e.target;
-
- L.extend(marker._origLatLng, marker._latlng);
-
- if (marker._middleLeft) {
- marker._middleLeft.setLatLng(this._getMiddleLatLng(marker._prev, marker));
- }
- if (marker._middleRight) {
- marker._middleRight.setLatLng(this._getMiddleLatLng(marker, marker._next));
- }
-
- this._poly.redraw();
- },
-
- _onMarkerClick: function (e) {
- // we want to remove the marker on click, but if latlng count < 3, polyline would be invalid
- if (this._poly._latlngs.length < 3) { return; }
-
- var marker = e.target,
- i = marker._index;
-
- // remove the marker
- this._markerGroup.removeLayer(marker);
- this._markers.splice(i, 1);
- this._poly.spliceLatLngs(i, 1);
- this._updateIndexes(i, -1);
-
- // update prev/next links of adjacent markers
- this._updatePrevNext(marker._prev, marker._next);
-
- // remove ghost markers near the removed marker
- if (marker._middleLeft) {
- this._markerGroup.removeLayer(marker._middleLeft);
- }
- if (marker._middleRight) {
- this._markerGroup.removeLayer(marker._middleRight);
- }
-
- // create a ghost marker in place of the removed one
- if (marker._prev && marker._next) {
- this._createMiddleMarker(marker._prev, marker._next);
-
- } else if (!marker._prev) {
- marker._next._middleLeft = null;
-
- } else if (!marker._next) {
- marker._prev._middleRight = null;
- }
-
- this._poly.fire('edit');
- },
-
- _updateIndexes: function (index, delta) {
- this._markerGroup.eachLayer(function (marker) {
- if (marker._index > index) {
- marker._index += delta;
- }
- });
- },
-
- _createMiddleMarker: function (marker1, marker2) {
- var latlng = this._getMiddleLatLng(marker1, marker2),
- marker = this._createMarker(latlng),
- onClick,
- onDragStart,
- onDragEnd;
-
- marker.setOpacity(0.6);
-
- marker1._middleRight = marker2._middleLeft = marker;
-
- onDragStart = function () {
- var i = marker2._index;
-
- marker._index = i;
-
- marker
- .off('click', onClick)
- .on('click', this._onMarkerClick, this);
-
- latlng.lat = marker.getLatLng().lat;
- latlng.lng = marker.getLatLng().lng;
- this._poly.spliceLatLngs(i, 0, latlng);
- this._markers.splice(i, 0, marker);
-
- marker.setOpacity(1);
-
- this._updateIndexes(i, 1);
- marker2._index++;
- this._updatePrevNext(marker1, marker);
- this._updatePrevNext(marker, marker2);
- };
-
- onDragEnd = function () {
- marker.off('dragstart', onDragStart, this);
- marker.off('dragend', onDragEnd, this);
-
- this._createMiddleMarker(marker1, marker);
- this._createMiddleMarker(marker, marker2);
- };
-
- onClick = function () {
- onDragStart.call(this);
- onDragEnd.call(this);
- this._poly.fire('edit');
- };
-
- marker
- .on('click', onClick, this)
- .on('dragstart', onDragStart, this)
- .on('dragend', onDragEnd, this);
-
- this._markerGroup.addLayer(marker);
- },
-
- _updatePrevNext: function (marker1, marker2) {
- if (marker1) {
- marker1._next = marker2;
- }
- if (marker2) {
- marker2._prev = marker1;
- }
- },
-
- _getMiddleLatLng: function (marker1, marker2) {
- var map = this._poly._map,
- p1 = map.latLngToLayerPoint(marker1.getLatLng()),
- p2 = map.latLngToLayerPoint(marker2.getLatLng());
-
- return map.layerPointToLatLng(p1._add(p2)._divideBy(2));
- }
-});
-
-L.Polyline.addInitHook(function () {
-
- if (L.Handler.PolyEdit) {
- this.editing = new L.Handler.PolyEdit(this);
-
- if (this.options.editable) {
- this.editing.enable();
- }
- }
-
- this.on('add', function () {
- if (this.editing && this.editing.enabled()) {
- this.editing.addHooks();
- }
- });
-
- this.on('remove', function () {
- if (this.editing && this.editing.enabled()) {
- this.editing.removeHooks();
- }
- });
-});
-
-
/*
- * L.Control is a base class for implementing map controls. Handles positioning.
- * All other controls extend from this class.
- */
-
-L.Control = L.Class.extend({
- options: {
- position: 'topright'
- },
-
- initialize: function (options) {
- L.setOptions(this, options);
- },
-
- getPosition: function () {
- return this.options.position;
- },
-
- setPosition: function (position) {
- var map = this._map;
-
- if (map) {
- map.removeControl(this);
- }
-
- this.options.position = position;
-
- if (map) {
- map.addControl(this);
- }
-
- return this;
- },
-
- addTo: function (map) {
- this._map = map;
-
- var container = this._container = this.onAdd(map),
- pos = this.getPosition(),
- corner = map._controlCorners[pos];
-
- L.DomUtil.addClass(container, 'leaflet-control');
-
- if (pos.indexOf('bottom') !== -1) {
- corner.insertBefore(container, corner.firstChild);
- } else {
- corner.appendChild(container);
- }
-
- return this;
- },
-
- removeFrom: function (map) {
- var pos = this.getPosition(),
- corner = map._controlCorners[pos];
-
- corner.removeChild(this._container);
- this._map = null;
-
- if (this.onRemove) {
- this.onRemove(map);
- }
-
- return this;
- }
-});
-
-L.control = function (options) {
- return new L.Control(options);
-};
-
-
-/*
- * Adds control-related methods to L.Map.
- */
-
-L.Map.include({
- addControl: function (control) {
- control.addTo(this);
- return this;
- },
-
- removeControl: function (control) {
- control.removeFrom(this);
- return this;
- },
-
- _initControlPos: function () {
- var corners = this._controlCorners = {},
- l = 'leaflet-',
- container = this._controlContainer =
- L.DomUtil.create('div', l + 'control-container', this._container);
-
- function createCorner(vSide, hSide) {
- var className = l + vSide + ' ' + l + hSide;
-
- corners[vSide + hSide] = L.DomUtil.create('div', className, container);
- }
-
- createCorner('top', 'left');
- createCorner('top', 'right');
- createCorner('bottom', 'left');
- createCorner('bottom', 'right');
- }
-});
-
-
-/*
- * L.Control.Zoom is used for the default zoom buttons on the map.
- */
-
-L.Control.Zoom = L.Control.extend({
- options: {
- position: 'topleft'
- },
-
- onAdd: function (map) {
- var zoomName = 'leaflet-control-zoom',
- barName = 'leaflet-bar',
- partName = barName + '-part',
- container = L.DomUtil.create('div', zoomName + ' ' + barName);
-
- this._map = map;
-
- this._zoomInButton = this._createButton('+', 'Zoom in',
- zoomName + '-in ' +
- partName + ' ' +
- partName + '-top',
- container, this._zoomIn, this);
-
- this._zoomOutButton = this._createButton('-', 'Zoom out',
- zoomName + '-out ' +
- partName + ' ' +
- partName + '-bottom',
- container, this._zoomOut, this);
-
- map.on('zoomend', this._updateDisabled, this);
-
- return container;
- },
-
- onRemove: function (map) {
- map.off('zoomend', this._updateDisabled, this);
- },
-
- _zoomIn: function (e) {
- this._map.zoomIn(e.shiftKey ? 3 : 1);
- },
-
- _zoomOut: function (e) {
- this._map.zoomOut(e.shiftKey ? 3 : 1);
- },
-
- _createButton: function (html, title, className, container, fn, context) {
- var link = L.DomUtil.create('a', className, container);
- link.innerHTML = html;
- link.href = '#';
- link.title = title;
-
- var stop = L.DomEvent.stopPropagation;
-
- L.DomEvent
- .on(link, 'click', stop)
- .on(link, 'mousedown', stop)
- .on(link, 'dblclick', stop)
- .on(link, 'click', L.DomEvent.preventDefault)
- .on(link, 'click', fn, context);
-
- return link;
- },
-
- _updateDisabled: function () {
- var map = this._map,
- className = 'leaflet-control-zoom-disabled';
-
- L.DomUtil.removeClass(this._zoomInButton, className);
- L.DomUtil.removeClass(this._zoomOutButton, className);
-
- if (map._zoom === map.getMinZoom()) {
- L.DomUtil.addClass(this._zoomOutButton, className);
- }
- if (map._zoom === map.getMaxZoom()) {
- L.DomUtil.addClass(this._zoomInButton, className);
- }
- }
-});
-
-L.Map.mergeOptions({
- zoomControl: true
-});
-
-L.Map.addInitHook(function () {
- if (this.options.zoomControl) {
- this.zoomControl = new L.Control.Zoom();
- this.addControl(this.zoomControl);
- }
-});
-
-L.control.zoom = function (options) {
- return new L.Control.Zoom(options);
-};
-
-
-
-/*
- * L.Control.Attribution is used for displaying attribution on the map (added by default).
- */
-
-L.Control.Attribution = L.Control.extend({
- options: {
- position: 'bottomright',
- prefix: 'Powered by <a href="http://leafletjs.com">Leaflet</a>'
- },
-
- initialize: function (options) {
- L.setOptions(this, options);
-
- this._attributions = {};
- },
-
- onAdd: function (map) {
- this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
- L.DomEvent.disableClickPropagation(this._container);
-
- map
- .on('layeradd', this._onLayerAdd, this)
- .on('layerremove', this._onLayerRemove, this);
-
- this._update();
-
- return this._container;
- },
-
- onRemove: function (map) {
- map
- .off('layeradd', this._onLayerAdd)
- .off('layerremove', this._onLayerRemove);
-
- },
-
- setPrefix: function (prefix) {
- this.options.prefix = prefix;
- this._update();
- return this;
- },
-
- addAttribution: function (text) {
- if (!text) { return; }
-
- if (!this._attributions[text]) {
- this._attributions[text] = 0;
- }
- this._attributions[text]++;
-
- this._update();
-
- return this;
- },
-
- removeAttribution: function (text) {
- if (!text) { return; }
-
- this._attributions[text]--;
- this._update();
-
- return this;
- },
-
- _update: function () {
- if (!this._map) { return; }
-
- var attribs = [];
-
- for (var i in this._attributions) {
- if (this._attributions.hasOwnProperty(i) && this._attributions[i]) {
- attribs.push(i);
- }
- }
-
- var prefixAndAttribs = [];
-
- if (this.options.prefix) {
- prefixAndAttribs.push(this.options.prefix);
- }
- if (attribs.length) {
- prefixAndAttribs.push(attribs.join(', '));
- }
-
- this._container.innerHTML = prefixAndAttribs.join(' — ');
- },
-
- _onLayerAdd: function (e) {
- if (e.layer.getAttribution) {
- this.addAttribution(e.layer.getAttribution());
- }
- },
-
- _onLayerRemove: function (e) {
- if (e.layer.getAttribution) {
- this.removeAttribution(e.layer.getAttribution());
- }
- }
-});
-
-L.Map.mergeOptions({
- attributionControl: true
-});
-
-L.Map.addInitHook(function () {
- if (this.options.attributionControl) {
- this.attributionControl = (new L.Control.Attribution()).addTo(this);
- }
-});
-
-L.control.attribution = function (options) {
- return new L.Control.Attribution(options);
-};
-
-
-/*
* L.Control.Scale is used for displaying metric/imperial scale on the map.
*/
@@ -7593,253 +8049,253 @@
};
-/*
- * L.Control.Layers is a control to allow users to switch between different layers on the map.
- */
+/*
+ * L.Control.Layers is a control to allow users to switch between different layers on the map.
+ */
+
+L.Control.Layers = L.Control.extend({
+ options: {
+ collapsed: true,
+ position: 'topright',
+ autoZIndex: true
+ },
+
+ initialize: function (baseLayers, overlays, options) {
+ L.setOptions(this, options);
+
+ this._layers = {};
+ this._lastZIndex = 0;
+ this._handlingClick = false;
+
+ for (var i in baseLayers) {
+ this._addLayer(baseLayers[i], i);
+ }
+
+ for (i in overlays) {
+ this._addLayer(overlays[i], i, true);
+ }
+ },
+
+ onAdd: function (map) {
+ this._initLayout();
+ this._update();
+
+ map
+ .on('layeradd', this._onLayerChange, this)
+ .on('layerremove', this._onLayerChange, this);
+
+ return this._container;
+ },
+
+ onRemove: function (map) {
+ map
+ .off('layeradd', this._onLayerChange)
+ .off('layerremove', this._onLayerChange);
+ },
+
+ addBaseLayer: function (layer, name) {
+ this._addLayer(layer, name);
+ this._update();
+ return this;
+ },
+
+ addOverlay: function (layer, name) {
+ this._addLayer(layer, name, true);
+ this._update();
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.stamp(layer);
+ delete this._layers[id];
+ this._update();
+ return this;
+ },
+
+ _initLayout: function () {
+ var className = 'leaflet-control-layers',
+ container = this._container = L.DomUtil.create('div', className);
+
+ //Makes this work on IE10 Touch devices by stopping it from firing a mouseout event when the touch is released
+ container.setAttribute('aria-haspopup', true);
+
+ if (!L.Browser.touch) {
+ L.DomEvent.disableClickPropagation(container);
+ L.DomEvent.on(container, 'mousewheel', L.DomEvent.stopPropagation);
+ } else {
+ L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
+ }
+
+ var form = this._form = L.DomUtil.create('form', className + '-list');
+
+ if (this.options.collapsed) {
+ if (!L.Browser.android) {
+ L.DomEvent
+ .on(container, 'mouseover', this._expand, this)
+ .on(container, 'mouseout', this._collapse, this);
+ }
+ var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container);
+ link.href = '#';
+ link.title = 'Layers';
+
+ if (L.Browser.touch) {
+ L.DomEvent
+ .on(link, 'click', L.DomEvent.stop)
+ .on(link, 'click', this._expand, this);
+ }
+ else {
+ L.DomEvent.on(link, 'focus', this._expand, this);
+ }
+
+ this._map.on('click', this._collapse, this);
+ // TODO keyboard accessibility
+ } else {
+ this._expand();
+ }
+
+ this._baseLayersList = L.DomUtil.create('div', className + '-base', form);
+ this._separator = L.DomUtil.create('div', className + '-separator', form);
+ this._overlaysList = L.DomUtil.create('div', className + '-overlays', form);
+
+ container.appendChild(form);
+ },
+
+ _addLayer: function (layer, name, overlay) {
+ var id = L.stamp(layer);
+
+ this._layers[id] = {
+ layer: layer,
+ name: name,
+ overlay: overlay
+ };
+
+ if (this.options.autoZIndex && layer.setZIndex) {
+ this._lastZIndex++;
+ layer.setZIndex(this._lastZIndex);
+ }
+ },
+
+ _update: function () {
+ if (!this._container) {
+ return;
+ }
+
+ this._baseLayersList.innerHTML = '';
+ this._overlaysList.innerHTML = '';
+
+ var baseLayersPresent = false,
+ overlaysPresent = false,
+ i, obj;
+
+ for (i in this._layers) {
+ obj = this._layers[i];
+ this._addItem(obj);
+ overlaysPresent = overlaysPresent || obj.overlay;
+ baseLayersPresent = baseLayersPresent || !obj.overlay;
+ }
+
+ this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
+ },
+
+ _onLayerChange: function (e) {
+ var obj = this._layers[L.stamp(e.layer)];
+
+ if (!obj) { return; }
+
+ if (!this._handlingClick) {
+ this._update();
+ }
+
+ var type = obj.overlay ?
+ (e.type === 'layeradd' ? 'overlayadd' : 'overlayremove') :
+ (e.type === 'layeradd' ? 'baselayerchange' : null);
+
+ if (type) {
+ this._map.fire(type, obj);
+ }
+ },
+
+ // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)
+ _createRadioElement: function (name, checked) {
+
+ var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' + name + '"';
+ if (checked) {
+ radioHtml += ' checked="checked"';
+ }
+ radioHtml += '/>';
+
+ var radioFragment = document.createElement('div');
+ radioFragment.innerHTML = radioHtml;
+
+ return radioFragment.firstChild;
+ },
+
+ _addItem: function (obj) {
+ var label = document.createElement('label'),
+ input,
+ checked = this._map.hasLayer(obj.layer);
+
+ if (obj.overlay) {
+ input = document.createElement('input');
+ input.type = 'checkbox';
+ input.className = 'leaflet-control-layers-selector';
+ input.defaultChecked = checked;
+ } else {
+ input = this._createRadioElement('leaflet-base-layers', checked);
+ }
+
+ input.layerId = L.stamp(obj.layer);
+
+ L.DomEvent.on(input, 'click', this._onInputClick, this);
+
+ var name = document.createElement('span');
+ name.innerHTML = ' ' + obj.name;
+
+ label.appendChild(input);
+ label.appendChild(name);
+
+ var container = obj.overlay ? this._overlaysList : this._baseLayersList;
+ container.appendChild(label);
+
+ return label;
+ },
+
+ _onInputClick: function () {
+ var i, input, obj,
+ inputs = this._form.getElementsByTagName('input'),
+ inputsLen = inputs.length;
+
+ this._handlingClick = true;
+
+ for (i = 0; i < inputsLen; i++) {
+ input = inputs[i];
+ obj = this._layers[input.layerId];
+
+ if (input.checked && !this._map.hasLayer(obj.layer)) {
+ this._map.addLayer(obj.layer);
+
+ } else if (!input.checked && this._map.hasLayer(obj.layer)) {
+ this._map.removeLayer(obj.layer);
+ }
+ }
+
+ this._handlingClick = false;
+ },
+
+ _expand: function () {
+ L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
+ },
+
+ _collapse: function () {
+ this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
+ }
+});
+
+L.control.layers = function (baseLayers, overlays, options) {
+ return new L.Control.Layers(baseLayers, overlays, options);
+};
-L.Control.Layers = L.Control.extend({
- options: {
- collapsed: true,
- position: 'topright',
- autoZIndex: true
- },
- initialize: function (baseLayers, overlays, options) {
- L.setOptions(this, options);
-
- this._layers = {};
- this._lastZIndex = 0;
- this._handlingClick = false;
-
- for (var i in baseLayers) {
- if (baseLayers.hasOwnProperty(i)) {
- this._addLayer(baseLayers[i], i);
- }
- }
-
- for (i in overlays) {
- if (overlays.hasOwnProperty(i)) {
- this._addLayer(overlays[i], i, true);
- }
- }
- },
-
- onAdd: function (map) {
- this._initLayout();
- this._update();
-
- map
- .on('layeradd', this._onLayerChange, this)
- .on('layerremove', this._onLayerChange, this);
-
- return this._container;
- },
-
- onRemove: function (map) {
- map
- .off('layeradd', this._onLayerChange)
- .off('layerremove', this._onLayerChange);
- },
-
- addBaseLayer: function (layer, name) {
- this._addLayer(layer, name);
- this._update();
- return this;
- },
-
- addOverlay: function (layer, name) {
- this._addLayer(layer, name, true);
- this._update();
- return this;
- },
-
- removeLayer: function (layer) {
- var id = L.stamp(layer);
- delete this._layers[id];
- this._update();
- return this;
- },
-
- _initLayout: function () {
- var className = 'leaflet-control-layers',
- container = this._container = L.DomUtil.create('div', className);
-
- if (!L.Browser.touch) {
- L.DomEvent.disableClickPropagation(container);
- L.DomEvent.on(container, 'mousewheel', L.DomEvent.stopPropagation);
- } else {
- L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
- }
-
- var form = this._form = L.DomUtil.create('form', className + '-list');
-
- if (this.options.collapsed) {
- L.DomEvent
- .on(container, 'mouseover', this._expand, this)
- .on(container, 'mouseout', this._collapse, this);
-
- var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container);
- link.href = '#';
- link.title = 'Layers';
-
- if (L.Browser.touch) {
- L.DomEvent
- .on(link, 'click', L.DomEvent.stopPropagation)
- .on(link, 'click', L.DomEvent.preventDefault)
- .on(link, 'click', this._expand, this);
- }
- else {
- L.DomEvent.on(link, 'focus', this._expand, this);
- }
-
- this._map.on('movestart', this._collapse, this);
- // TODO keyboard accessibility
- } else {
- this._expand();
- }
-
- this._baseLayersList = L.DomUtil.create('div', className + '-base', form);
- this._separator = L.DomUtil.create('div', className + '-separator', form);
- this._overlaysList = L.DomUtil.create('div', className + '-overlays', form);
-
- container.appendChild(form);
- },
-
- _addLayer: function (layer, name, overlay) {
- var id = L.stamp(layer);
-
- this._layers[id] = {
- layer: layer,
- name: name,
- overlay: overlay
- };
-
- if (this.options.autoZIndex && layer.setZIndex) {
- this._lastZIndex++;
- layer.setZIndex(this._lastZIndex);
- }
- },
-
- _update: function () {
- if (!this._container) {
- return;
- }
-
- this._baseLayersList.innerHTML = '';
- this._overlaysList.innerHTML = '';
-
- var baseLayersPresent = false,
- overlaysPresent = false;
-
- for (var i in this._layers) {
- if (this._layers.hasOwnProperty(i)) {
- var obj = this._layers[i];
- this._addItem(obj);
- overlaysPresent = overlaysPresent || obj.overlay;
- baseLayersPresent = baseLayersPresent || !obj.overlay;
- }
- }
-
- this._separator.style.display = (overlaysPresent && baseLayersPresent ? '' : 'none');
- },
-
- _onLayerChange: function (e) {
- var id = L.stamp(e.layer);
-
- if (this._layers[id] && !this._handlingClick) {
- this._update();
- }
- },
-
- // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)
- _createRadioElement: function (name, checked) {
-
- var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' + name + '"';
- if (checked) {
- radioHtml += ' checked="checked"';
- }
- radioHtml += '/>';
-
- var radioFragment = document.createElement('div');
- radioFragment.innerHTML = radioHtml;
-
- return radioFragment.firstChild;
- },
-
- _addItem: function (obj) {
- var label = document.createElement('label'),
- input,
- checked = this._map.hasLayer(obj.layer);
-
- if (obj.overlay) {
- input = document.createElement('input');
- input.type = 'checkbox';
- input.className = 'leaflet-control-layers-selector';
- input.defaultChecked = checked;
- } else {
- input = this._createRadioElement('leaflet-base-layers', checked);
- }
-
- input.layerId = L.stamp(obj.layer);
-
- L.DomEvent.on(input, 'click', this._onInputClick, this);
-
- var name = document.createElement('span');
- name.innerHTML = ' ' + obj.name;
-
- label.appendChild(input);
- label.appendChild(name);
-
- var container = obj.overlay ? this._overlaysList : this._baseLayersList;
- container.appendChild(label);
-
- return label;
- },
-
- _onInputClick: function () {
- var i, input, obj,
- inputs = this._form.getElementsByTagName('input'),
- inputsLen = inputs.length,
- baseLayer;
-
- this._handlingClick = true;
-
- for (i = 0; i < inputsLen; i++) {
- input = inputs[i];
- obj = this._layers[input.layerId];
-
- if (input.checked && !this._map.hasLayer(obj.layer)) {
- this._map.addLayer(obj.layer);
- if (!obj.overlay) {
- baseLayer = obj.layer;
- }
- } else if (!input.checked && this._map.hasLayer(obj.layer)) {
- this._map.removeLayer(obj.layer);
- }
- }
-
- if (baseLayer) {
- this._map.setZoom(this._map.getZoom());
- this._map.fire('baselayerchange', {layer: baseLayer});
- }
-
- this._handlingClick = false;
- },
-
- _expand: function () {
- L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
- },
-
- _collapse: function () {
- this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
- }
-});
-
-L.control.layers = function (baseLayers, overlays, options) {
- return new L.Control.Layers(baseLayers, overlays, options);
-};
-
-
/*
* L.PosAnimation is used by Leaflet internally for pan animations.
*/
@@ -7852,6 +8308,7 @@
this._el = el;
this._inProgress = true;
+ this._newPos = newPos;
this.fire('start');
@@ -7865,7 +8322,7 @@
L.Util.falseFn(el.offsetWidth);
// there's no native way to track value updates of transitioned properties, so we imitate this
- this._stepTimer = setInterval(L.bind(this.fire, this, 'step'), 50);
+ this._stepTimer = setInterval(L.bind(this._onStep, this), 50);
},
stop: function () {
@@ -7879,10 +8336,18 @@
L.Util.falseFn(this._el.offsetWidth); // force reflow in case we are about to start a new animation
},
+ _onStep: function () {
+ // jshint camelcase: false
+ // make L.DomUtil.getPosition return intermediate position value during animation
+ this._el._leaflet_pos = this._getPos();
+
+ this.fire('step');
+ },
+
// you can't easily get intermediate values of properties animated with CSS3 Transitions,
// we need to parse computed style (in case of transform it returns matrix string)
- _transformRe: /(-?[\d\.]+), (-?[\d\.]+)\)/,
+ _transformRe: /([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,
_getPos: function () {
var left, top, matches,
@@ -7891,8 +8356,8 @@
if (L.Browser.any3d) {
matches = style[L.DomUtil.TRANSFORM].match(this._transformRe);
- left = parseFloat(matches[1]);
- top = parseFloat(matches[2]);
+ left = matches ? parseFloat(matches[1]) : 0;
+ top = matches ? parseFloat(matches[2]) : 0;
} else {
left = parseFloat(style.left);
top = parseFloat(style.top);
@@ -7909,6 +8374,10 @@
this._el.style[L.DomUtil.TRANSITION] = '';
+ // jshint camelcase: false
+ // make sure L.DomUtil.getPosition returns the final position value after animation
+ this._el._leaflet_pos = this._newPos;
+
clearInterval(this._stepTimer);
this.fire('step').fire('end');
@@ -7923,38 +8392,46 @@
L.Map.include({
- setView: function (center, zoom, forceReset) {
+ setView: function (center, zoom, options) {
+
zoom = this._limitZoom(zoom);
+ center = L.latLng(center);
+ options = options || {};
- var zoomChanged = (this._zoom !== zoom);
+ if (this._panAnim) {
+ this._panAnim.stop();
+ }
- if (this._loaded && !forceReset && this._layers) {
+ if (this._loaded && !options.reset && options !== true) {
- if (this._panAnim) {
- this._panAnim.stop();
+ if (options.animate !== undefined) {
+ options.zoom = L.extend({animate: options.animate}, options.zoom);
+ options.pan = L.extend({animate: options.animate}, options.pan);
}
- var done = (zoomChanged ?
- this._zoomToIfClose && this._zoomToIfClose(center, zoom) :
- this._panByIfClose(center));
+ // try animating pan or zoom
+ var animated = (this._zoom !== zoom) ?
+ this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
+ this._tryAnimatedPan(center, options.pan);
- // exit if animated pan or zoom started
- if (done) {
+ if (animated) {
+ // prevent resize handler call, the view will refresh after animation anyway
clearTimeout(this._sizeTimer);
return this;
}
}
- // reset the map view
+ // animation didn't start, just reset the map view
this._resetView(center, zoom);
return this;
},
- panBy: function (offset, duration, easeLinearity) {
- offset = L.point(offset);
+ panBy: function (offset, options) {
+ offset = L.point(offset).round();
+ options = options || {};
- if (!(offset.x || offset.y)) {
+ if (!offset.x && !offset.y) {
return this;
}
@@ -7967,12 +8444,21 @@
}, this);
}
- this.fire('movestart');
+ // don't fire movestart if animating inertia
+ if (!options.noMoveStart) {
+ this.fire('movestart');
+ }
- L.DomUtil.addClass(this._mapPane, 'leaflet-pan-anim');
+ // animate pan unless animate: false specified
+ if (options.animate !== false) {
+ L.DomUtil.addClass(this._mapPane, 'leaflet-pan-anim');
- var newPos = L.DomUtil.getPosition(this._mapPane).subtract(offset)._round();
- this._panAnim.run(this._mapPane, newPos, duration || 0.25, easeLinearity);
+ var newPos = this._getMapPanePos().subtract(offset);
+ this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
+ } else {
+ this._rawPanBy(offset);
+ this.fire('move').fire('moveend');
+ }
return this;
},
@@ -7986,23 +8472,16 @@
this.fire('moveend');
},
- _panByIfClose: function (center) {
+ _tryAnimatedPan: function (center, options) {
// difference between the new and current centers in pixels
var offset = this._getCenterOffset(center)._floor();
- if (this._offsetIsWithinView(offset)) {
- this.panBy(offset);
- return true;
- }
- return false;
- },
+ // don't animate too far unless animate: true specified in options
+ if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
- _offsetIsWithinView: function (offset, multiplyFactor) {
- var m = multiplyFactor || 1,
- size = this.getSize();
+ this.panBy(offset, options);
- return (Math.abs(offset.x) <= size.x * m) &&
- (Math.abs(offset.y) <= size.y * m);
+ return true;
}
});
@@ -8081,112 +8560,174 @@
*/
L.Map.mergeOptions({
- zoomAnimation: L.DomUtil.TRANSITION && !L.Browser.android23 && !L.Browser.mobileOpera
+ zoomAnimation: true,
+ zoomAnimationThreshold: 4
});
if (L.DomUtil.TRANSITION) {
+
L.Map.addInitHook(function () {
- L.DomEvent.on(this._mapPane, L.DomUtil.TRANSITION_END, this._catchTransitionEnd, this);
+ // don't animate on browsers without hardware-accelerated transitions or old Android/Opera
+ this._zoomAnimated = this.options.zoomAnimation && L.DomUtil.TRANSITION &&
+ L.Browser.any3d && !L.Browser.android23 && !L.Browser.mobileOpera;
+
+ // zoom transitions run with the same duration for all layers, so if one of transitionend events
+ // happens after starting zoom animation (propagating to the map pane), we know that it ended globally
+ if (this._zoomAnimated) {
+ L.DomEvent.on(this._mapPane, L.DomUtil.TRANSITION_END, this._catchTransitionEnd, this);
+ }
});
}
L.Map.include(!L.DomUtil.TRANSITION ? {} : {
- _zoomToIfClose: function (center, zoom) {
+ _catchTransitionEnd: function () {
+ if (this._animatingZoom) {
+ this._onZoomTransitionEnd();
+ }
+ },
+ _tryAnimatedZoom: function (center, zoom, options) {
+
if (this._animatingZoom) { return true; }
- if (!this.options.zoomAnimation) { return false; }
+ options = options || {};
+ // don't animate if disabled, not supported or zoom difference is too large
+ if (!this._zoomAnimated || options.animate === false ||
+ Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
+
+ // offset is the pixel coords of the zoom origin relative to the current center
var scale = this.getZoomScale(zoom),
- offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);
+ offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale),
+ origin = this._getCenterLayerPoint()._add(offset);
- // if offset does not exceed half of the view
- if (!this._offsetIsWithinView(offset, 1)) { return false; }
+ // don't animate if the zoom origin isn't within one screen from the current center, unless forced
+ if (options.animate !== true && !this.getSize().contains(offset)) { return false; }
- L.DomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');
-
this
.fire('movestart')
.fire('zoomstart');
- this.fire('zoomanim', {
- center: center,
- zoom: zoom
- });
+ this._animateZoom(center, zoom, origin, scale, null, true);
- var origin = this._getCenterLayerPoint().add(offset);
-
- this._prepareTileBg();
- this._runAnimation(center, zoom, scale, origin);
-
return true;
},
- _catchTransitionEnd: function () {
- if (this._animatingZoom) {
- this._onZoomTransitionEnd();
- }
- },
+ _animateZoom: function (center, zoom, origin, scale, delta, backwards) {
- _runAnimation: function (center, zoom, scale, origin, backwardsTransform) {
+ this._animatingZoom = true;
+
+ // put transform transition on all layers with leaflet-zoom-animated class
+ L.DomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');
+
+ // remember what center/zoom to set after animation
this._animateToCenter = center;
this._animateToZoom = zoom;
- this._animatingZoom = true;
+ // disable any dragging during animation
if (L.Draggable) {
L.Draggable._disabled = true;
}
- var transform = L.DomUtil.TRANSFORM,
- tileBg = this._tileBg;
+ this.fire('zoomanim', {
+ center: center,
+ zoom: zoom,
+ origin: origin,
+ scale: scale,
+ delta: delta,
+ backwards: backwards
+ });
+ },
- clearTimeout(this._clearTileBgTimer);
+ _onZoomTransitionEnd: function () {
- L.Util.falseFn(tileBg.offsetWidth); //hack to make sure transform is updated before running animation
+ this._animatingZoom = false;
- var scaleStr = L.DomUtil.getScaleString(scale, origin),
- oldTransform = tileBg.style[transform];
+ L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');
- tileBg.style[transform] = backwardsTransform ?
- oldTransform + ' ' + scaleStr :
- scaleStr + ' ' + oldTransform;
+ this._resetView(this._animateToCenter, this._animateToZoom, true, true);
+
+ if (L.Draggable) {
+ L.Draggable._disabled = false;
+ }
+ }
+});
+
+
+/*
+ Zoom animation logic for L.TileLayer.
+*/
+
+L.TileLayer.include({
+ _animateZoom: function (e) {
+ if (!this._animating) {
+ this._animating = true;
+ this._prepareBgBuffer();
+ }
+
+ var bg = this._bgBuffer,
+ transform = L.DomUtil.TRANSFORM,
+ initialTransform = e.delta ? L.DomUtil.getTranslateString(e.delta) : bg.style[transform],
+ scaleStr = L.DomUtil.getScaleString(e.scale, e.origin);
+
+ bg.style[transform] = e.backwards ?
+ scaleStr + ' ' + initialTransform :
+ initialTransform + ' ' + scaleStr;
},
- _prepareTileBg: function () {
- var tilePane = this._tilePane,
- tileBg = this._tileBg;
+ _endZoomAnim: function () {
+ var front = this._tileContainer,
+ bg = this._bgBuffer;
- // If foreground layer doesn't have many tiles but bg layer does, keep the existing bg layer and just zoom it some more
- if (tileBg && this._getLoadedTilesPercentage(tileBg) > 0.5 &&
- this._getLoadedTilesPercentage(tilePane) < 0.5) {
+ front.style.visibility = '';
+ front.parentNode.appendChild(front); // Bring to fore
- tilePane.style.visibility = 'hidden';
- tilePane.empty = true;
- this._stopLoadingImages(tilePane);
- return;
+ // force reflow
+ L.Util.falseFn(bg.offsetWidth);
+
+ this._animating = false;
+ },
+
+ _clearBgBuffer: function () {
+ var map = this._map;
+
+ if (map && !map._animatingZoom && !map.touchZoom._zooming) {
+ this._bgBuffer.innerHTML = '';
+ this._bgBuffer.style[L.DomUtil.TRANSFORM] = '';
}
+ },
- if (!tileBg) {
- tileBg = this._tileBg = this._createPane('leaflet-tile-pane', this._mapPane);
- tileBg.style.zIndex = 1;
+ _prepareBgBuffer: function () {
+
+ var front = this._tileContainer,
+ bg = this._bgBuffer;
+
+ // if foreground layer doesn't have many tiles but bg layer does,
+ // keep the existing bg layer and just zoom it some more
+
+ var bgLoaded = this._getLoadedTilesPercentage(bg),
+ frontLoaded = this._getLoadedTilesPercentage(front);
+
+ if (bg && bgLoaded > 0.5 && frontLoaded < 0.5) {
+
+ front.style.visibility = 'hidden';
+ this._stopLoadingImages(front);
+ return;
}
- // prepare the background pane to become the main tile pane
- tileBg.style[L.DomUtil.TRANSFORM] = '';
- tileBg.style.visibility = 'hidden';
+ // prepare the buffer to become the front tile pane
+ bg.style.visibility = 'hidden';
+ bg.style[L.DomUtil.TRANSFORM] = '';
- // tells tile layers to reinitialize their containers
- tileBg.empty = true; //new FG
- tilePane.empty = false; //new BG
+ // switch out the current layer to be the new bg layer (and vice-versa)
+ this._tileContainer = bg;
+ bg = this._bgBuffer = front;
- //Switch out the current layer to be the new bg layer (And vice-versa)
- this._tilePane = this._panes.tilePane = tileBg;
- var newTileBg = this._tileBg = tilePane;
+ this._stopLoadingImages(bg);
- L.DomUtil.addClass(newTileBg, 'leaflet-zoom-animated');
-
- this._stopLoadingImages(newTileBg);
+ //prevent bg buffer from clearing right after zoom
+ clearTimeout(this._clearBgBufferTimer);
},
_getLoadedTilesPercentage: function (container) {
@@ -8217,123 +8758,107 @@
tile.parentNode.removeChild(tile);
}
}
- },
-
- _onZoomTransitionEnd: function () {
- this._restoreTileFront();
-
- L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');
- L.Util.falseFn(this._tileBg.offsetWidth); // force reflow
- this._animatingZoom = false;
- this._resetView(this._animateToCenter, this._animateToZoom, true, true);
-
- if (L.Draggable) {
- L.Draggable._disabled = false;
- }
- },
-
- _restoreTileFront: function () {
- this._tilePane.innerHTML = '';
- this._tilePane.style.visibility = '';
- this._tilePane.style.zIndex = 2;
- this._tileBg.style.zIndex = 1;
- },
-
- _clearTileBg: function () {
- if (!this._animatingZoom && !this.touchZoom._zooming) {
- this._tileBg.innerHTML = '';
- }
}
});
-/*
- * Provides L.Map with convenient shortcuts for using browser geolocation features.
- */
+/*
+ * Provides L.Map with convenient shortcuts for using browser geolocation features.
+ */
+
+L.Map.include({
+ _defaultLocateOptions: {
+ watch: false,
+ setView: false,
+ maxZoom: Infinity,
+ timeout: 10000,
+ maximumAge: 0,
+ enableHighAccuracy: false
+ },
+
+ locate: function (/*Object*/ options) {
+
+ options = this._locateOptions = L.extend(this._defaultLocateOptions, options);
+
+ if (!navigator.geolocation) {
+ this._handleGeolocationError({
+ code: 0,
+ message: 'Geolocation not supported.'
+ });
+ return this;
+ }
+
+ var onResponse = L.bind(this._handleGeolocationResponse, this),
+ onError = L.bind(this._handleGeolocationError, this);
+
+ if (options.watch) {
+ this._locationWatchId =
+ navigator.geolocation.watchPosition(onResponse, onError, options);
+ } else {
+ navigator.geolocation.getCurrentPosition(onResponse, onError, options);
+ }
+ return this;
+ },
+
+ stopLocate: function () {
+ if (navigator.geolocation) {
+ navigator.geolocation.clearWatch(this._locationWatchId);
+ }
+ if (this._locateOptions) {
+ this._locateOptions.setView = false;
+ }
+ return this;
+ },
+
+ _handleGeolocationError: function (error) {
+ var c = error.code,
+ message = error.message ||
+ (c === 1 ? 'permission denied' :
+ (c === 2 ? 'position unavailable' : 'timeout'));
+
+ if (this._locateOptions.setView && !this._loaded) {
+ this.fitWorld();
+ }
+
+ this.fire('locationerror', {
+ code: c,
+ message: 'Geolocation error: ' + message + '.'
+ });
+ },
+
+ _handleGeolocationResponse: function (pos) {
+ var lat = pos.coords.latitude,
+ lng = pos.coords.longitude,
+ latlng = new L.LatLng(lat, lng),
+
+ latAccuracy = 180 * pos.coords.accuracy / 40075017,
+ lngAccuracy = latAccuracy / Math.cos(L.LatLng.DEG_TO_RAD * lat),
+
+ bounds = L.latLngBounds(
+ [lat - latAccuracy, lng - lngAccuracy],
+ [lat + latAccuracy, lng + lngAccuracy]),
+
+ options = this._locateOptions;
+
+ if (options.setView) {
+ var zoom = Math.min(this.getBoundsZoom(bounds), options.maxZoom);
+ this.setView(latlng, zoom);
+ }
+
+ var data = {
+ latlng: latlng,
+ bounds: bounds,
+ };
+
+ for (var i in pos.coords) {
+ if (typeof pos.coords[i] === 'number') {
+ data[i] = pos.coords[i];
+ }
+ }
+
+ this.fire('locationfound', data);
+ }
+});
-L.Map.include({
- _defaultLocateOptions: {
- watch: false,
- setView: false,
- maxZoom: Infinity,
- timeout: 10000,
- maximumAge: 0,
- enableHighAccuracy: false
- },
- locate: function (/*Object*/ options) {
-
- options = this._locationOptions = L.extend(this._defaultLocateOptions, options);
-
- if (!navigator.geolocation) {
- this._handleGeolocationError({
- code: 0,
- message: "Geolocation not supported."
- });
- return this;
- }
-
- var onResponse = L.bind(this._handleGeolocationResponse, this),
- onError = L.bind(this._handleGeolocationError, this);
-
- if (options.watch) {
- this._locationWatchId =
- navigator.geolocation.watchPosition(onResponse, onError, options);
- } else {
- navigator.geolocation.getCurrentPosition(onResponse, onError, options);
- }
- return this;
- },
-
- stopLocate: function () {
- if (navigator.geolocation) {
- navigator.geolocation.clearWatch(this._locationWatchId);
- }
- return this;
- },
-
- _handleGeolocationError: function (error) {
- var c = error.code,
- message = error.message ||
- (c === 1 ? "permission denied" :
- (c === 2 ? "position unavailable" : "timeout"));
-
- if (this._locationOptions.setView && !this._loaded) {
- this.fitWorld();
- }
-
- this.fire('locationerror', {
- code: c,
- message: "Geolocation error: " + message + "."
- });
- },
-
- _handleGeolocationResponse: function (pos) {
- var latAccuracy = 180 * pos.coords.accuracy / 4e7,
- lngAccuracy = latAccuracy * 2,
-
- lat = pos.coords.latitude,
- lng = pos.coords.longitude,
- latlng = new L.LatLng(lat, lng),
-
- sw = new L.LatLng(lat - latAccuracy, lng - lngAccuracy),
- ne = new L.LatLng(lat + latAccuracy, lng + lngAccuracy),
- bounds = new L.LatLngBounds(sw, ne),
-
- options = this._locationOptions;
-
- if (options.setView) {
- var zoom = Math.min(this.getBoundsZoom(bounds), options.maxZoom);
- this.setView(latlng, zoom);
- }
-
- this.fire('locationfound', {
- latlng: latlng,
- bounds: bounds,
- accuracy: pos.coords.accuracy
- });
- }
-});
-
-
-}(this, document));
\ No newline at end of file
+}(window, document));
\ No newline at end of file
Modified: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.css
===================================================================
--- sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.css 2013-07-07 15:16:59 UTC (rev 134)
+++ sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.css 2013-07-07 15:17:25 UTC (rev 135)
@@ -1,10 +1,11 @@
-/* %%Ignore-License required styles */
+/* required styles */
.leaflet-map-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-pane,
+.leaflet-tile-container,
.leaflet-overlay-pane,
.leaflet-shadow-pane,
.leaflet-marker-pane,
@@ -27,6 +28,7 @@
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
+ -webkit-user-drag: none;
}
.leaflet-marker-icon,
.leaflet-marker-shadow {
@@ -51,6 +53,10 @@
width: 0;
height: 0;
}
+/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
+.leaflet-overlay-pane svg {
+ -moz-user-select: none;
+ }
.leaflet-tile-pane { z-index: 2; }
.leaflet-objects-pane { z-index: 3; }
@@ -191,104 +197,108 @@
/* general toolbar styles */
.leaflet-bar {
- box-shadow: 0 0 8px rgba(0,0,0,0.4);
- border: 1px solid #888;
- -webkit-border-radius: 5px;
- border-radius: 5px;
+ box-shadow: 0 1px 7px rgba(0,0,0,0.65);
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
}
-.leaflet-bar-part {
- background-color: rgba(255, 255, 255, 0.8);
- border-bottom: 1px solid #aaa;
+.leaflet-bar a, .leaflet-bar a:hover {
+ background-color: #fff;
+ border-bottom: 1px solid #ccc;
+ width: 26px;
+ height: 26px;
+ line-height: 26px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: black;
}
-.leaflet-bar-part-top {
- -webkit-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
+.leaflet-bar a,
+.leaflet-control-layers-toggle {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
}
-.leaflet-bar-part-bottom {
- -webkit-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
+.leaflet-bar a:hover {
+ background-color: #f4f4f4;
+ }
+.leaflet-bar a:first-child {
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+.leaflet-bar a:last-child {
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
border-bottom: none;
}
+.leaflet-bar a.leaflet-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+ }
.leaflet-touch .leaflet-bar {
-webkit-border-radius: 10px;
border-radius: 10px;
}
-.leaflet-touch .leaflet-bar-part {
- border-bottom: 4px solid rgba(0,0,0,0.3);
+.leaflet-touch .leaflet-bar a {
+ width: 30px;
+ height: 30px;
}
-.leaflet-touch .leaflet-bar-part-top {
- -webkit-border-radius: 7px 7px 0 0;
- border-radius: 7px 7px 0 0;
+.leaflet-touch .leaflet-bar a:first-child {
+ -webkit-border-top-left-radius: 7px;
+ border-top-left-radius: 7px;
+ -webkit-border-top-right-radius: 7px;
+ border-top-right-radius: 7px;
}
-.leaflet-touch .leaflet-bar-part-bottom {
- -webkit-border-radius: 0 0 7px 7px;
- border-radius: 0 0 7px 7px;
+.leaflet-touch .leaflet-bar a:last-child {
+ -webkit-border-bottom-left-radius: 7px;
+ border-bottom-left-radius: 7px;
+ -webkit-border-bottom-right-radius: 7px;
+ border-bottom-right-radius: 7px;
border-bottom: none;
}
/* zoom control */
-.leaflet-container .leaflet-control-zoom {
- margin-left: 13px;
- margin-top: 12px;
- }
-.leaflet-control-zoom a {
- width: 22px;
- height: 22px;
- text-align: center;
- text-decoration: none;
- color: black;
- }
-.leaflet-control-zoom a,
-.leaflet-control-layers-toggle {
- background-position: 50% 50%;
- background-repeat: no-repeat;
- display: block;
- }
-.leaflet-control-zoom a:hover {
- background-color: #fff;
- color: #777;
- }
.leaflet-control-zoom-in {
- font: bold 18px/24px Arial, Helvetica, sans-serif;
+ font: bold 18px 'Lucida Console', Monaco, monospace;
}
.leaflet-control-zoom-out {
- font: bold 23px/20px Tahoma, Verdana, sans-serif;
+ font: bold 22px 'Lucida Console', Monaco, monospace;
}
-.leaflet-control-zoom a.leaflet-control-zoom-disabled {
- cursor: default;
- background-color: rgba(255, 255, 255, 0.8);
- color: #bbb;
- }
-.leaflet-touch .leaflet-control-zoom a {
- width: 30px;
- height: 30px;
- }
.leaflet-touch .leaflet-control-zoom-in {
- font-size: 24px;
- line-height: 29px;
+ font-size: 22px;
+ line-height: 30px;
}
.leaflet-touch .leaflet-control-zoom-out {
font-size: 28px;
- line-height: 24px;
+ line-height: 30px;
}
+
/* layers control */
.leaflet-control-layers {
box-shadow: 0 1px 7px rgba(0,0,0,0.4);
background: #f8f8f9;
- -webkit-border-radius: 8px;
- border-radius: 8px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
}
.leaflet-control-layers-toggle {
background-image: url(images/layers.png);
width: 36px;
height: 36px;
}
+.leaflet-retina .leaflet-control-layers-toggle {
+ background-image: url(images/layers-2x.png);
+ background-size: 26px 26px;
+ }
.leaflet-touch .leaflet-control-layers-toggle {
width: 44px;
height: 44px;
@@ -386,11 +396,11 @@
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
- -webkit-border-radius: 20px;
- border-radius: 20px;
+ -webkit-border-radius: 12px;
+ border-radius: 12px;
}
.leaflet-popup-content {
- margin: 14px 20px;
+ margin: 13px 19px;
line-height: 1.4;
}
.leaflet-popup-content p {
@@ -404,11 +414,11 @@
overflow: hidden;
}
.leaflet-popup-tip {
- width: 15px;
- height: 15px;
+ width: 17px;
+ height: 17px;
padding: 1px;
- margin: -8px auto 0;
+ margin: -10px auto 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
@@ -425,7 +435,7 @@
position: absolute;
top: 0;
right: 0;
- padding: 4px 5px 0 0;
+ padding: 4px 4px 0 0;
text-align: center;
width: 18px;
height: 14px;
Modified: sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.ie.css
===================================================================
--- sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.ie.css 2013-07-07 15:16:59 UTC (rev 134)
+++ sandbox/nuiton-js-leaflet/src/main/resources/nuiton-js-leaflet/leaflet.ie.css 2013-07-07 15:17:25 UTC (rev 135)
@@ -1,4 +1,3 @@
-/* %%Ignore-License */
.leaflet-vml-shape {
width: 1px;
height: 1px;
@@ -36,12 +35,6 @@
.leaflet-control-layers {
border: 3px solid #999;
}
-.leaflet-control-zoom a {
- background-color: #eee;
- }
-.leaflet-control-zoom a:hover {
- background-color: #fff;
- }
.leaflet-control-layers-toggle {
}
.leaflet-control-attribution,
Added: sandbox/nuiton-js-leaflet/src/main/rst/index.rst.vm
===================================================================
--- sandbox/nuiton-js-leaflet/src/main/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-leaflet/src/main/rst/index.rst.vm 2013-07-07 15:17:25 UTC (rev 135)
@@ -0,0 +1,66 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: JsTree
+.. * $Id$
+.. * $HeadURL$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+Leaflet
+=======
+
+Leaflet_ is an Open-Source JavaScript Library for Mobile-Friendly Interactive Maps
+
+- documentation_
+
+.. _Leaflet: http://leafletjs.com/
+.. _documentation: http://leafletjs.com/examples.html
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-leaflet</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/leaflet.css"/>" />
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="<c:url value="/nuiton-js/leaflet.ie.css"/>" />
+ <![endif]-->
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/leaflet.js"/>"></script>
+
+Available JS
+------------
+
+- leaflet.js
+
+Available CSS
+-------------
+
+- leaflet.css
+- leaflet.ie.css
Property changes on: sandbox/nuiton-js-leaflet/src/main/rst/index.rst.vm
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: sandbox/nuiton-js-leaflet/src/main/site_en.xml
===================================================================
--- sandbox/nuiton-js-leaflet/src/main/site_en.xml (rev 0)
+++ sandbox/nuiton-js-leaflet/src/main/site_en.xml 2013-07-07 15:17:25 UTC (rev 135)
@@ -0,0 +1,71 @@
+<!--
+ #%L
+ Nuiton JS :: JsTree
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2012 - 2013 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+<project name="${project.name}">
+
+ <bannerLeft>
+ <name>${project.name}</name>
+ <href>index.html</href>
+ </bannerLeft>
+
+ <body>
+
+ <head>
+ <script type="text/javascript"
+ src="http://maven-site.nuiton.org/public/js/mavenpom-site.js">
+ </script>
+
+ <link rel="stylesheet" type="text/css"
+ href="http://maven-site.nuiton.org/public/css/mavenpom-site.css"/>
+ </head>
+
+ <breadcrumbs>
+ <item name="${project.name}" href="${project.url}"/>
+ </breadcrumbs>
+
+ <menu ref="parent"/>
+
+ <menu name="Utilisateurs">
+ <item name="Accueil" href="index.html"/>
+ </menu>
+
+ <menu ref="reports"/>
+
+ <footer>
+
+ <div id='projectMetas'
+ projectversion='${project.version}'
+ platform='${project.platform}'
+ projectid='${project.projectId}'
+ scm='${project.scm.connection}'
+ scmwebeditorenabled='${project.scmwebeditorEnabled}'
+ scmwebeditorurl='${project.scmwebeditorUrl}'
+ siteSourcesType='${project.siteSourcesType}'
+ piwikEnabled='${project.piwikEnabled}'
+ piwikId='${project.piwikId}'>
+ </div>
+ </footer>
+
+ </body>
+
+</project>
Property changes on: sandbox/nuiton-js-leaflet/src/main/site_en.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
Author: echatellier
Date: 2013-07-07 17:16:59 +0200 (Sun, 07 Jul 2013)
New Revision: 134
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/134
Log:
Update site documentation
Added:
sandbox/nuiton-js-bootstrap/src/site/rst/index.rst.vm
sandbox/nuiton-js-canjs/src/site/rst/index.rst.vm
sandbox/nuiton-js-font-awesome/src/site/rst/index.rst.vm
sandbox/nuiton-js-jqgrid/src/site/rst/index.rst.vm
sandbox/nuiton-js-jqplot/src/site/rst/index.rst.vm
sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst.vm
sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst.vm
sandbox/nuiton-js-jquery/src/site/rst/index.rst.vm
sandbox/nuiton-js-jstree/src/site/rst/index.rst.vm
sandbox/nuiton-js-moment/src/site/rst/index.rst.vm
Removed:
sandbox/nuiton-js-bootstrap/src/site/rst/index.rst
sandbox/nuiton-js-canjs/src/site/rst/index.rst
sandbox/nuiton-js-font-awesome/src/site/rst/index.rst
sandbox/nuiton-js-jqgrid/src/site/rst/index.rst
sandbox/nuiton-js-jqplot/src/site/rst/index.rst
sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst
sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst
sandbox/nuiton-js-jquery/src/site/rst/index.rst
sandbox/nuiton-js-jstree/src/site/rst/index.rst
sandbox/nuiton-js-moment/src/site/rst/index.rst
Modified:
sandbox/nuiton-js-angular/src/site/rst/index.rst.vm
sandbox/nuiton-js-angular/src/site/site_en.xml
sandbox/nuiton-js-bootstrap/src/site/site_en.xml
sandbox/nuiton-js-canjs/src/site/site_en.xml
sandbox/nuiton-js-font-awesome/src/site/site_en.xml
sandbox/nuiton-js-jqgrid/src/site/site_en.xml
sandbox/nuiton-js-jqplot/src/site/site_en.xml
sandbox/nuiton-js-jquery-i18n-properties/src/site/site_en.xml
sandbox/nuiton-js-jquery-ui/src/site/site_en.xml
sandbox/nuiton-js-jquery/src/site/site_en.xml
sandbox/nuiton-js-jstree/src/site/site_en.xml
sandbox/nuiton-js-moment/src/site/site_en.xml
sandbox/nuiton-js-mustache/src/site/rst/index.rst.vm
sandbox/nuiton-js-mustache/src/site/site_en.xml
Modified: sandbox/nuiton-js-angular/src/site/rst/index.rst.vm
===================================================================
--- sandbox/nuiton-js-angular/src/site/rst/index.rst.vm 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-angular/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -55,9 +55,9 @@
Available JS
------------
-- mustache
+- angular.js
Available CSS
-------------
-N/A
+*none*
Modified: sandbox/nuiton-js-angular/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-angular/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-angular/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-bootstrap/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-bootstrap/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-bootstrap/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,44 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: Bootstrap
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/bootstrap.css"/>" />
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/bootstrap.js"/>"></script>
-
-JS disponible
--------------
-
-- bootstrap.js
-
-CSS disponible
---------------
-
-- bootstrap.css
-- bootstrap-responsive.css
Copied: sandbox/nuiton-js-bootstrap/src/site/rst/index.rst.vm (from rev 128, sandbox/nuiton-js-bootstrap/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-bootstrap/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-bootstrap/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,63 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: Bootstrap
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+Bootstrap
+=========
+
+Bootstrap_: Sleek, intuitive, and powerful front-end framework for faster and easier web development.
+
+- documentation_
+
+.. _Bootstrap: http://twitter.github.io/bootstrap/
+.. _documentation: http://twitter.github.io/bootstrap/getting-started.html
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-bootstrap</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/bootstrap.css"/>" />
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/bootstrap.js"/>"></script>
+
+Available JS
+------------
+
+- bootstrap.js
+
+Available CSS
+-------------
+
+- bootstrap.css
+- bootstrap-responsive.css
Modified: sandbox/nuiton-js-bootstrap/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-bootstrap/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-bootstrap/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-canjs/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-canjs/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-canjs/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,35 +0,0 @@
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/can.jquery.js"/>"></script>
-
-JS disponible
--------------
-
-- can.jquery.js
-- can.dojo.js
-- can.mootools.js
-- can.yui.js
-- can.zepto.js
-- can.construct.super.js
-- can.control.plugin.js
-- can.fixture.js
-- can.model.queue.js
-- can.object.js
-- can.observe.attributes.js
-- can.observe.backup.js
-- can.observe.delegate.js
-- can.observe.setter.js
-- can.observe.validations.js
-- can.util.string.js
-- can.view.modifiers.js
-- can.view.mustache.js
-
-CSS disponible
---------------
-
-aucun
Copied: sandbox/nuiton-js-canjs/src/site/rst/index.rst.vm (from rev 128, sandbox/nuiton-js-canjs/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-canjs/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-canjs/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,78 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: Bootstrap
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+CanJS
+=====
+
+CanJS_ is a client-side MVC library featuring live binding templates, routes, integration.
+
+- documentation_
+
+.. _CanJS: http://canjs.com/
+.. _documentation: http://canjs.com/guides/index.html
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-canjs</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/can.jquery.js"/>"></script>
+
+Available JS
+------------
+
+- can.jquery.js
+- can.dojo.js
+- can.mootools.js
+- can.yui.js
+- can.zepto.js
+- can.construct.super.js
+- can.control.plugin.js
+- can.fixture.js
+- can.model.queue.js
+- can.object.js
+- can.observe.attributes.js
+- can.observe.backup.js
+- can.observe.delegate.js
+- can.observe.setter.js
+- can.observe.validations.js
+- can.util.string.js
+- can.view.modifiers.js
+- can.view.mustache.js
+
+Available CSS
+-------------
+
+*none*
Modified: sandbox/nuiton-js-canjs/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-canjs/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-canjs/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-font-awesome/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-font-awesome/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-font-awesome/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,56 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: Font Awesome
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Source
-======
-
-- Font Awesome by Dave Gandy http://fortawesome.github.com/Font-Awesome/
-- The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL.
-- Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - http://opensource.org/licenses/mit-license.html.
-- The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/font-awesome.css"/>" />
-
-JS disponible
--------------
-
-aucun
-
-CSS disponible
---------------
-
-- font-awesome
-
-Remarque
-========
-
-Les fonts ne semble pas fonctionner en dataUri (même en modifiant les urls
-pour que wro reconnaisse les chemins des fichiers fonts)
Copied: sandbox/nuiton-js-font-awesome/src/site/rst/index.rst.vm (from rev 119, sandbox/nuiton-js-font-awesome/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-font-awesome/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-font-awesome/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,65 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: Font Awesome
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+Font Awesome
+============
+
+- Font Awesome by Dave Gandy http://fortawesome.github.com/Font-Awesome/
+- The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL.
+- Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - http://opensource.org/licenses/mit-license.html.
+- The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-font-awesome</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/font-awesome.css"/>" />
+
+Available JS
+------------
+
+*none*
+
+Available CSS
+-------------
+
+- font-awesome.css
+
+Remarque
+========
+
+Les fonts ne semble pas fonctionner en dataUri (même en modifiant les urls
+pour que wro reconnaisse les chemins des fichiers fonts)
Modified: sandbox/nuiton-js-font-awesome/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-font-awesome/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-font-awesome/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-jqgrid/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-jqgrid/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jqgrid/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,94 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: jqGrid
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jqgrid.css"/>" />
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqgrid.js"/>"></script>
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqgrid-fr.js"/>"></script>
-
-JS disponible
--------------
-
-- jqgrid-only : jquery-ui
-- jqgrid: jquery et jqgrid
-
-plugins:
-
-- jqgrid-addons:
-- jqgrid-postext:
-- jqgrid-setcolumns:
-- jqgrid-contextmenu:
-- jqgrid-searchFilter:
-- jqgrid-tablednd:
-- jqgrid-multiselect:
-
-fichier de langue:
-
-- jqgrid-ar: specifique i18n
-- jqgrid-bg: specifique i18n
-- jqgrid-bg1251: specifique i18n
-- jqgrid-cat: specifique i18n
-- jqgrid-cn: specifique i18n
-- jqgrid-cs: specifique i18n
-- jqgrid-da: specifique i18n
-- jqgrid-de: specifique i18n
-- jqgrid-dk: specifique i18n
-- jqgrid-el: specifique i18n
-- jqgrid-en: specifique i18n
-- jqgrid-es: specifique i18n
-- jqgrid-fa: specifique i18n
-- jqgrid-fi: specifique i18n
-- jqgrid-fr: specifique i18n
-- jqgrid-gl: specifique i18n
-- jqgrid-he: specifique i18n
-- jqgrid-hr: specifique i18n
-- jqgrid-hr1250: specifique i18n
-- jqgrid-hu: specifique i18n
-- jqgrid-is: specifique i18n
-- jqgrid-it: specifique i18n
-- jqgrid-ja: specifique i18n
-- jqgrid-kr: specifique i18n
-- jqgrid-lt: specifique i18n
-- jqgrid-mne: specifique i18n
-- jqgrid-nl: specifique i18n
-- jqgrid-no: specifique i18n
-- jqgrid-pl: specifique i18n
-- jqgrid-pt-br: specifique i18n
-- jqgrid-pt: specifique i18n
-- jqgrid-ro: specifique i18n
-- jqgrid-ru: specifique i18n
-- jqgrid-sk: specifique i18n
-- jqgrid-sr-latin: specifique i18n
-- jqgrid-sr: specifique i18n
-- jqgrid-sv: specifique i18n
-- jqgrid-th: specifique i18n
-- jqgrid-tr: specifique i18n
-- jqgrid-tw: specifique i18n
-- jqgrid-ua: specifique i18n
Copied: sandbox/nuiton-js-jqgrid/src/site/rst/index.rst.vm (from rev 120, sandbox/nuiton-js-jqgrid/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-jqgrid/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-jqgrid/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,118 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: jqGrid
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+jqGrid
+======
+
+jqGrid_ is an Ajax-enabled JavaScript control that provides solutions for representing and manipulating tabular data on the web.
+
+- documentation_
+
+.. _jqGrid: http://www.trirand.com/blog/
+.. _documentation: http://www.trirand.com/jqgridwiki/doku.php
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-jqgrid</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jqgrid.css"/>" />
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqgrid.js"/>"></script>
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqgrid-fr.js"/>"></script>
+
+Available JS
+------------
+
+- jqgrid-only : jqgrid
+- jqgrid: jquery et jqgrid
+
+plugins:
+
+- jqgrid-addons:
+- jqgrid-postext:
+- jqgrid-setcolumns:
+- jqgrid-contextmenu:
+- jqgrid-searchFilter:
+- jqgrid-tablednd:
+- jqgrid-multiselect:
+
+locale files:
+
+- jqgrid-ar: specifique i18n
+- jqgrid-bg: specifique i18n
+- jqgrid-bg1251: specifique i18n
+- jqgrid-cat: specifique i18n
+- jqgrid-cn: specifique i18n
+- jqgrid-cs: specifique i18n
+- jqgrid-da: specifique i18n
+- jqgrid-de: specifique i18n
+- jqgrid-dk: specifique i18n
+- jqgrid-el: specifique i18n
+- jqgrid-en: specifique i18n
+- jqgrid-es: specifique i18n
+- jqgrid-fa: specifique i18n
+- jqgrid-fi: specifique i18n
+- jqgrid-fr: specifique i18n
+- jqgrid-gl: specifique i18n
+- jqgrid-he: specifique i18n
+- jqgrid-hr: specifique i18n
+- jqgrid-hr1250: specifique i18n
+- jqgrid-hu: specifique i18n
+- jqgrid-is: specifique i18n
+- jqgrid-it: specifique i18n
+- jqgrid-ja: specifique i18n
+- jqgrid-kr: specifique i18n
+- jqgrid-lt: specifique i18n
+- jqgrid-mne: specifique i18n
+- jqgrid-nl: specifique i18n
+- jqgrid-no: specifique i18n
+- jqgrid-pl: specifique i18n
+- jqgrid-pt-br: specifique i18n
+- jqgrid-pt: specifique i18n
+- jqgrid-ro: specifique i18n
+- jqgrid-ru: specifique i18n
+- jqgrid-sk: specifique i18n
+- jqgrid-sr-latin: specifique i18n
+- jqgrid-sr: specifique i18n
+- jqgrid-sv: specifique i18n
+- jqgrid-th: specifique i18n
+- jqgrid-tr: specifique i18n
+- jqgrid-tw: specifique i18n
+- jqgrid-ua: specifique i18n
+
+Available CSS
+-------------
+
+- jqgrid.css
Modified: sandbox/nuiton-js-jqgrid/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-jqgrid/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jqgrid/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-jqplot/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-jqplot/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jqplot/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,81 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: jqPlot
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jqplot.css"/>" />
- <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqplot-excanvas.js"/>"></script><![endif]-->
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqplot.js"/>"></script>
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqplot-all-plugins.js"/>"></script>
-
-JS disponible
--------------
-
-- jqplot-only : jplot
-- jqplot.js : jquery et jplot
-- jqplot-excanvas.js : excanvas pour le support IE
-- jqplot-all-plugins.js : tous les plugins
-
-Ou pour importer un plugin particulier au lieu de tous les plugins:
-
-- jqplot.BezierCurveRenderer.js
-- jqplot.barRenderer.js
-- jqplot.blockRenderer.js
-- jqplot.bubbleRenderer.js
-- jqplot.canvasAxisLabelRenderer.js
-- jqplot.canvasAxisTickRenderer.js
-- jqplot.canvasOverlay.js
-- jqplot.canvasTextRenderer.js
-- jqplot.categoryAxisRenderer.js
-- jqplot.ciParser.js
-- jqplot.cursor.js
-- jqplot.dateAxisRenderer.js
-- jqplot.donutRenderer.js
-- jqplot.dragable.js
-- jqplot.enhancedLegendRenderer.js
-- jqplot.funnelRenderer.js
-- jqplot.highlighter.js
-- jqplot.json2.js
-- jqplot.logAxisRenderer.js
-- jqplot.mekkoAxisRenderer.js
-- jqplot.mekkoRenderer.js
-- jqplot.meterGaugeRenderer.js
-- jqplot.mobile.js
-- jqplot.ohlcRenderer.js
-- jqplot.pieRenderer.js
-- jqplot.pointLabels.js
-- jqplot.pyramidAxisRenderer.js
-- jqplot.pyramidGridRenderer.js
-- jqplot.pyramidRenderer.js
-- jqplot.trendline.js
-
-CSS disponible
---------------
-
-- jqplot.css
Copied: sandbox/nuiton-js-jqplot/src/site/rst/index.rst.vm (from rev 124, sandbox/nuiton-js-jqplot/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-jqplot/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-jqplot/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,100 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: jqPlot
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+jqPlot
+=====
+
+jqPlot_ is a plotting and charting plugin for the jQuery Javascript framework.
+
+- documentation_
+
+.. _jqPlot: http://www.jqplot.com/
+.. _documentation: http://www.jqplot.com/docs/files/usage-txt.html
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-jqplot</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jqplot.css"/>" />
+ <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqplot-excanvas.js"/>"></script><![endif]-->
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqplot.js"/>"></script>
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jqplot-all-plugins.js"/>"></script>
+
+Available JS
+------------
+
+- jqplot-only : jplot
+- jqplot.js : jquery et jplot
+- jqplot-excanvas.js : excanvas pour le support IE
+- jqplot-all-plugins.js : tous les plugins
+
+Or, for one particular plugin:
+
+- jqplot.BezierCurveRenderer.js
+- jqplot.barRenderer.js
+- jqplot.blockRenderer.js
+- jqplot.bubbleRenderer.js
+- jqplot.canvasAxisLabelRenderer.js
+- jqplot.canvasAxisTickRenderer.js
+- jqplot.canvasOverlay.js
+- jqplot.canvasTextRenderer.js
+- jqplot.categoryAxisRenderer.js
+- jqplot.ciParser.js
+- jqplot.cursor.js
+- jqplot.dateAxisRenderer.js
+- jqplot.donutRenderer.js
+- jqplot.dragable.js
+- jqplot.enhancedLegendRenderer.js
+- jqplot.funnelRenderer.js
+- jqplot.highlighter.js
+- jqplot.json2.js
+- jqplot.logAxisRenderer.js
+- jqplot.mekkoAxisRenderer.js
+- jqplot.mekkoRenderer.js
+- jqplot.meterGaugeRenderer.js
+- jqplot.mobile.js
+- jqplot.ohlcRenderer.js
+- jqplot.pieRenderer.js
+- jqplot.pointLabels.js
+- jqplot.pyramidAxisRenderer.js
+- jqplot.pyramidGridRenderer.js
+- jqplot.pyramidRenderer.js
+- jqplot.trendline.js
+
+Available CSS
+-------------
+
+- jqplot.css
Modified: sandbox/nuiton-js-jqplot/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-jqplot/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jqplot/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-jquery/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-jquery/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jquery/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,42 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: JQuery
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jquery.js"/>"></script>
-
-JS disponible
--------------
-
-- jquery
-
-CSS disponible
---------------
-
-aucun
Copied: sandbox/nuiton-js-jquery/src/site/rst/index.rst.vm (from rev 130, sandbox/nuiton-js-jquery/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-jquery/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-jquery/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,61 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: JQuery
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+jQuery
+======
+
+jQuery_ is a fast, small, and feature-rich JavaScript library.
+
+- documentation_
+
+.. _jQuery: http://jquery.com/
+.. _documentation: http://api.jquery.com/
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-jquery</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jquery.js"/>"></script>
+
+Available JS
+------------
+
+- jquery.js
+
+Available CSS
+-------------
+
+*none*
Modified: sandbox/nuiton-js-jquery/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-jquery/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jquery/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,18 +0,0 @@
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jquery.i18n.properties-1.0.9.js"/>"></script>
-
-JS disponible
--------------
-
-- jquery.i18n.properties.js
-
-CSS disponible
---------------
-
-aucun
Copied: sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst.vm (from rev 128, sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-jquery-i18n-properties/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,60 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: Bootstrap
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+jquery-i18n-properties
+======================
+
+jquery-i18n-properties_ Lightweight jQuery plugin for providing internationalization to javascript from ‘.properties’ files.
+
+- documentation_
+
+.. _jquery-i18n-properties: https://code.google.com/p/jquery-i18n-properties/
+.. _documentation: https://code.google.com/p/jquery-i18n-properties/
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-jquery-i18n-properties</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jquery.i18n.properties.js"/>"></script>
+
+JS disponible
+-------------
+
+- jquery.i18n.properties.js
+
+CSS disponible
+--------------
+
+aucun
Modified: sandbox/nuiton-js-jquery-i18n-properties/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-jquery-i18n-properties/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jquery-i18n-properties/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,7 +1,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,139 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: JQuery UI
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Use
-===
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jquery-ui-smoothness.css"/>" />
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jquery-ui.js"/>"></script>
-
-Available JS
-------------
-
-- jquery-ui-only : jquery-ui
-- jquery-ui: jquery et query-ui
-
-- jquery-ui-i18n: specifique i18n (toutes les langues)
-- jquery-ui-af: specifique i18n
-- jquery-ui-ar-DZ: specifique i18n
-- jquery-ui-ar: specifique i18n
-- jquery-ui-az: specifique i18n
-- jquery-ui-bg: specifique i18n
-- jquery-ui-bs: specifique i18n
-- jquery-ui-ca: specifique i18n
-- jquery-ui-cs: specifique i18n
-- jquery-ui-cy-GB: specifique i18n
-- jquery-ui-da: specifique i18n
-- jquery-ui-de: specifique i18n
-- jquery-ui-el: specifique i18n
-- jquery-ui-en-AU: specifique i18n
-- jquery-ui-en-GB: specifique i18n
-- jquery-ui-en-NZ: specifique i18n
-- jquery-ui-eo: specifique i18n
-- jquery-ui-es: specifique i18n
-- jquery-ui-et: specifique i18n
-- jquery-ui-eu: specifique i18n
-- jquery-ui-fa: specifique i18n
-- jquery-ui-fi: specifique i18n
-- jquery-ui-fo: specifique i18n
-- jquery-ui-fr-CH: specifique i18n
-- jquery-ui-fr: specifique i18n
-- jquery-ui-gl: specifique i18n
-- jquery-ui-he: specifique i18n
-- jquery-ui-hi: specifique i18n
-- jquery-ui-hr: specifique i18n
-- jquery-ui-hu: specifique i18n
-- jquery-ui-hy: specifique i18n
-- jquery-ui-id: specifique i18n
-- jquery-ui-is: specifique i18n
-- jquery-ui-it: specifique i18n
-- jquery-ui-ja: specifique i18n
-- jquery-ui-ka: specifique i18n
-- jquery-ui-kk: specifique i18n
-- jquery-ui-km: specifique i18n
-- jquery-ui-ko: specifique i18n
-- jquery-ui-lb: specifique i18n
-- jquery-ui-lt: specifique i18n
-- jquery-ui-lv: specifique i18n
-- jquery-ui-mk: specifique i18n
-- jquery-ui-ml: specifique i18n
-- jquery-ui-ms: specifique i18n
-- jquery-ui-nl-BE: specifique i18n
-- jquery-ui-nl: specifique i18n
-- jquery-ui-no: specifique i18n
-- jquery-ui-pl: specifique i18n
-- jquery-ui-pt-BR: specifique i18n
-- jquery-ui-pt: specifique i18n
-- jquery-ui-rm: specifique i18n
-- jquery-ui-ro: specifique i18n
-- jquery-ui-ru: specifique i18n
-- jquery-ui-sk: specifique i18n
-- jquery-ui-sl: specifique i18n
-- jquery-ui-sq: specifique i18n
-- jquery-ui-sr-SR: specifique i18n
-- jquery-ui-sr: specifique i18n
-- jquery-ui-sv: specifique i18n
-- jquery-ui-ta: specifique i18n
-- jquery-ui-th: specifique i18n
-- jquery-ui-tj: specifique i18n
-- jquery-ui-tr: specifique i18n
-- jquery-ui-uk: specifique i18n
-- jquery-ui-vi: specifique i18n
-- jquery-ui-zh-CN: specifique i18n
-- jquery-ui-zh-HK: specifique i18n
-- jquery-ui-zh-TW: specifique i18n
-
-Available CSS
--------------
-
-- jquery-ui-base
-- jquery-ui-black-tie
-- jquery-ui-blitzer
-- jquery-ui-cupertino
-- jquery-ui-dark-hive
-- jquery-ui-dot-luv
-- jquery-ui-eggplant
-- jquery-ui-excite-bike
-- jquery-ui-flick
-- jquery-ui-hot-sneaks
-- jquery-ui-humanity
-- jquery-ui-le-frog
-- jquery-ui-mint-choc
-- jquery-ui-no-theme
-- jquery-ui-overcast
-- jquery-ui-pepper-grinder
-- jquery-ui-redmond
-- jquery-ui-smoothness
-- jquery-ui-south-street
-- jquery-ui-start
-- jquery-ui-sunny
-- jquery-ui-swanky-purse
-- jquery-ui-trontastic
-- jquery-ui-ui-darkness
-- jquery-ui-ui-lightness
-- jquery-ui-vader
Copied: sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst.vm (from rev 128, sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-jquery-ui/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,158 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: JQuery UI
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+jQuery UI
+=========
+
+`jQuery UI`_ jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library. .
+
+- documentation_
+
+.. _jQuery UI: http://canjs.com/
+.. _documentation: http://canjs.com/guides/index.html
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-jquery-ui</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jquery-ui-smoothness.css"/>" />
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jquery-ui.js"/>"></script>
+
+Available JS
+------------
+
+- jquery-ui-only : jquery-ui
+- jquery-ui: jquery et query-ui
+
+- jquery-ui-i18n: specifique i18n (all locale)
+- jquery-ui-af: specifique i18n
+- jquery-ui-ar-DZ: specifique i18n
+- jquery-ui-ar: specifique i18n
+- jquery-ui-az: specifique i18n
+- jquery-ui-bg: specifique i18n
+- jquery-ui-bs: specifique i18n
+- jquery-ui-ca: specifique i18n
+- jquery-ui-cs: specifique i18n
+- jquery-ui-cy-GB: specifique i18n
+- jquery-ui-da: specifique i18n
+- jquery-ui-de: specifique i18n
+- jquery-ui-el: specifique i18n
+- jquery-ui-en-AU: specifique i18n
+- jquery-ui-en-GB: specifique i18n
+- jquery-ui-en-NZ: specifique i18n
+- jquery-ui-eo: specifique i18n
+- jquery-ui-es: specifique i18n
+- jquery-ui-et: specifique i18n
+- jquery-ui-eu: specifique i18n
+- jquery-ui-fa: specifique i18n
+- jquery-ui-fi: specifique i18n
+- jquery-ui-fo: specifique i18n
+- jquery-ui-fr-CH: specifique i18n
+- jquery-ui-fr: specifique i18n
+- jquery-ui-gl: specifique i18n
+- jquery-ui-he: specifique i18n
+- jquery-ui-hi: specifique i18n
+- jquery-ui-hr: specifique i18n
+- jquery-ui-hu: specifique i18n
+- jquery-ui-hy: specifique i18n
+- jquery-ui-id: specifique i18n
+- jquery-ui-is: specifique i18n
+- jquery-ui-it: specifique i18n
+- jquery-ui-ja: specifique i18n
+- jquery-ui-ka: specifique i18n
+- jquery-ui-kk: specifique i18n
+- jquery-ui-km: specifique i18n
+- jquery-ui-ko: specifique i18n
+- jquery-ui-lb: specifique i18n
+- jquery-ui-lt: specifique i18n
+- jquery-ui-lv: specifique i18n
+- jquery-ui-mk: specifique i18n
+- jquery-ui-ml: specifique i18n
+- jquery-ui-ms: specifique i18n
+- jquery-ui-nl-BE: specifique i18n
+- jquery-ui-nl: specifique i18n
+- jquery-ui-no: specifique i18n
+- jquery-ui-pl: specifique i18n
+- jquery-ui-pt-BR: specifique i18n
+- jquery-ui-pt: specifique i18n
+- jquery-ui-rm: specifique i18n
+- jquery-ui-ro: specifique i18n
+- jquery-ui-ru: specifique i18n
+- jquery-ui-sk: specifique i18n
+- jquery-ui-sl: specifique i18n
+- jquery-ui-sq: specifique i18n
+- jquery-ui-sr-SR: specifique i18n
+- jquery-ui-sr: specifique i18n
+- jquery-ui-sv: specifique i18n
+- jquery-ui-ta: specifique i18n
+- jquery-ui-th: specifique i18n
+- jquery-ui-tj: specifique i18n
+- jquery-ui-tr: specifique i18n
+- jquery-ui-uk: specifique i18n
+- jquery-ui-vi: specifique i18n
+- jquery-ui-zh-CN: specifique i18n
+- jquery-ui-zh-HK: specifique i18n
+- jquery-ui-zh-TW: specifique i18n
+
+Available CSS
+-------------
+
+- jquery-ui-base
+- jquery-ui-black-tie
+- jquery-ui-blitzer
+- jquery-ui-cupertino
+- jquery-ui-dark-hive
+- jquery-ui-dot-luv
+- jquery-ui-eggplant
+- jquery-ui-excite-bike
+- jquery-ui-flick
+- jquery-ui-hot-sneaks
+- jquery-ui-humanity
+- jquery-ui-le-frog
+- jquery-ui-mint-choc
+- jquery-ui-no-theme
+- jquery-ui-overcast
+- jquery-ui-pepper-grinder
+- jquery-ui-redmond
+- jquery-ui-smoothness
+- jquery-ui-south-street
+- jquery-ui-start
+- jquery-ui-sunny
+- jquery-ui-swanky-purse
+- jquery-ui-trontastic
+- jquery-ui-ui-darkness
+- jquery-ui-ui-lightness
+- jquery-ui-vader
Modified: sandbox/nuiton-js-jquery-ui/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-jquery-ui/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jquery-ui/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-jstree/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-jstree/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jstree/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,33 +0,0 @@
-.. -
-.. * #%L
-.. * Nuiton JS :: JsTree
-.. * $Id:$
-.. * $HeadURL:$
-.. * %%
-.. * Copyright (C) 2012 - 2013 CodeLutin
-.. * %%
-.. * This program is free software: you can redistribute it and/or modify
-.. * it under the terms of the GNU Lesser General Public License as
-.. * published by the Free Software Foundation, either version 3 of the
-.. * License, or (at your option) any later version.
-.. *
-.. * This program is distributed in the hope that it will be useful,
-.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
-.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.. * GNU General Lesser Public License for more details.
-.. *
-.. * You should have received a copy of the GNU General Lesser Public
-.. * License along with this program. If not, see
-.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
-.. * #L%
-.. -
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jstree.css"/>" />
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jstree.js"/>"></script>
Copied: sandbox/nuiton-js-jstree/src/site/rst/index.rst.vm (from rev 122, sandbox/nuiton-js-jstree/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-jstree/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-jstree/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,63 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: JsTree
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+CanJS
+=====
+
+jsTree_ is a javascript based, cross browser tree component. It is packaged as a jQuery plugin.
+
+- documentation_
+
+.. _jsTree: http://www.jstree.com/
+.. _documentation: http://www.jstree.com/
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-jstree</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <link rel="stylesheet" type="text/css" href="<c:url value="/nuiton-js/jstree.css"/>" />
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/jstree.js"/>"></script>
+
+Available JS
+------------
+
+- jstree.js
+
+Available CSS
+-------------
+
+- jstree.css
+
\ No newline at end of file
Modified: sandbox/nuiton-js-jstree/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-jstree/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-jstree/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Deleted: sandbox/nuiton-js-moment/src/site/rst/index.rst
===================================================================
--- sandbox/nuiton-js-moment/src/site/rst/index.rst 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-moment/src/site/rst/index.rst 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,14 +0,0 @@
-
-Utilisation
-===========
-
-::
-
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
- <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/moment.js"/>"></script>
-
-JS disponible
--------------
-
-- moment.js
Copied: sandbox/nuiton-js-moment/src/site/rst/index.rst.vm (from rev 128, sandbox/nuiton-js-moment/src/site/rst/index.rst)
===================================================================
--- sandbox/nuiton-js-moment/src/site/rst/index.rst.vm (rev 0)
+++ sandbox/nuiton-js-moment/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -0,0 +1,61 @@
+.. -
+.. * #%L
+.. * Nuiton JS :: Bootstrap
+.. * $Id:$
+.. * $HeadURL:$
+.. * %%
+.. * Copyright (C) 2012 - 2013 CodeLutin
+.. * %%
+.. * This program is free software: you can redistribute it and/or modify
+.. * it under the terms of the GNU Lesser General Public License as
+.. * published by the Free Software Foundation, either version 3 of the
+.. * License, or (at your option) any later version.
+.. *
+.. * This program is distributed in the hope that it will be useful,
+.. * but WITHOUT ANY WARRANTY; without even the implied warranty of
+.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.. * GNU General Lesser Public License for more details.
+.. *
+.. * You should have received a copy of the GNU General Lesser Public
+.. * License along with this program. If not, see
+.. * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+.. * #L%
+.. -
+
+Moment.js
+=========
+
+Moment.js_ is a javascript date library for parsing, validating, manipulating, and formatting dates.
+
+- documentation_
+
+.. _Moment.js: http://momentjs.com/
+.. _documentation: http://momentjs.com/
+
+Use
+===
+
+Maven part::
+
+ <dependency>
+ <groupId>org.nuiton.js</groupId>
+ <artifactId>nuiton-js-moment</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+JSP part::
+
+ <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+ <script language="javascript" type="text/javascript" src="<c:url value="/nuiton-js/moment.js"/>"></script>
+
+Available JS
+------------
+
+- moment.js
+
+Available CSS
+-------------
+
+*none*
Modified: sandbox/nuiton-js-moment/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-moment/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-moment/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -1,7 +1,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
Modified: sandbox/nuiton-js-mustache/src/site/rst/index.rst.vm
===================================================================
--- sandbox/nuiton-js-mustache/src/site/rst/index.rst.vm 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-mustache/src/site/rst/index.rst.vm 2013-07-07 15:16:59 UTC (rev 134)
@@ -34,8 +34,8 @@
.. _documentation: http://mustache.github.io/mustache.5.html
.. _demo: http://mustache.github.io/#demo
-Utilisation
-===========
+Use
+===
Maven part::
@@ -55,9 +55,9 @@
Available JS
------------
-- mustache
+- mustache.js
Available CSS
-------------
-N/A
+*none*
Modified: sandbox/nuiton-js-mustache/src/site/site_en.xml
===================================================================
--- sandbox/nuiton-js-mustache/src/site/site_en.xml 2013-07-07 07:24:21 UTC (rev 133)
+++ sandbox/nuiton-js-mustache/src/site/site_en.xml 2013-07-07 15:16:59 UTC (rev 134)
@@ -24,7 +24,6 @@
<project name="${project.name}">
<bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
<name>${project.name}</name>
<href>index.html</href>
</bannerLeft>
1
0
r133 - in sandbox/nuiton-js-jquery: . src/main/resources/nuiton-js-jquery
by echatellier@users.nuiton.org 07 Jul '13
by echatellier@users.nuiton.org 07 Jul '13
07 Jul '13
Author: echatellier
Date: 2013-07-07 09:24:21 +0200 (Sun, 07 Jul 2013)
New Revision: 133
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/133
Log:
Update to jquery 1.10.2
Added:
sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.2.js
Removed:
sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.1.js
Modified:
sandbox/nuiton-js-jquery/pom.xml
Modified: sandbox/nuiton-js-jquery/pom.xml
===================================================================
--- sandbox/nuiton-js-jquery/pom.xml 2013-07-06 19:07:56 UTC (rev 132)
+++ sandbox/nuiton-js-jquery/pom.xml 2013-07-07 07:24:21 UTC (rev 133)
@@ -14,7 +14,7 @@
</parent>
<artifactId>nuiton-js-jquery</artifactId>
- <version>1.10.1-1-SNAPSHOT</version>
+ <version>1.10.2-1-SNAPSHOT</version>
<name>Nuiton JS :: JQuery</name>
<description>JQuery jar packaging</description>
@@ -29,9 +29,9 @@
</licenses>
<scm>
- <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-jquery-1.10.1-1</connection>
- <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-jquery-1.10.1-1</developerConnection>
- <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-jquery-1…</url>
+ <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-jquery-1.10.2-1</connection>
+ <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-jquery-1.10.2-1</developerConnection>
+ <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-jquery-1…</url>
</scm>
</project>
Deleted: sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.1.js
===================================================================
--- sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.1.js 2013-07-06 19:07:56 UTC (rev 132)
+++ sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.1.js 2013-07-07 07:24:21 UTC (rev 133)
@@ -1,9807 +0,0 @@
-/*!%%Ignore-License
- * jQuery JavaScript Library v1.10.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-05-30T21:49Z
- */
-(function( window, undefined ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//"use strict";
-var
- // The deferred used on DOM ready
- readyList,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // Support: IE<10
- // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
- core_strundefined = typeof undefined,
-
- // Use the correct document accordingly with window argument (sandbox)
- location = window.location,
- document = window.document,
- docElem = document.documentElement,
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // [[Class]] -> type pairs
- class2type = {},
-
- // List of deleted data cache ids, so we can reuse them
- core_deletedIds = [],
-
- core_version = "1.10.1",
-
- // Save a reference to some core methods
- core_concat = core_deletedIds.concat,
- core_push = core_deletedIds.push,
- core_slice = core_deletedIds.slice,
- core_indexOf = core_deletedIds.indexOf,
- core_toString = class2type.toString,
- core_hasOwn = class2type.hasOwnProperty,
- core_trim = core_version.trim,
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Used for matching numbers
- core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
-
- // Used for splitting on whitespace
- core_rnotwhite = /\S+/g,
-
- // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- },
-
- // The ready event handler
- completed = function( event ) {
-
- // readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
- detach();
- jQuery.ready();
- }
- },
- // Clean-up method for dom ready events
- detach = function() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
-
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: core_version,
-
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // scripts is true for back-compat
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return core_slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
- },
-
- slice: function() {
- return this.pushStack( core_slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: core_push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
-
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger("ready").off("ready");
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- /* jshint eqeqeq: false */
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- return !isNaN( parseFloat(obj) ) && isFinite( obj );
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return String( obj );
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ core_toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- isPlainObject: function( obj ) {
- var key;
-
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !core_hasOwn.call(obj, "constructor") &&
- !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Support: IE<9
- // Handle iteration over inherited properties before own properties.
- if ( jQuery.support.ownLast ) {
- for ( key in obj ) {
- return core_hasOwn.call( obj, key );
- }
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
- for ( key in obj ) {}
-
- return key === undefined || core_hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- // data: string of html
- // context (optional): If specified, the fragment will be created in this context, defaults to document
- // keepScripts (optional): If true, will include scripts passed in the html string
- parseHTML: function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
- if ( scripts ) {
- jQuery( scripts ).remove();
- }
- return jQuery.merge( [], parsed.childNodes );
- },
-
- parseJSON: function( data ) {
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- if ( data === null ) {
- return data;
- }
-
- if ( typeof data === "string" ) {
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- if ( data ) {
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return ( new Function( "return " + data ) )();
- }
- }
- }
-
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-gl…
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Use native String.trim function wherever possible
- trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
- function( text ) {
- return text == null ?
- "" :
- core_trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- core_push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( core_indexOf ) {
- return core_indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var l = second.length,
- i = first.length,
- j = 0;
-
- if ( typeof l === "number" ) {
- for ( ; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var retVal,
- ret = [],
- i = 0,
- length = elems.length;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return core_concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var args, proxy, tmp;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = core_slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Multifunctional method to get and set values of a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
- },
-
- now: function() {
- return ( new Date() ).getTime();
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations.
- // Note: this method belongs to the css module but it's needed here for the support module.
- // If support gets modularized, this method should be moved back to the css module.
- swap: function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
- }
-});
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
-
- // If IE event model is used
- } else {
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", completed );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", completed );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
-
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- // detach all dom ready events
- detach();
-
- // and execute any waiting functions
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
-
- if ( jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || type !== "function" &&
- ( length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj );
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-/*!
- * Sizzle CSS Selector Engine v1.9.4-pre
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-05-27
- */
-(function( window, undefined ) {
-
-var i,
- support,
- cachedruns,
- Expr,
- getText,
- isXML,
- compile,
- outermostContext,
- sortInput,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- hasDuplicate = false,
- sortOrder = function() { return 0; },
-
- // General-purpose constants
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
- "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
-
- // Prefer arguments quoted,
- // then not containing pseudos/brackets,
- // then attribute selectors/non-parenthetical expressions,
- // then anything else
- // These preferences are here to reduce the number of selectors
- // needing tokenize in the PSEUDO preFilter
- pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rsibling = new RegExp( whitespace + "*[+~]" ),
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- // BMP codepoint
- high < 0 ?
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- if ( documentIsHTML && !seed ) {
-
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && context.parentNode || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * For feature detection
- * @param {Function} fn The function to test for native support
- */
-function isNative( fn ) {
- return rnative.test( fn + "" );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key += " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied if the test fails
- * @param {Boolean} test The result of a test. If true, null will be set as the handler in leiu of the specified handler
- */
-function addHandle( attrs, handler, test ) {
- attrs = attrs.split("|");
- var current,
- i = attrs.length,
- setHandle = test ? null : handler;
-
- while ( i-- ) {
- // Don't override a user's handler
- if ( !(current = Expr.attrHandle[ attrs[i] ]) || current === handler ) {
- Expr.attrHandle[ attrs[i] ] = setHandle;
- }
- }
-}
-
-/**
- * Fetches boolean attributes by node
- * @param {Element} elem
- * @param {String} name
- */
-function boolHandler( elem, name ) {
- // XML does not need to be checked as this will not be assigned for XML documents
- var val = elem.getAttributeNode( name );
- return val && val.specified ?
- val.value :
- elem[ name ] === true ? name.toLowerCase() : null;
-}
-
-/**
- * Fetches attributes without interpolation
- * http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
- * @param {Element} elem
- * @param {String} name
- */
-function interpolationHandler( elem, name ) {
- // XML does not need to be checked as this will not be assigned for XML documents
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-}
-
-/**
- * Uses defaultValue to retrieve value in IE6/7
- * @param {Element} elem
- * @param {String} name
- */
-function valueHandler( elem ) {
- // Ignore the value *property* on inputs by using defaultValue
- // Fallback to Sizzle.attr by returning undefined where appropriate
- // XML does not need to be checked as this will not be assigned for XML documents
- if ( elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns Returns -1 if a precedes b, 1 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Detect xml
- * @param {Element|Object} elem An element or a document
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.parentWindow;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
-
- // Support tests
- documentIsHTML = !isXML( doc );
-
- // Support: IE>8
- // If iframe document is assigned to "document" variable and if iframe has been reloaded,
- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
- if ( parent && parent.frameElement ) {
- parent.attachEvent( "onbeforeunload", function() {
- setDocument();
- });
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
-
- // Support: IE<8
- // Prevent attribute/property "interpolation"
- div.innerHTML = "<a href='#'></a>";
- addHandle( "type|href|height|width", interpolationHandler, div.firstChild.getAttribute("href") === "#" );
-
- // Support: IE<9
- // Use getAttributeNode to fetch booleans when getAttribute lies
- addHandle( booleans, boolHandler, div.getAttribute("disabled") == null );
-
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- // Support: IE<9
- // Retrieving value should defer to defaultValue
- support.input = assert(function( div ) {
- div.innerHTML = "<input>";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
- });
-
- // IE6/7 still return empty string for value,
- // but are actually retrieving the property
- addHandle( "value", valueHandler, support.attributes && support.input );
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Check if getElementsByClassName can be trusted
- support.getElementsByClassName = assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
- // Support: Safari<4
- // Catch class over-caching
- div.firstChild.className = "i";
- // Support: Opera<10
- // Catch gEBCN failure to find non-leading classes
- return div.getElementsByClassName("i").length === 2;
- });
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select><option selected=''></option></select>";
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
-
- // Support: Opera 10-12/IE8
- // ^= $= *= and empty values
- // Should not select anything
- // Support: Windows 8 Native Apps
- // The type attribute is restricted during .innerHTML assignment
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "t", "" );
-
- if ( div.querySelectorAll("[t^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = isNative( (matches = docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
- // Detached nodes confoundingly follow *each other*
- support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( doc.createElement("div") ) & 1;
- });
-
- // Document order sorting
- sortOrder = docElem.compareDocumentPosition ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
-
- if ( compare ) {
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === doc || contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- }
-
- // Not directly comparable, sort on existence of method
- return a.compareDocumentPosition ? -1 : 1;
- } :
- function( a, b ) {
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Parentless nodes are either documents or disconnected
- } else if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, document, null, [elem] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = ( fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined );
-
- return val === undefined ?
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null :
- val;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- for ( ; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (see #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[5] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] && match[4] !== undefined ) {
- match[2] = match[4];
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
- // not comment, processing instructions, or others
- // Thanks to Diego Perini for the nodeName shortcut
- // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-function tokenize( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( tokens = [] );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-}
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var data, cache, outerCache,
- dirkey = dirruns + " " + doneName;
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
- if ( (data = cache[1]) === true || data === cachedruns ) {
- return data === true;
- }
- } else {
- cache = outerCache[ dir ] = [ dirkey ];
- cache[1] = matcher( elem, context, xml ) || cachedruns;
- if ( cache[1] === true ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- // A counter to specify which element is currently being matched
- var matcherCachedRuns = 0,
- bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, expandContext ) {
- var elem, j, matcher,
- setMatched = [],
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- outermost = expandContext != null,
- contextBackup = outermostContext,
- // We must always have either seed elements or context
- elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- cachedruns = matcherCachedRuns;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- cachedruns = ++matcherCachedRuns;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !group ) {
- group = tokenize( selector );
- }
- i = group.length;
- while ( i-- ) {
- cached = matcherFromTokens( group[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
- }
- return cached;
-};
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function select( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- match = tokenize( selector );
-
- if ( !seed ) {
- // Try to minimize operations if there is only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
- }
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && context.parentNode || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
- }
-
- // Compile and execute a filtering function
- // Provide `match` to avoid retokenization if we modified the selector above
- compile( selector, match )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector )
- );
- return results;
-}
-
-// Deprecated
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Chrome<<14
-// Always assume duplicates if they aren't passed to the comparison function
-[0, 0].sort( sortOrder );
-support.detectDuplicates = hasDuplicate;
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})( window );
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- firingLength = 0;
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( list && ( !fired || stack ) ) {
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var action = tuple[ 0 ],
- fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = core_slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
- if( values === progressValues ) {
- deferred.notifyWith( contexts, values );
- } else if ( !( --remaining ) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-jQuery.support = (function( support ) {
-
- var all, a, input, select, fragment, opt, eventName, isSupported, i,
- div = document.createElement("div");
-
- // Setup
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- // Finish early in limited (non-browser) environments
- all = div.getElementsByTagName("*") || [];
- a = div.getElementsByTagName("a")[ 0 ];
- if ( !a || !a.style || !all.length ) {
- return support;
- }
-
- // First batch of tests
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
-
- a.style.cssText = "top:1px;float:left;opacity:.5";
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- support.getSetAttribute = div.className !== "t";
-
- // IE strips leading whitespace when .innerHTML is used
- support.leadingWhitespace = div.firstChild.nodeType === 3;
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- support.tbody = !div.getElementsByTagName("tbody").length;
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- support.htmlSerialize = !!div.getElementsByTagName("link").length;
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- support.style = /top/.test( a.getAttribute("style") );
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- support.hrefNormalized = a.getAttribute("href") === "/a";
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- support.opacity = /^0.5/.test( a.style.opacity );
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- support.cssFloat = !!a.style.cssFloat;
-
- // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
- support.checkOn = !!input.value;
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- support.optSelected = opt.selected;
-
- // Tests for enctype support on a form (#6743)
- support.enctype = !!document.createElement("form").enctype;
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
- // Will be defined later
- support.inlineBlockNeedsLayout = false;
- support.shrinkWrapBlocks = false;
- support.pixelPosition = false;
- support.deleteExpando = true;
- support.noCloneEvent = true;
- support.reliableMarginRight = true;
- support.boxSizingReliable = true;
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE<9
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- // Check if we can trust getAttribute("value")
- input = document.createElement("input");
- input.setAttribute( "value", "" );
- support.input = input.getAttribute( "value" ) === "";
-
- // Check if an input maintains its value after becoming a radio
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- input.setAttribute( "checked", "t" );
- input.setAttribute( "name", "t" );
-
- fragment = document.createDocumentFragment();
- fragment.appendChild( input );
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<9
- // Opera does not clone events (and typeof div.attachEvent === undefined).
- // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
- if ( div.attachEvent ) {
- div.attachEvent( "onclick", function() {
- support.noCloneEvent = false;
- });
-
- div.cloneNode( true ).click();
- }
-
- // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
- for ( i in { submit: true, change: true, focusin: true }) {
- div.setAttribute( eventName = "on" + i, "t" );
-
- support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
- }
-
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- // Support: IE<9
- // Iteration over object's inherited properties before its own.
- for ( i in jQuery( support ) ) {
- break;
- }
- support.ownLast = i !== "0";
-
- // Run tests that need a body at doc ready
- jQuery(function() {
- var container, marginDiv, tds,
- divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
- body = document.getElementsByTagName("body")[0];
-
- if ( !body ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- container = document.createElement("div");
- container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
-
- body.appendChild( container ).appendChild( div );
-
- // Support: IE8
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName("td");
- tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Support: IE8
- // Check if empty table cells still have offsetWidth/Height
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
- // Check box-sizing and margin behavior.
- div.innerHTML = "";
- div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
-
- // Workaround failing boxSizing test due to offsetWidth returning wrong value
- // with some non-1 values of body zoom, ticket #13543
- jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
- support.boxSizing = div.offsetWidth === 4;
- });
-
- // Use window.getComputedStyle because jsdom on node.js will break without it.
- if ( window.getComputedStyle ) {
- support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. (#3333)
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- marginDiv = div.appendChild( document.createElement("div") );
- marginDiv.style.cssText = div.style.cssText = divReset;
- marginDiv.style.marginRight = marginDiv.style.width = "0";
- div.style.width = "1px";
-
- support.reliableMarginRight =
- !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
- }
-
- if ( typeof div.style.zoom !== core_strundefined ) {
- // Support: IE<8
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- div.innerHTML = "";
- div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- div.style.display = "block";
- div.innerHTML = "<div></div>";
- div.firstChild.style.width = "5px";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-
- if ( support.inlineBlockNeedsLayout ) {
- // Prevent IE 6 from affecting layout for positioned elements #11048
- // Prevent IE from shrinking the body in IE 7 mode #12869
- // Support: IE<8
- body.style.zoom = 1;
- }
- }
-
- body.removeChild( container );
-
- // Null elements to avoid leaks in IE
- container = div = tds = marginDiv = null;
- });
-
- // Null elements to avoid leaks in IE
- all = select = fragment = opt = a = input = null;
-
- return support;
-})({});
-
-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ){
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var ret, thisCache,
- internalKey = jQuery.expando,
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- // Avoid exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( typeof name === "string" ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i,
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- } else {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
-
- i = name.length;
- while ( i-- ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- /* jshint eqeqeq: false */
- } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
- /* jshint eqeqeq: true */
- delete cache[ id ];
-
- // When all else fails, null
- } else {
- cache[ id ] = null;
- }
-}
-
-jQuery.extend({
- cache: {},
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "applet": true,
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
-
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- // Do not set data on non-element because it will not be cleared (#8335).
- if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
- return false;
- }
-
- var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- // nodes accept data unless otherwise specified; rejection can be conditional
- return !noData || noData !== true && elem.getAttribute("classid") === noData;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var attrs, name,
- data = null,
- i = 0,
- elem = this[0];
-
- // Special expections of .data basically thwart jQuery.access,
- // so implement the relevant behavior ourselves
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- attrs = elem.attributes;
- for ( ; i < attrs.length; i++ ) {
- name = attrs[i].name;
-
- if ( name.indexOf("data-") === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
-
- dataAttr( elem, name, data[ name ] );
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- return arguments.length > 1 ?
-
- // Sets one value
- this.each(function() {
- jQuery.data( this, key, value );
- }) :
-
- // Gets one value
- // Try to fetch any internally stored data first
- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var nodeHook, boolHook,
- rclass = /[\t\r\n\f]/g,
- rreturn = /\r/g,
- rfocusable = /^(?:input|select|textarea|button|object)$/i,
- rclickable = /^(?:a|area)$/i,
- ruseDefault = /^(?:checked|selected)$/i,
- getSetAttribute = jQuery.support.getSetAttribute,
- getSetInput = jQuery.support.input;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classes, elem, cur, clazz, j,
- i = 0,
- len = this.length,
- proceed = typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( core_rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
- elem.className = jQuery.trim( cur );
-
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j,
- i = 0,
- len = this.length,
- proceed = arguments.length === 0 || typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( core_rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
- elem.className = value ? jQuery.trim( cur ) : "";
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.match( core_rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- // Toggle whole class name
- } else if ( type === core_strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed "false",
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var ret, hooks, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // Use proper attribute retrieval(#6932, #12072)
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
- elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // oldIE doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
- if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
- optionSet = true;
- }
- }
-
- // force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === core_strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( core_rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( jQuery.expr.match.bool.test( name ) ) {
- // Set corresponding property to false
- if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- elem[ propName ] = false;
- // Support: IE<9
- // Also clear defaultChecked/defaultSelected (if appropriate)
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] =
- elem[ propName ] = false;
- }
-
- // See #9699 for explanation of this approach (setting first, then removal)
- } else {
- jQuery.attr( elem, name, "" );
- }
-
- elem.removeAttribute( getSetAttribute ? name : propName );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to default in case type is set after value during creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
-
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabind…
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- return tabindex ?
- parseInt( tabindex, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- -1;
- }
- }
- }
-});
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- // IE<8 needs the *property* name
- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
- // Use defaultChecked and defaultSelected for oldIE
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
- }
-
- return name;
- }
-};
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
-
- jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
- function( elem, name, isXML ) {
- var fn = jQuery.expr.attrHandle[ name ],
- ret = isXML ?
- undefined :
- /* jshint eqeqeq: false */
- (jQuery.expr.attrHandle[ name ] = undefined) !=
- getter( elem, name, isXML ) ?
-
- name.toLowerCase() :
- null;
- jQuery.expr.attrHandle[ name ] = fn;
- return ret;
- } :
- function( elem, name, isXML ) {
- return isXML ?
- undefined :
- elem[ jQuery.camelCase( "default-" + name ) ] ?
- name.toLowerCase() :
- null;
- };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
- jQuery.attrHooks.value = {
- set: function( elem, value, name ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- // Does not return so that setAttribute is also used
- elem.defaultValue = value;
- } else {
- // Use nodeHook if defined (#1954); otherwise setAttribute is fine
- return nodeHook && nodeHook.set( elem, value, name );
- }
- }
- };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = {
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- elem.setAttributeNode(
- (ret = elem.ownerDocument.createAttribute( name ))
- );
- }
-
- ret.value = value += "";
-
- // Break association with cloned elements by also using setAttribute (#9646)
- return name === "value" || value === elem.getAttribute( name ) ?
- value :
- undefined;
- }
- };
- jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
- // Some attributes are constructed with empty-string values when not defined
- function( elem, name, isXML ) {
- var ret;
- return isXML ?
- undefined :
- (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
- ret.value :
- null;
- };
- jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- return ret && ret.specified ?
- ret.value :
- undefined;
- },
- set: nodeHook.set
- };
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- set: function( elem, value, name ) {
- nodeHook.set( elem, value === "" ? false : value, name );
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- };
- });
-}
-
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !jQuery.support.hrefNormalized ) {
- // href/src property should get the full normalized URL (#10299/#12915)
- jQuery.each([ "href", "src" ], function( i, name ) {
- jQuery.propHooks[ name ] = {
- get: function( elem ) {
- return elem.getAttribute( name, 4 );
- }
- };
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Note: IE uppercases css property names, but if we were to .toLowerCase()
- // .cssText, that would destroy case senstitivity in URL's, like in "background"
- return elem.style.cssText || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- };
-}
-
-jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !jQuery.support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- // Support: Webkit
- // "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
-});
-var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( core_rnotwhite ) || [""];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( core_rnotwhite ) || [""];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery._removeData( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = core_hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
- event.preventDefault();
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
- // IE<9 dies on focus/blur to hidden element (#1486,#12518)
- // only reproducible on winXP IE8 native, not IE9 in IE8 mode
- }
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, ret, handleObj, matched, j,
- handlerQueue = [],
- args = core_slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var sel, handleObj, matches, i,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- /* jshint eqeqeq: false */
- for ( ; cur != this; cur = cur.parentNode || this ) {
- /* jshint eqeqeq: true */
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: IE<9
- // Fix target property (#1925)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Support: Chrome 23+, Safari?
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Support: IE<9
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
- // Support: IE<9
- // If we error on focus to hidden element (#1486, #12518),
- // let .trigger() run the handlers
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Even when returnValue equals to undefined Firefox will still show alert
- if ( event.result !== undefined ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event, to properly expose it to GC
- if ( typeof elem[ name ] === core_strundefined ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-bindin…
-jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- // If preventDefault exists, run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // Support: IE
- // Otherwise set the returnValue property of the original event to false
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
- if ( !e ) {
- return;
- }
- // If stopPropagation exists, run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
- // Support: IE
- // Set the cancelBubble property of the original event to true
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "submitBubbles" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "submitBubbles", true );
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "changeBubbles", true );
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0,
- handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var type, origFn;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-var isSimple = /^.[^:#\[\.,]*$/,
- rparentsprev = /^(?:parents|prev(?:Until|All))/,
- rneedsContext = jQuery.expr.match.needsContext,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i,
- ret = [],
- self = this,
- len = self.length;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
-
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
-
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- ret = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
- // Always skip document fragments
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
-
- cur = ret.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( jQuery.unique(all) );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- if ( this.length > 1 ) {
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.unique( ret );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
- }
-
- return this.pushStack( ret );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- });
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
- });
-}
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- area: [ 1, "<map>", "</map>" ],
- param: [ 1, "<object>", "</object>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-jQuery.fn.extend({
- text: function( value ) {
- return jQuery.access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
-
- // If this is a select, ensure that it displays empty (#12336)
- // Support: IE<9
- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
- elem.options.length = 0;
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return jQuery.access( this, function( value ) {
- var elem = this[0] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var
- // Snapshot the DOM in case .domManip sweeps something relevant into its fragment
- args = jQuery.map( this, function( elem ) {
- return [ elem.nextSibling, elem.parentNode ];
- }),
- i = 0;
-
- // Make the changes, replacing each context element with the new content
- this.domManip( arguments, function( elem ) {
- var next = args[ i++ ],
- parent = args[ i++ ];
-
- if ( parent ) {
- // Don't use the snapshot next if it has moved (#13810)
- if ( next && next.parentNode !== parent ) {
- next = this.nextSibling;
- }
- jQuery( this ).remove();
- parent.insertBefore( elem, next );
- }
- // Allow new content to include elements from the context set
- }, true );
-
- // Force removal if there was no new content (e.g., from empty arguments)
- return i ? this : this.remove();
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, callback, allowIntersection ) {
-
- // Flatten any nested arrays
- args = core_concat.apply( [], args );
-
- var first, node, hasScripts,
- scripts, doc, fragment,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[0] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback, allowIntersection );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( this[i], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Hope ajax is available...
- jQuery._evalUrl( node.src );
- } else {
- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
- }
- }
- }
-
- // Fix #11809: Avoid leaking memory
- fragment = first = null;
- }
- }
-
- return this;
- }
-});
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?
-
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
- if ( match ) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function fixCloneNodeIssues( src, dest ) {
- var nodeName, e, data;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 copies events bound via attachEvent when using cloneNode.
- if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
- data = jQuery._data( dest );
-
- for ( e in data.events ) {
- jQuery.removeEvent( dest, e, data.handle );
- }
-
- // Event data gets referenced instead of copied if the expando gets copied too
- dest.removeAttribute( jQuery.expando );
- }
-
- // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
- if ( nodeName === "script" && dest.text !== src.text ) {
- disableScript( dest ).text = src.text;
- restoreScript( dest );
-
- // IE6-10 improperly clones children of object elements using classid.
- // IE10 throws NoModificationAllowedError if parent is null, #12132.
- } else if ( nodeName === "object" ) {
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
- // This path appears unavoidable for IE9. When cloning an object
- // element in IE9, the outerHTML strategy above is not sufficient.
- // If the src has innerHTML and the destination does not,
- // copy the src.innerHTML into the dest.innerHTML. #10324
- if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
- dest.innerHTML = src.innerHTML;
- }
-
- } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
-
- dest.defaultChecked = dest.checked = src.checked;
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.defaultSelected = dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone(true);
- jQuery( insert[i] )[ original ]( elems );
-
- // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
- core_push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( manipulation_rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var destElements, node, clone, i, srcElements,
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- // IE<=8 does not properly clone detached, unknown element nodes
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- // Fix all IE cloning issues
- for ( i = 0; (node = srcElements[i]) != null; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- fixCloneNodeIssues( node, destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0; (node = srcElements[i]) != null; i++ ) {
- cloneCopyEvent( node, destElements[i] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- destElements = srcElements = node = null;
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var j, elem, contains,
- tmp, tag, tbody, wrap,
- l = elems.length,
-
- // Ensure a safe fragment
- safe = createSafeFragment( context ),
-
- nodes = [],
- i = 0;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || safe.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
-
- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
- // Descend through wrappers to the right content
- j = wrap[0];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Manually add leading whitespace removed by IE
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !jQuery.support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- tmp = null;
-
- return safe;
- },
-
- cleanData: function( elems, /* internal */ acceptData ) {
- var elem, type, id, data,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = jQuery.support.deleteExpando,
- special = jQuery.event.special;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
-
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
-
- delete cache[ id ];
-
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( deleteExpando ) {
- delete elem[ internalKey ];
-
- } else if ( typeof elem.removeAttribute !== core_strundefined ) {
- elem.removeAttribute( internalKey );
-
- } else {
- elem[ internalKey ] = null;
- }
-
- core_deletedIds.push( id );
- }
- }
- }
- }
- },
-
- _evalUrl: function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
- }
-});
-jQuery.fn.extend({
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
-});
-var iframe, getStyles, curCSS,
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity\s*=\s*([^)]*)/,
- rposition = /^(top|right|bottom|left)$/,
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rmargin = /^margin/,
- rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
- rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
- elemdisplay = { BODY: "block" },
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: 0,
- fontWeight: 400
- },
-
- cssExpand = [ "Top", "Right", "Bottom", "Left" ],
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function isHidden( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = jQuery._data( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
- }
- } else {
-
- if ( !values[ index ] ) {
- hidden = isHidden( elem );
-
- if ( display && display !== "none" || !hidden ) {
- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return jQuery.access( this, function( elem, name, value ) {
- var len, styles,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- var bool = typeof state === "boolean";
-
- return this.each(function() {
- if ( bool ? state : isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
- // but it would mean to define eight (for every problematic property) identical functions
- if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var num, val, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
-});
-
-// NOTE: we've included the "window" in window.getComputedStyle
-// because jsdom on node.js will break without it.
-if ( window.getComputedStyle ) {
- getStyles = function( elem ) {
- return window.getComputedStyle( elem, null );
- };
-
- curCSS = function( elem, name, _computed ) {
- var width, minWidth, maxWidth,
- computed = _computed || getStyles( elem ),
-
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
- style = elem.style;
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret;
- };
-} else if ( document.documentElement.currentStyle ) {
- getStyles = function( elem ) {
- return elem.currentStyle;
- };
-
- curCSS = function( elem, name, _computed ) {
- var left, rs, rsLeft,
- computed = _computed || getStyles( elem ),
- ret = computed ? computed[ name ] : undefined,
- style = elem.style;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- // but not position css attributes, as those are proportional to the parent element instead
- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- // Remember the original values
- left = style.left;
- rs = elem.runtimeStyle;
- rsLeft = rs && rs.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- rs.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- rs.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-// Try to determine the default display value of an element
-function css_defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
- // Use the already-created iframe if possible
- iframe = ( iframe ||
- jQuery("<iframe frameborder='0' width='0' height='0'/>")
- .css( "cssText", "display:block !important" )
- ).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
- doc.write("<!doctype html><html><body>");
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-
-// Called ONLY from within css_defaultDisplay
-function actualDisplay( name, doc ) {
- var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
- display = jQuery.css( elem[0], "display" );
- elem.remove();
- return display;
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- // if value === "", then remove inline opacity #12685
- if ( ( value >= 1 || value === "" ) &&
- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there is no filter style applied in a css rule or unset inline opacity, we are done
- if ( value === "" || currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-// These hooks cannot be added until DOM ready because the support test
-// for it is not run until after DOM ready
-jQuery(function() {
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- if ( computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
- };
- }
-
- // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
- // getComputedStyle returns percent when specified for top/left/bottom/right
- // rather than make the css module depend on the offset module, we just check for it here
- if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
- jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = {
- get: function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- };
- });
- }
-
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
- (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function(){
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function(){
- var type = this.type;
- // Use .is(":disabled") so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !manipulation_rcheckableType.test( type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-//Serialize an array of form elements or a set of
-//key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- }
-});
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
- ajax_nonce = jQuery.now(),
-
- ajax_rquery = /\?/,
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType[0] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var deep, key,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- var selector, response, type,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
-
- return this;
-};
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
- jQuery.fn[ type ] = function( fn ){
- return this.on( type, fn );
- };
-});
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Cross-domain detection vars
- parts,
- // Loop variable
- i,
- // URL without anti-cache param
- cacheURL,
- // Response headers as string
- responseHeadersString,
- // timeout handle
- timeoutTimer,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- transport,
- // Response headers
- responseHeaders,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
- var firstDataType, ct, finalDataType, type,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || jQuery("head")[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement("script");
-
- script.async = true;
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( script.parentNode ) {
- script.parentNode.removeChild( script );
- }
-
- // Dereference the script
- script = null;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
-
- // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( undefined, true );
- }
- }
- };
- }
-});
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-var xhrCallbacks, xhrSupported,
- xhrId = 0,
- // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject && function() {
- // Abort all pending requests
- var key;
- for ( key in xhrCallbacks ) {
- xhrCallbacks[ key ]( undefined, true );
- }
- };
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject("Microsoft.XMLHTTP");
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-xhrSupported = jQuery.ajaxSettings.xhr();
-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = jQuery.support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var handle, i,
- xhr = s.xhr();
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( err ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
- var status, responseHeaders, statusText, responses;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occurred
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0…
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- responses = {};
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
-
- // When requesting binary data, IE6-9 will throw an exception
- // on any attempt to access responseText (#11426)
- if ( typeof xhr.responseText === "string" ) {
- responses.text = xhr.responseText;
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- if ( !s.async ) {
- // if we're in sync mode we fire the callback
- callback();
- } else if ( xhr.readyState === 4 ) {
- // (IE6 & IE7) if it's in cache and has been
- // retrieved directly we need to fire the callback
- setTimeout( callback );
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback( undefined, true );
- }
- }
- };
- }
- });
-}
-var fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
-
- if ( start && start[ 3 ] !== unit ) {
- // Trust units reported by jQuery.css
- unit = unit || start[ 3 ];
-
- // Make sure we update the tween properties later on
- parts = parts || [];
-
- // Iteratively approximate from a nonzero starting point
- start = +target || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- // Update tween properties
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
-
- return tween;
- }]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- // we're done with this property
- return tween;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-function defaultPrefilter( elem, props, opts ) {
- /* jshint validthis: true */
- var prop, value, toggle, tween, hooks, oldfire,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = jQuery._data( elem, "fxshow" );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- if ( jQuery.css( elem, "display" ) === "inline" &&
- jQuery.css( elem, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
-
- } else {
- style.zoom = 1;
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !jQuery.support.shrinkWrapBlocks ) {
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
-
- // show/hide pass
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
- continue;
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
- }
- }
-
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = jQuery._data( elem, "fxshow", {} );
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery._removeData( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
- }
-}
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || jQuery._data( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = jQuery._data( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // enable finishing flag on private data
- data.finish = true;
-
- // empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth? 1 : 0;
- for( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p*Math.PI ) / 2;
- }
-};
-
-jQuery.timers = [];
-jQuery.fx = Tween.prototype.init;
-jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- if ( timer() && jQuery.timers.push( timer ) ) {
- jQuery.fx.start();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-jQuery.fn.offset = function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, win,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
- };
-};
-
-jQuery.offset = {
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- parentOffset = { top: 0, left: 0 },
- elem = this[ 0 ];
-
- // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
- // we assume that getBoundingClientRect is available when computed position is fixed
- offset = elem.getBoundingClientRect();
- } else {
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
- // Subtract parent offsets and element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || docElem;
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || docElem;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return jQuery.access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return jQuery.access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-// Limit scope pollution from any deprecated API
-// (function() {
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
- return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-// })();
-if ( typeof module === "object" && module && typeof module.exports === "object" ) {
- // Expose jQuery as module.exports in loaders that implement the Node
- // module pattern (including browserify). Do not create the global, since
- // the user will be storing it themselves locally, and globals are frowned
- // upon in the Node module world.
- module.exports = jQuery;
-} else {
- // Otherwise expose jQuery to the global object as usual
- window.jQuery = window.$ = jQuery;
-
- // Register as a named AMD module, since jQuery can be concatenated with other
- // files that may use define, but not via a proper concatenation script that
- // understands anonymous AMD modules. A named AMD is safest and most robust
- // way to register. Lowercase jquery is used because AMD module names are
- // derived from file names, and jQuery is normally delivered in a lowercase
- // file name. Do this after creating the global so that if an AMD module wants
- // to call noConflict to hide this version of jQuery, it will work.
- if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function () { return jQuery; } );
- }
-}
-
-})( window );
Added: sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.2.js
===================================================================
--- sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.2.js (rev 0)
+++ sandbox/nuiton-js-jquery/src/main/resources/nuiton-js-jquery/jquery-1.10.2.js 2013-07-07 07:24:21 UTC (rev 133)
@@ -0,0 +1,9789 @@
+/*!
+ * jQuery JavaScript Library v1.10.2
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-07-03T13:48Z
+ */
+(function( window, undefined ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+var
+ // The deferred used on DOM ready
+ readyList,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // Support: IE<10
+ // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
+ core_strundefined = typeof undefined,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ location = window.location,
+ document = window.document,
+ docElem = document.documentElement,
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // [[Class]] -> type pairs
+ class2type = {},
+
+ // List of deleted data cache ids, so we can reuse them
+ core_deletedIds = [],
+
+ core_version = "1.10.2",
+
+ // Save a reference to some core methods
+ core_concat = core_deletedIds.concat,
+ core_push = core_deletedIds.push,
+ core_slice = core_deletedIds.slice,
+ core_indexOf = core_deletedIds.indexOf,
+ core_toString = class2type.toString,
+ core_hasOwn = class2type.hasOwnProperty,
+ core_trim = core_version.trim,
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Used for matching numbers
+ core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+ // Used for splitting on whitespace
+ core_rnotwhite = /\S+/g,
+
+ // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ },
+
+ // The ready event handler
+ completed = function( event ) {
+
+ // readyState === "complete" is good enough for us to call the dom ready in oldIE
+ if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+ detach();
+ jQuery.ready();
+ }
+ },
+ // Clean-up method for dom ready events
+ detach = function() {
+ if ( document.addEventListener ) {
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
+
+ } else {
+ document.detachEvent( "onreadystatechange", completed );
+ window.detachEvent( "onload", completed );
+ }
+ };
+
+jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: core_version,
+
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+
+ // scripts is true for back-compat
+ jQuery.merge( this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+ // Properties of context are called as methods if possible
+ if ( jQuery.isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return core_slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Add the callback
+ jQuery.ready.promise().done( fn );
+
+ return this;
+ },
+
+ slice: function() {
+ return this.pushStack( core_slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: core_push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var src, copyIsArray, copy, name, options, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger("ready").off("ready");
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function( obj ) {
+ /* jshint eqeqeq: false */
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return String( obj );
+ }
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ core_toString.call(obj) ] || "object" :
+ typeof obj;
+ },
+
+ isPlainObject: function( obj ) {
+ var key;
+
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !core_hasOwn.call(obj, "constructor") &&
+ !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Support: IE<9
+ // Handle iteration over inherited properties before own properties.
+ if ( jQuery.support.ownLast ) {
+ for ( key in obj ) {
+ return core_hasOwn.call( obj, key );
+ }
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ for ( key in obj ) {}
+
+ return key === undefined || core_hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ // data: string of html
+ // context (optional): If specified, the fragment will be created in this context, defaults to document
+ // keepScripts (optional): If true, will include scripts passed in the html string
+ parseHTML: function( data, context, keepScripts ) {
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec( data ),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[1] ) ];
+ }
+
+ parsed = jQuery.buildFragment( [ data ], context, scripts );
+ if ( scripts ) {
+ jQuery( scripts ).remove();
+ }
+ return jQuery.merge( [], parsed.childNodes );
+ },
+
+ parseJSON: function( data ) {
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ if ( data === null ) {
+ return data;
+ }
+
+ if ( typeof data === "string" ) {
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ if ( data ) {
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return ( new Function( "return " + data ) )();
+ }
+ }
+ }
+
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
+ }
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-gl…
+ globalEval: function( data ) {
+ if ( data && jQuery.trim( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike( obj );
+
+ if ( args ) {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+ function( text ) {
+ return text == null ?
+ "" :
+ core_trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArraylike( Object(arr) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ core_push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ var len;
+
+ if ( arr ) {
+ if ( core_indexOf ) {
+ return core_indexOf.call( arr, elem, i );
+ }
+
+ len = arr.length;
+ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+ for ( ; i < len; i++ ) {
+ // Skip accessing in sparse arrays
+ if ( i in arr && arr[ i ] === elem ) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var l = second.length,
+ i = first.length,
+ j = 0;
+
+ if ( typeof l === "number" ) {
+ for ( ; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var retVal,
+ ret = [],
+ i = 0,
+ length = elems.length;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike( elems ),
+ ret = [];
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return core_concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ var args, proxy, tmp;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = core_slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Multifunctional method to get and set values of a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ length = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( jQuery.type( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !jQuery.isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < length; i++ ) {
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
+ },
+
+ now: function() {
+ return ( new Date() ).getTime();
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations.
+ // Note: this method belongs to the css module but it's needed here for the support module.
+ // If support gets modularized, this method should be moved back to the css module.
+ swap: function( elem, options, callback, args ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.apply( elem, args || [] );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+ }
+});
+
+jQuery.ready.promise = function( obj ) {
+ if ( !readyList ) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout( jQuery.ready );
+
+ // Standards-based browsers support DOMContentLoaded
+ } else if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed, false );
+
+ // If IE event model is used
+ } else {
+ // Ensure firing before onload, maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", completed );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", completed );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var top = false;
+
+ try {
+ top = window.frameElement == null && document.documentElement;
+ } catch(e) {}
+
+ if ( top && top.doScroll ) {
+ (function doScrollCheck() {
+ if ( !jQuery.isReady ) {
+
+ try {
+ // Use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ top.doScroll("left");
+ } catch(e) {
+ return setTimeout( doScrollCheck, 50 );
+ }
+
+ // detach all dom ready events
+ detach();
+
+ // and execute any waiting functions
+ jQuery.ready();
+ }
+ })();
+ }
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+ var length = obj.length,
+ type = jQuery.type( obj );
+
+ if ( jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.nodeType === 1 && length ) {
+ return true;
+ }
+
+ return type === "array" || type !== "function" &&
+ ( length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+/*!
+ * Sizzle CSS Selector Engine v1.10.2
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-07-03
+ */
+(function( window, undefined ) {
+
+var i,
+ support,
+ cachedruns,
+ Expr,
+ getText,
+ isXML,
+ compile,
+ outermostContext,
+ sortInput,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + -(new Date()),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ hasDuplicate = false,
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ strundefined = typeof undefined,
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf if we can't use a native one
+ indexOf = arr.indexOf || function( elem ) {
+ var i = 0,
+ len = this.length;
+ for ( ; i < len; i++ ) {
+ if ( this[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
+
+ // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+ "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+ // Prefer arguments quoted,
+ // then not containing pseudos/brackets,
+ // then attribute selectors/non-parenthetical expressions,
+ // then anything else
+ // These preferences are here to reduce the number of selectors
+ // needing tokenize in the PSEUDO preFilter
+ pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+ rsibling = new RegExp( whitespace + "*[+~]" ),
+ rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ // BMP codepoint
+ high < 0 ?
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ };
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+
+ context = context || document;
+ results = results || [];
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( documentIsHTML && !seed ) {
+
+ // Shortcuts
+ if ( (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // QSA path
+ if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType === 9 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + toSelector( groups[i] );
+ }
+ newContext = rsibling.test( selector ) && context.parentNode || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key += " " ) > Expr.cacheLength ) {
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return (cache[ key ] = value);
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn( div );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( div.parentNode ) {
+ div.parentNode.removeChild( div );
+ }
+ // release memory in IE
+ div = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split("|"),
+ i = attrs.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[i] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( (cur = cur.nextSibling) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var doc = node ? node.ownerDocument || node : preferredDoc,
+ parent = doc.defaultView;
+
+ // If no document and documentElement is available, return
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+
+ // Support tests
+ documentIsHTML = !isXML( doc );
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if ( parent && parent.attachEvent && parent !== parent.top ) {
+ parent.attachEvent( "onbeforeunload", function() {
+ setDocument();
+ });
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+ support.attributes = assert(function( div ) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( div ) {
+ div.appendChild( doc.createComment("") );
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Check if getElementsByClassName can be trusted
+ support.getElementsByClassName = assert(function( div ) {
+ div.innerHTML = "<div class='a'></div><div class='a i'></div>";
+
+ // Support: Safari<4
+ // Catch class over-caching
+ div.firstChild.className = "i";
+ // Support: Opera<10
+ // Catch gEBCN failure to find non-leading classes
+ return div.getElementsByClassName("i").length === 2;
+ });
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( div ) {
+ docElem.appendChild( div ).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+ });
+
+ // ID find and filter
+ if ( support.getById ) {
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+ var m = context.getElementById( id );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ };
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== strundefined ) {
+ return context.getElementsByTagName( tag );
+ }
+ } :
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( div ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ div.innerHTML = "<select><option selected=''></option></select>";
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !div.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !div.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+ });
+
+ assert(function( div ) {
+
+ // Support: Opera 10-12/IE8
+ // ^= $= *= and empty values
+ // Should not select anything
+ // Support: Windows 8 Native Apps
+ // The type attribute is restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ div.appendChild( input ).setAttribute( "t", "" );
+
+ if ( div.querySelectorAll("[t^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( !div.querySelectorAll(":enabled").length ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( div ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( div, "div" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( div, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+
+ // Element contains another
+ // Purposefully does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = docElem.compareDocumentPosition ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
+
+ if ( compare ) {
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === doc || contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === doc || contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ }
+
+ // Not directly comparable, sort on existence of method
+ return a.compareDocumentPosition ? -1 : 1;
+ } :
+ function( a, b ) {
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Parentless nodes are either documents or disconnected
+ } else if ( !aup || !bup ) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val === undefined ?
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null :
+ val;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+ // If no nodeType, this is expected to be an array
+ for ( ; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (see #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1].slice( 0, 3 ) === "nth" ) {
+ // nth-* requires argument
+ if ( !match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[5] && match[2];
+
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[3] && match[4] !== undefined ) {
+ match[2] = match[4];
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ match[0] = match[0].slice( 0, excess );
+ match[2] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() { return true; } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( (node = node[ dir ]) ) {
+ if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+ // Seek `elem` from a previously-cached index
+ outerCache = parent[ expando ] || (parent[ expando ] = {});
+ cache = outerCache[ type ] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf.call( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function( elem ) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function( elem ) {
+ return elem.disabled === true;
+ },
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+ // not comment, processing instructions, or others
+ // Thanks to Diego Perini for the nodeName shortcut
+ // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+function tokenize( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( tokens = [] );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var data, cache, outerCache,
+ dirkey = dirruns + " " + doneName;
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if ( xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || (elem[ expando ] = {});
+ if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+ if ( (data = cache[1]) === true || data === cachedruns ) {
+ return data === true;
+ }
+ } else {
+ cache = outerCache[ dir ] = [ dirkey ];
+ cache[1] = matcher( elem, context, xml ) || cachedruns;
+ if ( cache[1] === true ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf.call( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ // A counter to specify which element is currently being matched
+ var matcherCachedRuns = 0,
+ bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, expandContext ) {
+ var elem, j, matcher,
+ setMatched = [],
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ outermost = expandContext != null,
+ contextBackup = outermostContext,
+ // We must always have either seed elements or context
+ elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ cachedruns = matcherCachedRuns;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ cachedruns = ++matcherCachedRuns;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( (matcher = setMatchers[j++]) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !group ) {
+ group = tokenize( selector );
+ }
+ i = group.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( group[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+ }
+ return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function select( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ match = tokenize( selector );
+
+ if ( !seed ) {
+ // Try to minimize operations if there is only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && context.nodeType === 9 && documentIsHTML &&
+ Expr.relative[ tokens[1].type ] ) {
+
+ context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+ if ( !context ) {
+ return results;
+ }
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( runescape, funescape ),
+ rsibling.test( tokens[0].type ) && context.parentNode || context
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function
+ // Provide `match` to avoid retokenization if we modified the selector above
+ compile( selector, match )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ rsibling.test( selector )
+ );
+ return results;
+}
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome<14
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+ div.innerHTML = "<input/>";
+ div.firstChild.setAttribute( "value", "" );
+ return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+ addHandle( "value", function( elem, name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+ return div.getAttribute("disabled") == null;
+}) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return (val = elem.getAttributeNode( name )) && val.specified ?
+ val.value :
+ elem[ name ] === true ? name.toLowerCase() : null;
+ }
+ });
+}
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+ var object = optionsCache[ options ] = {};
+ jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ });
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[ options ] || createOptions( options ) ) :
+ jQuery.extend( {}, options );
+
+ var // Flag to know if list is currently firing
+ firing,
+ // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( list && ( !fired || stack ) ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var action = tuple[ 0 ],
+ fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[ tuple[1] ](function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .done( newDefer.resolve )
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
+ } else {
+ newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 3 ];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[ tuple[1] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(function() {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[ tuple[0] ] = function() {
+ deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+ return this;
+ };
+ deferred[ tuple[0] + "With" ] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( subordinate /* , ..., subordinateN */ ) {
+ var i = 0,
+ resolveValues = core_slice.call( arguments ),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function( i, contexts, values ) {
+ return function( value ) {
+ contexts[ i ] = this;
+ values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+ if( values === progressValues ) {
+ deferred.notifyWith( contexts, values );
+ } else if ( !( --remaining ) ) {
+ deferred.resolveWith( contexts, values );
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if ( length > 1 ) {
+ progressValues = new Array( length );
+ progressContexts = new Array( length );
+ resolveContexts = new Array( length );
+ for ( ; i < length; i++ ) {
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+ resolveValues[ i ].promise()
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if ( !remaining ) {
+ deferred.resolveWith( resolveContexts, resolveValues );
+ }
+
+ return deferred.promise();
+ }
+});
+jQuery.support = (function( support ) {
+
+ var all, a, input, select, fragment, opt, eventName, isSupported, i,
+ div = document.createElement("div");
+
+ // Setup
+ div.setAttribute( "className", "t" );
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+ // Finish early in limited (non-browser) environments
+ all = div.getElementsByTagName("*") || [];
+ a = div.getElementsByTagName("a")[ 0 ];
+ if ( !a || !a.style || !all.length ) {
+ return support;
+ }
+
+ // First batch of tests
+ select = document.createElement("select");
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName("input")[ 0 ];
+
+ a.style.cssText = "top:1px;float:left;opacity:.5";
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ support.getSetAttribute = div.className !== "t";
+
+ // IE strips leading whitespace when .innerHTML is used
+ support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ support.tbody = !div.getElementsByTagName("tbody").length;
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ support.htmlSerialize = !!div.getElementsByTagName("link").length;
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ support.style = /top/.test( a.getAttribute("style") );
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ support.hrefNormalized = a.getAttribute("href") === "/a";
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ support.opacity = /^0.5/.test( a.style.opacity );
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ support.cssFloat = !!a.style.cssFloat;
+
+ // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+ support.checkOn = !!input.value;
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ support.optSelected = opt.selected;
+
+ // Tests for enctype support on a form (#6743)
+ support.enctype = !!document.createElement("form").enctype;
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";
+
+ // Will be defined later
+ support.inlineBlockNeedsLayout = false;
+ support.shrinkWrapBlocks = false;
+ support.pixelPosition = false;
+ support.deleteExpando = true;
+ support.noCloneEvent = true;
+ support.reliableMarginRight = true;
+ support.boxSizingReliable = true;
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE<9
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ // Check if we can trust getAttribute("value")
+ input = document.createElement("input");
+ input.setAttribute( "value", "" );
+ support.input = input.getAttribute( "value" ) === "";
+
+ // Check if an input maintains its value after becoming a radio
+ input.value = "t";
+ input.setAttribute( "type", "radio" );
+ support.radioValue = input.value === "t";
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ input.setAttribute( "checked", "t" );
+ input.setAttribute( "name", "t" );
+
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( input );
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE<9
+ // Opera does not clone events (and typeof div.attachEvent === undefined).
+ // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+ if ( div.attachEvent ) {
+ div.attachEvent( "onclick", function() {
+ support.noCloneEvent = false;
+ });
+
+ div.cloneNode( true ).click();
+ }
+
+ // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+ // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+ for ( i in { submit: true, change: true, focusin: true }) {
+ div.setAttribute( eventName = "on" + i, "t" );
+
+ support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+ }
+
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ // Support: IE<9
+ // Iteration over object's inherited properties before its own.
+ for ( i in jQuery( support ) ) {
+ break;
+ }
+ support.ownLast = i !== "0";
+
+ // Run tests that need a body at doc ready
+ jQuery(function() {
+ var container, marginDiv, tds,
+ divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+ body = document.getElementsByTagName("body")[0];
+
+ if ( !body ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ container = document.createElement("div");
+ container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+ body.appendChild( container ).appendChild( div );
+
+ // Support: IE8
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName("td");
+ tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Support: IE8
+ // Check if empty table cells still have offsetWidth/Height
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+ // Check box-sizing and margin behavior.
+ div.innerHTML = "";
+ div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+
+ // Workaround failing boxSizing test due to offsetWidth returning wrong value
+ // with some non-1 values of body zoom, ticket #13543
+ jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
+ support.boxSizing = div.offsetWidth === 4;
+ });
+
+ // Use window.getComputedStyle because jsdom on node.js will break without it.
+ if ( window.getComputedStyle ) {
+ support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+ support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. (#3333)
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ marginDiv = div.appendChild( document.createElement("div") );
+ marginDiv.style.cssText = div.style.cssText = divReset;
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+
+ support.reliableMarginRight =
+ !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+ }
+
+ if ( typeof div.style.zoom !== core_strundefined ) {
+ // Support: IE<8
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ div.innerHTML = "";
+ div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+ // Support: IE6
+ // Check if elements with layout shrink-wrap their children
+ div.style.display = "block";
+ div.innerHTML = "<div></div>";
+ div.firstChild.style.width = "5px";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+ if ( support.inlineBlockNeedsLayout ) {
+ // Prevent IE 6 from affecting layout for positioned elements #11048
+ // Prevent IE from shrinking the body in IE 7 mode #12869
+ // Support: IE<8
+ body.style.zoom = 1;
+ }
+ }
+
+ body.removeChild( container );
+
+ // Null elements to avoid leaks in IE
+ container = div = tds = marginDiv = null;
+ });
+
+ // Null elements to avoid leaks in IE
+ all = select = fragment = opt = a = input = null;
+
+ return support;
+})({});
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var ret, thisCache,
+ internalKey = jQuery.expando,
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ // Avoid exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ] = jQuery.extend( cache[ id ], name );
+ } else {
+ cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+ }
+ }
+
+ thisCache = cache[ id ];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if ( !pvt ) {
+ if ( !thisCache.data ) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( typeof name === "string" ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, i,
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+ if ( thisCache ) {
+
+ // Support array or space separated string names for data keys
+ if ( !jQuery.isArray( name ) ) {
+
+ // try the string as a key before any manipulation
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase( name );
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+ name = name.split(" ");
+ }
+ }
+ } else {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+ }
+
+ i = name.length;
+ while ( i-- ) {
+ delete thisCache[ name[i] ];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( !pvt ) {
+ delete cache[ id ].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject( cache[ id ] ) ) {
+ return;
+ }
+ }
+
+ // Destroy the cache
+ if ( isNode ) {
+ jQuery.cleanData( [ elem ], true );
+
+ // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+ /* jshint eqeqeq: false */
+ } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+ /* jshint eqeqeq: true */
+ delete cache[ id ];
+
+ // When all else fails, null
+ } else {
+ cache[ id ] = null;
+ }
+}
+
+jQuery.extend({
+ cache: {},
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "applet": true,
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return internalData( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ return internalRemoveData( elem, name );
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return internalData( elem, name, data, true );
+ },
+
+ _removeData: function( elem, name ) {
+ return internalRemoveData( elem, name, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ // Do not set data on non-element because it will not be cleared (#8335).
+ if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+ return false;
+ }
+
+ var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ // nodes accept data unless otherwise specified; rejection can be conditional
+ return !noData || noData !== true && elem.getAttribute("classid") === noData;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var attrs, name,
+ data = null,
+ i = 0,
+ elem = this[0];
+
+ // Special expections of .data basically thwart jQuery.access,
+ // so implement the relevant behavior ourselves
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = jQuery.data( elem );
+
+ if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+ attrs = elem.attributes;
+ for ( ; i < attrs.length; i++ ) {
+ name = attrs[i].name;
+
+ if ( name.indexOf("data-") === 0 ) {
+ name = jQuery.camelCase( name.slice(5) );
+
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ jQuery._data( elem, "parsedAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ return arguments.length > 1 ?
+
+ // Sets one value
+ this.each(function() {
+ jQuery.data( this, key, value );
+ }) :
+
+ // Gets one value
+ // Try to fetch any internally stored data first
+ elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+ var name;
+ for ( name in obj ) {
+
+ // if the public data object is empty, the private is still empty
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+ continue;
+ }
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = jQuery._data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray(data) ) {
+ queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // not intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ jQuery._removeData( elem, type + "queue" );
+ jQuery._removeData( elem, key );
+ })
+ });
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[0], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while( i-- ) {
+ tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+});
+var nodeHook, boolHook,
+ rclass = /[\t\r\n\f]/g,
+ rreturn = /\r/g,
+ rfocusable = /^(?:input|select|textarea|button|object)$/i,
+ rclickable = /^(?:a|area)$/i,
+ ruseDefault = /^(?:checked|selected)$/i,
+ getSetAttribute = jQuery.support.getSetAttribute,
+ getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ var classes, elem, cur, clazz, j,
+ i = 0,
+ len = this.length,
+ proceed = typeof value === "string" && value;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call( this, j, this.className ) );
+ });
+ }
+
+ if ( proceed ) {
+ // The disjunction here is for better compressibility (see removeClass)
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+ for ( ; i < len; i++ ) {
+ elem = this[ i ];
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
+ " "
+ );
+
+ if ( cur ) {
+ j = 0;
+ while ( (clazz = classes[j++]) ) {
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+ cur += clazz + " ";
+ }
+ }
+ elem.className = jQuery.trim( cur );
+
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classes, elem, cur, clazz, j,
+ i = 0,
+ len = this.length,
+ proceed = arguments.length === 0 || typeof value === "string" && value;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call( this, j, this.className ) );
+ });
+ }
+ if ( proceed ) {
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+ for ( ; i < len; i++ ) {
+ elem = this[ i ];
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
+ ""
+ );
+
+ if ( cur ) {
+ j = 0;
+ while ( (clazz = classes[j++]) ) {
+ // Remove *all* instances
+ while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+ cur = cur.replace( " " + clazz + " ", " " );
+ }
+ }
+ elem.className = value ? jQuery.trim( cur ) : "";
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value;
+
+ if ( typeof stateVal === "boolean" && type === "string" ) {
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
+ }
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ classNames = value.match( core_rnotwhite ) || [];
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space separated list
+ if ( self.hasClass( className ) ) {
+ self.removeClass( className );
+ } else {
+ self.addClass( className );
+ }
+ }
+
+ // Toggle whole class name
+ } else if ( type === core_strundefined || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // If the element has a class name or if we're passed "false",
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var ret, hooks, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, jQuery( this ).val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // Use proper attribute retrieval(#6932, #12072)
+ var val = jQuery.find.attr( elem, "value" );
+ return val != null ?
+ val :
+ elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // oldIE doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray( value ),
+ i = options.length;
+
+ while ( i-- ) {
+ option = options[ i ];
+ if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
+ optionSet = true;
+ }
+ }
+
+ // force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attr: function( elem, name, value ) {
+ var hooks, ret,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === core_strundefined ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] ||
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+
+ } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ ret = jQuery.find.attr( elem, name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var name, propName,
+ i = 0,
+ attrNames = value && value.match( core_rnotwhite );
+
+ if ( attrNames && elem.nodeType === 1 ) {
+ while ( (name = attrNames[i++]) ) {
+ propName = jQuery.propFix[ name ] || name;
+
+ // Boolean attributes get special treatment (#10870)
+ if ( jQuery.expr.match.bool.test( name ) ) {
+ // Set corresponding property to false
+ if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+ elem[ propName ] = false;
+ // Support: IE<9
+ // Also clear defaultChecked/defaultSelected (if appropriate)
+ } else {
+ elem[ jQuery.camelCase( "default-" + name ) ] =
+ elem[ propName ] = false;
+ }
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ } else {
+ jQuery.attr( elem, name, "" );
+ }
+
+ elem.removeAttribute( getSetAttribute ? name : propName );
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to default in case type is set after value during creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
+ ret :
+ ( elem[ name ] = value );
+
+ } else {
+ return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
+ ret :
+ elem[ name ];
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabind…
+ // Use proper attribute retrieval(#12072)
+ var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+ return tabindex ?
+ parseInt( tabindex, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ -1;
+ }
+ }
+ }
+});
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+ // IE<8 needs the *property* name
+ elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+ // Use defaultChecked and defaultSelected for oldIE
+ } else {
+ elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+ }
+
+ return name;
+ }
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+ var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
+
+ jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
+ function( elem, name, isXML ) {
+ var fn = jQuery.expr.attrHandle[ name ],
+ ret = isXML ?
+ undefined :
+ /* jshint eqeqeq: false */
+ (jQuery.expr.attrHandle[ name ] = undefined) !=
+ getter( elem, name, isXML ) ?
+
+ name.toLowerCase() :
+ null;
+ jQuery.expr.attrHandle[ name ] = fn;
+ return ret;
+ } :
+ function( elem, name, isXML ) {
+ return isXML ?
+ undefined :
+ elem[ jQuery.camelCase( "default-" + name ) ] ?
+ name.toLowerCase() :
+ null;
+ };
+});
+
+// fix oldIE attroperties
+if ( !getSetInput || !getSetAttribute ) {
+ jQuery.attrHooks.value = {
+ set: function( elem, value, name ) {
+ if ( jQuery.nodeName( elem, "input" ) ) {
+ // Does not return so that setAttribute is also used
+ elem.defaultValue = value;
+ } else {
+ // Use nodeHook if defined (#1954); otherwise setAttribute is fine
+ return nodeHook && nodeHook.set( elem, value, name );
+ }
+ }
+ };
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = {
+ set: function( elem, value, name ) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode( name );
+ if ( !ret ) {
+ elem.setAttributeNode(
+ (ret = elem.ownerDocument.createAttribute( name ))
+ );
+ }
+
+ ret.value = value += "";
+
+ // Break association with cloned elements by also using setAttribute (#9646)
+ return name === "value" || value === elem.getAttribute( name ) ?
+ value :
+ undefined;
+ }
+ };
+ jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
+ // Some attributes are constructed with empty-string values when not defined
+ function( elem, name, isXML ) {
+ var ret;
+ return isXML ?
+ undefined :
+ (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
+ ret.value :
+ null;
+ };
+ jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret = elem.getAttributeNode( name );
+ return ret && ret.specified ?
+ ret.value :
+ undefined;
+ },
+ set: nodeHook.set
+ };
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ set: function( elem, value, name ) {
+ nodeHook.set( elem, value === "" ? false : value, name );
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ };
+ });
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+ // href/src property should get the full normalized URL (#10299/#12915)
+ jQuery.each([ "href", "src" ], function( i, name ) {
+ jQuery.propHooks[ name ] = {
+ get: function( elem ) {
+ return elem.getAttribute( name, 4 );
+ }
+ };
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Note: IE uppercases css property names, but if we were to .toLowerCase()
+ // .cssText, that would destroy case senstitivity in URL's, like in "background"
+ return elem.style.cssText || undefined;
+ },
+ set: function( elem, value ) {
+ return ( elem.style.cssText = value + "" );
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ };
+}
+
+jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+], function() {
+ jQuery.propFix[ this.toLowerCase() ] = this;
+});
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+ jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ };
+ if ( !jQuery.support.checkOn ) {
+ jQuery.valHooks[ this ].get = function( elem ) {
+ // Support: Webkit
+ // "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+ var tmp, events, t, handleObjIn,
+ special, eventHandle, handleObj,
+ handlers, type, namespaces, origType,
+ elemData = jQuery._data( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !(events = elemData.events) ) {
+ events = elemData.events = {};
+ }
+ if ( !(eventHandle = elemData.handle) ) {
+ eventHandle = elemData.handle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( core_rnotwhite ) || [""];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !(handlers = events[ type ]) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+ var j, handleObj, tmp,
+ origCount, t, events,
+ special, handlers, type,
+ namespaces, origType,
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( core_rnotwhite ) || [""];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ delete elemData.handle;
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery._removeData( elem, "events" );
+ }
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ var handle, ontype, cur,
+ bubbleType, special, tmp, i,
+ eventPath = [ elem || document ],
+ type = core_hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf(".") >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[ jQuery.expando ] ?
+ event :
+ new jQuery.Event( type, typeof event === "object" && event );
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === (elem.ownerDocument || document) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+ jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ try {
+ elem[ type ]();
+ } catch ( e ) {
+ // IE<9 dies on focus/blur to hidden element (#1486,#12518)
+ // only reproducible on winXP IE8 native, not IE9 in IE8 mode
+ }
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event );
+
+ var i, ret, handleObj, matched, j,
+ handlerQueue = [],
+ args = core_slice.call( arguments ),
+ handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+ // Triggered event must either 1) have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( (event.result = ret) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var sel, handleObj, matches, i,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG <use> instance trees (#13180)
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+ /* jshint eqeqeq: false */
+ for ( ; cur != this; cur = cur.parentNode || this ) {
+ /* jshint eqeqeq: true */
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+ matches = [];
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matches[ sel ] === undefined ) {
+ matches[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) >= 0 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matches[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, handlers: matches });
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+ }
+
+ return handlerQueue;
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop, copy,
+ type = event.type,
+ originalEvent = event,
+ fixHook = this.fixHooks[ type ];
+
+ if ( !fixHook ) {
+ this.fixHooks[ type ] = fixHook =
+ rmouseEvent.test( type ) ? this.mouseHooks :
+ rkeyEvent.test( type ) ? this.keyHooks :
+ {};
+ }
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = new jQuery.Event( originalEvent );
+
+ i = copy.length;
+ while ( i-- ) {
+ prop = copy[ i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Support: IE<9
+ // Fix target property (#1925)
+ if ( !event.target ) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Support: Chrome 23+, Safari?
+ // Target should not be a text node (#504, #13143)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // Support: IE<9
+ // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+ event.metaKey = !!event.metaKey;
+
+ return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var body, eventDoc, doc,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && fromElement ) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function() {
+ if ( this !== safeActiveElement() && this.focus ) {
+ try {
+ this.focus();
+ return false;
+ } catch ( e ) {
+ // Support: IE<9
+ // If we error on focus to hidden element (#1486, #12518),
+ // let .trigger() run the handlers
+ }
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function() {
+ if ( this === safeActiveElement() && this.blur ) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+ // For checkbox, fire native event so checked state will be right
+ trigger: function() {
+ if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function( event ) {
+ return jQuery.nodeName( event.target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Even when returnValue equals to undefined Firefox will still show alert
+ if ( event.result !== undefined ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ var name = "on" + type;
+
+ if ( elem.detachEvent ) {
+
+ // #8545, #7054, preventing memory leaks for custom events in IE6-8
+ // detachEvent needed property on element, by name of that event, to properly expose it to GC
+ if ( typeof elem[ name ] === core_strundefined ) {
+ elem[ name ] = null;
+ }
+
+ elem.detachEvent( name, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-bindin…
+jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+ if ( !e ) {
+ return;
+ }
+
+ // If preventDefault exists, run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // Support: IE
+ // Otherwise set the returnValue property of the original event to false
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+ if ( !e ) {
+ return;
+ }
+ // If stopPropagation exists, run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+
+ // Support: IE
+ // Set the cancelBubble property of the original event to true
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ }
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+ if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+ jQuery.event.add( form, "submit._submit", function( event ) {
+ event._submit_bubble = true;
+ });
+ jQuery._data( form, "submitBubbles", true );
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ postDispatch: function( event ) {
+ // If form was submitted by the user, bubble the event up the tree
+ if ( event._submit_bubble ) {
+ delete event._submit_bubble;
+ if ( this.parentNode && !event.isTrigger ) {
+ jQuery.event.simulate( "submit", this.parentNode, event, true );
+ }
+ }
+ },
+
+ teardown: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove( this, "._submit" );
+ }
+ };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+ jQuery.event.special.change = {
+
+ setup: function() {
+
+ if ( rformElems.test( this.nodeName ) ) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ jQuery.event.add( this, "propertychange._change", function( event ) {
+ if ( event.originalEvent.propertyName === "checked" ) {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add( this, "click._change", function( event ) {
+ if ( this._just_changed && !event.isTrigger ) {
+ this._just_changed = false;
+ }
+ // Allow triggered, simulated change events (#11500)
+ jQuery.event.simulate( "change", this, event, true );
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add( this, "beforeactivate._change", function( e ) {
+ var elem = e.target;
+
+ if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+ jQuery.event.add( elem, "change._change", function( event ) {
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+ jQuery.event.simulate( "change", this.parentNode, event, true );
+ }
+ });
+ jQuery._data( elem, "changeBubbles", true );
+ }
+ });
+ },
+
+ handle: function( event ) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+ return event.handleObj.handler.apply( this, arguments );
+ }
+ },
+
+ teardown: function() {
+ jQuery.event.remove( this, "._change" );
+
+ return !rformElems.test( this.nodeName );
+ }
+ };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var type, origFn;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on( types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove( this, types, fn, selector );
+ });
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ var elem = this[0];
+ if ( elem ) {
+ return jQuery.event.trigger( type, data, elem, true );
+ }
+ }
+});
+var isSimple = /^.[^:#\[\.,]*$/,
+ rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ rneedsContext = jQuery.expr.match.needsContext,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var i,
+ ret = [],
+ self = this,
+ len = self.length;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ }) );
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return ret;
+ },
+
+ has: function( target ) {
+ var i,
+ targets = jQuery( target, this ),
+ len = targets.length;
+
+ return this.filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector || [], true) );
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector || [], false) );
+ },
+
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ ret = [],
+ pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( ; i < l; i++ ) {
+ for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector(cur, selectors)) ) {
+
+ cur = ret.push( cur );
+ break;
+ }
+ }
+ }
+
+ return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( jQuery.unique(all) );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+});
+
+function sibling( cur, dir ) {
+ do {
+ cur = cur[ dir ];
+ } while ( cur && cur.nodeType !== 1 );
+
+ return cur;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ if ( this.length > 1 ) {
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ ret = jQuery.unique( ret );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+ }
+
+ return this.pushStack( ret );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+ jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ }));
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ /* jshint -W018 */
+ return !!qualifier.call( elem, i, elem ) !== not;
+ });
+
+ }
+
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if ( typeof qualifier === "string" ) {
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter( qualifier, elements, not );
+ }
+
+ qualifier = jQuery.filter( qualifier, elements );
+ }
+
+ return jQuery.grep( elements, function( elem ) {
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
+ });
+}
+function createSafeFragment( document ) {
+ var list = nodeNames.split( "|" ),
+ safeFrag = document.createDocumentFragment();
+
+ if ( safeFrag.createElement ) {
+ while ( list.length ) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+ rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /^$|\/(?:java|ecma)script/i,
+ rscriptTypeMasked = /^true\/(.*)/,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+ // We have to close these tags to support XHTML (#13200)
+ wrapMap = {
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+ legend: [ 1, "<fieldset>", "</fieldset>" ],
+ area: [ 1, "<map>", "</map>" ],
+ param: [ 1, "<object>", "</object>" ],
+ thead: [ 1, "<table>", "</table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+ // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+ // unless wrapped in a div with non-breaking characters in front of it.
+ _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
+ },
+ safeFragment = createSafeFragment( document ),
+ fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return jQuery.access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+ }, null, value, arguments.length );
+ },
+
+ append: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.insertBefore( elem, target.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this );
+ }
+ });
+ },
+
+ after: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ }
+ });
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ var elem,
+ elems = selector ? jQuery.filter( selector, this ) : this,
+ i = 0;
+
+ for ( ; (elem = elems[i]) != null; i++ ) {
+
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem ) );
+ }
+
+ if ( elem.parentNode ) {
+ if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+ setGlobalEval( getAll( elem, "script" ) );
+ }
+ elem.parentNode.removeChild( elem );
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+
+ // If this is a select, ensure that it displays empty (#12336)
+ // Support: IE<9
+ if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+ elem.options.length = 0;
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function () {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
+ },
+
+ html: function( value ) {
+ return jQuery.access( this, function( value ) {
+ var elem = this[0] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined ) {
+ return elem.nodeType === 1 ?
+ elem.innerHTML.replace( rinlinejQuery, "" ) :
+ undefined;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
+ ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+ !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+ try {
+ for (; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ elem = this[i] || {};
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function() {
+ var
+ // Snapshot the DOM in case .domManip sweeps something relevant into its fragment
+ args = jQuery.map( this, function( elem ) {
+ return [ elem.nextSibling, elem.parentNode ];
+ }),
+ i = 0;
+
+ // Make the changes, replacing each context element with the new content
+ this.domManip( arguments, function( elem ) {
+ var next = args[ i++ ],
+ parent = args[ i++ ];
+
+ if ( parent ) {
+ // Don't use the snapshot next if it has moved (#13810)
+ if ( next && next.parentNode !== parent ) {
+ next = this.nextSibling;
+ }
+ jQuery( this ).remove();
+ parent.insertBefore( elem, next );
+ }
+ // Allow new content to include elements from the context set
+ }, true );
+
+ // Force removal if there was no new content (e.g., from empty arguments)
+ return i ? this : this.remove();
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, callback, allowIntersection ) {
+
+ // Flatten any nested arrays
+ args = core_concat.apply( [], args );
+
+ var first, node, hasScripts,
+ scripts, doc, fragment,
+ i = 0,
+ l = this.length,
+ set = this,
+ iNoClone = l - 1,
+ value = args[0],
+ isFunction = jQuery.isFunction( value );
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+ return this.each(function( index ) {
+ var self = set.eq( index );
+ if ( isFunction ) {
+ args[0] = value.call( this, index, self.html() );
+ }
+ self.domManip( args, callback, allowIntersection );
+ });
+ }
+
+ if ( l ) {
+ fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ if ( first ) {
+ scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for ( ; i < l; i++ ) {
+ node = fragment;
+
+ if ( i !== iNoClone ) {
+ node = jQuery.clone( node, true, true );
+
+ // Keep references to cloned scripts for later restoration
+ if ( hasScripts ) {
+ jQuery.merge( scripts, getAll( node, "script" ) );
+ }
+ }
+
+ callback.call( this[i], node, i );
+ }
+
+ if ( hasScripts ) {
+ doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map( scripts, restoreScript );
+
+ // Evaluate executable scripts on first document insertion
+ for ( i = 0; i < hasScripts; i++ ) {
+ node = scripts[ i ];
+ if ( rscriptType.test( node.type || "" ) &&
+ !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+ if ( node.src ) {
+ // Hope ajax is available...
+ jQuery._evalUrl( node.src );
+ } else {
+ jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+ }
+ }
+ }
+ }
+
+ // Fix #11809: Avoid leaking memory
+ fragment = first = null;
+ }
+ }
+
+ return this;
+ }
+});
+
+// Support: IE<8
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+ return jQuery.nodeName( elem, "table" ) &&
+ jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?
+
+ elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
+ elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+ elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
+ return elem;
+}
+function restoreScript( elem ) {
+ var match = rscriptTypeMasked.exec( elem.type );
+ if ( match ) {
+ elem.type = match[1];
+ } else {
+ elem.removeAttribute("type");
+ }
+ return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var elem,
+ i = 0;
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+ }
+}
+
+function cloneCopyEvent( src, dest ) {
+
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var type, i, l,
+ oldData = jQuery._data( src ),
+ curData = jQuery._data( dest, oldData ),
+ events = oldData.events;
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+
+ // make the cloned public data object a copy from the original
+ if ( curData.data ) {
+ curData.data = jQuery.extend( {}, curData.data );
+ }
+}
+
+function fixCloneNodeIssues( src, dest ) {
+ var nodeName, e, data;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 copies events bound via attachEvent when using cloneNode.
+ if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+ data = jQuery._data( dest );
+
+ for ( e in data.events ) {
+ jQuery.removeEvent( dest, e, data.handle );
+ }
+
+ // Event data gets referenced instead of copied if the expando gets copied too
+ dest.removeAttribute( jQuery.expando );
+ }
+
+ // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+ if ( nodeName === "script" && dest.text !== src.text ) {
+ disableScript( dest ).text = src.text;
+ restoreScript( dest );
+
+ // IE6-10 improperly clones children of object elements using classid.
+ // IE10 throws NoModificationAllowedError if parent is null, #12132.
+ } else if ( nodeName === "object" ) {
+ if ( dest.parentNode ) {
+ dest.outerHTML = src.outerHTML;
+ }
+
+ // This path appears unavoidable for IE9. When cloning an object
+ // element in IE9, the outerHTML strategy above is not sufficient.
+ // If the src has innerHTML and the destination does not,
+ // copy the src.innerHTML into the dest.innerHTML. #10324
+ if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+ dest.innerHTML = src.innerHTML;
+ }
+
+ } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+
+ dest.defaultChecked = dest.checked = src.checked;
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.defaultSelected = dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ i = 0,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone(true);
+ jQuery( insert[i] )[ original ]( elems );
+
+ // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+ core_push.apply( ret, elems.get() );
+ }
+
+ return this.pushStack( ret );
+ };
+});
+
+function getAll( context, tag ) {
+ var elems, elem,
+ i = 0,
+ found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+ typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+ undefined;
+
+ if ( !found ) {
+ for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+ if ( !tag || jQuery.nodeName( elem, tag ) ) {
+ found.push( elem );
+ } else {
+ jQuery.merge( found, getAll( elem, tag ) );
+ }
+ }
+ }
+
+ return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+ jQuery.merge( [ context ], found ) :
+ found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( manipulation_rcheckableType.test( elem.type ) ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var destElements, node, clone, i, srcElements,
+ inPage = jQuery.contains( elem.ownerDocument, elem );
+
+ if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+ clone = elem.cloneNode( true );
+
+ // IE<=8 does not properly clone detached, unknown element nodes
+ } else {
+ fragmentDiv.innerHTML = elem.outerHTML;
+ fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+ }
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+ // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll( clone );
+ srcElements = getAll( elem );
+
+ // Fix all IE cloning issues
+ for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if ( destElements[i] ) {
+ fixCloneNodeIssues( node, destElements[i] );
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ if ( deepDataAndEvents ) {
+ srcElements = srcElements || getAll( elem );
+ destElements = destElements || getAll( clone );
+
+ for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+ cloneCopyEvent( node, destElements[i] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ destElements = srcElements = node = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function( elems, context, scripts, selection ) {
+ var j, elem, contains,
+ tmp, tag, tbody, wrap,
+ l = elems.length,
+
+ // Ensure a safe fragment
+ safe = createSafeFragment( context ),
+
+ nodes = [],
+ i = 0;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( jQuery.type( elem ) === "object" ) {
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || safe.appendChild( context.createElement("div") );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+
+ tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+ // Descend through wrappers to the right content
+ j = wrap[0];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Manually add leading whitespace removed by IE
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ elem = tag === "table" && !rtbody.test( elem ) ?
+ tmp.firstChild :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !rtbody.test( elem ) ?
+ tmp :
+ 0;
+
+ j = elem && elem.childNodes.length;
+ while ( j-- ) {
+ if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+ elem.removeChild( tbody );
+ }
+ }
+ }
+
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Fix #12392 for WebKit and IE > 9
+ tmp.textContent = "";
+
+ // Fix #12392 for oldIE
+ while ( tmp.firstChild ) {
+ tmp.removeChild( tmp.firstChild );
+ }
+
+ // Remember the top-level container for proper cleanup
+ tmp = safe.lastChild;
+ }
+ }
+ }
+
+ // Fix #11356: Clear elements from fragment
+ if ( tmp ) {
+ safe.removeChild( tmp );
+ }
+
+ // Reset defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ if ( !jQuery.support.appendChecked ) {
+ jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+ }
+
+ i = 0;
+ while ( (elem = nodes[ i++ ]) ) {
+
+ // #4087 - If origin and destination elements are the same, and this is
+ // that element, do not do anything
+ if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+ continue;
+ }
+
+ contains = jQuery.contains( elem.ownerDocument, elem );
+
+ // Append to fragment
+ tmp = getAll( safe.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( contains ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( (elem = tmp[ j++ ]) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ tmp = null;
+
+ return safe;
+ },
+
+ cleanData: function( elems, /* internal */ acceptData ) {
+ var elem, type, id, data,
+ i = 0,
+ internalKey = jQuery.expando,
+ cache = jQuery.cache,
+ deleteExpando = jQuery.support.deleteExpando,
+ special = jQuery.event.special;
+
+ for ( ; (elem = elems[i]) != null; i++ ) {
+
+ if ( acceptData || jQuery.acceptData( elem ) ) {
+
+ id = elem[ internalKey ];
+ data = id && cache[ id ];
+
+ if ( data ) {
+ if ( data.events ) {
+ for ( type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ // Remove cache only if it was not already removed by jQuery.event.remove
+ if ( cache[ id ] ) {
+
+ delete cache[ id ];
+
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( deleteExpando ) {
+ delete elem[ internalKey ];
+
+ } else if ( typeof elem.removeAttribute !== core_strundefined ) {
+ elem.removeAttribute( internalKey );
+
+ } else {
+ elem[ internalKey ] = null;
+ }
+
+ core_deletedIds.push( id );
+ }
+ }
+ }
+ }
+ },
+
+ _evalUrl: function( url ) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ }
+});
+jQuery.fn.extend({
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ var isFunction = jQuery.isFunction( html );
+
+ return this.each(function(i) {
+ jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ }
+});
+var iframe, getStyles, curCSS,
+ ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity\s*=\s*([^)]*)/,
+ rposition = /^(top|right|bottom|left)$/,
+ // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rmargin = /^margin/,
+ rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+ rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+ rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+ elemdisplay = { BODY: "block" },
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: 0,
+ fontWeight: 400
+ },
+
+ cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+ cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+ // shortcut for names that are not vendor prefixed
+ if ( name in style ) {
+ return name;
+ }
+
+ // check for vendor prefixed names
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in style ) {
+ return name;
+ }
+ }
+
+ return origName;
+}
+
+function isHidden( elem, el ) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+ var display, elem, hidden,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ values[ index ] = jQuery._data( elem, "olddisplay" );
+ display = elem.style.display;
+ if ( show ) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !values[ index ] && display === "none" ) {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( elem.style.display === "" && isHidden( elem ) ) {
+ values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+ }
+ } else {
+
+ if ( !values[ index ] ) {
+ hidden = isHidden( elem );
+
+ if ( display && display !== "none" || !hidden ) {
+ jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+ }
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( index = 0; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+ elem.style.display = show ? values[ index ] || "" : "none";
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend({
+ css: function( name, value ) {
+ return jQuery.access( this, function( elem, name, value ) {
+ var len, styles,
+ map = {},
+ i = 0;
+
+ if ( jQuery.isArray( name ) ) {
+ styles = getStyles( elem );
+ len = name.length;
+
+ for ( ; i < len; i++ ) {
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ },
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each(function() {
+ if ( isHidden( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "columnCount": true,
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase( name ),
+ style = elem.style;
+
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+ // but it would mean to define eight (for every problematic property) identical functions
+ if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+ style[ name ] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra, styles ) {
+ var num, val, hooks,
+ origName = jQuery.camelCase( name );
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name, styles );
+ }
+
+ //convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
+ if ( extra === "" || extra ) {
+ num = parseFloat( val );
+ return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+ }
+ return val;
+ }
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+ getStyles = function( elem ) {
+ return window.getComputedStyle( elem, null );
+ };
+
+ curCSS = function( elem, name, _computed ) {
+ var width, minWidth, maxWidth,
+ computed = _computed || getStyles( elem ),
+
+ // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+ ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+ style = elem.style;
+
+ if ( computed ) {
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret;
+ };
+} else if ( document.documentElement.currentStyle ) {
+ getStyles = function( elem ) {
+ return elem.currentStyle;
+ };
+
+ curCSS = function( elem, name, _computed ) {
+ var left, rs, rsLeft,
+ computed = _computed || getStyles( elem ),
+ ret = computed ? computed[ name ] : undefined,
+ style = elem.style;
+
+ // Avoid setting ret to empty string here
+ // so we don't default to auto
+ if ( ret == null && style && style[ name ] ) {
+ ret = style[ name ];
+ }
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ // but not position css attributes, as those are proportional to the parent element instead
+ // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+ if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+ // Remember the original values
+ left = style.left;
+ rs = elem.runtimeStyle;
+ rsLeft = rs && rs.left;
+
+ // Put in the new values to get a computed value out
+ if ( rsLeft ) {
+ rs.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : ret;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if ( rsLeft ) {
+ rs.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+ var matches = rnumsplit.exec( value );
+ return matches ?
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+ value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for ( ; i < 4; i += 2 ) {
+ // both box models exclude margin, so add it if we want it
+ if ( extra === "margin" ) {
+ val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+ }
+
+ if ( isBorderBox ) {
+ // border-box includes padding, so remove it if we want content
+ if ( extra === "content" ) {
+ val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+ }
+
+ // at this point, extra isn't border nor margin, so remove border
+ if ( extra !== "margin" ) {
+ val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ } else {
+ // at this point, extra isn't content, so add padding
+ val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+ // at this point, extra isn't content nor padding, so add border
+ if ( extra !== "padding" ) {
+ val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ }
+ }
+
+ return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var valueIsBorderBox = true,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ styles = getStyles( elem ),
+ isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+ // some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if ( val <= 0 || val == null ) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS( elem, name, styles );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if ( rnumnonpx.test(val) ) {
+ return val;
+ }
+
+ // we need the check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat( val ) || 0;
+ }
+
+ // use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles
+ )
+ ) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+ var doc = document,
+ display = elemdisplay[ nodeName ];
+
+ if ( !display ) {
+ display = actualDisplay( nodeName, doc );
+
+ // If the simple way fails, read from inside an iframe
+ if ( display === "none" || !display ) {
+ // Use the already-created iframe if possible
+ iframe = ( iframe ||
+ jQuery("<iframe frameborder='0' width='0' height='0'/>")
+ .css( "cssText", "display:block !important" )
+ ).appendTo( doc.documentElement );
+
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+ doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+ doc.write("<!doctype html><html><body>");
+ doc.close();
+
+ display = actualDisplay( nodeName, doc );
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+ var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+ display = jQuery.css( elem[0], "display" );
+ elem.remove();
+ return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+ // certain elements can have dimension info if we invisibly show them
+ // however, it must have a current display style that would benefit from this
+ return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+ jQuery.swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, name, extra );
+ }) :
+ getWidthOrHeight( elem, name, extra );
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ var styles = extra && getStyles( elem );
+ return setPositiveNumber( elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ // if value === "", then remove inline opacity #12685
+ if ( ( value >= 1 || value === "" ) &&
+ jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+ style.removeAttribute ) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute( "filter" );
+
+ // if there is no filter style applied in a css rule or unset inline opacity, we are done
+ if ( value === "" || currentStyle && !currentStyle.filter ) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
+ }
+ };
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap( elem, { "display": "inline-block" },
+ curCSS, [ elem, "marginRight" ] );
+ }
+ }
+ };
+ }
+
+ // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+ // getComputedStyle returns percent when specified for top/left/bottom/right
+ // rather than make the css module depend on the offset module, we just check for it here
+ if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+ jQuery.each( [ "top", "left" ], function( i, prop ) {
+ jQuery.cssHooks[ prop ] = {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
+ }
+ }
+ };
+ });
+ }
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ // Support: Opera <= 12.12
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+ (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i = 0,
+ expanded = {},
+
+ // assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+ for ( ; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( !rmargin.test( prefix ) ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+});
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map(function(){
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop( this, "elements" );
+ return elements ? jQuery.makeArray( elements ) : this;
+ })
+ .filter(function(){
+ var type = this.type;
+ // Use .is(":disabled") so that fieldset[disabled] works
+ return this.name && !jQuery( this ).is( ":disabled" ) &&
+ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+ ( this.checked || !manipulation_rcheckableType.test( type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+});
+
+jQuery.fn.extend({
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+ }
+});
+var
+ // Document location
+ ajaxLocParts,
+ ajaxLocation,
+ ajax_nonce = jQuery.now(),
+
+ ajax_rquery = /\?/,
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+ if ( jQuery.isFunction( func ) ) {
+ // For each dataType in the dataTypeExpression
+ while ( (dataType = dataTypes[i++]) ) {
+ // Prepend if requested
+ if ( dataType[0] === "+" ) {
+ dataType = dataType.slice( 1 ) || "*";
+ (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+ // Otherwise append
+ } else {
+ (structure[ dataType ] = structure[ dataType ] || []).push( func );
+ }
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect( dataType ) {
+ var selected;
+ inspected[ dataType ] = true;
+ jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+ var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+ if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+ options.dataTypes.unshift( dataTypeOrTransport );
+ inspect( dataTypeOrTransport );
+ return false;
+ } else if ( seekingTransport ) {
+ return !( selected = dataTypeOrTransport );
+ }
+ });
+ return selected;
+ }
+
+ return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var deep, key,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+
+ return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+ }
+
+ var selector, response, type,
+ self = this,
+ off = url.indexOf(" ");
+
+ if ( off >= 0 ) {
+ selector = url.slice( off, url.length );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if ( self.length > 0 ) {
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params
+ }).done(function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html( selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+ // Otherwise use the full result
+ responseText );
+
+ }).complete( callback && function( jqXHR, status ) {
+ self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+ });
+ }
+
+ return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+ jQuery.fn[ type ] = function( fn ){
+ return this.on( type, fn );
+ };
+});
+
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ type: "GET",
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+ // Extending ajaxSettings
+ ajaxExtend( jQuery.ajaxSettings, target );
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Cross-domain detection vars
+ parts,
+ // Loop variable
+ i,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers as string
+ responseHeadersString,
+ // timeout handle
+ timeoutTimer,
+
+ // To know if global events are to be dispatched
+ fireGlobals,
+
+ transport,
+ // Response headers
+ responseHeaders,
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery( callbackContext ) :
+ jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks("once memory"),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while ( (match = rheaders.exec( responseHeadersString )) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ var lname = name.toLowerCase();
+ if ( !state ) {
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function( map ) {
+ var code;
+ if ( map ) {
+ if ( state < 2 ) {
+ for ( code in map ) {
+ // Lazy-add the new callback in a way that preserves old ones
+ statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+ }
+ } else {
+ // Execute the appropriate callbacks
+ jqXHR.always( map[ jqXHR.status ] );
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ var finalText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( finalText );
+ }
+ done( 0, finalText );
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise( jqXHR ).complete = completeDeferred.add;
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( state === 2 ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger("ajaxStart");
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ cacheURL = s.url;
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+ s.url = rts.test( cacheURL ) ?
+
+ // If there is already a '_' parameter, set its value
+ cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+ // Otherwise add one to the end
+ cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+ }
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+ }
+ if ( jQuery.etag[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout(function() {
+ jqXHR.abort("timeout");
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch ( e ) {
+ // Propagate exception as error if not done
+ if ( state < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ // Callback for when everything is done
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+ // If successful, handle type chaining
+ if ( isSuccess ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if ( modified ) {
+ jQuery.lastModified[ cacheURL ] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if ( modified ) {
+ jQuery.etag[ cacheURL ] = modified;
+ }
+ }
+
+ // if no content
+ if ( status === 204 || s.type === "HEAD" ) {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if ( status === 304 ) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if ( status || !statusText ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ }
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+});
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+ var firstDataType, ct, finalDataType, type,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while ( current ) {
+
+ if ( s.responseFields[ current ] ) {
+ jqXHR[ s.responseFields[ current ] ] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if ( !prev && isSuccess && s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if ( current ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current === "*" ) {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split( " " );
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.unshift( tmp[ 1 ] );
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s[ "throws" ] ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ s.global = false;
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+
+ var script,
+ head = document.head || jQuery("head")[0] || document.documentElement;
+
+ return {
+
+ send: function( _, callback ) {
+
+ script = document.createElement("script");
+
+ script.async = true;
+
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if ( script.parentNode ) {
+ script.parentNode.removeChild( script );
+ }
+
+ // Dereference the script
+ script = null;
+
+ // Callback if not abort
+ if ( !isAbort ) {
+ callback( 200, "success" );
+ }
+ }
+ };
+
+ // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
+ head.insertBefore( script, head.firstChild );
+ },
+
+ abort: function() {
+ if ( script ) {
+ script.onload( undefined, true );
+ }
+ }
+ };
+ }
+});
+var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+ "url" :
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if ( jsonProp ) {
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+ } else if ( s.jsonp !== false ) {
+ s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ overwritten = window[ callbackName ];
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function() {
+ // Restore preexisting value
+ window[ callbackName ] = overwritten;
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+});
+var xhrCallbacks, xhrSupported,
+ xhrId = 0,
+ // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject && function() {
+ // Abort all pending requests
+ var key;
+ for ( key in xhrCallbacks ) {
+ xhrCallbacks[ key ]( undefined, true );
+ }
+ };
+
+// Functions to create xhrs
+function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch( e ) {}
+}
+
+function createActiveXHR() {
+ try {
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
+ } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function() {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+ jQuery.ajaxTransport(function( s ) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( !s.crossDomain || jQuery.support.cors ) {
+
+ var callback;
+
+ return {
+ send: function( headers, complete ) {
+
+ // Get a new xhr
+ var handle, i,
+ xhr = s.xhr();
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
+ } else {
+ xhr.open( s.type, s.url, s.async );
+ }
+
+ // Apply custom fields if provided
+ if ( s.xhrFields ) {
+ for ( i in s.xhrFields ) {
+ xhr[ i ] = s.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( s.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( s.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ } catch( err ) {}
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( ( s.hasContent && s.data ) || null );
+
+ // Listener
+ callback = function( _, isAbort ) {
+ var status, responseHeaders, statusText, responses;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occurred
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0…
+ try {
+
+ // Was never called and is aborted or complete
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if ( handle ) {
+ xhr.onreadystatechange = jQuery.noop;
+ if ( xhrOnUnloadAbort ) {
+ delete xhrCallbacks[ handle ];
+ }
+ }
+
+ // If it's an abort
+ if ( isAbort ) {
+ // Abort it manually if needed
+ if ( xhr.readyState !== 4 ) {
+ xhr.abort();
+ }
+ } else {
+ responses = {};
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+
+ // When requesting binary data, IE6-9 will throw an exception
+ // on any attempt to access responseText (#11426)
+ if ( typeof xhr.responseText === "string" ) {
+ responses.text = xhr.responseText;
+ }
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch( e ) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if ( !status && s.isLocal && !s.crossDomain ) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if ( status === 1223 ) {
+ status = 204;
+ }
+ }
+ }
+ } catch( firefoxAccessException ) {
+ if ( !isAbort ) {
+ complete( -1, firefoxAccessException );
+ }
+ }
+
+ // Call complete if needed
+ if ( responses ) {
+ complete( status, statusText, responses, responseHeaders );
+ }
+ };
+
+ if ( !s.async ) {
+ // if we're in sync mode we fire the callback
+ callback();
+ } else if ( xhr.readyState === 4 ) {
+ // (IE6 & IE7) if it's in cache and has been
+ // retrieved directly we need to fire the callback
+ setTimeout( callback );
+ } else {
+ handle = ++xhrId;
+ if ( xhrOnUnloadAbort ) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if ( !xhrCallbacks ) {
+ xhrCallbacks = {};
+ jQuery( window ).unload( xhrOnUnloadAbort );
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[ handle ] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback( undefined, true );
+ }
+ }
+ };
+ }
+ });
+}
+var fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+ rrun = /queueHooks$/,
+ animationPrefilters = [ defaultPrefilter ],
+ tweeners = {
+ "*": [function( prop, value ) {
+ var tween = this.createTween( prop, value ),
+ target = tween.cur(),
+ parts = rfxnum.exec( value ),
+ unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
+ rfxnum.exec( jQuery.css( tween.elem, prop ) ),
+ scale = 1,
+ maxIterations = 20;
+
+ if ( start && start[ 3 ] !== unit ) {
+ // Trust units reported by jQuery.css
+ unit = unit || start[ 3 ];
+
+ // Make sure we update the tween properties later on
+ parts = parts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ start = +target || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*
+ // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style( tween.elem, prop, start + unit );
+
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+ } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+ }
+
+ // Update tween properties
+ if ( parts ) {
+ start = tween.start = +start || +target || 0;
+ tween.unit = unit;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[ 1 ] ?
+ start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
+ +parts[ 2 ];
+ }
+
+ return tween;
+ }]
+ };
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout(function() {
+ fxNow = undefined;
+ });
+ return ( fxNow = jQuery.now() );
+}
+
+function createTween( value, prop, animation ) {
+ var tween,
+ collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+
+ // we're done with this property
+ return tween;
+ }
+ }
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ stopped,
+ index = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+ // don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function() {
+ if ( stopped ) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+ // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+ if ( percent < 1 && length ) {
+ return remaining;
+ } else {
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, { specialEasing: {} }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+ // if we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if ( stopped ) {
+ return this;
+ }
+ stopped = true;
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // resolve when we played the last frame
+ // otherwise, reject
+ if ( gotoEnd ) {
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length ; index++ ) {
+ result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ return result;
+ }
+ }
+
+ jQuery.map( props, createTween, animation );
+
+ if ( jQuery.isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = jQuery.camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( jQuery.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // not quite $.extend, this wont overwrite keys already present.
+ // also - reusing 'index' from above because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweener: function( props, callback ) {
+ if ( jQuery.isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length ; index++ ) {
+ prop = props[ index ];
+ tweeners[ prop ] = tweeners[ prop ] || [];
+ tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ animationPrefilters.unshift( callback );
+ } else {
+ animationPrefilters.push( callback );
+ }
+ }
+});
+
+function defaultPrefilter( elem, props, opts ) {
+ /* jshint validthis: true */
+ var prop, value, toggle, tween, hooks, oldfire,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHidden( elem ),
+ dataShow = jQuery._data( elem, "fxshow" );
+
+ // handle queue: false promises
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function() {
+ // doing this makes sure that the complete handler will be called
+ // before this completes
+ anim.always(function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // height/width overflow pass
+ if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ if ( jQuery.css( elem, "display" ) === "inline" &&
+ jQuery.css( elem, "float" ) === "none" ) {
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+ style.display = "inline-block";
+
+ } else {
+ style.zoom = 1;
+ }
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ if ( !jQuery.support.shrinkWrapBlocks ) {
+ anim.always(function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ });
+ }
+ }
+
+
+ // show/hide pass
+ for ( prop in props ) {
+ value = props[ prop ];
+ if ( rfxtypes.exec( value ) ) {
+ delete props[ prop ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+ continue;
+ }
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+ }
+ }
+
+ if ( !jQuery.isEmptyObject( orig ) ) {
+ if ( dataShow ) {
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = jQuery._data( elem, "fxshow", {} );
+ }
+
+ // store state if its toggle - enables .stop().toggle() to "reverse"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+ if ( hidden ) {
+ jQuery( elem ).show();
+ } else {
+ anim.done(function() {
+ jQuery( elem ).hide();
+ });
+ }
+ anim.done(function() {
+ var prop;
+ jQuery._removeData( elem, "fxshow" );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ });
+ for ( prop in orig ) {
+ tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = tween.start;
+ if ( hidden ) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+ }
+}
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ if ( tween.elem[ tween.prop ] != null &&
+ (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails
+ // so, simple values such as "10px" are parsed to Float.
+ // complex values such as "rotate(1rad)" are returned as is.
+ result = jQuery.css( tween.elem, tween.prop, "" );
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+ // use step hook for back compat - use cssHook if its there - use .style if its
+ // available and use plain properties where available
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Support: IE <=9
+// Panic based approach to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+});
+
+jQuery.fn.extend({
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // show any hidden elements after setting opacity to 0
+ return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+ // animate to the value specified
+ .end().animate({ opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations, or finishing resolves immediately
+ if ( empty || jQuery._data( this, "finish" ) ) {
+ anim.stop( true );
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue && type !== false ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each(function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = jQuery._data( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // start the next in the queue if the last step wasn't forced
+ // timers currently will call their complete callbacks, which will dequeue
+ // but only if they were gotoEnd
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ finish: function( type ) {
+ if ( type !== false ) {
+ type = type || "fx";
+ }
+ return this.each(function() {
+ var index,
+ data = jQuery._data( this ),
+ queue = data[ type + "queue" ],
+ hooks = data[ type + "queueHooks" ],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // enable finishing flag on private data
+ data.finish = true;
+
+ // empty the queue first
+ jQuery.queue( this, type, [] );
+
+ if ( hooks && hooks.stop ) {
+ hooks.stop.call( this, true );
+ }
+
+ // look for any active animations, and finish them
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+ timers[ index ].anim.stop( true );
+ timers.splice( index, 1 );
+ }
+ }
+
+ // look for any animations in the old queue and finish them
+ for ( index = 0; index < length; index++ ) {
+ if ( queue[ index ] && queue[ index ].finish ) {
+ queue[ index ].finish.call( this );
+ }
+ }
+
+ // turn off finishing flag
+ delete data.finish;
+ });
+ }
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ attrs = { height: type },
+ i = 0;
+
+ // if we include width, step value is 1 to do all cssExpand values,
+ // if we don't include width, step value is 2 to skip over Left and Right
+ includeWidth = includeWidth? 1 : 0;
+ for( ; i < 4 ; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+ // normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p*Math.PI ) / 2;
+ }
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+ var timer,
+ timers = jQuery.timers,
+ i = 0;
+
+ fxNow = jQuery.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+ // Checks the timer has not already been removed
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ if ( timer() && jQuery.timers.push( timer ) ) {
+ jQuery.fx.start();
+ }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+ if ( !timerId ) {
+ timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+ }
+};
+
+jQuery.fx.stop = function() {
+ clearInterval( timerId );
+ timerId = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+jQuery.fn.offset = function( options ) {
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ var docElem, win,
+ box = { top: 0, left: 0 },
+ elem = this[ 0 ],
+ doc = elem && elem.ownerDocument;
+
+ if ( !doc ) {
+ return;
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if ( !jQuery.contains( docElem, elem ) ) {
+ return box;
+ }
+
+ // If we don't have gBCR, just use 0,0 rather than error
+ // BlackBerry 5, iOS 3 (original iPhone)
+ if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow( doc );
+ return {
+ top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
+ left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+ };
+};
+
+jQuery.offset = {
+
+ setOffset: function( elem, options, i ) {
+ var position = jQuery.css( elem, "position" );
+
+ // set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css( elem, "top" ),
+ curCSSLeft = jQuery.css( elem, "left" ),
+ calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset,
+ parentOffset = { top: 0, left: 0 },
+ elem = this[ 0 ];
+
+ // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+ if ( jQuery.css( elem, "position" ) === "fixed" ) {
+ // we assume that getBoundingClientRect is available when computed position is fixed
+ offset = elem.getBoundingClientRect();
+ } else {
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent();
+
+ // Get correct offsets
+ offset = this.offset();
+ if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+ parentOffset = offsetParent.offset();
+ }
+
+ // Add offsetParent borders
+ parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+ parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+ }
+
+ // Subtract parent offsets and element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ return {
+ top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+ left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || docElem;
+ while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent || docElem;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+ var top = /Y/.test( prop );
+
+ jQuery.fn[ method ] = function( val ) {
+ return jQuery.access( this, function( elem, method, val ) {
+ var win = getWindow( elem );
+
+ if ( val === undefined ) {
+ return win ? (prop in win) ? win[ prop ] :
+ win.document.documentElement[ method ] :
+ elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : jQuery( win ).scrollLeft(),
+ top ? val : jQuery( win ).scrollTop()
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length, null );
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+ // margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return jQuery.access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( jQuery.isWindow( elem ) ) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+ // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable, null );
+ };
+ });
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+ return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+// })();
+if ( typeof module === "object" && module && typeof module.exports === "object" ) {
+ // Expose jQuery as module.exports in loaders that implement the Node
+ // module pattern (including browserify). Do not create the global, since
+ // the user will be storing it themselves locally, and globals are frowned
+ // upon in the Node module world.
+ module.exports = jQuery;
+} else {
+ // Otherwise expose jQuery to the global object as usual
+ window.jQuery = window.$ = jQuery;
+
+ // Register as a named AMD module, since jQuery can be concatenated with other
+ // files that may use define, but not via a proper concatenation script that
+ // understands anonymous AMD modules. A named AMD is safest and most robust
+ // way to register. Lowercase jquery is used because AMD module names are
+ // derived from file names, and jQuery is normally delivered in a lowercase
+ // file name. Do this after creating the global so that if an AMD module wants
+ // to call noConflict to hide this version of jQuery, it will work.
+ if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function () { return jQuery; } );
+ }
+}
+
+})( window );
1
0
r132 - in sandbox/nuiton-js-angular: . src/main/resources/nuiton-js-angular
by echatellier@users.nuiton.org 06 Jul '13
by echatellier@users.nuiton.org 06 Jul '13
06 Jul '13
Author: echatellier
Date: 2013-07-06 21:07:56 +0200 (Sat, 06 Jul 2013)
New Revision: 132
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/132
Log:
Angular 1.1.5 c'est mieux en fait.
Modified:
sandbox/nuiton-js-angular/pom.xml
sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/angular.js
Modified: sandbox/nuiton-js-angular/pom.xml
===================================================================
--- sandbox/nuiton-js-angular/pom.xml 2013-07-06 15:48:43 UTC (rev 131)
+++ sandbox/nuiton-js-angular/pom.xml 2013-07-06 19:07:56 UTC (rev 132)
@@ -14,7 +14,7 @@
</parent>
<artifactId>nuiton-js-angular</artifactId>
- <version>1.0.7-1-SNAPSHOT</version>
+ <version>1.1.5-1-SNAPSHOT</version>
<name>Nuiton JS :: Angular</name>
<description>Angular jar packaging</description>
@@ -29,9 +29,9 @@
</licenses>
<scm>
- <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-angular-1.0.7-1</connection>
- <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-angular-1.0.7-1</developerConnection>
- <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-angular-…</url>
+ <connection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-angular-1.1.5-1</connection>
+ <developerConnection>scm:svn:http://svn.nuiton.org/svn/nuiton-js/tags/nuiton-js-angular-1.1.5-1</developerConnection>
+ <url>http://www.nuiton.org/repositories/browse/nuiton-js/tags/nuiton-js-angular-…</url>
</scm>
</project>
Modified: sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/angular.js
===================================================================
--- sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/angular.js 2013-07-06 15:48:43 UTC (rev 131)
+++ sandbox/nuiton-js-angular/src/main/resources/nuiton-js-angular/angular.js 2013-07-06 19:07:56 UTC (rev 132)
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.0.7
+ * @license AngularJS v1.1.5
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
@@ -61,12 +61,31 @@
push = [].push,
toString = Object.prototype.toString,
+
+ _angular = window.angular,
/** @name angular */
angular = window.angular || (window.angular = {}),
angularModule,
nodeName_,
uid = ['0', '0', '0'];
+/**
+ * @ngdoc function
+ * @name angular.noConflict
+ * @function
+ *
+ * @description
+ * Restores the previous global value of angular and returns the current instance. Other libraries may already use the
+ * angular namespace. Or a previous version of angular is already loaded on the page. In these cases you may want to
+ * restore the previous namespace and keep a reference to angular.
+ *
+ * @return {Object} The current angular namespace
+ */
+function noConflict() {
+ var a = window.angular;
+ window.angular = _angular;
+ return a;
+}
/**
* @private
@@ -89,7 +108,6 @@
}
}
-
/**
* @ngdoc function
* @name angular.forEach
@@ -251,6 +269,11 @@
return extend(new (extend(function() {}, {prototype:parent}))(), extra);
}
+var START_SPACE = /^\s*/;
+var END_SPACE = /\s*$/;
+function stripWhitespace(str) {
+ return isString(str) ? str.replace(START_SPACE, '').replace(END_SPACE, '') : str;
+}
/**
* @ngdoc function
@@ -637,7 +660,7 @@
* * Both objects or values are of the same type and all of their properties pass `===` comparison.
* * Both values are NaN. (In JavasScript, NaN == NaN => false. But we consider two NaN as equal)
*
- * During a property comparision, properties of `function` type and properties with names
+ * During a property comparison, properties of `function` type and properties with names
* that begin with `$` are ignored.
*
* Scope and DOMWindow objects are being compared only by identify (`===`).
@@ -844,7 +867,7 @@
/**
- * We need our custom method because encodeURIComponent is too agressive and doesn't follow
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
* http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
* segments:
* segment = *pchar
@@ -864,7 +887,7 @@
/**
* This method is intended for encoding *key* or *value* parts of query component. We need a custom
- * method becuase encodeURIComponent is too agressive and encodes stuff that doesn't have to be
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
* encoded per http://tools.ietf.org/html/rfc3986:
* query = *( pchar / "/" / "?" )
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
@@ -976,12 +999,13 @@
}]);
modules.unshift('ng');
var injector = createInjector(modules);
- injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
- function(scope, element, compile, injector) {
+ injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animator',
+ function(scope, element, compile, injector, animator) {
scope.$apply(function() {
element.data('$injector', injector);
compile(element)(scope);
});
+ animator.enabled(true);
}]
);
return injector;
@@ -1216,6 +1240,33 @@
/**
* @ngdoc method
+ * @name angular.Module#animation
+ * @methodOf angular.Module
+ * @param {string} name animation name
+ * @param {Function} animationFactory Factory function for creating new instance of an animation.
+ * @description
+ *
+ * Defines an animation hook that can be later used with {@link ng.directive:ngAnimate ngAnimate}
+ * alongside {@link ng.directive:ngAnimate#Description common ng directives} as well as custom directives.
+ * <pre>
+ * module.animation('animation-name', function($inject1, $inject2) {
+ * return {
+ * //this gets called in preparation to setup an animation
+ * setup : function(element) { ... },
+ *
+ * //this gets called once the animation is run
+ * start : function(element, done, memo) { ... }
+ * }
+ * })
+ * </pre>
+ *
+ * See {@link ng.$animationProvider#register $animationProvider.register()} and
+ * {@link ng.directive:ngAnimate ngAnimate} for more information.
+ */
+ animation: invokeLater('$animationProvider', 'register'),
+
+ /**
+ * @ngdoc method
* @name angular.Module#filter
* @methodOf angular.Module
* @param {string} name Filter name.
@@ -1313,11 +1364,11 @@
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
*/
var version = {
- full: '1.0.7', // all of these placeholder strings will be replaced by grunt's
+ full: '1.1.5', // all of these placeholder strings will be replaced by grunt's
major: 1, // package task
- minor: 0,
- dot: 7,
- codeName: 'monochromatic-rainbow'
+ minor: 1,
+ dot: 5,
+ codeName: 'triangle-squarification'
};
@@ -1347,7 +1398,8 @@
'isDate': isDate,
'lowercase': lowercase,
'uppercase': uppercase,
- 'callbacks': {counter: 0}
+ 'callbacks': {counter: 0},
+ 'noConflict': noConflict
});
angularModule = setupModuleLoader(window);
@@ -1380,6 +1432,7 @@
ngController: ngControllerDirective,
ngForm: ngFormDirective,
ngHide: ngHideDirective,
+ ngIf: ngIfDirective,
ngInclude: ngIncludeDirective,
ngInit: ngInitDirective,
ngNonBindable: ngNonBindableDirective,
@@ -1405,6 +1458,8 @@
directive(ngEventDirectives);
$provide.provider({
$anchorScroll: $AnchorScrollProvider,
+ $animation: $AnimationProvider,
+ $animator: $AnimatorProvider,
$browser: $BrowserProvider,
$cacheFactory: $CacheFactoryProvider,
$controller: $ControllerProvider,
@@ -1484,12 +1539,12 @@
* - [replaceWith()](http://api.jquery.com/replaceWith/)
* - [text()](http://api.jquery.com/text/)
* - [toggleClass()](http://api.jquery.com/toggleClass/)
- * - [triggerHandler()](http://api.jquery.com/triggerHandler/) - Doesn't pass native event objects to handlers.
+ * - [triggerHandler()](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
* - [unbind()](http://api.jquery.com/unbind/) - Does not support namespaces
* - [val()](http://api.jquery.com/val/)
* - [wrap()](http://api.jquery.com/wrap/)
*
- * ## In addtion to the above, Angular provides additional methods to both jQuery and jQuery lite:
+ * ## In addition to the above, Angular provides additional methods to both jQuery and jQuery lite:
*
* - `controller(name)` - retrieves the controller of the current element or its parent. By default
* retrieves controller associated with the `ngController` directive. If `name` is provided as
@@ -1757,9 +1812,14 @@
fn();
}
- this.bind('DOMContentLoaded', trigger); // works for modern browsers and IE9
- // we can not use jqLite since we are not done loading and jQuery could be loaded later.
- JQLite(window).bind('load', trigger); // fallback to window.onload for others
+ // check if document already is loaded
+ if (document.readyState === 'complete'){
+ setTimeout(trigger);
+ } else {
+ this.bind('DOMContentLoaded', trigger); // works for modern browsers and IE9
+ // we can not use jqLite since we are not done loading and jQuery could be loaded later.
+ JQLite(window).bind('load', trigger); // fallback to window.onload for others
+ }
},
toString: function() {
var value = [];
@@ -1783,11 +1843,11 @@
// value on get.
//////////////////////////////////////////
var BOOLEAN_ATTR = {};
-forEach('multiple,selected,checked,disabled,readOnly,required'.split(','), function(value) {
+forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
BOOLEAN_ATTR[lowercase(value)] = value;
});
var BOOLEAN_ELEMENTS = {};
-forEach('input,select,option,textarea,button,form'.split(','), function(value) {
+forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
BOOLEAN_ELEMENTS[uppercase(value)] = true;
});
@@ -1985,7 +2045,7 @@
}
event.isDefaultPrevented = function() {
- return event.defaultPrevented;
+ return event.defaultPrevented || event.returnValue == false;
};
forEach(events[type || event.type], function(fn) {
@@ -2109,8 +2169,9 @@
append: function(element, node) {
forEach(new JQLite(node), function(child){
- if (element.nodeType === 1)
+ if (element.nodeType === 1 || element.nodeType === 11) {
element.appendChild(child);
+ }
});
},
@@ -2187,9 +2248,10 @@
triggerHandler: function(element, eventName) {
var eventFns = (JQLiteExpandoStore(element, 'events') || {})[eventName];
+ var event;
forEach(eventFns, function(fn) {
- fn.call(element, null);
+ fn.call(element, {preventDefault: noop});
});
}
}, function(fn, name){
@@ -2279,50 +2341,6 @@
};
/**
- * A map where multiple values can be added to the same key such that they form a queue.
- * @returns {HashQueueMap}
- */
-function HashQueueMap() {}
-HashQueueMap.prototype = {
- /**
- * Same as array push, but using an array as the value for the hash
- */
- push: function(key, value) {
- var array = this[key = hashKey(key)];
- if (!array) {
- this[key] = [value];
- } else {
- array.push(value);
- }
- },
-
- /**
- * Same as array shift, but using an array as the value for the hash
- */
- shift: function(key) {
- var array = this[key = hashKey(key)];
- if (array) {
- if (array.length == 1) {
- delete this[key];
- return array[0];
- } else {
- return array.shift();
- }
- }
- },
-
- /**
- * return the first item without deleting it
- */
- peek: function(key) {
- var array = this[hashKey(key)];
- if (array) {
- return array[0];
- }
- }
-};
-
-/**
* @ngdoc function
* @name angular.injector
* @function
@@ -2475,6 +2493,18 @@
/**
* @ngdoc method
+ * @name AUTO.$injector#has
+ * @methodOf AUTO.$injector
+ *
+ * @description
+ * Allows the user to query if the particular service exist.
+ *
+ * @param {string} Name of the service to query.
+ * @returns {boolean} returns true if injector has given service.
+ */
+
+/**
+ * @ngdoc method
* @name AUTO.$injector#instantiate
* @methodOf AUTO.$injector
* @description
@@ -2730,9 +2760,10 @@
decorator: decorator
}
},
- providerInjector = createInternalInjector(providerCache, function() {
- throw Error("Unknown provider: " + path.join(' <- '));
- }),
+ providerInjector = (providerCache.$injector =
+ createInternalInjector(providerCache, function() {
+ throw Error("Unknown provider: " + path.join(' <- '));
+ })),
instanceCache = {},
instanceInjector = (instanceCache.$injector =
createInternalInjector(instanceCache, function(servicename) {
@@ -2809,9 +2840,7 @@
try {
for(var invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) {
var invokeArgs = invokeQueue[i],
- provider = invokeArgs[0] == '$injector'
- ? providerInjector
- : providerInjector.get(invokeArgs[0]);
+ provider = providerInjector.get(invokeArgs[0]);
provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
}
@@ -2920,7 +2949,10 @@
invoke: invoke,
instantiate: instantiate,
get: getService,
- annotate: annotate
+ annotate: annotate,
+ has: function(name) {
+ return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
+ }
};
}
}
@@ -2992,7 +3024,507 @@
}];
}
+
/**
+ * @ngdoc object
+ * @name ng.$animationProvider
+ * @description
+ *
+ * The $AnimationProvider provider allows developers to register and access custom JavaScript animations directly inside
+ * of a module.
+ *
+ */
+$AnimationProvider.$inject = ['$provide'];
+function $AnimationProvider($provide) {
+ var suffix = 'Animation';
+
+ /**
+ * @ngdoc function
+ * @name ng.$animation#register
+ * @methodOf ng.$animationProvider
+ *
+ * @description
+ * Registers a new injectable animation factory function. The factory function produces the animation object which
+ * has these two properties:
+ *
+ * * `setup`: `function(Element):*` A function which receives the starting state of the element. The purpose
+ * of this function is to get the element ready for animation. Optionally the function returns an memento which
+ * is passed to the `start` function.
+ * * `start`: `function(Element, doneFunction, *)` The element to animate, the `doneFunction` to be called on
+ * element animation completion, and an optional memento from the `setup` function.
+ *
+ * @param {string} name The name of the animation.
+ * @param {function} factory The factory function that will be executed to return the animation object.
+ *
+ */
+ this.register = function(name, factory) {
+ $provide.factory(camelCase(name) + suffix, factory);
+ };
+
+ this.$get = ['$injector', function($injector) {
+ /**
+ * @ngdoc function
+ * @name ng.$animation
+ * @function
+ *
+ * @description
+ * The $animation service is used to retrieve any defined animation functions. When executed, the $animation service
+ * will return a object that contains the setup and start functions that were defined for the animation.
+ *
+ * @param {String} name Name of the animation function to retrieve. Animation functions are registered and stored
+ * inside of the AngularJS DI so a call to $animate('custom') is the same as injecting `customAnimation`
+ * via dependency injection.
+ * @return {Object} the animation object which contains the `setup` and `start` functions that perform the animation.
+ */
+ return function $animation(name) {
+ if (name) {
+ var animationName = camelCase(name) + suffix;
+ if ($injector.has(animationName)) {
+ return $injector.get(animationName);
+ }
+ }
+ };
+ }];
+}
+
+// NOTE: this is a pseudo directive.
+
+/**
+ * @ngdoc directive
+ * @name ng.directive:ngAnimate
+ *
+ * @description
+ * The `ngAnimate` directive works as an attribute that is attached alongside pre-existing directives.
+ * It effects how the directive will perform DOM manipulation. This allows for complex animations to take place
+ * without burdening the directive which uses the animation with animation details. The built in directives
+ * `ngRepeat`, `ngInclude`, `ngSwitch`, `ngShow`, `ngHide` and `ngView` already accept `ngAnimate` directive.
+ * Custom directives can take advantage of animation through {@link ng.$animator $animator service}.
+ *
+ * Below is a more detailed breakdown of the supported callback events provided by pre-exisitng ng directives:
+ *
+ * | Directive | Supported Animations |
+ * |========================================================== |====================================================|
+ * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move |
+ * | {@link ng.directive:ngView#animations ngView} | enter and leave |
+ * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave |
+ * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave |
+ * | {@link ng.directive:ngIf#animations ngIf} | enter and leave |
+ * | {@link ng.directive:ngShow#animations ngShow & ngHide} | show and hide |
+ *
+ * You can find out more information about animations upon visiting each directive page.
+ *
+ * Below is an example of a directive that makes use of the ngAnimate attribute:
+ *
+ * <pre>
+ * <!-- you can also use data-ng-animate, ng:animate or x-ng-animate as well -->
+ * <ANY ng-directive ng-animate="{event1: 'animation-name', event2: 'animation-name-2'}"></ANY>
+ *
+ * <!-- you can also use a short hand -->
+ * <ANY ng-directive ng-animate=" 'animation' "></ANY>
+ * <!-- which expands to -->
+ * <ANY ng-directive ng-animate="{ enter: 'animation-enter', leave: 'animation-leave', ...}"></ANY>
+ *
+ * <!-- keep in mind that ng-animate can take expressions -->
+ * <ANY ng-directive ng-animate=" computeCurrentAnimation() "></ANY>
+ * </pre>
+ *
+ * The `event1` and `event2` attributes refer to the animation events specific to the directive that has been assigned.
+ *
+ * Keep in mind that if an animation is running, no child element of such animation can also be animated.
+ *
+ * <h2>CSS-defined Animations</h2>
+ * By default, ngAnimate attaches two CSS classes per animation event to the DOM element to achieve the animation.
+ * It is up to you, the developer, to ensure that the animations take place using cross-browser CSS3 transitions as
+ * well as CSS animations.
+ *
+ * The following code below demonstrates how to perform animations using **CSS transitions** with ngAnimate:
+ *
+ * <pre>
+ * <style type="text/css">
+ * /*
+ * The animate-enter CSS class is the event name that you
+ * have provided within the ngAnimate attribute.
+ * */
+ * .animate-enter {
+ * -webkit-transition: 1s linear all; /* Safari/Chrome */
+ * -moz-transition: 1s linear all; /* Firefox */
+ * -o-transition: 1s linear all; /* Opera */
+ * transition: 1s linear all; /* IE10+ and Future Browsers */
+ *
+ * /* The animation preparation code */
+ * opacity: 0;
+ * }
+ *
+ * /*
+ * Keep in mind that you want to combine both CSS
+ * classes together to avoid any CSS-specificity
+ * conflicts
+ * */
+ * .animate-enter.animate-enter-active {
+ * /* The animation code itself */
+ * opacity: 1;
+ * }
+ * </style>
+ *
+ * <div ng-directive ng-animate="{enter: 'animate-enter'}"></div>
+ * </pre>
+ *
+ * The following code below demonstrates how to perform animations using **CSS animations** with ngAnimate:
+ *
+ * <pre>
+ * <style type="text/css">
+ * .animate-enter {
+ * -webkit-animation: enter_sequence 1s linear; /* Safari/Chrome */
+ * -moz-animation: enter_sequence 1s linear; /* Firefox */
+ * -o-animation: enter_sequence 1s linear; /* Opera */
+ * animation: enter_sequence 1s linear; /* IE10+ and Future Browsers */
+ * }
+ * @-webkit-keyframes enter_sequence {
+ * from { opacity:0; }
+ * to { opacity:1; }
+ * }
+ * @-moz-keyframes enter_sequence {
+ * from { opacity:0; }
+ * to { opacity:1; }
+ * }
+ * @-o-keyframes enter_sequence {
+ * from { opacity:0; }
+ * to { opacity:1; }
+ * }
+ * @keyframes enter_sequence {
+ * from { opacity:0; }
+ * to { opacity:1; }
+ * }
+ * </style>
+ *
+ * <div ng-directive ng-animate="{enter: 'animate-enter'}"></div>
+ * </pre>
+ *
+ * ngAnimate will first examine any CSS animation code and then fallback to using CSS transitions.
+ *
+ * Upon DOM mutation, the event class is added first, then the browser is allowed to reflow the content and then,
+ * the active class is added to trigger the animation. The ngAnimate directive will automatically extract the duration
+ * of the animation to determine when the animation ends. Once the animation is over then both CSS classes will be
+ * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end
+ * immediately resulting in a DOM element that is at it's final state. This final state is when the DOM element
+ * has no CSS transition/animation classes surrounding it.
+ *
+ * <h2>JavaScript-defined Animations</h2>
+ * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations to browsers that do not
+ * yet support them, then you can make use of JavaScript animations defined inside of your AngularJS module.
+ *
+ * <pre>
+ * var ngModule = angular.module('YourApp', []);
+ * ngModule.animation('animate-enter', function() {
+ * return {
+ * setup : function(element) {
+ * //prepare the element for animation
+ * element.css({ 'opacity': 0 });
+ * var memo = "..."; //this value is passed to the start function
+ * return memo;
+ * },
+ * start : function(element, done, memo) {
+ * //start the animation
+ * element.animate({
+ * 'opacity' : 1
+ * }, function() {
+ * //call when the animation is complete
+ * done()
+ * });
+ * }
+ * }
+ * });
+ * </pre>
+ *
+ * As you can see, the JavaScript code follows a similar template to the CSS3 animations. Once defined, the animation
+ * can be used in the same way with the ngAnimate attribute. Keep in mind that, when using JavaScript-enabled
+ * animations, ngAnimate will also add in the same CSS classes that CSS-enabled animations do (even if you're not using
+ * CSS animations) to animated the element, but it will not attempt to find any CSS3 transition or animation duration/delay values.
+ * It will instead close off the animation once the provided done function is executed. So it's important that you
+ * make sure your animations remember to fire off the done function once the animations are complete.
+ *
+ * @param {expression} ngAnimate Used to configure the DOM manipulation animations.
+ *
+ */
+
+var $AnimatorProvider = function() {
+ var NG_ANIMATE_CONTROLLER = '$ngAnimateController';
+ var rootAnimateController = {running:true};
+
+ this.$get = ['$animation', '$window', '$sniffer', '$rootElement', '$rootScope',
+ function($animation, $window, $sniffer, $rootElement, $rootScope) {
+ $rootElement.data(NG_ANIMATE_CONTROLLER, rootAnimateController);
+
+ /**
+ * @ngdoc function
+ * @name ng.$animator
+ * @function
+ *
+ * @description
+ * The $animator.create service provides the DOM manipulation API which is decorated with animations.
+ *
+ * @param {Scope} scope the scope for the ng-animate.
+ * @param {Attributes} attr the attributes object which contains the ngAnimate key / value pair. (The attributes are
+ * passed into the linking function of the directive using the `$animator`.)
+ * @return {object} the animator object which contains the enter, leave, move, show, hide and animate methods.
+ */
+ var AnimatorService = function(scope, attrs) {
+ var animator = {};
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#enter
+ * @methodOf ng.$animator
+ * @function
+ *
+ * @description
+ * Injects the element object into the DOM (inside of the parent element) and then runs the enter animation.
+ *
+ * @param {jQuery/jqLite element} element the element that will be the focus of the enter animation
+ * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the enter animation
+ * @param {jQuery/jqLite element} after the sibling element (which is the previous element) of the element that will be the focus of the enter animation
+ */
+ animator.enter = animateActionFactory('enter', insert, noop);
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#leave
+ * @methodOf ng.$animator
+ * @function
+ *
+ * @description
+ * Runs the leave animation operation and, upon completion, removes the element from the DOM.
+ *
+ * @param {jQuery/jqLite element} element the element that will be the focus of the leave animation
+ * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the leave animation
+ */
+ animator.leave = animateActionFactory('leave', noop, remove);
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#move
+ * @methodOf ng.$animator
+ * @function
+ *
+ * @description
+ * Fires the move DOM operation. Just before the animation starts, the animator will either append it into the parent container or
+ * add the element directly after the after element if present. Then the move animation will be run.
+ *
+ * @param {jQuery/jqLite element} element the element that will be the focus of the move animation
+ * @param {jQuery/jqLite element} parent the parent element of the element that will be the focus of the move animation
+ * @param {jQuery/jqLite element} after the sibling element (which is the previous element) of the element that will be the focus of the move animation
+ */
+ animator.move = animateActionFactory('move', move, noop);
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#show
+ * @methodOf ng.$animator
+ * @function
+ *
+ * @description
+ * Reveals the element by setting the CSS property `display` to `block` and then starts the show animation directly after.
+ *
+ * @param {jQuery/jqLite element} element the element that will be rendered visible or hidden
+ */
+ animator.show = animateActionFactory('show', show, noop);
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#hide
+ * @methodOf ng.$animator
+ *
+ * @description
+ * Starts the hide animation first and sets the CSS `display` property to `none` upon completion.
+ *
+ * @param {jQuery/jqLite element} element the element that will be rendered visible or hidden
+ */
+ animator.hide = animateActionFactory('hide', noop, hide);
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#animate
+ * @methodOf ng.$animator
+ *
+ * @description
+ * Triggers a custom animation event to be executed on the given element
+ *
+ * @param {jQuery/jqLite element} element that will be animated
+ */
+ animator.animate = function(event, element) {
+ animateActionFactory(event, noop, noop)(element);
+ }
+ return animator;
+
+ function animateActionFactory(type, beforeFn, afterFn) {
+ return function(element, parent, after) {
+ var ngAnimateValue = scope.$eval(attrs.ngAnimate);
+ var className = ngAnimateValue
+ ? isObject(ngAnimateValue) ? ngAnimateValue[type] : ngAnimateValue + '-' + type
+ : '';
+ var animationPolyfill = $animation(className);
+ var polyfillSetup = animationPolyfill && animationPolyfill.setup;
+ var polyfillStart = animationPolyfill && animationPolyfill.start;
+ var polyfillCancel = animationPolyfill && animationPolyfill.cancel;
+
+ if (!className) {
+ beforeFn(element, parent, after);
+ afterFn(element, parent, after);
+ } else {
+ var activeClassName = className + '-active';
+
+ if (!parent) {
+ parent = after ? after.parent() : element.parent();
+ }
+ if ((!$sniffer.transitions && !polyfillSetup && !polyfillStart) ||
+ (parent.inheritedData(NG_ANIMATE_CONTROLLER) || noop).running) {
+ beforeFn(element, parent, after);
+ afterFn(element, parent, after);
+ return;
+ }
+
+ var animationData = element.data(NG_ANIMATE_CONTROLLER) || {};
+ if(animationData.running) {
+ (polyfillCancel || noop)(element);
+ animationData.done();
+ }
+
+ element.data(NG_ANIMATE_CONTROLLER, {running:true, done:done});
+ element.addClass(className);
+ beforeFn(element, parent, after);
+ if (element.length == 0) return done();
+
+ var memento = (polyfillSetup || noop)(element);
+
+ // $window.setTimeout(beginAnimation, 0); this was causing the element not to animate
+ // keep at 1 for animation dom rerender
+ $window.setTimeout(beginAnimation, 1);
+ }
+
+ function parseMaxTime(str) {
+ var total = 0, values = isString(str) ? str.split(/\s*,\s*/) : [];
+ forEach(values, function(value) {
+ total = Math.max(parseFloat(value) || 0, total);
+ });
+ return total;
+ }
+
+ function beginAnimation() {
+ element.addClass(activeClassName);
+ if (polyfillStart) {
+ polyfillStart(element, done, memento);
+ } else if (isFunction($window.getComputedStyle)) {
+ //one day all browsers will have these properties
+ var w3cAnimationProp = 'animation';
+ var w3cTransitionProp = 'transition';
+
+ //but some still use vendor-prefixed styles
+ var vendorAnimationProp = $sniffer.vendorPrefix + 'Animation';
+ var vendorTransitionProp = $sniffer.vendorPrefix + 'Transition';
+
+ var durationKey = 'Duration',
+ delayKey = 'Delay',
+ animationIterationCountKey = 'IterationCount',
+ duration = 0;
+
+ //we want all the styles defined before and after
+ var ELEMENT_NODE = 1;
+ forEach(element, function(element) {
+ if (element.nodeType == ELEMENT_NODE) {
+ var w3cProp = w3cTransitionProp,
+ vendorProp = vendorTransitionProp,
+ iterations = 1,
+ elementStyles = $window.getComputedStyle(element) || {};
+
+ //use CSS Animations over CSS Transitions
+ if(parseFloat(elementStyles[w3cAnimationProp + durationKey]) > 0 ||
+ parseFloat(elementStyles[vendorAnimationProp + durationKey]) > 0) {
+ w3cProp = w3cAnimationProp;
+ vendorProp = vendorAnimationProp;
+ iterations = Math.max(parseInt(elementStyles[w3cProp + animationIterationCountKey]) || 0,
+ parseInt(elementStyles[vendorProp + animationIterationCountKey]) || 0,
+ iterations);
+ }
+
+ var parsedDelay = Math.max(parseMaxTime(elementStyles[w3cProp + delayKey]),
+ parseMaxTime(elementStyles[vendorProp + delayKey]));
+
+ var parsedDuration = Math.max(parseMaxTime(elementStyles[w3cProp + durationKey]),
+ parseMaxTime(elementStyles[vendorProp + durationKey]));
+
+ duration = Math.max(parsedDelay + (iterations * parsedDuration), duration);
+ }
+ });
+ $window.setTimeout(done, duration * 1000);
+ } else {
+ done();
+ }
+ }
+
+ function done() {
+ if(!done.run) {
+ done.run = true;
+ afterFn(element, parent, after);
+ element.removeClass(className);
+ element.removeClass(activeClassName);
+ element.removeData(NG_ANIMATE_CONTROLLER);
+ }
+ }
+ };
+ }
+
+ function show(element) {
+ element.css('display', '');
+ }
+
+ function hide(element) {
+ element.css('display', 'none');
+ }
+
+ function insert(element, parent, after) {
+ if (after) {
+ after.after(element);
+ } else {
+ parent.append(element);
+ }
+ }
+
+ function remove(element) {
+ element.remove();
+ }
+
+ function move(element, parent, after) {
+ // Do not remove element before insert. Removing will cause data associated with the
+ // element to be dropped. Insert will implicitly do the remove.
+ insert(element, parent, after);
+ }
+ };
+
+ /**
+ * @ngdoc function
+ * @name ng.animator#enabled
+ * @methodOf ng.$animator
+ * @function
+ *
+ * @param {Boolean=} If provided then set the animation on or off.
+ * @return {Boolean} Current animation state.
+ *
+ * @description
+ * Globally enables/disables animations.
+ *
+ */
+ AnimatorService.enabled = function(value) {
+ if (arguments.length) {
+ rootAnimateController.running = !value;
+ }
+ return !rootAnimateController.running;
+ };
+
+ return AnimatorService;
+ }];
+};
+
+/**
* ! This is a private undocumented service !
*
* @name ng.$browser
@@ -3244,7 +3776,7 @@
* @methodOf ng.$browser
*
* @param {string=} name Cookie name
- * @param {string=} value Cokkie value
+ * @param {string=} value Cookie value
*
* @description
* The cookies method provides a 'private' low level access to browser cookies.
@@ -3312,7 +3844,7 @@
* @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
*
* @description
- * Executes a fn asynchroniously via `setTimeout(fn, delay)`.
+ * Executes a fn asynchronously via `setTimeout(fn, delay)`.
*
* Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
* `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
@@ -3339,7 +3871,7 @@
* Cancels a defered task identified with `deferId`.
*
* @param {*} deferId Token returned by the `$browser.defer` function.
- * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfuly canceled.
+ * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully canceled.
*/
self.defer.cancel = function(deferId) {
if (pendingDeferIds[deferId]) {
@@ -3376,7 +3908,7 @@
* @returns {object} Newly created cache object with the following set of methods:
*
* - `{object}` `info()` — Returns id, size, and options of cache.
- * - `{void}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache.
+ * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns it.
* - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
* - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
* - `{void}` `removeAll()` — Removes all cached values.
@@ -3415,6 +3947,8 @@
if (size > capacity) {
this.remove(staleEnd.key);
}
+
+ return value;
},
@@ -3701,7 +4235,7 @@
*
* @param {string} name Name of the directive in camel-case. (ie <code>ngBind</code> which will match as
* <code>ng-bind</code>).
- * @param {function} directiveFactory An injectable directive factroy function. See {@link guide/directive} for more
+ * @param {function} directiveFactory An injectable directive factory function. See {@link guide/directive} for more
* info.
* @returns {ng.$compileProvider} Self for chaining.
*/
@@ -3880,7 +4414,8 @@
? identity
: function denormalizeTemplate(template) {
return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
- };
+ },
+ NG_ATTR_BINDING = /^ngAttr[A-Z]/;
return compile;
@@ -4045,11 +4580,16 @@
directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority);
// iterate over the attributes
- for (var attr, name, nName, value, nAttrs = node.attributes,
+ for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes,
j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
attr = nAttrs[j];
if (attr.specified) {
name = attr.name;
+ // support ngAttr attribute binding
+ ngAttrName = directiveNormalize(name);
+ if (NG_ATTR_BINDING.test(ngAttrName)) {
+ name = ngAttrName.substr(6).toLowerCase();
+ }
nName = directiveNormalize(name.toLowerCase());
attrsMap[nName] = name;
attrs[nName] = value = trim((msie && name == 'href')
@@ -4177,9 +4717,14 @@
}
}
- if ((directiveValue = directive.template)) {
+ if (directive.template) {
assertNoDuplicate('template', templateDirective, directive, $compileNode);
templateDirective = directive;
+
+ directiveValue = (isFunction(directive.template))
+ ? directive.template($compileNode, templateAttrs)
+ : directive.template;
+
directiveValue = denormalizeTemplate(directiveValue);
if (directive.replace) {
@@ -4299,13 +4844,14 @@
$element = attrs.$$element;
if (newIsolateScopeDirective) {
- var LOCAL_REGEXP = /^\s*([@=&])\s*(\w*)\s*$/;
+ var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
var parentScope = scope.$parent || scope;
forEach(newIsolateScopeDirective.scope, function(definiton, scopeName) {
var match = definiton.match(LOCAL_REGEXP) || [],
- attrName = match[2]|| scopeName,
+ attrName = match[3] || scopeName,
+ optional = (match[2] == '?'),
mode = match[1], // @, =, or &
lastValue,
parentGet, parentSet;
@@ -4319,10 +4865,17 @@
scope[scopeName] = value;
});
attrs.$$observers[attrName].$$scope = parentScope;
+ if( attrs[attrName] ) {
+ // If the attribute has been provided then we trigger an interpolation to ensure the value is there for use in the link fn
+ scope[scopeName] = $interpolate(attrs[attrName])(parentScope);
+ }
break;
}
case '=': {
+ if (optional && !attrs[attrName]) {
+ return;
+ }
parentGet = $parse(attrs[attrName]);
parentSet = parentGet.assign || function() {
// reset the change, or we will throw this exception on every $digest
@@ -4494,11 +5047,14 @@
// The fact that we have to copy and patch the directive seems wrong!
derivedSyncDirective = extend({}, origAsyncDirective, {
controller: null, templateUrl: null, transclude: null, scope: null
- });
+ }),
+ templateUrl = (isFunction(origAsyncDirective.templateUrl))
+ ? origAsyncDirective.templateUrl($compileNode, tAttrs)
+ : origAsyncDirective.templateUrl;
$compileNode.html('');
- $http.get(origAsyncDirective.templateUrl, {cache: $templateCache}).
+ $http.get(templateUrl, {cache: $templateCache}).
success(function(content) {
var compileNode, tempTemplateAttrs, $template;
@@ -4527,10 +5083,10 @@
while(linkQueue.length) {
- var controller = linkQueue.pop(),
- linkRootElement = linkQueue.pop(),
- beforeTemplateLinkNode = linkQueue.pop(),
- scope = linkQueue.pop(),
+ var scope = linkQueue.shift(),
+ beforeTemplateLinkNode = linkQueue.shift(),
+ linkRootElement = linkQueue.shift(),
+ controller = linkQueue.shift(),
linkNode = compileNode;
if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
@@ -4611,13 +5167,15 @@
compile: valueFn(function attrInterpolateLinkFn(scope, element, attr) {
var $$observers = (attr.$$observers || (attr.$$observers = {}));
- if (name === 'class') {
- // we need to interpolate classes again, in the case the element was replaced
- // and therefore the two class attrs got merged - we want to interpolate the result
- interpolateFn = $interpolate(attr[name], true);
- }
+ // we need to interpolate again, in case the attribute value has been updated
+ // (e.g. by another directive's compile function)
+ interpolateFn = $interpolate(attr[name], true);
- attr[name] = undefined;
+ // if attribute was updated so that there is no interpolation going on we don't want to
+ // register any observers
+ if (!interpolateFn) return;
+
+ attr[name] = interpolateFn(scope);
($$observers[name] || ($$observers[name] = [])).$$inter = true;
(attr.$$observers && attr.$$observers[name].$$scope || scope).
$watch(interpolateFn, function interpolateFnWatchAction(value) {
@@ -4712,7 +5270,7 @@
* @param {string} name Normalized element attribute name of the property to modify. The name is
* revers translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
* property to the original name.
- * @param {string} value Value to set the attribute to.
+ * @param {string} value Value to set the attribute to. The value can be an interpolated string.
*/
@@ -4747,7 +5305,8 @@
* {@link ng.$controllerProvider#register register} method.
*/
function $ControllerProvider() {
- var controllers = {};
+ var controllers = {},
+ CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
/**
@@ -4792,17 +5351,32 @@
* a service, so that one can override this service with {@link https://gist.github.com/1649788
* BC version}.
*/
- return function(constructor, locals) {
- if(isString(constructor)) {
- var name = constructor;
- constructor = controllers.hasOwnProperty(name)
- ? controllers[name]
- : getter(locals.$scope, name, true) || getter($window, name, true);
+ return function(expression, locals) {
+ var instance, match, constructor, identifier;
- assertArgFn(constructor, name, true);
+ if(isString(expression)) {
+ match = expression.match(CNTRL_REG),
+ constructor = match[1],
+ identifier = match[3];
+ expression = controllers.hasOwnProperty(constructor)
+ ? controllers[constructor]
+ : getter(locals.$scope, constructor, true) || getter($window, constructor, true);
+
+ assertArgFn(expression, constructor, true);
}
- return $injector.instantiate(constructor, locals);
+ instance = $injector.instantiate(expression, locals);
+
+ if (identifier) {
+ if (typeof locals.$scope !== 'object') {
+ throw new Error('Can not export controller as "' + identifier + '". ' +
+ 'No scope object provided!');
+ }
+
+ locals.$scope[identifier] = instance;
+ }
+
+ return instance;
};
}];
}
@@ -4900,7 +5474,7 @@
};
- this.$get = ['$parse', function($parse) {
+ this.$get = ['$parse', '$exceptionHandler', function($parse, $exceptionHandler) {
var startSymbolLength = startSymbol.length,
endSymbolLength = endSymbol.length;
@@ -4972,18 +5546,24 @@
if (!mustHaveExpression || hasInterpolation) {
concat.length = length;
fn = function(context) {
- for(var i = 0, ii = length, part; i<ii; i++) {
- if (typeof (part = parts[i]) == 'function') {
- part = part(context);
- if (part == null || part == undefined) {
- part = '';
- } else if (typeof part != 'string') {
- part = toJson(part);
+ try {
+ for(var i = 0, ii = length, part; i<ii; i++) {
+ if (typeof (part = parts[i]) == 'function') {
+ part = part(context);
+ if (part == null || part == undefined) {
+ part = '';
+ } else if (typeof part != 'string') {
+ part = toJson(part);
+ }
}
+ concat[i] = part;
}
- concat[i] = part;
+ return concat.join('');
}
- return concat.join('');
+ catch(err) {
+ var newErr = new Error('Error while interpolating: ' + text + '\n' + err.toString());
+ $exceptionHandler(newErr);
+ }
};
fn.exp = text;
fn.parts = parts;
@@ -5029,9 +5609,8 @@
}];
}
-var URL_MATCH = /^([^:]+):\/\/(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,
- PATH_MATCH = /^([^\?#]*)?(\?([^#]*))?(#(.*))?$/,
- HASH_MATCH = PATH_MATCH,
+var SERVER_MATCH = /^([^:]+):\/\/(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,
+ PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
@@ -5052,30 +5631,23 @@
return segments.join('/');
}
-function stripHash(url) {
- return url.split('#')[0];
+function matchUrl(url, obj) {
+ var match = SERVER_MATCH.exec(url);
+
+ obj.$$protocol = match[1];
+ obj.$$host = match[3];
+ obj.$$port = int(match[5]) || DEFAULT_PORTS[match[1]] || null;
}
+function matchAppUrl(url, obj) {
+ var match = PATH_MATCH.exec(url);
-function matchUrl(url, obj) {
- var match = URL_MATCH.exec(url);
+ obj.$$path = decodeURIComponent(match[1]);
+ obj.$$search = parseKeyValue(match[3]);
+ obj.$$hash = decodeURIComponent(match[5] || '');
- match = {
- protocol: match[1],
- host: match[3],
- port: int(match[5]) || DEFAULT_PORTS[match[1]] || null,
- path: match[6] || '/',
- search: match[8],
- hash: match[10]
- };
-
- if (obj) {
- obj.$$protocol = match.protocol;
- obj.$$host = match.host;
- obj.$$port = match.port;
- }
-
- return match;
+ // make sure path starts with '/';
+ if (obj.$$path && obj.$$path.charAt(0) != '/') obj.$$path = '/' + obj.$$path;
}
@@ -5083,78 +5655,63 @@
return protocol + '://' + host + (port == DEFAULT_PORTS[protocol] ? '' : ':' + port);
}
-
-function pathPrefixFromBase(basePath) {
- return basePath.substr(0, basePath.lastIndexOf('/'));
+/**
+ *
+ * @param {string} begin
+ * @param {string} whole
+ * @param {string} otherwise
+ * @returns {string} returns text from whole after begin or otherwise if it does not begin with expected string.
+ */
+function beginsWith(begin, whole, otherwise) {
+ return whole.indexOf(begin) == 0 ? whole.substr(begin.length) : otherwise;
}
-function convertToHtml5Url(url, basePath, hashPrefix) {
- var match = matchUrl(url);
-
- // already html5 url
- if (decodeURIComponent(match.path) != basePath || isUndefined(match.hash) ||
- match.hash.indexOf(hashPrefix) !== 0) {
- return url;
- // convert hashbang url -> html5 url
- } else {
- return composeProtocolHostPort(match.protocol, match.host, match.port) +
- pathPrefixFromBase(basePath) + match.hash.substr(hashPrefix.length);
- }
+function stripHash(url) {
+ var index = url.indexOf('#');
+ return index == -1 ? url : url.substr(0, index);
}
-function convertToHashbangUrl(url, basePath, hashPrefix) {
- var match = matchUrl(url);
+function stripFile(url) {
+ return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
+}
- // already hashbang url
- if (decodeURIComponent(match.path) == basePath && !isUndefined(match.hash) &&
- match.hash.indexOf(hashPrefix) === 0) {
- return url;
- // convert html5 url -> hashbang url
- } else {
- var search = match.search && '?' + match.search || '',
- hash = match.hash && '#' + match.hash || '',
- pathPrefix = pathPrefixFromBase(basePath),
- path = match.path.substr(pathPrefix.length);
-
- if (match.path.indexOf(pathPrefix) !== 0) {
- throw Error('Invalid url "' + url + '", missing path prefix "' + pathPrefix + '" !');
- }
-
- return composeProtocolHostPort(match.protocol, match.host, match.port) + basePath +
- '#' + hashPrefix + path + search + hash;
- }
+/* return the server only */
+function serverBase(url) {
+ return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
}
/**
- * LocationUrl represents an url
+ * LocationHtml5Url represents an url
* This object is exposed as $location service when HTML5 mode is enabled and supported
*
* @constructor
- * @param {string} url HTML5 url
- * @param {string} pathPrefix
+ * @param {string} appBase application base URL
+ * @param {string} basePrefix url path prefix
*/
-function LocationUrl(url, pathPrefix, appBaseUrl) {
- pathPrefix = pathPrefix || '';
-
+function LocationHtml5Url(appBase, basePrefix) {
+ basePrefix = basePrefix || '';
+ var appBaseNoFile = stripFile(appBase);
/**
* Parse given html5 (regular) url string into properties
* @param {string} newAbsoluteUrl HTML5 url
* @private
*/
- this.$$parse = function(newAbsoluteUrl) {
- var match = matchUrl(newAbsoluteUrl, this);
-
- if (match.path.indexOf(pathPrefix) !== 0) {
- throw Error('Invalid url "' + newAbsoluteUrl + '", missing path prefix "' + pathPrefix + '" !');
+ this.$$parse = function(url) {
+ var parsed = {}
+ matchUrl(url, parsed);
+ var pathUrl = beginsWith(appBaseNoFile, url);
+ if (!isString(pathUrl)) {
+ throw Error('Invalid url "' + url + '", missing path prefix "' + appBaseNoFile + '".');
}
+ matchAppUrl(pathUrl, parsed);
+ extend(this, parsed);
+ if (!this.$$path) {
+ this.$$path = '/';
+ }
- this.$$path = decodeURIComponent(match.path.substr(pathPrefix.length));
- this.$$search = parseKeyValue(match.search);
- this.$$hash = match.hash && decodeURIComponent(match.hash) || '';
-
this.$$compose();
};
@@ -5167,19 +5724,25 @@
hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
- this.$$absUrl = composeProtocolHostPort(this.$$protocol, this.$$host, this.$$port) +
- pathPrefix + this.$$url;
+ this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
};
+ this.$$rewrite = function(url) {
+ var appUrl, prevAppUrl;
- this.$$rewriteAppUrl = function(absoluteLinkUrl) {
- if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) {
- return absoluteLinkUrl;
+ if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {
+ prevAppUrl = appUrl;
+ if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {
+ return appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
+ } else {
+ return appBase + prevAppUrl;
+ }
+ } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {
+ return appBaseNoFile + appUrl;
+ } else if (appBaseNoFile == url + '/') {
+ return appBaseNoFile;
}
}
-
-
- this.$$parse(url);
}
@@ -5188,11 +5751,11 @@
* This object is exposed as $location service when html5 history api is disabled or not supported
*
* @constructor
- * @param {string} url Legacy url
- * @param {string} hashPrefix Prefix for hash part (containing path and search)
+ * @param {string} appBase application base URL
+ * @param {string} hashPrefix hashbang prefix
*/
-function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
- var basePath;
+function LocationHashbangUrl(appBase, hashPrefix) {
+ var appBaseNoFile = stripFile(appBase);
/**
* Parse given hashbang url into properties
@@ -5200,24 +5763,16 @@
* @private
*/
this.$$parse = function(url) {
- var match = matchUrl(url, this);
-
-
- if (match.hash && match.hash.indexOf(hashPrefix) !== 0) {
- throw Error('Invalid url "' + url + '", missing hash prefix "' + hashPrefix + '" !');
+ matchUrl(url, this);
+ var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
+ if (!isString(withoutBaseUrl)) {
+ throw new Error('Invalid url "' + url + '", does not start with "' + appBase + '".');
}
-
- basePath = match.path + (match.search ? '?' + match.search : '');
- match = HASH_MATCH.exec((match.hash || '').substr(hashPrefix.length));
- if (match[1]) {
- this.$$path = (match[1].charAt(0) == '/' ? '' : '/') + decodeURIComponent(match[1]);
- } else {
- this.$$path = '';
+ var withoutHashUrl = withoutBaseUrl.charAt(0) == '#' ? beginsWith(hashPrefix, withoutBaseUrl) : withoutBaseUrl;
+ if (!isString(withoutHashUrl)) {
+ throw new Error('Invalid url "' + url + '", missing hash prefix "' + hashPrefix + '".');
}
-
- this.$$search = parseKeyValue(match[3]);
- this.$$hash = match[5] && decodeURIComponent(match[5]) || '';
-
+ matchAppUrl(withoutHashUrl, this);
this.$$compose();
};
@@ -5230,22 +5785,48 @@
hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
- this.$$absUrl = composeProtocolHostPort(this.$$protocol, this.$$host, this.$$port) +
- basePath + (this.$$url ? '#' + hashPrefix + this.$$url : '');
+ this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
};
- this.$$rewriteAppUrl = function(absoluteLinkUrl) {
- if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) {
- return absoluteLinkUrl;
+ this.$$rewrite = function(url) {
+ if(stripHash(appBase) == stripHash(url)) {
+ return url;
}
}
+}
- this.$$parse(url);
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when html5 history api is enabled but the browser
+ * does not support it.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangInHtml5Url(appBase, hashPrefix) {
+ LocationHashbangUrl.apply(this, arguments);
+
+ var appBaseNoFile = stripFile(appBase);
+
+ this.$$rewrite = function(url) {
+ var appUrl;
+
+ if ( appBase == stripHash(url) ) {
+ return url;
+ } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) {
+ return appBase + hashPrefix + appUrl;
+ } else if ( appBaseNoFile === url + '/') {
+ return appBaseNoFile;
+ }
+ }
}
-LocationUrl.prototype = {
+LocationHashbangInHtml5Url.prototype =
+ LocationHashbangUrl.prototype =
+ LocationHtml5Url.prototype = {
/**
* Has any change been replacing ?
@@ -5427,21 +6008,6 @@
}
};
-LocationHashbangUrl.prototype = inherit(LocationUrl.prototype);
-
-function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExtra) {
- LocationHashbangUrl.apply(this, arguments);
-
-
- this.$$rewriteAppUrl = function(absoluteLinkUrl) {
- if (absoluteLinkUrl.indexOf(appBaseUrl) == 0) {
- return appBaseUrl + baseExtra + '#' + hashPrefix + absoluteLinkUrl.substr(appBaseUrl.length);
- }
- }
-}
-
-LocationHashbangInHtml5Url.prototype = inherit(LocationHashbangUrl.prototype);
-
function locationGetter(property) {
return function() {
return this[property];
@@ -5538,37 +6104,20 @@
this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',
function( $rootScope, $browser, $sniffer, $rootElement) {
var $location,
- basePath,
- pathPrefix,
- initUrl = $browser.url(),
- initUrlParts = matchUrl(initUrl),
- appBaseUrl;
+ LocationMode,
+ baseHref = $browser.baseHref(),
+ initialUrl = $browser.url(),
+ appBase;
if (html5Mode) {
- basePath = $browser.baseHref() || '/';
- pathPrefix = pathPrefixFromBase(basePath);
- appBaseUrl =
- composeProtocolHostPort(initUrlParts.protocol, initUrlParts.host, initUrlParts.port) +
- pathPrefix + '/';
-
- if ($sniffer.history) {
- $location = new LocationUrl(
- convertToHtml5Url(initUrl, basePath, hashPrefix),
- pathPrefix, appBaseUrl);
- } else {
- $location = new LocationHashbangInHtml5Url(
- convertToHashbangUrl(initUrl, basePath, hashPrefix),
- hashPrefix, appBaseUrl, basePath.substr(pathPrefix.length + 1));
- }
+ appBase = baseHref ? serverBase(initialUrl) + baseHref : initialUrl;
+ LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
} else {
- appBaseUrl =
- composeProtocolHostPort(initUrlParts.protocol, initUrlParts.host, initUrlParts.port) +
- (initUrlParts.path || '') +
- (initUrlParts.search ? ('?' + initUrlParts.search) : '') +
- '#' + hashPrefix + '/';
-
- $location = new LocationHashbangUrl(initUrl, hashPrefix, appBaseUrl);
+ appBase = stripHash(initialUrl);
+ LocationMode = LocationHashbangUrl;
}
+ $location = new LocationMode(appBase, '#' + hashPrefix);
+ $location.$$parse($location.$$rewrite(initialUrl));
$rootElement.bind('click', function(event) {
// TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
@@ -5584,22 +6133,24 @@
if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
}
- var absHref = elm.prop('href'),
- rewrittenUrl = $location.$$rewriteAppUrl(absHref);
+ var absHref = elm.prop('href');
+ var rewrittenUrl = $location.$$rewrite(absHref);
- if (absHref && !elm.attr('target') && rewrittenUrl) {
- // update location manually
- $location.$$parse(rewrittenUrl);
- $rootScope.$apply();
+ if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) {
event.preventDefault();
- // hack to work around FF6 bug 684208 when scenario runner clicks on links
- window.angular['ff-684208-preventDefault'] = true;
+ if (rewrittenUrl != $browser.url()) {
+ // update location manually
+ $location.$$parse(rewrittenUrl);
+ $rootScope.$apply();
+ // hack to work around FF6 bug 684208 when scenario runner clicks on links
+ window.angular['ff-684208-preventDefault'] = true;
+ }
}
});
// rewrite hashbang url <> html5 url
- if ($location.absUrl() != initUrl) {
+ if ($location.absUrl() != initialUrl) {
$browser.url($location.absUrl(), true);
}
@@ -5684,7 +6235,33 @@
</example>
*/
+/**
+ * @ngdoc object
+ * @name ng.$logProvider
+ * @description
+ * Use the `$logProvider` to configure how the application logs messages
+ */
function $LogProvider(){
+ var debug = true,
+ self = this;
+
+ /**
+ * @ngdoc property
+ * @name ng.$logProvider#debugEnabled
+ * @methodOf ng.$logProvider
+ * @description
+ * @param {string=} flag enable or disable debug level messages
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
+ */
+ this.debugEnabled = function(flag) {
+ if (isDefined(flag)) {
+ debug = flag;
+ return this;
+ } else {
+ return debug;
+ }
+ };
+
this.$get = ['$window', function($window){
return {
/**
@@ -5725,7 +6302,25 @@
* @description
* Write an error message
*/
- error: consoleLog('error')
+ error: consoleLog('error'),
+
+ /**
+ * @ngdoc method
+ * @name ng.$log#debug
+ * @methodOf ng.$log
+ *
+ * @description
+ * Write a debug message
+ */
+ debug: (function () {
+ var fn = consoleLog('debug');
+
+ return function() {
+ if (debug) {
+ fn.apply(self, arguments);
+ }
+ }
+ }())
};
function formatError(arg) {
@@ -5784,6 +6379,8 @@
'%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},
'^':function(self, locals, a,b){return a(self, locals)^b(self, locals);},
'=':noop,
+ '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},
+ '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},
'==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},
'!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},
'<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},
@@ -5820,7 +6417,7 @@
(token=tokens[tokens.length-1])) {
token.json = token.text.indexOf('.') == -1;
}
- } else if (is('(){}[].,;:')) {
+ } else if (is('(){}[].,;:?')) {
tokens.push({
index:index,
text:ch,
@@ -5834,9 +6431,14 @@
continue;
} else {
var ch2 = ch + peek(),
+ ch3 = ch2 + peek(2),
fn = OPERATORS[ch],
- fn2 = OPERATORS[ch2];
- if (fn2) {
+ fn2 = OPERATORS[ch2],
+ fn3 = OPERATORS[ch3];
+ if (fn3) {
+ tokens.push({index:index, text:ch3, fn:fn3});
+ index += 3;
+ } else if (fn2) {
tokens.push({index:index, text:ch2, fn:fn2});
index += 2;
} else if (fn) {
@@ -5858,8 +6460,9 @@
return chars.indexOf(lastCh) != -1;
}
- function peek() {
- return index + 1 < text.length ? text.charAt(index + 1) : false;
+ function peek(i) {
+ var num = i || 1;
+ return index + num < text.length ? text.charAt(index + num) : false;
}
function isNumber(ch) {
return '0' <= ch && ch <= '9';
@@ -6059,6 +6662,8 @@
if (tokens.length !== 0) {
throwError("is an unexpected token", tokens[0]);
}
+ value.literal = !!value.literal;
+ value.constant = !!value.constant;
return value;
///////////////////////////////////
@@ -6106,15 +6711,27 @@
}
function unaryFn(fn, right) {
- return function(self, locals) {
+ return extend(function(self, locals) {
return fn(self, locals, right);
- };
+ }, {
+ constant:right.constant
+ });
}
+ function ternaryFn(left, middle, right){
+ return extend(function(self, locals){
+ return left(self, locals) ? middle(self, locals) : right(self, locals);
+ }, {
+ constant: left.constant && middle.constant && right.constant
+ });
+ }
+
function binaryFn(left, fn, right) {
- return function(self, locals) {
+ return extend(function(self, locals) {
return fn(self, locals, left, right);
- };
+ }, {
+ constant:left.constant && right.constant
+ });
}
function statements() {
@@ -6179,7 +6796,7 @@
}
function _assignment() {
- var left = logicalOR();
+ var left = ternary();
var right;
var token;
if ((token = expect('='))) {
@@ -6187,7 +6804,7 @@
throwError("implies assignment but [" +
text.substring(0, token.index) + "] can not be assigned to", token);
}
- right = logicalOR();
+ right = ternary();
return function(scope, locals){
return left.assign(scope, right(scope, locals), locals);
};
@@ -6196,6 +6813,24 @@
}
}
+ function ternary() {
+ var left = logicalOR();
+ var middle;
+ var token;
+ if((token = expect('?'))){
+ middle = ternary();
+ if((token = expect(':'))){
+ return ternaryFn(left, middle, ternary());
+ }
+ else {
+ throwError('expected :', token);
+ }
+ }
+ else {
+ return left;
+ }
+ }
+
function logicalOR() {
var left = logicalAND();
var token;
@@ -6220,7 +6855,7 @@
function equality() {
var left = relational();
var token;
- if ((token = expect('==','!='))) {
+ if ((token = expect('==','!=','===','!=='))) {
left = binaryFn(left, token.fn, equality());
}
return left;
@@ -6282,6 +6917,9 @@
if (!primary) {
throwError("not a primary expression", token);
}
+ if (token.json) {
+ primary.constant = primary.literal = true;
+ }
}
var next, context;
@@ -6370,23 +7008,32 @@
// This is used with json array declaration
function arrayDeclaration () {
var elementFns = [];
+ var allConstant = true;
if (peekToken().text != ']') {
do {
- elementFns.push(expression());
+ var elementFn = expression();
+ elementFns.push(elementFn);
+ if (!elementFn.constant) {
+ allConstant = false;
+ }
} while (expect(','));
}
consume(']');
- return function(self, locals){
+ return extend(function(self, locals){
var array = [];
for ( var i = 0; i < elementFns.length; i++) {
array.push(elementFns[i](self, locals));
}
return array;
- };
+ }, {
+ literal:true,
+ constant:allConstant
+ });
}
function object () {
var keyValues = [];
+ var allConstant = true;
if (peekToken().text != '}') {
do {
var token = expect(),
@@ -6394,17 +7041,23 @@
consume(":");
var value = expression();
keyValues.push({key:key, value:value});
+ if (!value.constant) {
+ allConstant = false;
+ }
} while (expect(','));
}
consume('}');
- return function(self, locals){
+ return extend(function(self, locals){
var object = {};
for ( var i = 0; i < keyValues.length; i++) {
var keyValue = keyValues[i];
object[keyValue.key] = keyValue.value(self, locals);
}
return object;
- };
+ }, {
+ literal:true,
+ constant:allConstant
+ });
}
}
@@ -6428,11 +7081,11 @@
}
/**
- * Return the value accesible from the object by path. Any undefined traversals are ignored
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
* @param {Object} obj starting object
* @param {string} path path to traverse
* @param {boolean=true} bindFnToScope
- * @returns value as accesbile by path
+ * @returns value as accessible by path
*/
//TODO(misko): this function needs to be removed
function getter(obj, path, bindFnToScope) {
@@ -6604,12 +7257,17 @@
* @returns {function(context, locals)} a function which represents the compiled expression:
*
* * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (tipically a scope object).
+ * are evaluated against (typically a scope object).
* * `locals` – `{object=}` – local variables context object, useful for overriding values in
* `context`.
*
- * The return function also has an `assign` property, if the expression is assignable, which
- * allows one to set values to expressions.
+ * The returned function also has the following properties:
+ * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
+ * literal.
+ * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
+ * constant literals.
+ * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
+ * set to a function to change its value on the given context.
*
*/
function $ParseProvider() {
@@ -6721,6 +7379,11 @@
* This method *returns a new promise* which is resolved or rejected via the return value of the
* `successCallback` or `errorCallback`.
*
+ * - `always(callback)` – allows you to observe either the fulfillment or rejection of a promise,
+ * but to do so without modifying the final value. This is useful to release resources or do some
+ * clean-up that needs to be done whether the promise was rejected or resolved. See the [full
+ * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefin… for
+ * more information.
*
* # Chaining promises
*
@@ -6866,6 +7529,42 @@
}
return result.promise;
+ },
+ always: function(callback) {
+
+ function makePromise(value, resolved) {
+ var result = defer();
+ if (resolved) {
+ result.resolve(value);
+ } else {
+ result.reject(value);
+ }
+ return result.promise;
+ }
+
+ function handleCallback(value, isResolved) {
+ var callbackOutput = null;
+ try {
+ callbackOutput = (callback ||defaultCallback)();
+ } catch(e) {
+ return makePromise(e, false);
+ }
+ if (callbackOutput && callbackOutput.then) {
+ return callbackOutput.then(function() {
+ return makePromise(value, isResolved);
+ }, function(error) {
+ return makePromise(error, false);
+ });
+ } else {
+ return makePromise(value, isResolved);
+ }
+ }
+
+ return this.then(function(value) {
+ return handleCallback(value, true);
+ }, function(error) {
+ return handleCallback(error, false);
+ });
}
}
};
@@ -7004,29 +7703,30 @@
* Combines multiple promises into a single promise that is resolved when all of the input
* promises are resolved.
*
- * @param {Array.<Promise>} promises An array of promises.
- * @returns {Promise} Returns a single promise that will be resolved with an array of values,
- * each value corresponding to the promise at the same index in the `promises` array. If any of
+ * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
+ * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
+ * each value corresponding to the promise at the same index/key in the `promises` array/hash. If any of
* the promises is resolved with a rejection, this resulting promise will be resolved with the
* same rejection.
*/
function all(promises) {
var deferred = defer(),
- counter = promises.length,
- results = [];
+ counter = 0,
+ results = isArray(promises) ? [] : {};
- if (counter) {
- forEach(promises, function(promise, index) {
- ref(promise).then(function(value) {
- if (index in results) return;
- results[index] = value;
- if (!(--counter)) deferred.resolve(results);
- }, function(reason) {
- if (index in results) return;
- deferred.reject(reason);
- });
+ forEach(promises, function(promise, key) {
+ counter++;
+ ref(promise).then(function(value) {
+ if (results.hasOwnProperty(key)) return;
+ results[key] = value;
+ if (!(--counter)) deferred.resolve(results);
+ }, function(reason) {
+ if (results.hasOwnProperty(key)) return;
+ deferred.reject(reason);
});
- } else {
+ });
+
+ if (counter === 0) {
deferred.resolve(results);
}
@@ -7063,10 +7763,19 @@
* `$location.path` will be updated to add or drop the trailing slash to exactly match the
* route definition.
*
- * `path` can contain named groups starting with a colon (`:name`). All characters up to the
- * next slash are matched and stored in `$routeParams` under the given `name` when the route
- * matches.
+ * * `path` can contain named groups starting with a colon (`:name`). All characters up
+ * to the next slash are matched and stored in `$routeParams` under the given `name`
+ * when the route matches.
+ * * `path` can contain named groups starting with a star (`*name`). All characters are
+ * eagerly stored in `$routeParams` under the given `name` when the route matches.
*
+ * For example, routes like `/color/:color/largecode/*largecode/edit` will match
+ * `/color/brown/largecode/code/with/slashs/edit` and extract:
+ *
+ * * `color: brown`
+ * * `largecode: code/with/slashs`.
+ *
+ *
* @param {Object} route Mapping information to be assigned to `$route.current` on route
* match.
*
@@ -7075,12 +7784,26 @@
* - `controller` – `{(string|function()=}` – Controller fn that should be associated with newly
* created scope or the name of a {@link angular.Module#controller registered controller}
* if passed as a string.
- * - `template` – `{string=}` – html template as a string that should be used by
- * {@link ng.directive:ngView ngView} or
+ * - `controllerAs` – `{string=}` – A controller alias name. If present the controller will be
+ * published to scope under the `controllerAs` name.
+ * - `template` – `{string=|function()=}` – html template as a string or function that returns
+ * an html template as a string which should be used by {@link ng.directive:ngView ngView} or
* {@link ng.directive:ngInclude ngInclude} directives.
- * this property takes precedence over `templateUrl`.
- * - `templateUrl` – `{string=}` – path to an html template that should be used by
- * {@link ng.directive:ngView ngView}.
+ * This property takes precedence over `templateUrl`.
+ *
+ * If `template` is a function, it will be called with the following parameters:
+ *
+ * - `{Array.<Object>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route
+ *
+ * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html
+ * template that should be used by {@link ng.directive:ngView ngView}.
+ *
+ * If `templateUrl` is a function, it will be called with the following parameters:
+ *
+ * - `{Array.<Object>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route
+ *
* - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
* be injected into the controller. If any of these dependencies are promises, they will be
* resolved and converted to a value before the controller is instantiated and the
@@ -7111,13 +7834,18 @@
* If the option is set to `false` and url in the browser changes, then
* `$routeUpdate` event is broadcasted on the root scope.
*
+ * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive
+ *
+ * If the option is set to `true`, then the particular route can be matched without being
+ * case sensitive
+ *
* @returns {Object} self
*
* @description
* Adds a new route definition to the `$route` service.
*/
this.when = function(path, route) {
- routes[path] = extend({reloadOnSearch: true}, route);
+ routes[path] = extend({reloadOnSearch: true, caseInsensitiveMatch: false}, route);
// create redirection for trailing slashes
if (path) {
@@ -7363,19 +8091,21 @@
/**
* @param on {string} current url
* @param when {string} route when template to match the url against
+ * @param whenProperties {Object} properties to define when's matching behavior
* @return {?Object}
*/
- function switchRouteMatcher(on, when) {
+ function switchRouteMatcher(on, when, whenProperties) {
// TODO(i): this code is convoluted and inefficient, we should construct the route matching
// regex only once and then reuse it
// Escape regexp special characters.
- when = '^' + when.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&") + '$';
+ when = '^' + when.replace(/[-\/\\^$:*+?.()|[\]{}]/g, "\\$&") + '$';
+
var regex = '',
params = [],
dst = {};
- var re = /:(\w+)/g,
+ var re = /\\([:*])(\w+)/g,
paramMatch,
lastMatchedIndex = 0;
@@ -7383,14 +8113,21 @@
// Find each :param in `when` and replace it with a capturing group.
// Append all other sections of when unchanged.
regex += when.slice(lastMatchedIndex, paramMatch.index);
- regex += '([^\\/]*)';
- params.push(paramMatch[1]);
+ switch(paramMatch[1]) {
+ case ':':
+ regex += '([^\\/]*)';
+ break;
+ case '*':
+ regex += '(.*)';
+ break;
+ }
+ params.push(paramMatch[2]);
lastMatchedIndex = re.lastIndex;
}
// Append trailing path part.
regex += when.substr(lastMatchedIndex);
- var match = on.match(new RegExp(regex));
+ var match = on.match(new RegExp(regex, whenProperties.caseInsensitiveMatch ? 'i' : ''));
if (match) {
forEach(params, function(name, index) {
dst[name] = match[index + 1];
@@ -7427,30 +8164,31 @@
$q.when(next).
then(function() {
if (next) {
- var keys = [],
- values = [],
+ var locals = extend({}, next.resolve),
template;
- forEach(next.resolve || {}, function(value, key) {
- keys.push(key);
- values.push(isString(value) ? $injector.get(value) : $injector.invoke(value));
+ forEach(locals, function(value, key) {
+ locals[key] = isString(value) ? $injector.get(value) : $injector.invoke(value);
});
+
if (isDefined(template = next.template)) {
+ if (isFunction(template)) {
+ template = template(next.params);
+ }
} else if (isDefined(template = next.templateUrl)) {
- template = $http.get(template, {cache: $templateCache}).
- then(function(response) { return response.data; });
+ if (isFunction(template)) {
+ template = template(next.params);
+ }
+ if (isDefined(template)) {
+ next.loadedTemplateUrl = template;
+ template = $http.get(template, {cache: $templateCache}).
+ then(function(response) { return response.data; });
+ }
}
if (isDefined(template)) {
- keys.push('$template');
- values.push(template);
+ locals['$template'] = template;
}
- return $q.all(values).then(function(values) {
- var locals = {};
- forEach(values, function(value, index) {
- locals[keys[index]] = value;
- });
- return locals;
- });
+ return $q.all(locals);
}
}).
// after route change
@@ -7478,7 +8216,7 @@
// Match a route
var params, match;
forEach(routes, function(route, path) {
- if (!match && (params = switchRouteMatcher($location.path(), path))) {
+ if (!match && (params = switchRouteMatcher($location.path(), path, route))) {
match = inherit(route, {
params: extend({}, $location.search(), params),
pathParams: params});
@@ -7490,7 +8228,7 @@
}
/**
- * @returns interpolation of the redirect path with the parametrs
+ * @returns interpolation of the redirect path with the parameters
*/
function interpolate(string, params) {
var result = [];
@@ -7622,25 +8360,7 @@
*
* Here is a simple scope snippet to show how you can interact with the scope.
* <pre>
- angular.injector(['ng']).invoke(function($rootScope) {
- var scope = $rootScope.$new();
- scope.salutation = 'Hello';
- scope.name = 'World';
-
- expect(scope.greeting).toEqual(undefined);
-
- scope.$watch('name', function() {
- scope.greeting = scope.salutation + ' ' + scope.name + '!';
- }); // initialize the watch
-
- expect(scope.greeting).toEqual(undefined);
- scope.name = 'Misko';
- // still old value, since watches have not been called yet
- expect(scope.greeting).toEqual(undefined);
-
- scope.$digest(); // fire all the watches
- expect(scope.greeting).toEqual('Hello Misko!');
- });
+ * <file src="./test/ng/rootScopeSpec.js" tag="docs1" />
* </pre>
*
* # Inheritance
@@ -7736,7 +8456,6 @@
child['this'] = child;
child.$$listeners = {};
child.$parent = this;
- child.$$asyncQueue = [];
child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null;
child.$$prevSibling = this.$$childTail;
if (this.$$childHead) {
@@ -7840,6 +8559,14 @@
watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);};
}
+ if (typeof watchExp == 'string' && get.constant) {
+ var originalFn = watcher.fn;
+ watcher.fn = function(newVal, oldVal, scope) {
+ originalFn.call(this, newVal, oldVal, scope);
+ arrayRemove(array, watcher);
+ };
+ }
+
if (!array) {
array = scope.$$watchers = [];
}
@@ -7852,8 +8579,149 @@
};
},
+
/**
* @ngdoc function
+ * @name ng.$rootScope.Scope#$watchCollection
+ * @methodOf ng.$rootScope.Scope
+ * @function
+ *
+ * @description
+ * Shallow watches the properties of an object and fires whenever any of the properties change
+ * (for arrays this implies watching the array items, for object maps this implies watching the properties).
+ * If a change is detected the `listener` callback is fired.
+ *
+ * - The `obj` collection is observed via standard $watch operation and is examined on every call to $digest() to
+ * see if any items have been added, removed, or moved.
+ * - The `listener` is called whenever anything within the `obj` has changed. Examples include adding new items
+ * into the object or array, removing and moving items around.
+ *
+ *
+ * # Example
+ * <pre>
+ $scope.names = ['igor', 'matias', 'misko', 'james'];
+ $scope.dataCount = 4;
+
+ $scope.$watchCollection('names', function(newNames, oldNames) {
+ $scope.dataCount = newNames.length;
+ });
+
+ expect($scope.dataCount).toEqual(4);
+ $scope.$digest();
+
+ //still at 4 ... no changes
+ expect($scope.dataCount).toEqual(4);
+
+ $scope.names.pop();
+ $scope.$digest();
+
+ //now there's been a change
+ expect($scope.dataCount).toEqual(3);
+ * </pre>
+ *
+ *
+ * @param {string|Function(scope)} obj Evaluated as {@link guide/expression expression}. The expression value
+ * should evaluate to an object or an array which is observed on each
+ * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the collection will trigger
+ * a call to the `listener`.
+ *
+ * @param {function(newCollection, oldCollection, scope)} listener a callback function that is fired with both
+ * the `newCollection` and `oldCollection` as parameters.
+ * The `newCollection` object is the newly modified data obtained from the `obj` expression and the
+ * `oldCollection` object is a copy of the former collection data.
+ * The `scope` refers to the current scope.
+ *
+ * @returns {function()} Returns a de-registration function for this listener. When the de-registration function is executed
+ * then the internal watch operation is terminated.
+ */
+ $watchCollection: function(obj, listener) {
+ var self = this;
+ var oldValue;
+ var newValue;
+ var changeDetected = 0;
+ var objGetter = $parse(obj);
+ var internalArray = [];
+ var internalObject = {};
+ var oldLength = 0;
+
+ function $watchCollectionWatch() {
+ newValue = objGetter(self);
+ var newLength, key;
+
+ if (!isObject(newValue)) {
+ if (oldValue !== newValue) {
+ oldValue = newValue;
+ changeDetected++;
+ }
+ } else if (isArrayLike(newValue)) {
+ if (oldValue !== internalArray) {
+ // we are transitioning from something which was not an array into array.
+ oldValue = internalArray;
+ oldLength = oldValue.length = 0;
+ changeDetected++;
+ }
+
+ newLength = newValue.length;
+
+ if (oldLength !== newLength) {
+ // if lengths do not match we need to trigger change notification
+ changeDetected++;
+ oldValue.length = oldLength = newLength;
+ }
+ // copy the items to oldValue and look for changes.
+ for (var i = 0; i < newLength; i++) {
+ if (oldValue[i] !== newValue[i]) {
+ changeDetected++;
+ oldValue[i] = newValue[i];
+ }
+ }
+ } else {
+ if (oldValue !== internalObject) {
+ // we are transitioning from something which was not an object into object.
+ oldValue = internalObject = {};
+ oldLength = 0;
+ changeDetected++;
+ }
+ // copy the items to oldValue and look for changes.
+ newLength = 0;
+ for (key in newValue) {
+ if (newValue.hasOwnProperty(key)) {
+ newLength++;
+ if (oldValue.hasOwnProperty(key)) {
+ if (oldValue[key] !== newValue[key]) {
+ changeDetected++;
+ oldValue[key] = newValue[key];
+ }
+ } else {
+ oldLength++;
+ oldValue[key] = newValue[key];
+ changeDetected++;
+ }
+ }
+ }
+ if (oldLength > newLength) {
+ // we used to have more keys, need to find them and destroy them.
+ changeDetected++;
+ for(key in oldValue) {
+ if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) {
+ oldLength--;
+ delete oldValue[key];
+ }
+ }
+ }
+ }
+ return changeDetected;
+ }
+
+ function $watchCollectionAction() {
+ listener(newValue, oldValue, self);
+ }
+
+ return this.$watch($watchCollectionWatch, $watchCollectionAction);
+ },
+
+ /**
+ * @ngdoc function
* @name ng.$rootScope.Scope#$digest
* @methodOf ng.$rootScope.Scope
* @function
@@ -7903,7 +8771,7 @@
$digest: function() {
var watch, value, last,
watchers,
- asyncQueue,
+ asyncQueue = this.$$asyncQueue,
length,
dirty, ttl = TTL,
next, current, target = this,
@@ -7912,18 +8780,19 @@
beginPhase('$digest');
- do {
+ do { // "while dirty" loop
dirty = false;
current = target;
- do {
- asyncQueue = current.$$asyncQueue;
- while(asyncQueue.length) {
- try {
- current.$eval(asyncQueue.shift());
- } catch (e) {
- $exceptionHandler(e);
- }
+
+ while(asyncQueue.length) {
+ try {
+ current.$eval(asyncQueue.shift());
+ } catch (e) {
+ $exceptionHandler(e);
}
+ }
+
+ do { // "traverse the scopes" loop
if ((watchers = current.$$watchers)) {
// process our watches
length = watchers.length;
@@ -8267,7 +9136,7 @@
* Afterwards, the event propagates to all direct and indirect scopes of the current scope and
* calls all registered listeners along the way. The event cannot be canceled.
*
- * Any exception emmited from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+ * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
* onto the {@link ng.$exceptionHandler $exceptionHandler} service.
*
* @param {string} name Event name to broadcast.
@@ -8360,18 +9229,41 @@
*
* @name ng.$sniffer
* @requires $window
+ * @requires $document
*
* @property {boolean} history Does the browser support html5 history api ?
* @property {boolean} hashchange Does the browser support hashchange event ?
+ * @property {boolean} transitions Does the browser support CSS transition events ?
+ * @property {boolean} animations Does the browser support CSS animation events ?
*
* @description
* This is very simple implementation of testing browser's features.
*/
function $SnifferProvider() {
- this.$get = ['$window', function($window) {
+ this.$get = ['$window', '$document', function($window, $document) {
var eventSupport = {},
- android = int((/android (\d+)/.exec(lowercase($window.navigator.userAgent)) || [])[1]);
+ android = int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
+ document = $document[0] || {},
+ vendorPrefix,
+ vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,
+ bodyStyle = document.body && document.body.style,
+ transitions = false,
+ animations = false,
+ match;
+ if (bodyStyle) {
+ for(var prop in bodyStyle) {
+ if(match = vendorRegex.exec(prop)) {
+ vendorPrefix = match[0];
+ vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
+ break;
+ }
+ }
+ transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
+ animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
+ }
+
+
return {
// Android has history.pushState, but it does not update location correctly
// so let's not use the history API at all.
@@ -8380,7 +9272,7 @@
history: !!($window.history && $window.history.pushState && !(android < 4)),
hashchange: 'onhashchange' in $window &&
// IE8 compatible mode lies
- (!$window.document.documentMode || $window.document.documentMode > 7),
+ (!document.documentMode || document.documentMode > 7),
hasEvent: function(event) {
// IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
// it. In particular the event is not fired when backspace or delete key are pressed or
@@ -8388,14 +9280,16 @@
if (event == 'input' && msie == 9) return false;
if (isUndefined(eventSupport[event])) {
- var divElm = $window.document.createElement('div');
+ var divElm = document.createElement('div');
eventSupport[event] = 'on' + event in divElm;
}
return eventSupport[event];
},
- // TODO(i): currently there is no way to feature detect CSP without triggering alerts
- csp: false
+ csp: document.securityPolicy ? document.securityPolicy.isActive : false,
+ vendorPrefix: vendorPrefix,
+ transitions : transitions,
+ animations : animations
};
}];
}
@@ -8408,7 +9302,7 @@
* A reference to the browser's `window` object. While `window`
* is globally available in JavaScript, it causes testability problems, because
* it is a global variable. In angular we always refer to it through the
- * `$window` service, so it may be overriden, removed or mocked for testing.
+ * `$window` service, so it may be overridden, removed or mocked for testing.
*
* All expressions are evaluated with respect to current scope so they don't
* suffer from window globality.
@@ -8469,7 +9363,44 @@
}
+var IS_SAME_DOMAIN_URL_MATCH = /^(([^:]+):)?\/\/(\w+:{0,1}\w*@)?([\w\.-]*)?(:([0-9]+))?(.*)$/;
+
+
/**
+ * Parse a request and location URL and determine whether this is a same-domain request.
+ *
+ * @param {string} requestUrl The url of the request.
+ * @param {string} locationUrl The current browser location url.
+ * @returns {boolean} Whether the request is for the same domain.
+ */
+function isSameDomain(requestUrl, locationUrl) {
+ var match = IS_SAME_DOMAIN_URL_MATCH.exec(requestUrl);
+ // if requestUrl is relative, the regex does not match.
+ if (match == null) return true;
+
+ var domain1 = {
+ protocol: match[2],
+ host: match[4],
+ port: int(match[6]) || DEFAULT_PORTS[match[2]] || null,
+ // IE8 sets unmatched groups to '' instead of undefined.
+ relativeProtocol: match[2] === undefined || match[2] === ''
+ };
+
+ match = SERVER_MATCH.exec(locationUrl);
+ var domain2 = {
+ protocol: match[1],
+ host: match[3],
+ port: int(match[5]) || DEFAULT_PORTS[match[1]] || null
+ };
+
+ return (domain1.protocol == domain2.protocol || domain1.relativeProtocol) &&
+ domain1.host == domain2.host &&
+ (domain1.port == domain2.port || (domain1.relativeProtocol &&
+ domain2.port == DEFAULT_PORTS[domain2.protocol]));
+}
+
+
+/**
* Returns a function that provides access to parsed headers.
*
* Headers are lazy parsed when first requested.
@@ -8526,9 +9457,10 @@
function $HttpProvider() {
var JSON_START = /^\s*(\[|\{[^\{])/,
JSON_END = /[\}\]]\s*$/,
- PROTECTION_PREFIX = /^\)\]\}',?\n/;
+ PROTECTION_PREFIX = /^\)\]\}',?\n/,
+ CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'};
- var $config = this.defaults = {
+ var defaults = this.defaults = {
// transform incoming response data
transformResponse: [function(data) {
if (isString(data)) {
@@ -8548,31 +9480,66 @@
// default headers
headers: {
common: {
- 'Accept': 'application/json, text/plain, */*',
- 'X-Requested-With': 'XMLHttpRequest'
+ 'Accept': 'application/json, text/plain, */*'
},
- post: {'Content-Type': 'application/json;charset=utf-8'},
- put: {'Content-Type': 'application/json;charset=utf-8'}
- }
+ post: CONTENT_TYPE_APPLICATION_JSON,
+ put: CONTENT_TYPE_APPLICATION_JSON,
+ patch: CONTENT_TYPE_APPLICATION_JSON
+ },
+
+ xsrfCookieName: 'XSRF-TOKEN',
+ xsrfHeaderName: 'X-XSRF-TOKEN'
};
- var providerResponseInterceptors = this.responseInterceptors = [];
+ /**
+ * Are order by request. I.E. they are applied in the same order as
+ * array on request, but revers order on response.
+ */
+ var interceptorFactories = this.interceptors = [];
+ /**
+ * For historical reasons, response interceptors ordered by the order in which
+ * they are applied to response. (This is in revers to interceptorFactories)
+ */
+ var responseInterceptorFactories = this.responseInterceptors = [];
this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',
function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {
- var defaultCache = $cacheFactory('$http'),
- responseInterceptors = [];
+ var defaultCache = $cacheFactory('$http');
- forEach(providerResponseInterceptors, function(interceptor) {
- responseInterceptors.push(
- isString(interceptor)
- ? $injector.get(interceptor)
- : $injector.invoke(interceptor)
- );
+ /**
+ * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
+ * The reversal is needed so that we can build up the interception chain around the
+ * server request.
+ */
+ var reversedInterceptors = [];
+
+ forEach(interceptorFactories, function(interceptorFactory) {
+ reversedInterceptors.unshift(isString(interceptorFactory)
+ ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
});
+ forEach(responseInterceptorFactories, function(interceptorFactory, index) {
+ var responseFn = isString(interceptorFactory)
+ ? $injector.get(interceptorFactory)
+ : $injector.invoke(interceptorFactory);
+ /**
+ * Response interceptors go before "around" interceptors (no real reason, just
+ * had to pick one.) But they are already revesed, so we can't use unshift, hence
+ * the splice.
+ */
+ reversedInterceptors.splice(index, 0, {
+ response: function(response) {
+ return responseFn($q.when(response));
+ },
+ responseError: function(response) {
+ return responseFn($q.reject(response));
+ }
+ });
+ });
+
+
/**
* @ngdoc function
* @name ng.$http
@@ -8655,7 +9622,6 @@
*
* - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
* - `Accept: application/json, text/plain, * / *`
- * - `X-Requested-With: XMLHttpRequest`
* - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
* - `Content-Type: application/json`
* - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
@@ -8708,12 +9674,98 @@
* cache, but the cache is not populated yet, only one request to the server will be made and
* the remaining requests will be fulfilled using the response from the first request.
*
+ * A custom default cache built with $cacheFactory can be provided in $http.defaults.cache.
+ * To skip it, set configuration property `cache` to `false`.
*
- * # Response interceptors
*
+ * # Interceptors
+ *
* Before you start creating interceptors, be sure to understand the
* {@link ng.$q $q and deferred/promise APIs}.
*
+ * For purposes of global error handling, authentication, or any kind of synchronous or
+ * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
+ * able to intercept requests before they are handed to the server and
+ * responses before they are handed over to the application code that
+ * initiated these requests. The interceptors leverage the {@link ng.$q
+ * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
+ *
+ * The interceptors are service factories that are registered with the `$httpProvider` by
+ * adding them to the `$httpProvider.interceptors` array. The factory is called and
+ * injected with dependencies (if specified) and returns the interceptor.
+ *
+ * There are two kinds of interceptors (and two kinds of rejection interceptors):
+ *
+ * * `request`: interceptors get called with http `config` object. The function is free to modify
+ * the `config` or create a new one. The function needs to return the `config` directly or as a
+ * promise.
+ * * `requestError`: interceptor gets called when a previous interceptor threw an error or resolved
+ * with a rejection.
+ * * `response`: interceptors get called with http `response` object. The function is free to modify
+ * the `response` or create a new one. The function needs to return the `response` directly or as a
+ * promise.
+ * * `responseError`: interceptor gets called when a previous interceptor threw an error or resolved
+ * with a rejection.
+ *
+ *
+ * <pre>
+ * // register the interceptor as a service
+ * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+ * return {
+ * // optional method
+ * 'request': function(config) {
+ * // do something on success
+ * return config || $q.when(config);
+ * },
+ *
+ * // optional method
+ * 'requestError': function(rejection) {
+ * // do something on error
+ * if (canRecover(rejection)) {
+ * return responseOrNewPromise
+ * }
+ * return $q.reject(rejection);
+ * },
+ *
+ *
+ *
+ * // optional method
+ * 'response': function(response) {
+ * // do something on success
+ * return response || $q.when(response);
+ * },
+ *
+ * // optional method
+ * 'responseError': function(rejection) {
+ * // do something on error
+ * if (canRecover(rejection)) {
+ * return responseOrNewPromise
+ * }
+ * return $q.reject(rejection);
+ * };
+ * }
+ * });
+ *
+ * $httpProvider.interceptors.push('myHttpInterceptor');
+ *
+ *
+ * // register the interceptor via an anonymous factory
+ * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
+ * return {
+ * 'request': function(config) {
+ * // same as above
+ * },
+ * 'response': function(response) {
+ * // same as above
+ * }
+ * });
+ * </pre>
+ *
+ * # Response interceptors (DEPRECATED)
+ *
+ * Before you start creating interceptors, be sure to understand the
+ * {@link ng.$q $q and deferred/promise APIs}.
+ *
* For purposes of global error handling, authentication or any kind of synchronous or
* asynchronous preprocessing of received responses, it is desirable to be able to intercept
* responses for http requests before they are handed over to the application code that
@@ -8792,9 +9844,10 @@
* {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} is a technique by which
* an unauthorized site can gain your user's private data. Angular provides a mechanism
* to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
- * called `XSRF-TOKEN` and sets it as the HTTP header `X-XSRF-TOKEN`. Since only JavaScript that
- * runs on your domain could read the cookie, your server can be assured that the XHR came from
- * JavaScript running on your domain.
+ * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
+ * JavaScript that runs on your domain could read the cookie, your server can be assured that
+ * the XHR came from JavaScript running on your domain. The header will not be set for
+ * cross-domain requests.
*
* To take advantage of this, your server needs to set a token in a JavaScript readable session
* cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
@@ -8804,7 +9857,10 @@
* up its own tokens). We recommend that the token is a digest of your site's authentication
* cookie with a {@link https://en.wikipedia.org/wiki/Salt_(cryptography) salt} for added security.
*
+ * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
+ * properties of either $httpProvider.defaults, or the per-request config object.
*
+ *
* @param {object} config Object describing the request to be made and how it should be
* processed. The object has following properties:
*
@@ -8814,6 +9870,8 @@
* `?key1=value1&key2=value2` after the url. If the value is not a string, it will be JSONified.
* - **data** – `{string|Object}` – Data to be sent as the request message data.
* - **headers** – `{Object}` – Map of strings representing HTTP headers to send to the server.
+ * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
+ * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
* - **transformRequest** – `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
* transform function or an array of such functions. The transform function takes the http
* request body and headers and returns its transformed (typically serialized) version.
@@ -8824,10 +9882,13 @@
* GET request, otherwise if a cache instance built with
* {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
* caching.
- * - **timeout** – `{number}` – timeout in milliseconds.
+ * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
+ * that should abort the request when resolved.
* - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the
* XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5
* requests with credentials} for more information.
+ * - **responseType** - `{string}` - see {@link
+ * https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}.
*
* @returns {HttpPromise} Returns a {@link ng.$q promise} object with the
* standard `then` method and two http specific methods: `success` and `error`. The `then`
@@ -8917,34 +9978,66 @@
</file>
</example>
*/
- function $http(config) {
+ function $http(requestConfig) {
+ var config = {
+ transformRequest: defaults.transformRequest,
+ transformResponse: defaults.transformResponse
+ };
+ var headers = {};
+
+ extend(config, requestConfig);
+ config.headers = headers;
config.method = uppercase(config.method);
- var reqTransformFn = config.transformRequest || $config.transformRequest,
- respTransformFn = config.transformResponse || $config.transformResponse,
- defHeaders = $config.headers,
- reqHeaders = extend({'X-XSRF-TOKEN': $browser.cookies()['XSRF-TOKEN']},
- defHeaders.common, defHeaders[lowercase(config.method)], config.headers),
- reqData = transformData(config.data, headersGetter(reqHeaders), reqTransformFn),
- promise;
+ extend(headers,
+ defaults.headers.common,
+ defaults.headers[lowercase(config.method)],
+ requestConfig.headers);
- // strip content-type if data is undefined
- if (isUndefined(config.data)) {
- delete reqHeaders['Content-Type'];
+ var xsrfValue = isSameDomain(config.url, $browser.url())
+ ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]
+ : undefined;
+ if (xsrfValue) {
+ headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
}
- // send request
- promise = sendReq(config, reqData, reqHeaders);
+ var serverRequest = function(config) {
+ var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);
- // transform future response
- promise = promise.then(transformResponse, transformResponse);
+ // strip content-type if data is undefined
+ if (isUndefined(config.data)) {
+ delete headers['Content-Type'];
+ }
+ if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
+ config.withCredentials = defaults.withCredentials;
+ }
+
+ // send request
+ return sendReq(config, reqData, headers).then(transformResponse, transformResponse);
+ };
+
+ var chain = [serverRequest, undefined];
+ var promise = $q.when(config);
+
// apply interceptors
- forEach(responseInterceptors, function(interceptor) {
- promise = interceptor(promise);
+ forEach(reversedInterceptors, function(interceptor) {
+ if (interceptor.request || interceptor.requestError) {
+ chain.unshift(interceptor.request, interceptor.requestError);
+ }
+ if (interceptor.response || interceptor.responseError) {
+ chain.push(interceptor.response, interceptor.responseError);
+ }
});
+ while(chain.length) {
+ var thenFn = chain.shift();
+ var rejectFn = chain.shift();
+
+ promise = promise.then(thenFn, rejectFn);
+ }
+
promise.success = function(fn) {
promise.then(function(response) {
fn(response.data, response.status, response.headers, config);
@@ -8964,7 +10057,7 @@
function transformResponse(response) {
// make a copy since the response must be cacheable
var resp = extend({}, response, {
- data: transformData(response.data, response.headers, respTransformFn)
+ data: transformData(response.data, response.headers, config.transformResponse)
});
return (isSuccess(response.status))
? resp
@@ -9064,11 +10157,11 @@
*
* @description
* Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
- * default headers as well as request and response transformations.
+ * default headers, withCredentials as well as request and response transformations.
*
* See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
*/
- $http.defaults = $config;
+ $http.defaults = defaults;
return $http;
@@ -9103,7 +10196,7 @@
* Makes the request.
*
* !!! ACCESSES CLOSURE VARS:
- * $httpBackend, $config, $log, $rootScope, defaultCache, $http.pendingRequests
+ * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
*/
function sendReq(config, reqData, reqHeaders) {
var deferred = $q.defer(),
@@ -9116,8 +10209,10 @@
promise.then(removePendingReq, removePendingReq);
- if (config.cache && config.method == 'GET') {
- cache = isObject(config.cache) ? config.cache : defaultCache;
+ if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') {
+ cache = isObject(config.cache) ? config.cache
+ : isObject(defaults.cache) ? defaults.cache
+ : defaultCache;
}
if (cache) {
@@ -9144,7 +10239,7 @@
// if we won't have the response in cache, send the request to the backend
if (!cachedResp) {
$httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
- config.withCredentials);
+ config.withCredentials, config.responseType);
}
return promise;
@@ -9167,7 +10262,7 @@
}
resolvePromise(response, status, headersString);
- $rootScope.$apply();
+ if (!$rootScope.$$phase) $rootScope.$apply();
}
@@ -9199,10 +10294,15 @@
var parts = [];
forEachSorted(params, function(value, key) {
if (value == null || value == undefined) return;
- if (isObject(value)) {
- value = toJson(value);
- }
- parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ if (!isArray(value)) value = [value];
+
+ forEach(value, function(v) {
+ if (isObject(v)) {
+ v = toJson(v);
+ }
+ parts.push(encodeUriQuery(key) + '=' +
+ encodeUriQuery(v));
+ });
});
return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
}
@@ -9245,7 +10345,8 @@
function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) {
// TODO(vojta): fix the signature
- return function(method, url, post, callback, headers, timeout, withCredentials) {
+ return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
+ var status;
$browser.$$incOutstandingRequestCount();
url = url || $browser.url();
@@ -9255,12 +10356,12 @@
callbacks[callbackId].data = data;
};
- jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
+ var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
function() {
if (callbacks[callbackId].data) {
completeRequest(callback, 200, callbacks[callbackId].data);
} else {
- completeRequest(callback, -2);
+ completeRequest(callback, status || -2);
}
delete callbacks[callbackId];
});
@@ -9271,8 +10372,6 @@
if (value) xhr.setRequestHeader(key, value);
});
- var status;
-
// In IE6 and 7, this might be called synchronously when xhr.send below is called and the
// response is in the cache. the promise api will ensure that to the app code the api is
// always async
@@ -9300,8 +10399,12 @@
}
// end of the workaround.
- completeRequest(callback, status || xhr.status, xhr.responseText,
- responseHeaders);
+ // responseText is the old-school way of retrieving response (supported by IE8 & 9)
+ // response and responseType properties were introduced in XHR Level2 spec (supported by IE10)
+ completeRequest(callback,
+ status || xhr.status,
+ (xhr.responseType ? xhr.response : xhr.responseText),
+ responseHeaders);
}
};
@@ -9309,21 +10412,34 @@
xhr.withCredentials = true;
}
+ if (responseType) {
+ xhr.responseType = responseType;
+ }
+
xhr.send(post || '');
+ }
- if (timeout > 0) {
- $browserDefer(function() {
- status = -1;
- xhr.abort();
- }, timeout);
- }
+ if (timeout > 0) {
+ var timeoutId = $browserDefer(timeoutRequest, timeout);
+ } else if (timeout && timeout.then) {
+ timeout.then(timeoutRequest);
}
+ function timeoutRequest() {
+ status = -1;
+ jsonpDone && jsonpDone();
+ xhr && xhr.abort();
+ }
+
function completeRequest(callback, status, response, headersString) {
// URL_MATCH is defined in src/service/location.js
- var protocol = (url.match(URL_MATCH) || ['', locationProtocol])[1];
+ var protocol = (url.match(SERVER_MATCH) || ['', locationProtocol])[1];
+ // cancel timeout and subsequent timeout promise resolution
+ timeoutId && $browserDefer.cancel(timeoutId);
+ jsonpDone = xhr = null;
+
// fix status code for file protocol (it's always 0)
status = (protocol == 'file') ? (response ? 200 : 404) : status;
@@ -9357,6 +10473,7 @@
}
rawDocument.body.appendChild(script);
+ return doneWrapper;
}
}
@@ -9650,6 +10767,22 @@
* called for each element of `array`. The final result is an array of those elements that
* the predicate returned true for.
*
+ * @param {function(expected, actual)|true|undefined} comparator Comparator which is used in
+ * determining if the expected value (from the filter expression) and actual value (from
+ * the object in the array) should be considered a match.
+ *
+ * Can be one of:
+ *
+ * - `function(expected, actual)`:
+ * The function will be given the object value and the predicate value to compare and
+ * should return true if the item should be included in filtered result.
+ *
+ * - `true`: A shorthand for `function(expected, actual) { return angular.equals(expected, actual)}`.
+ * this is essentially strict comparison of expected and actual.
+ *
+ * - `false|undefined`: A short hand for a function which will look for a substring match in case
+ * insensitive way.
+ *
* @example
<doc:example>
<doc:source>
@@ -9657,7 +10790,8 @@
{name:'Mary', phone:'800-BIG-MARY'},
{name:'Mike', phone:'555-4321'},
{name:'Adam', phone:'555-5678'},
- {name:'Julie', phone:'555-8765'}]"></div>
+ {name:'Julie', phone:'555-8765'},
+ {name:'Juliette', phone:'555-5678'}]"></div>
Search: <input ng-model="searchText">
<table id="searchTextResults">
@@ -9671,9 +10805,10 @@
Any: <input ng-model="search.$"> <br>
Name only <input ng-model="search.name"><br>
Phone only <input ng-model="search.phone"><br>
+ Equality <input type="checkbox" ng-model="strict"><br>
<table id="searchObjResults">
<tr><th>Name</th><th>Phone</th></tr>
- <tr ng-repeat="friend in friends | filter:search">
+ <tr ng-repeat="friend in friends | filter:search:strict">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
</tr>
@@ -9693,13 +10828,19 @@
it('should search in specific fields when filtering with a predicate object', function() {
input('search.$').enter('i');
expect(repeater('#searchObjResults tr', 'friend in friends').column('friend.name')).
- toEqual(['Mary', 'Mike', 'Julie']);
+ toEqual(['Mary', 'Mike', 'Julie', 'Juliette']);
});
+ it('should use a equal comparison when comparator is true', function() {
+ input('search.name').enter('Julie');
+ input('strict').check();
+ expect(repeater('#searchObjResults tr', 'friend in friends').column('friend.name')).
+ toEqual(['Julie']);
+ });
</doc:scenario>
</doc:example>
*/
function filterFilter() {
- return function(array, expression) {
+ return function(array, expression, comperator) {
if (!isArray(array)) return array;
var predicates = [];
predicates.check = function(value) {
@@ -9710,20 +10851,43 @@
}
return true;
};
+ switch(typeof comperator) {
+ case "function":
+ break;
+ case "boolean":
+ if(comperator == true) {
+ comperator = function(obj, text) {
+ return angular.equals(obj, text);
+ }
+ break;
+ }
+ default:
+ comperator = function(obj, text) {
+ text = (''+text).toLowerCase();
+ return (''+obj).toLowerCase().indexOf(text) > -1
+ };
+ }
var search = function(obj, text){
- if (text.charAt(0) === '!') {
+ if (typeof text == 'string' && text.charAt(0) === '!') {
return !search(obj, text.substr(1));
}
switch (typeof obj) {
case "boolean":
case "number":
case "string":
- return ('' + obj).toLowerCase().indexOf(text) > -1;
+ return comperator(obj, text);
case "object":
- for ( var objKey in obj) {
- if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {
- return true;
- }
+ switch (typeof text) {
+ case "object":
+ return comperator(obj, text);
+ break;
+ default:
+ for ( var objKey in obj) {
+ if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {
+ return true;
+ }
+ }
+ break;
}
return false;
case "array":
@@ -9746,19 +10910,18 @@
for (var key in expression) {
if (key == '$') {
(function() {
- var text = (''+expression[key]).toLowerCase();
- if (!text) return;
+ if (!expression[key]) return;
+ var path = key
predicates.push(function(value) {
- return search(value, text);
+ return search(value, expression[path]);
});
})();
} else {
(function() {
+ if (!expression[key]) return;
var path = key;
- var text = (''+expression[key]).toLowerCase();
- if (!text) return;
predicates.push(function(value) {
- return search(getter(value, path), text);
+ return search(getter(value,path), expression[path]);
});
})();
}
@@ -10024,6 +11187,9 @@
m: dateGetter('Minutes', 1),
ss: dateGetter('Seconds', 2),
s: dateGetter('Seconds', 1),
+ // while ISO 8601 requires fractions to be prefixed with `.` or `,`
+ // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
+ sss: dateGetter('Milliseconds', 3),
EEEE: dateStrGetter('Day'),
EEE: dateStrGetter('Day', true),
a: ampmGetter,
@@ -10062,6 +11228,7 @@
* * `'m'`: Minute in hour (0-59)
* * `'ss'`: Second in minute, padded (00-59)
* * `'s'`: Second in minute (0-59)
+ * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
* * `'a'`: am/pm marker
* * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
*
@@ -10118,18 +11285,26 @@
var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
- function jsonStringToDate(string){
+ // 1 2 3 4 5 6 7 8 9 10 11
+ function jsonStringToDate(string) {
var match;
if (match = string.match(R_ISO8601_STR)) {
var date = new Date(0),
tzHour = 0,
- tzMin = 0;
+ tzMin = 0,
+ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
+ timeSetter = match[8] ? date.setUTCHours : date.setHours;
+
if (match[9]) {
tzHour = int(match[9] + match[10]);
tzMin = int(match[9] + match[11]);
}
- date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3]));
- date.setUTCHours(int(match[4]||0) - tzHour, int(match[5]||0) - tzMin, int(match[6]||0), int(match[7]||0));
+ dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));
+ var h = int(match[4]||0) - tzHour;
+ var m = int(match[5]||0) - tzMin
+ var s = int(match[6]||0);
+ var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);
+ timeSetter.call(date, h, m, s, ms);
return date;
}
return string;
@@ -10243,20 +11418,20 @@
* @function
*
* @description
- * Creates a new array containing only a specified number of elements in an array. The elements
- * are taken from either the beginning or the end of the source array, as specified by the
- * value and sign (positive or negative) of `limit`.
+ * Creates a new array or string containing only a specified number of elements. The elements
+ * are taken from either the beginning or the end of the source array or string, as specified by
+ * the value and sign (positive or negative) of `limit`.
*
* Note: This function is used to augment the `Array` type in Angular expressions. See
* {@link ng.$filter} for more information about Angular arrays.
*
- * @param {Array} array Source array to be limited.
- * @param {string|Number} limit The length of the returned array. If the `limit` number is
- * positive, `limit` number of items from the beginning of the source array are copied.
- * If the number is negative, `limit` number of items from the end of the source array are
- * copied. The `limit` will be trimmed if it exceeds `array.length`
- * @returns {Array} A new sub-array of length `limit` or less if input array had less than `limit`
- * elements.
+ * @param {Array|string} input Source array or string to be limited.
+ * @param {string|number} limit The length of the returned array or string. If the `limit` number
+ * is positive, `limit` number of items from the beginning of the source array/string are copied.
+ * If the number is negative, `limit` number of items from the end of the source array/string
+ * are copied. The `limit` will be trimmed if it exceeds `array.length`
+ * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
+ * had less than `limit` elements.
*
* @example
<doc:example>
@@ -10264,59 +11439,76 @@
<script>
function Ctrl($scope) {
$scope.numbers = [1,2,3,4,5,6,7,8,9];
- $scope.limit = 3;
+ $scope.letters = "abcdefghi";
+ $scope.numLimit = 3;
+ $scope.letterLimit = 3;
}
</script>
<div ng-controller="Ctrl">
- Limit {{numbers}} to: <input type="integer" ng-model="limit">
- <p>Output: {{ numbers | limitTo:limit }}</p>
+ Limit {{numbers}} to: <input type="integer" ng-model="numLimit">
+ <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
+ Limit {{letters}} to: <input type="integer" ng-model="letterLimit">
+ <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
</div>
</doc:source>
<doc:scenario>
- it('should limit the numer array to first three items', function() {
- expect(element('.doc-example-live input[ng-model=limit]').val()).toBe('3');
- expect(binding('numbers | limitTo:limit')).toEqual('[1,2,3]');
+ it('should limit the number array to first three items', function() {
+ expect(element('.doc-example-live input[ng-model=numLimit]').val()).toBe('3');
+ expect(element('.doc-example-live input[ng-model=letterLimit]').val()).toBe('3');
+ expect(binding('numbers | limitTo:numLimit')).toEqual('[1,2,3]');
+ expect(binding('letters | limitTo:letterLimit')).toEqual('abc');
});
it('should update the output when -3 is entered', function() {
- input('limit').enter(-3);
- expect(binding('numbers | limitTo:limit')).toEqual('[7,8,9]');
+ input('numLimit').enter(-3);
+ input('letterLimit').enter(-3);
+ expect(binding('numbers | limitTo:numLimit')).toEqual('[7,8,9]');
+ expect(binding('letters | limitTo:letterLimit')).toEqual('ghi');
});
it('should not exceed the maximum size of input array', function() {
- input('limit').enter(100);
- expect(binding('numbers | limitTo:limit')).toEqual('[1,2,3,4,5,6,7,8,9]');
+ input('numLimit').enter(100);
+ input('letterLimit').enter(100);
+ expect(binding('numbers | limitTo:numLimit')).toEqual('[1,2,3,4,5,6,7,8,9]');
+ expect(binding('letters | limitTo:letterLimit')).toEqual('abcdefghi');
});
</doc:scenario>
</doc:example>
*/
function limitToFilter(){
- return function(array, limit) {
- if (!(array instanceof Array)) return array;
+ return function(input, limit) {
+ if (!isArray(input) && !isString(input)) return input;
+
limit = int(limit);
+
+ if (isString(input)) {
+ //NaN check on limit
+ if (limit) {
+ return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);
+ } else {
+ return "";
+ }
+ }
+
var out = [],
i, n;
- // check that array is iterable
- if (!array || !(array instanceof Array))
- return out;
-
// if abs(limit) exceeds maximum length, trim it
- if (limit > array.length)
- limit = array.length;
- else if (limit < -array.length)
- limit = -array.length;
+ if (limit > input.length)
+ limit = input.length;
+ else if (limit < -input.length)
+ limit = -input.length;
if (limit > 0) {
i = 0;
n = limit;
} else {
- i = array.length + limit;
- n = array.length;
+ i = input.length + limit;
+ n = input.length;
}
for (; i<n; i++) {
- out.push(array[i]);
+ out.push(input[i]);
}
return out;
@@ -10332,7 +11524,7 @@
* Orders a specified `array` by the `expression` predicate.
*
* Note: this function is used to augment the `Array` type in Angular expressions. See
- * {@link ng.$filter} for more informaton about Angular arrays.
+ * {@link ng.$filter} for more information about Angular arrays.
*
* @param {Array} array The array to sort.
* @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be
@@ -10619,6 +11811,31 @@
/**
* @ngdoc directive
+ * @name ng.directive:ngSrcset
+ * @restrict A
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrcset` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * <pre>
+ * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
+ * </pre>
+ *
+ * The correct way to write it:
+ * <pre>
+ * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
+ * </pre>
+ *
+ * @element IMG
+ * @param {template} ngSrcset any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
* @name ng.directive:ngDisabled
* @restrict A
*
@@ -10784,6 +12001,37 @@
* @param {string} expression Angular expression that will be evaluated.
*/
+/**
+ * @ngdoc directive
+ * @name ng.directive:ngOpen
+ * @restrict A
+ *
+ * @description
+ * The HTML specs do not require browsers to preserve the special attributes such as open.
+ * (The presence of them means true and absence means false)
+ * This prevents the angular compiler from correctly retrieving the binding expression.
+ * To solve this problem, we introduce the `ngOpen` directive.
+ *
+ * @example
+ <doc:example>
+ <doc:source>
+ Check me check multiple: <input type="checkbox" ng-model="open"><br/>
+ <details id="details" ng-open="open">
+ <summary>Show/Hide me</summary>
+ </details>
+ </doc:source>
+ <doc:scenario>
+ it('should toggle open', function() {
+ expect(element('#details').prop('open')).toBeFalsy();
+ input('open').check();
+ expect(element('#details').prop('open')).toBeTruthy();
+ });
+ </doc:scenario>
+ </doc:example>
+ *
+ * @element DETAILS
+ * @param {string} expression Angular expression that will be evaluated.
+ */
var ngAttributeAliasDirectives = {};
@@ -10806,8 +12054,8 @@
});
-// ng-src, ng-href are interpolated
-forEach(['src', 'href'], function(attrName) {
+// ng-src, ng-srcset, ng-href are interpolated
+forEach(['src', 'srcset', 'href'], function(attrName) {
var normalized = directiveNormalize('ng-' + attrName);
ngAttributeAliasDirectives[normalized] = function() {
return {
@@ -10834,7 +12082,8 @@
$addControl: noop,
$removeControl: noop,
$setValidity: noop,
- $setDirty: noop
+ $setDirty: noop,
+ $setPristine: noop
};
/**
@@ -10866,7 +12115,8 @@
var form = this,
parentForm = element.parent().controller('form') || nullFormCtrl,
invalidCount = 0, // used to easily determine if we are valid
- errors = form.$error = {};
+ errors = form.$error = {},
+ controls = [];
// init state
form.$name = attrs.name;
@@ -10890,6 +12140,8 @@
}
form.$addControl = function(control) {
+ controls.push(control);
+
if (control.$name && !form.hasOwnProperty(control.$name)) {
form[control.$name] = control;
}
@@ -10902,6 +12154,8 @@
forEach(errors, function(queue, validationToken) {
form.$setValidity(validationToken, true, control);
});
+
+ arrayRemove(controls, control);
};
form.$setValidity = function(validationToken, isValid, control) {
@@ -10949,6 +12203,29 @@
parentForm.$setDirty();
};
+ /**
+ * @ngdoc function
+ * @name ng.directive:form.FormController#$setPristine
+ * @methodOf ng.directive:form.FormController
+ *
+ * @description
+ * Sets the form to its pristine state.
+ *
+ * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
+ * state (ng-pristine class). This method will also propagate to all the controls contained
+ * in this form.
+ *
+ * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
+ * saving or resetting it.
+ */
+ form.$setPristine = function () {
+ element.removeClass(DIRTY_CLASS).addClass(PRISTINE_CLASS);
+ form.$dirty = false;
+ form.$pristine = true;
+ forEach(controls, function(control) {
+ control.$setPristine();
+ });
+ };
}
@@ -11145,6 +12422,8 @@
* patterns defined as scope expressions.
* @param {string=} ngChange Angular expression to be executed when input changes due to user
* interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trimming the
+ * input.
*
* @example
<doc:example>
@@ -11152,12 +12431,12 @@
<script>
function Ctrl($scope) {
$scope.text = 'guest';
- $scope.word = /^\w*$/;
+ $scope.word = /^\s*\w*\s*$/;
}
</script>
<form name="myForm" ng-controller="Ctrl">
Single word: <input type="text" name="input" ng-model="text"
- ng-pattern="word" required>
+ ng-pattern="word" required ng-trim="false">
<span class="error" ng-show="myForm.input.$error.required">
Required!</span>
<span class="error" ng-show="myForm.input.$error.pattern">
@@ -11186,6 +12465,12 @@
input('text').enter('hello world');
expect(binding('myForm.input.$valid')).toEqual('false');
});
+
+ it('should not be trimmed', function() {
+ input('text').enter('untrimmed ');
+ expect(binding('text')).toEqual('untrimmed ');
+ expect(binding('myForm.input.$valid')).toEqual('true');
+ });
</doc:scenario>
</doc:example>
*/
@@ -11499,8 +12784,15 @@
function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
var listener = function() {
- var value = trim(element.val());
+ var value = element.val();
+ // By default we will trim the value
+ // If the attribute ng-trim exists we will avoid trimming
+ // e.g. <input ng-model="foo" ng-trim="false">
+ if (toBoolean(attr.ngTrim || 'T')) {
+ value = trim(value);
+ }
+
if (ctrl.$viewValue !== value) {
scope.$apply(function() {
ctrl.$setViewValue(value);
@@ -11550,7 +12842,8 @@
// pattern validator
var pattern = attr.ngPattern,
- patternValidator;
+ patternValidator,
+ match;
var validate = function(regexp, value) {
if (isEmpty(value) || regexp.test(value)) {
@@ -11563,8 +12856,9 @@
};
if (pattern) {
- if (pattern.match(/^\/(.*)\/$/)) {
- pattern = new RegExp(pattern.substr(1, pattern.length - 2));
+ match = pattern.match(/^\/(.*)\/([gim]*)$/);
+ if (match) {
+ pattern = new RegExp(match[1], match[2]);
patternValidator = function(value) {
return validate(pattern, value)
};
@@ -11916,7 +13210,7 @@
* @property {Array.<Function>} $formatters Whenever the model value changes, it executes all of
* these functions to convert the value as well as validate.
*
- * @property {Object} $error An bject hash with all errors as keys.
+ * @property {Object} $error An object hash with all errors as keys.
*
* @property {boolean} $pristine True if user has not interacted with the control yet.
* @property {boolean} $dirty True if user has already interacted with the control.
@@ -12089,6 +13383,22 @@
parentForm.$setValidity(validationErrorKey, isValid, this);
};
+ /**
+ * @ngdoc function
+ * @name ng.directive:ngModel.NgModelController#$setPristine
+ * @methodOf ng.directive:ngModel.NgModelController
+ *
+ * @description
+ * Sets the control to its pristine state.
+ *
+ * This method can be called to remove the 'ng-dirty' class and set the control to its pristine
+ * state (ng-pristine class).
+ */
+ this.$setPristine = function () {
+ this.$dirty = false;
+ this.$pristine = true;
+ $element.removeClass(DIRTY_CLASS).addClass(PRISTINE_CLASS);
+ };
/**
* @ngdoc function
@@ -12746,7 +14056,7 @@
* directive to avoid the undesirable flicker effect caused by the html template display.
*
* The directive can be applied to the `<body>` element, but typically a fine-grained application is
- * prefered in order to benefit from progressive rendering of the browser view.
+ * preferred in order to benefit from progressive rendering of the browser view.
*
* `ngCloak` works in cooperation with a css rule that is embedded within `angular.js` and
* `angular.min.js` files. Following is the css rule:
@@ -12817,7 +14127,8 @@
* @scope
* @param {expression} ngController Name of a globally accessible constructor function or an
* {@link guide/expression expression} that on the current scope evaluates to a
- * constructor function.
+ * constructor function. The controller instance can further be published into the scope
+ * by adding `as localName` the controller name attribute.
*
* @example
* Here is a simple form for editing user contact information. Adding, removing, clearing, and
@@ -12825,10 +14136,77 @@
* easily be called from the angular markup. Notice that the scope becomes the `this` for the
* controller's instance. This allows for easy access to the view data from the controller. Also
* notice that any changes to the data are automatically reflected in the View without the need
- * for a manual update.
+ * for a manual update. The example is included in two different declaration styles based on
+ * your style preferences.
<doc:example>
<doc:source>
<script>
+ function SettingsController() {
+ this.name = "John Smith";
+ this.contacts = [
+ {type: 'phone', value: '408 555 1212'},
+ {type: 'email', value: 'john.smith(a)example.org'} ];
+ };
+
+ SettingsController.prototype.greet = function() {
+ alert(this.name);
+ };
+
+ SettingsController.prototype.addContact = function() {
+ this.contacts.push({type: 'email', value: 'yourname(a)example.org'});
+ };
+
+ SettingsController.prototype.removeContact = function(contactToRemove) {
+ var index = this.contacts.indexOf(contactToRemove);
+ this.contacts.splice(index, 1);
+ };
+
+ SettingsController.prototype.clearContact = function(contact) {
+ contact.type = 'phone';
+ contact.value = '';
+ };
+ </script>
+ <div ng-controller="SettingsController as settings">
+ Name: <input type="text" ng-model="settings.name"/>
+ [ <a href="" ng-click="settings.greet()">greet</a> ]<br/>
+ Contact:
+ <ul>
+ <li ng-repeat="contact in settings.contacts">
+ <select ng-model="contact.type">
+ <option>phone</option>
+ <option>email</option>
+ </select>
+ <input type="text" ng-model="contact.value"/>
+ [ <a href="" ng-click="settings.clearContact(contact)">clear</a>
+ | <a href="" ng-click="settings.removeContact(contact)">X</a> ]
+ </li>
+ <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li>
+ </ul>
+ </div>
+ </doc:source>
+ <doc:scenario>
+ it('should check controller', function() {
+ expect(element('.doc-example-live div>:input').val()).toBe('John Smith');
+ expect(element('.doc-example-live li:nth-child(1) input').val())
+ .toBe('408 555 1212');
+ expect(element('.doc-example-live li:nth-child(2) input').val())
+ .toBe('john.smith(a)example.org');
+
+ element('.doc-example-live li:first a:contains("clear")').click();
+ expect(element('.doc-example-live li:first input').val()).toBe('');
+
+ element('.doc-example-live li:last a:contains("add")').click();
+ expect(element('.doc-example-live li:nth-child(3) input').val())
+ .toBe('yourname(a)example.org');
+ });
+ </doc:scenario>
+ </doc:example>
+
+
+
+ <doc:example>
+ <doc:source>
+ <script>
function SettingsController($scope) {
$scope.name = "John Smith";
$scope.contacts = [
@@ -12889,6 +14267,7 @@
});
</doc:scenario>
</doc:example>
+
*/
var ngControllerDirective = [function() {
return {
@@ -12976,7 +14355,7 @@
*/
var ngEventDirectives = {};
forEach(
- 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' '),
+ 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress'.split(' '),
function(name) {
var directiveName = directiveNormalize('ng-' + name);
ngEventDirectives[directiveName] = ['$parse', function($parse) {
@@ -13105,6 +14484,54 @@
/**
* @ngdoc directive
+ * @name ng.directive:ngKeydown
+ *
+ * @description
+ * Specify custom behavior on keydown event.
+ *
+ * @element ANY
+ * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
+ * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ng.directive:ngKeyup
+ *
+ * @description
+ * Specify custom behavior on keyup event.
+ *
+ * @element ANY
+ * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
+ * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ng.directive:ngKeypress
+ *
+ * @description
+ * Specify custom behavior on keypress event.
+ *
+ * @element ANY
+ * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
+ * keypress. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+
+/**
+ * @ngdoc directive
* @name ng.directive:ngSubmit
*
* @description
@@ -13162,6 +14589,114 @@
/**
* @ngdoc directive
+ * @name ng.directive:ngIf
+ * @restrict A
+ *
+ * @description
+ * The `ngIf` directive removes and recreates a portion of the DOM tree (HTML)
+ * conditionally based on **"falsy"** and **"truthy"** values, respectively, evaluated within
+ * an {expression}. In other words, if the expression assigned to **ngIf evaluates to a false
+ * value** then **the element is removed from the DOM** and **if true** then **a clone of the
+ * element is reinserted into the DOM**.
+ *
+ * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
+ * element in the DOM rather than changing its visibility via the `display` css property. A common
+ * case when this difference is significant is when using css selectors that rely on an element's
+ * position within the DOM (HTML), such as the `:first-child` or `:last-child` pseudo-classes.
+ *
+ * Note that **when an element is removed using ngIf its scope is destroyed** and **a new scope
+ * is created when the element is restored**. The scope created within `ngIf` inherits from
+ * its parent scope using
+ * {@link https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-… prototypal inheritance}.
+ * An important implication of this is if `ngModel` is used within `ngIf` to bind to
+ * a javascript primitive defined in the parent scope. In this case any modifications made to the
+ * variable within the child scope will override (hide) the value in the parent scope.
+ *
+ * Also, `ngIf` recreates elements using their compiled state. An example scenario of this behavior
+ * is if an element's class attribute is directly modified after it's compiled, using something like
+ * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
+ * the added class will be lost because the original compiled state is used to regenerate the element.
+ *
+ * Additionally, you can provide animations via the ngAnimate attribute to animate the **enter**
+ * and **leave** effects.
+ *
+ * @animations
+ * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container
+ * leave - happens just before the ngIf contents are removed from the DOM
+ *
+ * @element ANY
+ * @scope
+ * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
+ * the element is removed from the DOM tree (HTML).
+ *
+ * @example
+ <example animations="true">
+ <file name="index.html">
+ Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/>
+ Show when checked:
+ <span ng-if="checked" ng-animate="'example'">
+ I'm removed when the checkbox is unchecked.
+ </span>
+ </file>
+ <file name="animations.css">
+ .example-leave, .example-enter {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ }
+
+ .example-enter {
+ opacity:0;
+ }
+ .example-enter.example-enter-active {
+ opacity:1;
+ }
+
+ .example-leave {
+ opacity:1;
+ }
+ .example-leave.example-leave-active {
+ opacity:0;
+ }
+ </file>
+ </example>
+ */
+var ngIfDirective = ['$animator', function($animator) {
+ return {
+ transclude: 'element',
+ priority: 1000,
+ terminal: true,
+ restrict: 'A',
+ compile: function (element, attr, transclude) {
+ return function ($scope, $element, $attr) {
+ var animate = $animator($scope, $attr);
+ var childElement, childScope;
+ $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
+ if (childElement) {
+ animate.leave(childElement);
+ childElement = undefined;
+ }
+ if (childScope) {
+ childScope.$destroy();
+ childScope = undefined;
+ }
+ if (toBoolean(value)) {
+ childScope = $scope.$new();
+ transclude(childScope, function (clone) {
+ childElement = clone;
+ animate.enter(clone, $element.parent(), $element);
+ });
+ }
+ });
+ }
+ }
+ }
+}];
+
+/**
+ * @ngdoc directive
* @name ng.directive:ngInclude
* @restrict ECA
*
@@ -13172,6 +14707,13 @@
* (e.g. ngInclude won't work for cross-domain requests on all browsers and for
* file:// access on some browsers).
*
+ * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter**
+ * and **leave** effects.
+ *
+ * @animations
+ * enter - happens just after the ngInclude contents change and a new DOM element is created and injected into the ngInclude container
+ * leave - happens just after the ngInclude contents change and just before the former contents are removed from the DOM
+ *
* @scope
*
* @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
@@ -13186,7 +14728,7 @@
* - Otherwise enable scrolling only if the expression evaluates to truthy value.
*
* @example
- <example>
+ <example animations="true">
<file name="index.html">
<div ng-controller="Ctrl">
<select ng-model="template" ng-options="t.name for t in templates">
@@ -13194,7 +14736,9 @@
</select>
url of the template: <tt>{{template.url}}</tt>
<hr/>
- <div ng-include src="template.url"></div>
+ <div class="example-animate-container"
+ ng-include="template.url"
+ ng-animate="{enter: 'example-enter', leave: 'example-leave'}"></div>
</div>
</file>
<file name="script.js">
@@ -13206,11 +14750,46 @@
}
</file>
<file name="template1.html">
- Content of template1.html
+ <div>Content of template1.html</div>
</file>
<file name="template2.html">
- Content of template2.html
+ <div>Content of template2.html</div>
</file>
+ <file name="animations.css">
+ .example-leave,
+ .example-enter {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ }
+
+ .example-animate-container > * {
+ display:block;
+ padding:10px;
+ }
+
+ .example-enter {
+ top:-50px;
+ }
+ .example-enter.example-enter-active {
+ top:0;
+ }
+
+ .example-leave {
+ top:0;
+ }
+ .example-leave.example-leave-active {
+ top:50px;
+ }
+ </file>
<file name="scenario.js">
it('should load template1.html', function() {
expect(element('.doc-example-live [ng-include]').text()).
@@ -13232,14 +14811,24 @@
/**
* @ngdoc event
+ * @name ng.directive:ngInclude#$includeContentRequested
+ * @eventOf ng.directive:ngInclude
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted every time the ngInclude content is requested.
+ */
+
+
+/**
+ * @ngdoc event
* @name ng.directive:ngInclude#$includeContentLoaded
* @eventOf ng.directive:ngInclude
* @eventType emit on the current ngInclude scope
* @description
* Emitted every time the ngInclude content is reloaded.
*/
-var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile',
- function($http, $templateCache, $anchorScroll, $compile) {
+var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animator',
+ function($http, $templateCache, $anchorScroll, $compile, $animator) {
return {
restrict: 'ECA',
terminal: true,
@@ -13248,7 +14837,8 @@
onloadExp = attr.onload || '',
autoScrollExp = attr.autoscroll;
- return function(scope, element) {
+ return function(scope, element, attr) {
+ var animate = $animator(scope, attr);
var changeCounter = 0,
childScope;
@@ -13257,8 +14847,7 @@
childScope.$destroy();
childScope = null;
}
-
- element.html('');
+ animate.leave(element.contents(), element);
};
scope.$watch(srcExp, function ngIncludeWatchAction(src) {
@@ -13270,10 +14859,13 @@
if (childScope) childScope.$destroy();
childScope = scope.$new();
+ animate.leave(element.contents(), element);
- element.html(response);
- $compile(element.contents())(childScope);
+ var contents = jqLite('<div/>').html(response).contents();
+ animate.enter(contents, element);
+ $compile(contents)(childScope);
+
if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
$anchorScroll();
}
@@ -13283,7 +14875,10 @@
}).error(function() {
if (thisChangeId === changeCounter) clearContent();
});
- } else clearContent();
+ scope.$emit('$includeContentRequested');
+ } else {
+ clearContent();
+ }
});
};
}
@@ -13377,7 +14972,7 @@
* {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_r…
* plural categories} in Angular's default en-US locale: "one" and "other".
*
- * While a pural category may match many numbers (for example, in en-US locale, "other" can match
+ * While a plural category may match many numbers (for example, in en-US locale, "other" can match
* any number that is not 1), an explicit number rule can only match one number. For example, the
* explicit number rule for "3" matches the number 3. You will see the use of plural categories
* and explicit number rules throughout later parts of this documentation.
@@ -13445,7 +15040,7 @@
* plural categories "one" and "other".
*
* @param {string|expression} count The variable to be bounded to.
- * @param {string} when The mapping between plural category to its correspoding strings.
+ * @param {string} when The mapping between plural category to its corresponding strings.
* @param {number=} offset Offset to deduct from the total number.
*
* @example
@@ -13580,11 +15175,18 @@
* * `$middle` – `{boolean}` – true if the repeated element is between the first and last in the iterator.
* * `$last` – `{boolean}` – true if the repeated element is last in the iterator.
*
+ * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter**,
+ * **leave** and **move** effects.
*
+ * @animations
+ * enter - when a new item is added to the list or when an item is revealed after a filter
+ * leave - when an item is removed from the list or when an item is filtered out
+ * move - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
+ *
* @element ANY
* @scope
* @priority 1000
- * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. Two
+ * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
* formats are currently supported:
*
* * `variable in expression` – where variable is the user defined loop variable and `expression`
@@ -13597,181 +15199,368 @@
*
* For example: `(name, age) in {'adam':10, 'amalie':12}`.
*
+ * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function
+ * which can be used to associate the objects in the collection with the DOM elements. If no tractking function
+ * is specified the ng-repeat associates elements by identity in the collection. It is an error to have
+ * more then one tractking function to resolve to the same key. (This would mean that two distinct objects are
+ * mapped to the same DOM element, which is not possible.)
+ *
+ * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements
+ * will be associated by item identity in the array.
+ *
+ * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
+ * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
+ * with the corresponding item in the array by identity. Moving the same object in array would move the DOM
+ * element in the same way ian the DOM.
+ *
+ * For example: `item in items track by item.id` Is a typical pattern when the items come from the database. In this
+ * case the object identity does not matter. Two objects are considered equivalent as long as their `id`
+ * property is same.
+ *
* @example
* This example initializes the scope to a list of names and
* then uses `ngRepeat` to display every person:
- <doc:example>
- <doc:source>
- <div ng-init="friends = [{name:'John', age:25}, {name:'Mary', age:28}]">
- I have {{friends.length}} friends. They are:
- <ul>
- <li ng-repeat="friend in friends">
- [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
- </li>
- </ul>
- </div>
- </doc:source>
- <doc:scenario>
- it('should check ng-repeat', function() {
- var r = using('.doc-example-live').repeater('ul li');
- expect(r.count()).toBe(2);
- expect(r.row(0)).toEqual(["1","John","25"]);
- expect(r.row(1)).toEqual(["2","Mary","28"]);
- });
- </doc:scenario>
- </doc:example>
- */
-var ngRepeatDirective = ngDirective({
- transclude: 'element',
- priority: 1000,
- terminal: true,
- compile: function(element, attr, linker) {
- return function(scope, iterStartElement, attr){
- var expression = attr.ngRepeat;
- var match = expression.match(/^\s*(.+)\s+in\s+(.*)\s*$/),
- lhs, rhs, valueIdent, keyIdent;
- if (! match) {
- throw Error("Expected ngRepeat in form of '_item_ in _collection_' but got '" +
- expression + "'.");
+ <example animations="true">
+ <file name="index.html">
+ <div ng-init="friends = [
+ {name:'John', age:25, gender:'boy'},
+ {name:'Jessie', age:30, gender:'girl'},
+ {name:'Johanna', age:28, gender:'girl'},
+ {name:'Joy', age:15, gender:'girl'},
+ {name:'Mary', age:28, gender:'girl'},
+ {name:'Peter', age:95, gender:'boy'},
+ {name:'Sebastian', age:50, gender:'boy'},
+ {name:'Erika', age:27, gender:'girl'},
+ {name:'Patrick', age:40, gender:'boy'},
+ {name:'Samantha', age:60, gender:'girl'}
+ ]">
+ I have {{friends.length}} friends. They are:
+ <input type="search" ng-model="q" placeholder="filter friends..." />
+ <ul>
+ <li ng-repeat="friend in friends | filter:q"
+ ng-animate="{enter: 'example-repeat-enter',
+ leave: 'example-repeat-leave',
+ move: 'example-repeat-move'}">
+ [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
+ </li>
+ </ul>
+ </div>
+ </file>
+ <file name="animations.css">
+ .example-repeat-enter,
+ .example-repeat-leave,
+ .example-repeat-move {
+ -webkit-transition:all linear 0.5s;
+ -moz-transition:all linear 0.5s;
+ -ms-transition:all linear 0.5s;
+ -o-transition:all linear 0.5s;
+ transition:all linear 0.5s;
}
- lhs = match[1];
- rhs = match[2];
- match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
- if (!match) {
- throw Error("'item' in 'item in collection' should be identifier or (key, value) but got '" +
- lhs + "'.");
+
+ .example-repeat-enter {
+ line-height:0;
+ opacity:0;
}
- valueIdent = match[3] || match[1];
- keyIdent = match[2];
+ .example-repeat-enter.example-repeat-enter-active {
+ line-height:20px;
+ opacity:1;
+ }
- // Store a list of elements from previous run. This is a hash where key is the item from the
- // iterator, and the value is an array of objects with following properties.
- // - scope: bound scope
- // - element: previous element.
- // - index: position
- // We need an array of these objects since the same object can be returned from the iterator.
- // We expect this to be a rare case.
- var lastOrder = new HashQueueMap();
+ .example-repeat-leave {
+ opacity:1;
+ line-height:20px;
+ }
+ .example-repeat-leave.example-repeat-leave-active {
+ opacity:0;
+ line-height:0;
+ }
- scope.$watch(function ngRepeatWatch(scope){
- var index, length,
- collection = scope.$eval(rhs),
- cursor = iterStartElement, // current position of the node
- // Same as lastOrder but it has the current state. It will become the
- // lastOrder on the next iteration.
- nextOrder = new HashQueueMap(),
- arrayBound,
- childScope,
- key, value, // key/value of iteration
- array,
- last; // last object information {scope, element, index}
+ .example-repeat-move { }
+ .example-repeat-move.example-repeat-move-active { }
+ </file>
+ <file name="scenario.js">
+ it('should render initial data set', function() {
+ var r = using('.doc-example-live').repeater('ul li');
+ expect(r.count()).toBe(10);
+ expect(r.row(0)).toEqual(["1","John","25"]);
+ expect(r.row(1)).toEqual(["2","Jessie","30"]);
+ expect(r.row(9)).toEqual(["10","Samantha","60"]);
+ expect(binding('friends.length')).toBe("10");
+ });
+ it('should update repeater when filter predicate changes', function() {
+ var r = using('.doc-example-live').repeater('ul li');
+ expect(r.count()).toBe(10);
+ input('q').enter('ma');
- if (!isArray(collection)) {
- // if object, extract keys, sort them and use to determine order of iteration over obj props
- array = [];
- for(key in collection) {
- if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {
- array.push(key);
- }
+ expect(r.count()).toBe(2);
+ expect(r.row(0)).toEqual(["1","Mary","28"]);
+ expect(r.row(1)).toEqual(["2","Samantha","60"]);
+ });
+ </file>
+ </example>
+ */
+var ngRepeatDirective = ['$parse', '$animator', function($parse, $animator) {
+ var NG_REMOVED = '$$NG_REMOVED';
+ return {
+ transclude: 'element',
+ priority: 1000,
+ terminal: true,
+ compile: function(element, attr, linker) {
+ return function($scope, $element, $attr){
+ var animate = $animator($scope, $attr);
+ var expression = $attr.ngRepeat;
+ var match = expression.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),
+ trackByExp, trackByExpGetter, trackByIdFn, lhs, rhs, valueIdentifier, keyIdentifier,
+ hashFnLocals = {$id: hashKey};
+
+ if (!match) {
+ throw Error("Expected ngRepeat in form of '_item_ in _collection_[ track by _id_]' but got '" +
+ expression + "'.");
+ }
+
+ lhs = match[1];
+ rhs = match[2];
+ trackByExp = match[4];
+
+ if (trackByExp) {
+ trackByExpGetter = $parse(trackByExp);
+ trackByIdFn = function(key, value, index) {
+ // assign key, value, and $index to the locals so that they can be used in hash functions
+ if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
+ hashFnLocals[valueIdentifier] = value;
+ hashFnLocals.$index = index;
+ return trackByExpGetter($scope, hashFnLocals);
+ };
+ } else {
+ trackByIdFn = function(key, value) {
+ return hashKey(value);
}
- array.sort();
- } else {
- array = collection || [];
}
- arrayBound = array.length-1;
+ match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
+ if (!match) {
+ throw Error("'item' in 'item in collection' should be identifier or (key, value) but got '" +
+ lhs + "'.");
+ }
+ valueIdentifier = match[3] || match[1];
+ keyIdentifier = match[2];
- // we are not using forEach for perf reasons (trying to avoid #call)
- for (index = 0, length = array.length; index < length; index++) {
- key = (collection === array) ? index : array[index];
- value = collection[key];
+ // Store a list of elements from previous run. This is a hash where key is the item from the
+ // iterator, and the value is objects with following properties.
+ // - scope: bound scope
+ // - element: previous element.
+ // - index: position
+ var lastBlockMap = {};
- last = lastOrder.shift(value);
+ //watch props
+ $scope.$watchCollection(rhs, function ngRepeatAction(collection){
+ var index, length,
+ cursor = $element, // current position of the node
+ nextCursor,
+ // Same as lastBlockMap but it has the current state. It will become the
+ // lastBlockMap on the next iteration.
+ nextBlockMap = {},
+ arrayLength,
+ childScope,
+ key, value, // key/value of iteration
+ trackById,
+ collectionKeys,
+ block, // last object information {scope, element, id}
+ nextBlockOrder = [];
- if (last) {
- // if we have already seen this object, then we need to reuse the
- // associated scope/element
- childScope = last.scope;
- nextOrder.push(value, last);
- if (index === last.index) {
- // do nothing
- cursor = last.element;
- } else {
- // existing item which got moved
- last.index = index;
- // This may be a noop, if the element is next, but I don't know of a good way to
- // figure this out, since it would require extra DOM access, so let's just hope that
- // the browsers realizes that it is noop, and treats it as such.
- cursor.after(last.element);
- cursor = last.element;
+ if (isArrayLike(collection)) {
+ collectionKeys = collection;
+ } else {
+ // if object, extract keys, sort them and use to determine order of iteration over obj props
+ collectionKeys = [];
+ for (key in collection) {
+ if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {
+ collectionKeys.push(key);
+ }
}
- } else {
- // new item which we don't know about
- childScope = scope.$new();
+ collectionKeys.sort();
}
- childScope[valueIdent] = value;
- if (keyIdent) childScope[keyIdent] = key;
- childScope.$index = index;
+ arrayLength = collectionKeys.length;
- childScope.$first = (index === 0);
- childScope.$last = (index === arrayBound);
- childScope.$middle = !(childScope.$first || childScope.$last);
+ // locate existing items
+ length = nextBlockOrder.length = collectionKeys.length;
+ for(index = 0; index < length; index++) {
+ key = (collection === collectionKeys) ? index : collectionKeys[index];
+ value = collection[key];
+ trackById = trackByIdFn(key, value, index);
+ if(lastBlockMap.hasOwnProperty(trackById)) {
+ block = lastBlockMap[trackById]
+ delete lastBlockMap[trackById];
+ nextBlockMap[trackById] = block;
+ nextBlockOrder[index] = block;
+ } else if (nextBlockMap.hasOwnProperty(trackById)) {
+ // restore lastBlockMap
+ forEach(nextBlockOrder, function(block) {
+ if (block && block.element) lastBlockMap[block.id] = block;
+ });
+ // This is a duplicate and we need to throw an error
+ throw new Error('Duplicates in a repeater are not allowed. Repeater: ' + expression +
+ ' key: ' + trackById);
+ } else {
+ // new never before seen block
+ nextBlockOrder[index] = { id: trackById };
+ nextBlockMap[trackById] = false;
+ }
+ }
- if (!last) {
- linker(childScope, function(clone){
- cursor.after(clone);
- last = {
- scope: childScope,
- element: (cursor = clone),
- index: index
- };
- nextOrder.push(value, last);
- });
+ // remove existing items
+ for (key in lastBlockMap) {
+ if (lastBlockMap.hasOwnProperty(key)) {
+ block = lastBlockMap[key];
+ animate.leave(block.element);
+ block.element[0][NG_REMOVED] = true;
+ block.scope.$destroy();
+ }
}
- }
- //shrink children
- for (key in lastOrder) {
- if (lastOrder.hasOwnProperty(key)) {
- array = lastOrder[key];
- while(array.length) {
- value = array.pop();
- value.element.remove();
- value.scope.$destroy();
+ // we are not using forEach for perf reasons (trying to avoid #call)
+ for (index = 0, length = collectionKeys.length; index < length; index++) {
+ key = (collection === collectionKeys) ? index : collectionKeys[index];
+ value = collection[key];
+ block = nextBlockOrder[index];
+
+ if (block.element) {
+ // if we have already seen this object, then we need to reuse the
+ // associated scope/element
+ childScope = block.scope;
+
+ nextCursor = cursor[0];
+ do {
+ nextCursor = nextCursor.nextSibling;
+ } while(nextCursor && nextCursor[NG_REMOVED]);
+
+ if (block.element[0] == nextCursor) {
+ // do nothing
+ cursor = block.element;
+ } else {
+ // existing item which got moved
+ animate.move(block.element, null, cursor);
+ cursor = block.element;
+ }
+ } else {
+ // new item which we don't know about
+ childScope = $scope.$new();
}
+
+ childScope[valueIdentifier] = value;
+ if (keyIdentifier) childScope[keyIdentifier] = key;
+ childScope.$index = index;
+ childScope.$first = (index === 0);
+ childScope.$last = (index === (arrayLength - 1));
+ childScope.$middle = !(childScope.$first || childScope.$last);
+
+ if (!block.element) {
+ linker(childScope, function(clone) {
+ animate.enter(clone, null, cursor);
+ cursor = clone;
+ block.scope = childScope;
+ block.element = clone;
+ nextBlockMap[block.id] = block;
+ });
+ }
}
- }
+ lastBlockMap = nextBlockMap;
+ });
+ };
+ }
+ };
+}];
- lastOrder = nextOrder;
- });
- };
- }
-});
-
/**
* @ngdoc directive
* @name ng.directive:ngShow
*
* @description
* The `ngShow` and `ngHide` directives show or hide a portion of the DOM tree (HTML)
- * conditionally.
+ * conditionally based on **"truthy"** values evaluated within an {expression}. In other
+ * words, if the expression assigned to **ngShow evaluates to a true value** then **the element is set to visible**
+ * (via `display:block` in css) and **if false** then **the element is set to hidden** (so display:none).
+ * With ngHide this is the reverse whereas true values cause the element itself to become
+ * hidden.
*
+ * Additionally, you can also provide animations via the ngAnimate attribute to animate the **show**
+ * and **hide** effects.
+ *
+ * @animations
+ * show - happens after the ngShow expression evaluates to a truthy value and the contents are set to visible
+ * hide - happens before the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden
+ *
* @element ANY
* @param {expression} ngShow If the {@link guide/expression expression} is truthy
* then the element is shown or hidden respectively.
*
* @example
- <doc:example>
- <doc:source>
- Click me: <input type="checkbox" ng-model="checked"><br/>
- Show: <span ng-show="checked">I show up when your checkbox is checked.</span> <br/>
- Hide: <span ng-hide="checked">I hide when your checkbox is checked.</span>
- </doc:source>
- <doc:scenario>
+ <example animations="true">
+ <file name="index.html">
+ Click me: <input type="checkbox" ng-model="checked"><br/>
+ <div>
+ Show:
+ <span class="check-element"
+ ng-show="checked"
+ ng-animate="{show: 'example-show', hide: 'example-hide'}">
+ <span class="icon-thumbs-up"></span> I show up when your checkbox is checked.
+ </span>
+ </div>
+ <div>
+ Hide:
+ <span class="check-element"
+ ng-hide="checked"
+ ng-animate="{show: 'example-show', hide: 'example-hide'}">
+ <span class="icon-thumbs-down"></span> I hide when your checkbox is checked.
+ </span>
+ </div>
+ </file>
+ <file name="animations.css">
+ .example-show, .example-hide {
+ -webkit-transition:all linear 0.5s;
+ -moz-transition:all linear 0.5s;
+ -ms-transition:all linear 0.5s;
+ -o-transition:all linear 0.5s;
+ transition:all linear 0.5s;
+ }
+
+ .example-show {
+ line-height:0;
+ opacity:0;
+ padding:0 10px;
+ }
+ .example-show-active.example-show-active {
+ line-height:20px;
+ opacity:1;
+ padding:10px;
+ border:1px solid black;
+ background:white;
+ }
+
+ .example-hide {
+ line-height:20px;
+ opacity:1;
+ padding:10px;
+ border:1px solid black;
+ background:white;
+ }
+ .example-hide-active.example-hide-active {
+ line-height:0;
+ opacity:0;
+ padding:0 10px;
+ }
+
+ .check-element {
+ padding:10px;
+ border:1px solid black;
+ background:white;
+ }
+ </file>
+ <file name="scenario.js">
it('should check ng-show / ng-hide', function() {
expect(element('.doc-example-live span:first:hidden').count()).toEqual(1);
expect(element('.doc-example-live span:last:visible').count()).toEqual(1);
@@ -13781,15 +15570,18 @@
expect(element('.doc-example-live span:first:visible').count()).toEqual(1);
expect(element('.doc-example-live span:last:hidden').count()).toEqual(1);
});
- </doc:scenario>
- </doc:example>
+ </file>
+ </example>
*/
//TODO(misko): refactor to remove element from the DOM
-var ngShowDirective = ngDirective(function(scope, element, attr){
- scope.$watch(attr.ngShow, function ngShowWatchAction(value){
- element.css('display', toBoolean(value) ? '' : 'none');
- });
-});
+var ngShowDirective = ['$animator', function($animator) {
+ return function(scope, element, attr) {
+ var animate = $animator(scope, attr);
+ scope.$watch(attr.ngShow, function ngShowWatchAction(value){
+ animate[toBoolean(value) ? 'show' : 'hide'](element);
+ });
+ };
+}];
/**
@@ -13797,39 +15589,108 @@
* @name ng.directive:ngHide
*
* @description
- * The `ngHide` and `ngShow` directives hide or show a portion of the DOM tree (HTML)
- * conditionally.
+ * The `ngShow` and `ngHide` directives show or hide a portion of the DOM tree (HTML)
+ * conditionally based on **"truthy"** values evaluated within an {expression}. In other
+ * words, if the expression assigned to **ngShow evaluates to a true value** then **the element is set to visible**
+ * (via `display:block` in css) and **if false** then **the element is set to hidden** (so display:none).
+ * With ngHide this is the reverse whereas true values cause the element itself to become
+ * hidden.
*
+ * Additionally, you can also provide animations via the ngAnimate attribute to animate the **show**
+ * and **hide** effects.
+ *
+ * @animations
+ * show - happens after the ngHide expression evaluates to a non truthy value and the contents are set to visible
+ * hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden
+ *
* @element ANY
* @param {expression} ngHide If the {@link guide/expression expression} is truthy then
* the element is shown or hidden respectively.
*
* @example
- <doc:example>
- <doc:source>
- Click me: <input type="checkbox" ng-model="checked"><br/>
- Show: <span ng-show="checked">I show up when you checkbox is checked?</span> <br/>
- Hide: <span ng-hide="checked">I hide when you checkbox is checked?</span>
- </doc:source>
- <doc:scenario>
+ <example animations="true">
+ <file name="index.html">
+ Click me: <input type="checkbox" ng-model="checked"><br/>
+ <div>
+ Show:
+ <span class="check-element"
+ ng-show="checked"
+ ng-animate="{show: 'example-show', hide: 'example-hide'}">
+ <span class="icon-thumbs-up"></span> I show up when your checkbox is checked.
+ </span>
+ </div>
+ <div>
+ Hide:
+ <span class="check-element"
+ ng-hide="checked"
+ ng-animate="{show: 'example-show', hide: 'example-hide'}">
+ <span class="icon-thumbs-down"></span> I hide when your checkbox is checked.
+ </span>
+ </div>
+ </file>
+ <file name="animations.css">
+ .example-show, .example-hide {
+ -webkit-transition:all linear 0.5s;
+ -moz-transition:all linear 0.5s;
+ -ms-transition:all linear 0.5s;
+ -o-transition:all linear 0.5s;
+ transition:all linear 0.5s;
+ }
+
+ .example-show {
+ line-height:0;
+ opacity:0;
+ padding:0 10px;
+ }
+ .example-show.example-show-active {
+ line-height:20px;
+ opacity:1;
+ padding:10px;
+ border:1px solid black;
+ background:white;
+ }
+
+ .example-hide {
+ line-height:20px;
+ opacity:1;
+ padding:10px;
+ border:1px solid black;
+ background:white;
+ }
+ .example-hide.example-hide-active {
+ line-height:0;
+ opacity:0;
+ padding:0 10px;
+ }
+
+ .check-element {
+ padding:10px;
+ border:1px solid black;
+ background:white;
+ }
+ </file>
+ <file name="scenario.js">
it('should check ng-show / ng-hide', function() {
- expect(element('.doc-example-live span:first:hidden').count()).toEqual(1);
- expect(element('.doc-example-live span:last:visible').count()).toEqual(1);
+ expect(element('.doc-example-live .check-element:first:hidden').count()).toEqual(1);
+ expect(element('.doc-example-live .check-element:last:visible').count()).toEqual(1);
input('checked').check();
- expect(element('.doc-example-live span:first:visible').count()).toEqual(1);
- expect(element('.doc-example-live span:last:hidden').count()).toEqual(1);
+ expect(element('.doc-example-live .check-element:first:visible').count()).toEqual(1);
+ expect(element('.doc-example-live .check-element:last:hidden').count()).toEqual(1);
});
- </doc:scenario>
- </doc:example>
+ </file>
+ </example>
*/
//TODO(misko): refactor to remove element from the DOM
-var ngHideDirective = ngDirective(function(scope, element, attr){
- scope.$watch(attr.ngHide, function ngHideWatchAction(value){
- element.css('display', toBoolean(value) ? 'none' : '');
- });
-});
+var ngHideDirective = ['$animator', function($animator) {
+ return function(scope, element, attr) {
+ var animate = $animator(scope, attr);
+ scope.$watch(attr.ngHide, function ngHideWatchAction(value){
+ animate[toBoolean(value) ? 'hide' : 'show'](element);
+ });
+ };
+}];
/**
* @ngdoc directive
@@ -13883,92 +15744,161 @@
* @restrict EA
*
* @description
- * Conditionally change the DOM structure.
+ * The ngSwitch directive is used to conditionally swap DOM structure on your template based on a scope expression.
+ * Elements within ngSwitch but without ngSwitchWhen or ngSwitchDefault directives will be preserved at the location
+ * as specified in the template.
*
+ * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
+ * from the template cache), ngSwitch simply choses one of the nested elements and makes it visible based on which element
+ * matches the value obtained from the evaluated expression. In other words, you define a container element
+ * (where you place the directive), place an expression on the **on="..." attribute**
+ * (or the **ng-switch="..." attribute**), define any inner elements inside of the directive and place
+ * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
+ * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
+ * attribute is displayed.
+ *
+ * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter**
+ * and **leave** effects.
+ *
+ * @animations
+ * enter - happens after the ngSwtich contents change and the matched child element is placed inside the container
+ * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
+ *
* @usage
* <ANY ng-switch="expression">
* <ANY ng-switch-when="matchValue1">...</ANY>
* <ANY ng-switch-when="matchValue2">...</ANY>
- * ...
* <ANY ng-switch-default>...</ANY>
* </ANY>
*
* @scope
* @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.
* @paramDescription
- * On child elments add:
+ * On child elements add:
*
* * `ngSwitchWhen`: the case statement to match against. If match then this
- * case will be displayed.
- * * `ngSwitchDefault`: the default case when no other casses match.
+ * case will be displayed. If the same match appears multiple times, all the
+ * elements will be displayed.
+ * * `ngSwitchDefault`: the default case when no other case match. If there
+ * are multiple default cases, all of them will be displayed when no other
+ * case match.
*
+ *
* @example
- <doc:example>
- <doc:source>
- <script>
- function Ctrl($scope) {
- $scope.items = ['settings', 'home', 'other'];
- $scope.selection = $scope.items[0];
- }
- </script>
- <div ng-controller="Ctrl">
- <select ng-model="selection" ng-options="item for item in items">
- </select>
- <tt>selection={{selection}}</tt>
- <hr/>
- <div ng-switch on="selection" >
+ <example animations="true">
+ <file name="index.html">
+ <div ng-controller="Ctrl">
+ <select ng-model="selection" ng-options="item for item in items">
+ </select>
+ <tt>selection={{selection}}</tt>
+ <hr/>
+ <div
+ class="example-animate-container"
+ ng-switch on="selection"
+ ng-animate="{enter: 'example-enter', leave: 'example-leave'}">
<div ng-switch-when="settings">Settings Div</div>
- <span ng-switch-when="home">Home Span</span>
- <span ng-switch-default>default</span>
- </div>
+ <div ng-switch-when="home">Home Span</div>
+ <div ng-switch-default>default</div>
</div>
- </doc:source>
- <doc:scenario>
- it('should start in settings', function() {
- expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Settings Div/);
- });
- it('should change to home', function() {
- select('selection').option('home');
- expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Home Span/);
- });
- it('should select deafault', function() {
- select('selection').option('other');
- expect(element('.doc-example-live [ng-switch]').text()).toMatch(/default/);
- });
- </doc:scenario>
- </doc:example>
- */
-var NG_SWITCH = 'ng-switch';
-var ngSwitchDirective = valueFn({
- restrict: 'EA',
- require: 'ngSwitch',
- // asks for $scope to fool the BC controller module
- controller: ['$scope', function ngSwitchController() {
- this.cases = {};
- }],
- link: function(scope, element, attr, ctrl) {
- var watchExpr = attr.ngSwitch || attr.on,
- selectedTransclude,
- selectedElement,
- selectedScope;
+ </div>
+ </file>
+ <file name="script.js">
+ function Ctrl($scope) {
+ $scope.items = ['settings', 'home', 'other'];
+ $scope.selection = $scope.items[0];
+ }
+ </file>
+ <file name="animations.css">
+ .example-leave, .example-enter {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
- scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
- if (selectedElement) {
- selectedScope.$destroy();
- selectedElement.remove();
- selectedElement = selectedScope = null;
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
}
- if ((selectedTransclude = ctrl.cases['!' + value] || ctrl.cases['?'])) {
- scope.$eval(attr.change);
- selectedScope = scope.$new();
- selectedTransclude(selectedScope, function(caseElement) {
- selectedElement = caseElement;
- element.append(caseElement);
- });
+
+ .example-animate-container > * {
+ display:block;
+ padding:10px;
}
- });
+
+ .example-enter {
+ top:-50px;
+ }
+ .example-enter.example-enter-active {
+ top:0;
+ }
+
+ .example-leave {
+ top:0;
+ }
+ .example-leave.example-leave-active {
+ top:50px;
+ }
+ </file>
+ <file name="scenario.js">
+ it('should start in settings', function() {
+ expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Settings Div/);
+ });
+ it('should change to home', function() {
+ select('selection').option('home');
+ expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Home Span/);
+ });
+ it('should select default', function() {
+ select('selection').option('other');
+ expect(element('.doc-example-live [ng-switch]').text()).toMatch(/default/);
+ });
+ </file>
+ </example>
+ */
+var ngSwitchDirective = ['$animator', function($animator) {
+ return {
+ restrict: 'EA',
+ require: 'ngSwitch',
+
+ // asks for $scope to fool the BC controller module
+ controller: ['$scope', function ngSwitchController() {
+ this.cases = {};
+ }],
+ link: function(scope, element, attr, ngSwitchController) {
+ var animate = $animator(scope, attr);
+ var watchExpr = attr.ngSwitch || attr.on,
+ selectedTranscludes,
+ selectedElements,
+ selectedScopes = [];
+
+ scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
+ for (var i= 0, ii=selectedScopes.length; i<ii; i++) {
+ selectedScopes[i].$destroy();
+ animate.leave(selectedElements[i]);
+ }
+
+ selectedElements = [];
+ selectedScopes = [];
+
+ if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
+ scope.$eval(attr.change);
+ forEach(selectedTranscludes, function(selectedTransclude) {
+ var selectedScope = scope.$new();
+ selectedScopes.push(selectedScope);
+ selectedTransclude.transclude(selectedScope, function(caseElement) {
+ var anchor = selectedTransclude.element;
+
+ selectedElements.push(caseElement);
+ animate.enter(caseElement, anchor.parent(), anchor);
+ });
+ });
+ }
+ });
+ }
}
-});
+}];
var ngSwitchWhenDirective = ngDirective({
transclude: 'element',
@@ -13976,7 +15906,8 @@
require: '^ngSwitch',
compile: function(element, attrs, transclude) {
return function(scope, element, attr, ctrl) {
- ctrl.cases['!' + attrs.ngSwitchWhen] = transclude;
+ ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
+ ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: transclude, element: element });
};
}
});
@@ -13987,7 +15918,8 @@
require: '^ngSwitch',
compile: function(element, attrs, transclude) {
return function(scope, element, attr, ctrl) {
- ctrl.cases['?'] = transclude;
+ ctrl.cases['?'] = (ctrl.cases['?'] || []);
+ ctrl.cases['?'].push({ transclude: transclude, element: element });
};
}
});
@@ -14061,11 +15993,18 @@
* Every time the current route changes, the included view changes with it according to the
* configuration of the `$route` service.
*
+ * Additionally, you can also provide animations via the ngAnimate attribute to animate the **enter**
+ * and **leave** effects.
+ *
+ * @animations
+ * enter - happens just after the ngView contents are changed (when the new view DOM element is inserted into the DOM)
+ * leave - happens just after the current ngView contents change and just before the former contents are removed from the DOM
+ *
* @scope
* @example
- <example module="ngView">
+ <example module="ngView" animations="true">
<file name="index.html">
- <div ng-controller="MainCntl">
+ <div ng-controller="MainCntl as main">
Choose:
<a href="Book/Moby">Moby</a> |
<a href="Book/Moby/ch/1">Moby: Ch1</a> |
@@ -14073,57 +16012,106 @@
<a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
<a href="Book/Scarlet">Scarlet Letter</a><br/>
- <div ng-view></div>
+ <div
+ ng-view
+ class="example-animate-container"
+ ng-animate="{enter: 'example-enter', leave: 'example-leave'}"></div>
<hr />
- <pre>$location.path() = {{$location.path()}}</pre>
- <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>
- <pre>$route.current.params = {{$route.current.params}}</pre>
- <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>
- <pre>$routeParams = {{$routeParams}}</pre>
+ <pre>$location.path() = {{main.$location.path()}}</pre>
+ <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>
+ <pre>$route.current.params = {{main.$route.current.params}}</pre>
+ <pre>$route.current.scope.name = {{main.$route.current.scope.name}}</pre>
+ <pre>$routeParams = {{main.$routeParams}}</pre>
</div>
</file>
<file name="book.html">
- controller: {{name}}<br />
- Book Id: {{params.bookId}}<br />
+ <div>
+ controller: {{book.name}}<br />
+ Book Id: {{book.params.bookId}}<br />
+ </div>
</file>
<file name="chapter.html">
- controller: {{name}}<br />
- Book Id: {{params.bookId}}<br />
- Chapter Id: {{params.chapterId}}
+ <div>
+ controller: {{chapter.name}}<br />
+ Book Id: {{chapter.params.bookId}}<br />
+ Chapter Id: {{chapter.params.chapterId}}
+ </div>
</file>
+ <file name="animations.css">
+ .example-leave, .example-enter {
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+ -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+ -ms-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+ -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+ }
+
+ .example-animate-container {
+ position:relative;
+ height:100px;
+ }
+
+ .example-animate-container > * {
+ display:block;
+ width:100%;
+ border-left:1px solid black;
+
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ padding:10px;
+ }
+
+ .example-enter {
+ left:100%;
+ }
+ .example-enter.example-enter-active {
+ left:0;
+ }
+
+ .example-leave { }
+ .example-leave.example-leave-active {
+ left:-100%;
+ }
+ </file>
+
<file name="script.js">
angular.module('ngView', [], function($routeProvider, $locationProvider) {
$routeProvider.when('/Book/:bookId', {
templateUrl: 'book.html',
- controller: BookCntl
+ controller: BookCntl,
+ controllerAs: 'book'
});
$routeProvider.when('/Book/:bookId/ch/:chapterId', {
templateUrl: 'chapter.html',
- controller: ChapterCntl
+ controller: ChapterCntl,
+ controllerAs: 'chapter'
});
// configure html5 to get links working on jsfiddle
$locationProvider.html5Mode(true);
});
- function MainCntl($scope, $route, $routeParams, $location) {
- $scope.$route = $route;
- $scope.$location = $location;
- $scope.$routeParams = $routeParams;
+ function MainCntl($route, $routeParams, $location) {
+ this.$route = $route;
+ this.$location = $location;
+ this.$routeParams = $routeParams;
}
- function BookCntl($scope, $routeParams) {
- $scope.name = "BookCntl";
- $scope.params = $routeParams;
+ function BookCntl($routeParams) {
+ this.name = "BookCntl";
+ this.params = $routeParams;
}
- function ChapterCntl($scope, $routeParams) {
- $scope.name = "ChapterCntl";
- $scope.params = $routeParams;
+ function ChapterCntl($routeParams) {
+ this.name = "ChapterCntl";
+ this.params = $routeParams;
}
</file>
@@ -14154,15 +16142,16 @@
* Emitted every time the ngView content is reloaded.
*/
var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$compile',
- '$controller',
+ '$controller', '$animator',
function($http, $templateCache, $route, $anchorScroll, $compile,
- $controller) {
+ $controller, $animator) {
return {
restrict: 'ECA',
terminal: true,
link: function(scope, element, attr) {
var lastScope,
- onloadExp = attr.onload || '';
+ onloadExp = attr.onload || '',
+ animate = $animator(scope, attr);
scope.$on('$routeChangeSuccess', update);
update();
@@ -14176,7 +16165,7 @@
}
function clearContent() {
- element.html('');
+ animate.leave(element.contents(), element);
destroyLastScope();
}
@@ -14185,10 +16174,11 @@
template = locals && locals.$template;
if (template) {
- element.html(template);
- destroyLastScope();
+ clearContent();
+ var enterElements = jqLite('<div></div>').html(template).contents();
+ animate.enter(enterElements, element);
- var link = $compile(element.contents()),
+ var link = $compile(enterElements),
current = $route.current,
controller;
@@ -14196,6 +16186,9 @@
if (current.controller) {
locals.$scope = lastScope;
controller = $controller(current.controller, locals);
+ if (current.controllerAs) {
+ lastScope[current.controllerAs] = controller;
+ }
element.children().data('$ngControllerController', controller);
}
@@ -14297,7 +16290,7 @@
* * `label` **`for`** `value` **`in`** `array`
* * `select` **`as`** `label` **`for`** `value` **`in`** `array`
* * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
- * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array`
+ * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
* * for object data sources:
* * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
* * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
@@ -14317,6 +16310,9 @@
* element. If not specified, `select` expression will default to `value`.
* * `group`: The result of this expression will be used to group options using the `<optgroup>`
* DOM element.
+ * * `trackexpr`: Used when working with an array of objects. The result of this expression will be
+ * used to identify the objects in the array. The `trackexpr` will most likely refer to the
+ * `value` variable (e.g. `value.propertyName`).
*
* @example
<doc:example>
@@ -14381,8 +16377,8 @@
var ngOptionsDirective = valueFn({ terminal: true });
var selectDirective = ['$compile', '$parse', function($compile, $parse) {
- //0000111110000000000022220000000000000000000000333300000000000000444444444444444440000000005555555555555555500000006666666666666666600000000000000077770
- var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*)$/,
+ //0000111110000000000022220000000000000000000000333300000000000000444444444444444440000000005555555555555555500000006666666666666666600000000000000007777000000000000000000088888
+ var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/,
nullModelCtrl = {$setViewValue: noop};
return {
@@ -14556,7 +16552,7 @@
if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) {
throw Error(
- "Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
+ "Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_ (track by _expr_)?'" +
" but got '" + optionsExp + "'.");
}
@@ -14566,6 +16562,8 @@
groupByFn = $parse(match[3] || ''),
valueFn = $parse(match[2] ? match[1] : valueName),
valuesFn = $parse(match[7]),
+ track = match[8],
+ trackFn = track ? $parse(match[8]) : null,
// This is an array of array of existing option groups in DOM. We try to reuse these if possible
// optionGroupsCache[0] is the options with no option group
// optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element
@@ -14606,7 +16604,14 @@
if ((optionElement = optionGroup[index].element)[0].selected) {
key = optionElement.val();
if (keyName) locals[keyName] = key;
- locals[valueName] = collection[key];
+ if (trackFn) {
+ for (var trackIndex = 0; trackIndex < collection.length; trackIndex++) {
+ locals[valueName] = collection[trackIndex];
+ if (trackFn(scope, locals) == key) break;
+ }
+ } else {
+ locals[valueName] = collection[key];
+ }
value.push(valueFn(scope, locals));
}
}
@@ -14618,9 +16623,19 @@
} else if (key == ''){
value = null;
} else {
- locals[valueName] = collection[key];
- if (keyName) locals[keyName] = key;
- value = valueFn(scope, locals);
+ if (trackFn) {
+ for (var trackIndex = 0; trackIndex < collection.length; trackIndex++) {
+ locals[valueName] = collection[trackIndex];
+ if (trackFn(scope, locals) == key) {
+ value = valueFn(scope, locals);
+ break;
+ }
+ }
+ } else {
+ locals[valueName] = collection[key];
+ if (keyName) locals[keyName] = key;
+ value = valueFn(scope, locals);
+ }
}
}
ctrl.$setViewValue(value);
@@ -14652,7 +16667,15 @@
label;
if (multiple) {
- selectedSet = new HashMap(modelValue);
+ if (trackFn && isArray(modelValue)) {
+ selectedSet = new HashMap([]);
+ for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) {
+ locals[valueName] = modelValue[trackIndex];
+ selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]);
+ }
+ } else {
+ selectedSet = new HashMap(modelValue);
+ }
}
// We now build up the list of options we need (we merge later)
@@ -14664,15 +16687,21 @@
optionGroupNames.push(optionGroupName);
}
if (multiple) {
- selected = selectedSet.remove(valueFn(scope, locals)) != undefined;
+ selected = selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals)) != undefined;
} else {
- selected = modelValue === valueFn(scope, locals);
+ if (trackFn) {
+ var modelCast = {};
+ modelCast[valueName] = modelValue;
+ selected = trackFn(scope, modelCast) === trackFn(scope, locals);
+ } else {
+ selected = modelValue === valueFn(scope, locals);
+ }
selectedSet = selectedSet || selected; // see if at least one item is selected
}
label = displayFn(scope, locals); // what will be seen by the user
label = label === undefined ? '' : label; // doing displayFn(scope, locals) || '' overwrites zero values
optionGroup.push({
- id: keyName ? keys[index] : index, // either the index into array or key from object
+ id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index), // either the index into array or key from object
label: label,
selected: selected // determine if we should be selected
});
1
0
r131 - in sandbox: nuiton-js-bootstrap nuiton-js-canjs nuiton-js-jquery nuiton-js-jquery/src/site nuiton-js-jquery-i18n-properties nuiton-js-jquery-ui nuiton-js-jstree nuiton-js-leaflet nuiton-js-moment
by echatellier@users.nuiton.org 06 Jul '13
by echatellier@users.nuiton.org 06 Jul '13
06 Jul '13
Author: echatellier
Date: 2013-07-06 17:48:43 +0200 (Sat, 06 Jul 2013)
New Revision: 131
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/131
Log:
svn:ignore
fix site
Added:
sandbox/nuiton-js-jquery/src/site/site_en.xml
Removed:
sandbox/nuiton-js-jquery/src/site/site_fr.xml
Modified:
sandbox/nuiton-js-bootstrap/
sandbox/nuiton-js-canjs/
sandbox/nuiton-js-jquery-i18n-properties/
sandbox/nuiton-js-jquery-ui/pom.xml
sandbox/nuiton-js-jquery/pom.xml
sandbox/nuiton-js-jstree/pom.xml
sandbox/nuiton-js-leaflet/pom.xml
sandbox/nuiton-js-moment/
Property changes on: sandbox/nuiton-js-bootstrap
___________________________________________________________________
Added: svn:ignore
+ .settings
.classpath
.project
Property changes on: sandbox/nuiton-js-canjs
___________________________________________________________________
Added: svn:ignore
+ .settings
.classpath
.project
Modified: sandbox/nuiton-js-jquery/pom.xml
===================================================================
(Binary files differ)
Property changes on: sandbox/nuiton-js-jquery/pom.xml
___________________________________________________________________
Deleted: svn:mime-type
- application/xml
Copied: sandbox/nuiton-js-jquery/src/site/site_en.xml (from rev 130, sandbox/nuiton-js-jquery/src/site/site_fr.xml)
===================================================================
--- sandbox/nuiton-js-jquery/src/site/site_en.xml (rev 0)
+++ sandbox/nuiton-js-jquery/src/site/site_en.xml 2013-07-06 15:48:43 UTC (rev 131)
@@ -0,0 +1,72 @@
+<!--
+ #%L
+ Nuiton JS :: JQuery
+ $Id:$
+ $HeadURL:$
+ %%
+ Copyright (C) 2012 - 2013 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+<project name="${project.name}">
+
+ <bannerLeft>
+ <src alt="NuitonJS">logo.jpg</src>
+ <name>${project.name}</name>
+ <href>index.html</href>
+ </bannerLeft>
+
+ <body>
+
+ <head>
+ <script type="text/javascript"
+ src="http://maven-site.nuiton.org/public/js/mavenpom-site.js">
+ </script>
+
+ <link rel="stylesheet" type="text/css"
+ href="http://maven-site.nuiton.org/public/css/mavenpom-site.css"/>
+ </head>
+
+ <breadcrumbs>
+ <item name="${project.name}" href="${project.url}"/>
+ </breadcrumbs>
+
+ <menu ref="parent"/>
+
+ <menu name="Utilisateurs">
+ <item name="Accueil" href="index.html"/>
+ </menu>
+
+ <menu ref="reports"/>
+
+ <footer>
+
+ <div id='projectMetas'
+ projectversion='${project.version}'
+ platform='${project.platform}'
+ projectid='${project.projectId}'
+ scm='${project.scm.connection}'
+ scmwebeditorenabled='${project.scmwebeditorEnabled}'
+ scmwebeditorurl='${project.scmwebeditorUrl}'
+ siteSourcesType='${project.siteSourcesType}'
+ piwikEnabled='${project.piwikEnabled}'
+ piwikId='${project.piwikId}'>
+ </div>
+ </footer>
+
+ </body>
+
+</project>
Deleted: sandbox/nuiton-js-jquery/src/site/site_fr.xml
===================================================================
--- sandbox/nuiton-js-jquery/src/site/site_fr.xml 2013-07-06 15:45:40 UTC (rev 130)
+++ sandbox/nuiton-js-jquery/src/site/site_fr.xml 2013-07-06 15:48:43 UTC (rev 131)
@@ -1,72 +0,0 @@
-<!--
- #%L
- Nuiton JS :: JQuery
- $Id:$
- $HeadURL:$
- %%
- Copyright (C) 2012 - 2013 CodeLutin
- %%
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Lesser Public License for more details.
-
- You should have received a copy of the GNU General Lesser Public
- License along with this program. If not, see
- <http://www.gnu.org/licenses/lgpl-3.0.html>.
- #L%
- -->
-<project name="${project.name}">
-
- <bannerLeft>
- <src alt="NuitonJS">logo.jpg</src>
- <name>${project.name}</name>
- <href>index.html</href>
- </bannerLeft>
-
- <body>
-
- <head>
- <script type="text/javascript"
- src="http://maven-site.nuiton.org/public/js/mavenpom-site.js">
- </script>
-
- <link rel="stylesheet" type="text/css"
- href="http://maven-site.nuiton.org/public/css/mavenpom-site.css"/>
- </head>
-
- <breadcrumbs>
- <item name="${project.name}" href="${project.url}"/>
- </breadcrumbs>
-
- <menu ref="parent"/>
-
- <menu name="Utilisateurs">
- <item name="Accueil" href="index.html"/>
- </menu>
-
- <menu ref="reports"/>
-
- <footer>
-
- <div id='projectMetas'
- projectversion='${project.version}'
- platform='${project.platform}'
- projectid='${project.projectId}'
- scm='${project.scm.connection}'
- scmwebeditorenabled='${project.scmwebeditorEnabled}'
- scmwebeditorurl='${project.scmwebeditorUrl}'
- siteSourcesType='${project.siteSourcesType}'
- piwikEnabled='${project.piwikEnabled}'
- piwikId='${project.piwikId}'>
- </div>
- </footer>
-
- </body>
-
-</project>
Property changes on: sandbox/nuiton-js-jquery-i18n-properties
___________________________________________________________________
Added: svn:ignore
+ .settings
.classpath
.project
Property changes on: sandbox/nuiton-js-jquery-ui/pom.xml
___________________________________________________________________
Deleted: svn:mime-type
- application/xml
Property changes on: sandbox/nuiton-js-jstree/pom.xml
___________________________________________________________________
Deleted: svn:mime-type
- application/xml
Property changes on: sandbox/nuiton-js-leaflet/pom.xml
___________________________________________________________________
Deleted: svn:mime-type
- application/xml
Property changes on: sandbox/nuiton-js-moment
___________________________________________________________________
Added: svn:ignore
+ .settings
.classpath
.project
1
0
Author: echatellier
Date: 2013-07-06 17:45:40 +0200 (Sat, 06 Jul 2013)
New Revision: 130
Url: http://nuiton.org/projects/nuiton-js/repository/revisions/130
Log:
Fix mistake on tag :(
Modified:
tags/nuiton-js-jquery-1.10.1-1/pom.xml
Modified: tags/nuiton-js-jquery-1.10.1-1/pom.xml
===================================================================
(Binary files differ)
1
0