From 16fc9a21550c95e0fa6df958530841f8ba7f7343 Mon Sep 17 00:00:00 2001 From: Michael Neale Date: Tue, 20 Aug 2013 15:40:53 +1000 Subject: [PATCH 001/115] Jasmine needs to be listed as a framework karma conf is now exported functions how embarrassing - now it really should work need ng-scenario for e2e tests need karma-junit-reporter trying without jasmine trying some other plugins adding jasmine in I will stab someone ng-scenario is probably needed trying adding karma-ng-scenario need a package.json to specify dev deps normalise quotes --- config/karma-e2e.conf.js | 47 ++++++++++++++++++++++++++-------------- config/karma.conf.js | 43 ++++++++++++++++++++++-------------- package.json | 11 ++++++++++ 3 files changed, 69 insertions(+), 32 deletions(-) create mode 100644 package.json diff --git a/config/karma-e2e.conf.js b/config/karma-e2e.conf.js index 51f51d2ee3..f5a324fafc 100644 --- a/config/karma-e2e.conf.js +++ b/config/karma-e2e.conf.js @@ -1,22 +1,37 @@ -basePath = '../'; +module.exports = function(config){ + config.set({ -files = [ - ANGULAR_SCENARIO, - ANGULAR_SCENARIO_ADAPTER, - 'test/e2e/**/*.js' -]; -autoWatch = false; + basePath : '../', -browsers = ['Chrome']; + files : [ + 'test/e2e/**/*.js' + ], -singleRun = true; + autoWatch : false, -proxies = { - '/': 'http://localhost:8000/' -}; + browsers : ['Chrome'], + + frameworks: ['ng-scenario'], + + singleRun : true, + + proxies : { + '/': 'http://localhost:8000/' + }, + + plugins : [ + 'karma-junit-reporter', + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-jasmine', + 'karma-ng-scenario' + ], + + junitReporter : { + outputFile: 'test_out/e2e.xml', + suite: 'e2e' + } + +})} -junitReporter = { - outputFile: 'test_out/e2e.xml', - suite: 'e2e' -}; diff --git a/config/karma.conf.js b/config/karma.conf.js index ad0ade4777..b677db7489 100644 --- a/config/karma.conf.js +++ b/config/karma.conf.js @@ -1,20 +1,31 @@ -basePath = '../'; +module.exports = function(config){ + config.set({ + basePath : '../', -files = [ - JASMINE, - JASMINE_ADAPTER, - 'app/lib/angular/angular.js', - 'app/lib/angular/angular-*.js', - 'test/lib/angular/angular-mocks.js', - 'app/js/**/*.js', - 'test/unit/**/*.js' -]; + files : [ + 'app/lib/angular/angular.js', + 'app/lib/angular/angular-*.js', + 'test/lib/angular/angular-mocks.js', + 'app/js/**/*.js', + 'test/unit/**/*.js' + ], -autoWatch = true; + autoWatch : true, -browsers = ['Chrome']; + frameworks: ['jasmine'], -junitReporter = { - outputFile: 'test_out/unit.xml', - suite: 'unit' -}; + browsers : ['Chrome'], + + plugins : [ + 'karma-junit-reporter', + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-jasmine' + ], + + junitReporter : { + outputFile: 'test_out/unit.xml', + suite: 'unit' + } + +})} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..d3f83255d6 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "angualrjs-seed", + "description": "A starter project for angular js", + "devDependencies": { + "phantomjs" : "*", + "karma" : "*", + "karma-junit-reporter" : "*", + "karma-jasmine" : "*", + "karma-ng-scenario" : "*" + } +} \ No newline at end of file From 3a588bfc4607e349d2af3f5797968fead3d1ca1d Mon Sep 17 00:00:00 2001 From: Brian Ford Date: Wed, 9 Oct 2013 14:24:17 -0700 Subject: [PATCH 002/115] add license file --- LICENSE | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..f2d3ff7a20 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + From 647517ece8e0817d390577348a524e186aa2ab81 Mon Sep 17 00:00:00 2001 From: Brian Ford Date: Wed, 9 Oct 2013 15:35:37 -0700 Subject: [PATCH 003/115] upgrade to angular 1.2.0-rc.2 barehand-atomsplitting --- app/lib/angular/angular-animate.js | 708 + app/lib/angular/angular-animate.min.js | 15 + app/lib/angular/angular-animate.min.js.map | 8 + app/lib/angular/angular-cookies.js | 21 +- app/lib/angular/angular-cookies.min.js | 9 +- app/lib/angular/angular-cookies.min.js.map | 8 + app/lib/angular/angular-loader.js | 53 +- app/lib/angular/angular-loader.min.js | 9 +- app/lib/angular/angular-loader.min.js.map | 8 + app/lib/angular/angular-resource.js | 288 +- app/lib/angular/angular-resource.min.js | 16 +- app/lib/angular/angular-resource.min.js.map | 8 + app/lib/angular/angular-route.js | 871 + app/lib/angular/angular-route.min.js | 15 + app/lib/angular/angular-route.min.js.map | 8 + app/lib/angular/angular-sanitize.js | 144 +- app/lib/angular/angular-sanitize.min.js | 20 +- app/lib/angular/angular-sanitize.min.js.map | 8 + app/lib/angular/angular-touch.js | 553 + app/lib/angular/angular-touch.min.js | 14 + app/lib/angular/angular-touch.min.js.map | 8 + app/lib/angular/angular.js | 9843 ++-- app/lib/angular/angular.min.js | 341 +- app/lib/angular/angular.min.js.map | 8 + app/lib/angular/errors.json | 1 + app/lib/angular/i18n/angular-locale_af-na.js | 98 + app/lib/angular/i18n/angular-locale_af-za.js | 98 + app/lib/angular/i18n/angular-locale_af.js | 98 + app/lib/angular/i18n/angular-locale_am-et.js | 98 + app/lib/angular/i18n/angular-locale_am.js | 98 + app/lib/angular/i18n/angular-locale_ar-001.js | 98 + app/lib/angular/i18n/angular-locale_ar-ae.js | 98 + app/lib/angular/i18n/angular-locale_ar-bh.js | 98 + app/lib/angular/i18n/angular-locale_ar-dz.js | 98 + app/lib/angular/i18n/angular-locale_ar-eg.js | 98 + app/lib/angular/i18n/angular-locale_ar-iq.js | 98 + app/lib/angular/i18n/angular-locale_ar-jo.js | 98 + app/lib/angular/i18n/angular-locale_ar-kw.js | 98 + app/lib/angular/i18n/angular-locale_ar-lb.js | 98 + app/lib/angular/i18n/angular-locale_ar-ly.js | 98 + app/lib/angular/i18n/angular-locale_ar-ma.js | 98 + app/lib/angular/i18n/angular-locale_ar-om.js | 98 + app/lib/angular/i18n/angular-locale_ar-qa.js | 98 + app/lib/angular/i18n/angular-locale_ar-sa.js | 98 + app/lib/angular/i18n/angular-locale_ar-sd.js | 98 + app/lib/angular/i18n/angular-locale_ar-sy.js | 98 + app/lib/angular/i18n/angular-locale_ar-tn.js | 98 + app/lib/angular/i18n/angular-locale_ar-ye.js | 98 + app/lib/angular/i18n/angular-locale_ar.js | 98 + app/lib/angular/i18n/angular-locale_bg-bg.js | 98 + app/lib/angular/i18n/angular-locale_bg.js | 98 + app/lib/angular/i18n/angular-locale_bn-bd.js | 98 + app/lib/angular/i18n/angular-locale_bn-in.js | 98 + app/lib/angular/i18n/angular-locale_bn.js | 98 + app/lib/angular/i18n/angular-locale_ca-ad.js | 98 + app/lib/angular/i18n/angular-locale_ca-es.js | 98 + app/lib/angular/i18n/angular-locale_ca.js | 98 + app/lib/angular/i18n/angular-locale_cs-cz.js | 98 + app/lib/angular/i18n/angular-locale_cs.js | 98 + app/lib/angular/i18n/angular-locale_da-dk.js | 98 + app/lib/angular/i18n/angular-locale_da.js | 98 + app/lib/angular/i18n/angular-locale_de-at.js | 98 + app/lib/angular/i18n/angular-locale_de-be.js | 98 + app/lib/angular/i18n/angular-locale_de-ch.js | 98 + app/lib/angular/i18n/angular-locale_de-de.js | 98 + app/lib/angular/i18n/angular-locale_de-li.js | 98 + app/lib/angular/i18n/angular-locale_de-lu.js | 98 + app/lib/angular/i18n/angular-locale_de.js | 98 + app/lib/angular/i18n/angular-locale_el-cy.js | 98 + app/lib/angular/i18n/angular-locale_el-gr.js | 98 + app/lib/angular/i18n/angular-locale_el.js | 98 + app/lib/angular/i18n/angular-locale_en-as.js | 98 + app/lib/angular/i18n/angular-locale_en-au.js | 98 + app/lib/angular/i18n/angular-locale_en-bb.js | 98 + app/lib/angular/i18n/angular-locale_en-be.js | 98 + app/lib/angular/i18n/angular-locale_en-bm.js | 98 + app/lib/angular/i18n/angular-locale_en-bw.js | 98 + app/lib/angular/i18n/angular-locale_en-bz.js | 98 + app/lib/angular/i18n/angular-locale_en-ca.js | 98 + .../angular/i18n/angular-locale_en-dsrt-us.js | 98 + .../angular/i18n/angular-locale_en-dsrt.js | 98 + app/lib/angular/i18n/angular-locale_en-fm.js | 98 + app/lib/angular/i18n/angular-locale_en-gb.js | 98 + app/lib/angular/i18n/angular-locale_en-gu.js | 98 + app/lib/angular/i18n/angular-locale_en-gy.js | 98 + app/lib/angular/i18n/angular-locale_en-hk.js | 98 + app/lib/angular/i18n/angular-locale_en-ie.js | 98 + app/lib/angular/i18n/angular-locale_en-in.js | 98 + app/lib/angular/i18n/angular-locale_en-iso.js | 98 + app/lib/angular/i18n/angular-locale_en-jm.js | 98 + app/lib/angular/i18n/angular-locale_en-mh.js | 98 + app/lib/angular/i18n/angular-locale_en-mp.js | 98 + app/lib/angular/i18n/angular-locale_en-mt.js | 98 + app/lib/angular/i18n/angular-locale_en-mu.js | 98 + app/lib/angular/i18n/angular-locale_en-na.js | 98 + app/lib/angular/i18n/angular-locale_en-nz.js | 98 + app/lib/angular/i18n/angular-locale_en-ph.js | 98 + app/lib/angular/i18n/angular-locale_en-pk.js | 98 + app/lib/angular/i18n/angular-locale_en-pr.js | 98 + app/lib/angular/i18n/angular-locale_en-pw.js | 98 + app/lib/angular/i18n/angular-locale_en-sg.js | 98 + app/lib/angular/i18n/angular-locale_en-tc.js | 98 + app/lib/angular/i18n/angular-locale_en-tt.js | 98 + app/lib/angular/i18n/angular-locale_en-um.js | 98 + app/lib/angular/i18n/angular-locale_en-us.js | 98 + app/lib/angular/i18n/angular-locale_en-vg.js | 98 + app/lib/angular/i18n/angular-locale_en-vi.js | 98 + app/lib/angular/i18n/angular-locale_en-za.js | 98 + app/lib/angular/i18n/angular-locale_en-zw.js | 98 + app/lib/angular/i18n/angular-locale_en.js | 98 + app/lib/angular/i18n/angular-locale_es-419.js | 98 + app/lib/angular/i18n/angular-locale_es-ar.js | 98 + app/lib/angular/i18n/angular-locale_es-bo.js | 98 + app/lib/angular/i18n/angular-locale_es-cl.js | 98 + app/lib/angular/i18n/angular-locale_es-co.js | 98 + app/lib/angular/i18n/angular-locale_es-cr.js | 98 + app/lib/angular/i18n/angular-locale_es-do.js | 98 + app/lib/angular/i18n/angular-locale_es-ea.js | 98 + app/lib/angular/i18n/angular-locale_es-ec.js | 98 + app/lib/angular/i18n/angular-locale_es-es.js | 98 + app/lib/angular/i18n/angular-locale_es-gq.js | 98 + app/lib/angular/i18n/angular-locale_es-gt.js | 98 + app/lib/angular/i18n/angular-locale_es-hn.js | 98 + app/lib/angular/i18n/angular-locale_es-ic.js | 98 + app/lib/angular/i18n/angular-locale_es-mx.js | 98 + app/lib/angular/i18n/angular-locale_es-ni.js | 98 + app/lib/angular/i18n/angular-locale_es-pa.js | 98 + app/lib/angular/i18n/angular-locale_es-pe.js | 98 + app/lib/angular/i18n/angular-locale_es-pr.js | 98 + app/lib/angular/i18n/angular-locale_es-py.js | 98 + app/lib/angular/i18n/angular-locale_es-sv.js | 98 + app/lib/angular/i18n/angular-locale_es-us.js | 98 + app/lib/angular/i18n/angular-locale_es-uy.js | 98 + app/lib/angular/i18n/angular-locale_es-ve.js | 98 + app/lib/angular/i18n/angular-locale_es.js | 98 + app/lib/angular/i18n/angular-locale_et-ee.js | 98 + app/lib/angular/i18n/angular-locale_et.js | 98 + app/lib/angular/i18n/angular-locale_eu-es.js | 98 + app/lib/angular/i18n/angular-locale_eu.js | 98 + app/lib/angular/i18n/angular-locale_fa-af.js | 98 + app/lib/angular/i18n/angular-locale_fa-ir.js | 98 + app/lib/angular/i18n/angular-locale_fa.js | 98 + app/lib/angular/i18n/angular-locale_fi-fi.js | 98 + app/lib/angular/i18n/angular-locale_fi.js | 98 + app/lib/angular/i18n/angular-locale_fil-ph.js | 98 + app/lib/angular/i18n/angular-locale_fil.js | 98 + app/lib/angular/i18n/angular-locale_fr-be.js | 98 + app/lib/angular/i18n/angular-locale_fr-bf.js | 98 + app/lib/angular/i18n/angular-locale_fr-bi.js | 98 + app/lib/angular/i18n/angular-locale_fr-bj.js | 98 + app/lib/angular/i18n/angular-locale_fr-bl.js | 98 + app/lib/angular/i18n/angular-locale_fr-ca.js | 98 + app/lib/angular/i18n/angular-locale_fr-cd.js | 98 + app/lib/angular/i18n/angular-locale_fr-cf.js | 98 + app/lib/angular/i18n/angular-locale_fr-cg.js | 98 + app/lib/angular/i18n/angular-locale_fr-ch.js | 98 + app/lib/angular/i18n/angular-locale_fr-ci.js | 98 + app/lib/angular/i18n/angular-locale_fr-cm.js | 98 + app/lib/angular/i18n/angular-locale_fr-dj.js | 98 + app/lib/angular/i18n/angular-locale_fr-fr.js | 98 + app/lib/angular/i18n/angular-locale_fr-ga.js | 98 + app/lib/angular/i18n/angular-locale_fr-gf.js | 98 + app/lib/angular/i18n/angular-locale_fr-gn.js | 98 + app/lib/angular/i18n/angular-locale_fr-gp.js | 98 + app/lib/angular/i18n/angular-locale_fr-gq.js | 98 + app/lib/angular/i18n/angular-locale_fr-km.js | 98 + app/lib/angular/i18n/angular-locale_fr-lu.js | 98 + app/lib/angular/i18n/angular-locale_fr-mc.js | 98 + app/lib/angular/i18n/angular-locale_fr-mf.js | 98 + app/lib/angular/i18n/angular-locale_fr-mg.js | 98 + app/lib/angular/i18n/angular-locale_fr-ml.js | 98 + app/lib/angular/i18n/angular-locale_fr-mq.js | 98 + app/lib/angular/i18n/angular-locale_fr-ne.js | 98 + app/lib/angular/i18n/angular-locale_fr-re.js | 98 + app/lib/angular/i18n/angular-locale_fr-yt.js | 98 + app/lib/angular/i18n/angular-locale_fr.js | 98 + app/lib/angular/i18n/angular-locale_gl-es.js | 98 + app/lib/angular/i18n/angular-locale_gl.js | 98 + app/lib/angular/i18n/angular-locale_gsw-ch.js | 98 + app/lib/angular/i18n/angular-locale_gsw.js | 98 + app/lib/angular/i18n/angular-locale_gu-in.js | 98 + app/lib/angular/i18n/angular-locale_gu.js | 98 + app/lib/angular/i18n/angular-locale_he-il.js | 98 + app/lib/angular/i18n/angular-locale_he.js | 98 + app/lib/angular/i18n/angular-locale_hi-in.js | 98 + app/lib/angular/i18n/angular-locale_hi.js | 98 + app/lib/angular/i18n/angular-locale_hr-hr.js | 98 + app/lib/angular/i18n/angular-locale_hr.js | 98 + app/lib/angular/i18n/angular-locale_hu-hu.js | 98 + app/lib/angular/i18n/angular-locale_hu.js | 98 + app/lib/angular/i18n/angular-locale_id-id.js | 98 + app/lib/angular/i18n/angular-locale_id.js | 98 + app/lib/angular/i18n/angular-locale_in.js | 98 + app/lib/angular/i18n/angular-locale_is-is.js | 98 + app/lib/angular/i18n/angular-locale_is.js | 98 + app/lib/angular/i18n/angular-locale_it-it.js | 98 + app/lib/angular/i18n/angular-locale_it-sm.js | 98 + app/lib/angular/i18n/angular-locale_it.js | 98 + app/lib/angular/i18n/angular-locale_iw.js | 98 + app/lib/angular/i18n/angular-locale_ja-jp.js | 98 + app/lib/angular/i18n/angular-locale_ja.js | 98 + app/lib/angular/i18n/angular-locale_kn-in.js | 98 + app/lib/angular/i18n/angular-locale_kn.js | 98 + app/lib/angular/i18n/angular-locale_ko-kr.js | 98 + app/lib/angular/i18n/angular-locale_ko.js | 98 + app/lib/angular/i18n/angular-locale_ln-cd.js | 98 + app/lib/angular/i18n/angular-locale_ln.js | 98 + app/lib/angular/i18n/angular-locale_lt-lt.js | 98 + app/lib/angular/i18n/angular-locale_lt.js | 98 + app/lib/angular/i18n/angular-locale_lv-lv.js | 98 + app/lib/angular/i18n/angular-locale_lv.js | 98 + app/lib/angular/i18n/angular-locale_ml-in.js | 98 + app/lib/angular/i18n/angular-locale_ml.js | 98 + app/lib/angular/i18n/angular-locale_mr-in.js | 98 + app/lib/angular/i18n/angular-locale_mr.js | 98 + app/lib/angular/i18n/angular-locale_ms-my.js | 98 + app/lib/angular/i18n/angular-locale_ms.js | 98 + app/lib/angular/i18n/angular-locale_mt-mt.js | 98 + app/lib/angular/i18n/angular-locale_mt.js | 98 + app/lib/angular/i18n/angular-locale_nl-cw.js | 98 + app/lib/angular/i18n/angular-locale_nl-nl.js | 98 + app/lib/angular/i18n/angular-locale_nl-sx.js | 98 + app/lib/angular/i18n/angular-locale_nl.js | 98 + app/lib/angular/i18n/angular-locale_no.js | 98 + app/lib/angular/i18n/angular-locale_or-in.js | 98 + app/lib/angular/i18n/angular-locale_or.js | 98 + app/lib/angular/i18n/angular-locale_pl-pl.js | 98 + app/lib/angular/i18n/angular-locale_pl.js | 98 + app/lib/angular/i18n/angular-locale_pt-br.js | 98 + app/lib/angular/i18n/angular-locale_pt-pt.js | 98 + app/lib/angular/i18n/angular-locale_pt.js | 98 + app/lib/angular/i18n/angular-locale_ro-ro.js | 98 + app/lib/angular/i18n/angular-locale_ro.js | 98 + app/lib/angular/i18n/angular-locale_ru-ru.js | 98 + app/lib/angular/i18n/angular-locale_ru.js | 98 + app/lib/angular/i18n/angular-locale_sk-sk.js | 98 + app/lib/angular/i18n/angular-locale_sk.js | 98 + app/lib/angular/i18n/angular-locale_sl-si.js | 98 + app/lib/angular/i18n/angular-locale_sl.js | 98 + app/lib/angular/i18n/angular-locale_sq-al.js | 98 + app/lib/angular/i18n/angular-locale_sq.js | 98 + .../angular/i18n/angular-locale_sr-cyrl-rs.js | 98 + .../angular/i18n/angular-locale_sr-latn-rs.js | 98 + app/lib/angular/i18n/angular-locale_sr.js | 98 + app/lib/angular/i18n/angular-locale_sv-se.js | 98 + app/lib/angular/i18n/angular-locale_sv.js | 98 + app/lib/angular/i18n/angular-locale_sw-tz.js | 98 + app/lib/angular/i18n/angular-locale_sw.js | 98 + app/lib/angular/i18n/angular-locale_ta-in.js | 98 + app/lib/angular/i18n/angular-locale_ta.js | 98 + app/lib/angular/i18n/angular-locale_te-in.js | 98 + app/lib/angular/i18n/angular-locale_te.js | 98 + app/lib/angular/i18n/angular-locale_th-th.js | 98 + app/lib/angular/i18n/angular-locale_th.js | 98 + app/lib/angular/i18n/angular-locale_tl.js | 98 + app/lib/angular/i18n/angular-locale_tr-tr.js | 98 + app/lib/angular/i18n/angular-locale_tr.js | 98 + app/lib/angular/i18n/angular-locale_uk-ua.js | 98 + app/lib/angular/i18n/angular-locale_uk.js | 98 + app/lib/angular/i18n/angular-locale_ur-pk.js | 98 + app/lib/angular/i18n/angular-locale_ur.js | 98 + app/lib/angular/i18n/angular-locale_vi-vn.js | 98 + app/lib/angular/i18n/angular-locale_vi.js | 98 + app/lib/angular/i18n/angular-locale_zh-cn.js | 98 + .../angular/i18n/angular-locale_zh-hans-cn.js | 98 + app/lib/angular/i18n/angular-locale_zh-hk.js | 98 + app/lib/angular/i18n/angular-locale_zh-tw.js | 98 + app/lib/angular/i18n/angular-locale_zh.js | 98 + app/lib/angular/i18n/angular-locale_zu-za.js | 98 + app/lib/angular/i18n/angular-locale_zu.js | 98 + app/lib/angular/version.json | 1 + app/lib/angular/version.txt | 2 +- test/lib/angular/angular-mocks.js | 492 +- test/lib/angular/angular-scenario.js | 39681 +++++++++------- test/lib/angular/version.txt | 2 +- 275 files changed, 55151 insertions(+), 22022 deletions(-) create mode 100755 app/lib/angular/angular-animate.js create mode 100755 app/lib/angular/angular-animate.min.js create mode 100755 app/lib/angular/angular-animate.min.js.map mode change 100644 => 100755 app/lib/angular/angular-cookies.js mode change 100644 => 100755 app/lib/angular/angular-cookies.min.js create mode 100755 app/lib/angular/angular-cookies.min.js.map mode change 100644 => 100755 app/lib/angular/angular-loader.js mode change 100644 => 100755 app/lib/angular/angular-loader.min.js create mode 100755 app/lib/angular/angular-loader.min.js.map mode change 100644 => 100755 app/lib/angular/angular-resource.js mode change 100644 => 100755 app/lib/angular/angular-resource.min.js create mode 100755 app/lib/angular/angular-resource.min.js.map create mode 100755 app/lib/angular/angular-route.js create mode 100755 app/lib/angular/angular-route.min.js create mode 100755 app/lib/angular/angular-route.min.js.map mode change 100644 => 100755 app/lib/angular/angular-sanitize.js mode change 100644 => 100755 app/lib/angular/angular-sanitize.min.js create mode 100755 app/lib/angular/angular-sanitize.min.js.map create mode 100755 app/lib/angular/angular-touch.js create mode 100755 app/lib/angular/angular-touch.min.js create mode 100755 app/lib/angular/angular-touch.min.js.map mode change 100644 => 100755 app/lib/angular/angular.js mode change 100644 => 100755 app/lib/angular/angular.min.js create mode 100755 app/lib/angular/angular.min.js.map create mode 100755 app/lib/angular/errors.json create mode 100755 app/lib/angular/i18n/angular-locale_af-na.js create mode 100755 app/lib/angular/i18n/angular-locale_af-za.js create mode 100755 app/lib/angular/i18n/angular-locale_af.js create mode 100755 app/lib/angular/i18n/angular-locale_am-et.js create mode 100755 app/lib/angular/i18n/angular-locale_am.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-001.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-ae.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-bh.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-dz.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-eg.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-iq.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-jo.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-kw.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-lb.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-ly.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-ma.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-om.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-qa.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-sa.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-sd.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-sy.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-tn.js create mode 100755 app/lib/angular/i18n/angular-locale_ar-ye.js create mode 100755 app/lib/angular/i18n/angular-locale_ar.js create mode 100755 app/lib/angular/i18n/angular-locale_bg-bg.js create mode 100755 app/lib/angular/i18n/angular-locale_bg.js create mode 100755 app/lib/angular/i18n/angular-locale_bn-bd.js create mode 100755 app/lib/angular/i18n/angular-locale_bn-in.js create mode 100755 app/lib/angular/i18n/angular-locale_bn.js create mode 100755 app/lib/angular/i18n/angular-locale_ca-ad.js create mode 100755 app/lib/angular/i18n/angular-locale_ca-es.js create mode 100755 app/lib/angular/i18n/angular-locale_ca.js create mode 100755 app/lib/angular/i18n/angular-locale_cs-cz.js create mode 100755 app/lib/angular/i18n/angular-locale_cs.js create mode 100755 app/lib/angular/i18n/angular-locale_da-dk.js create mode 100755 app/lib/angular/i18n/angular-locale_da.js create mode 100755 app/lib/angular/i18n/angular-locale_de-at.js create mode 100755 app/lib/angular/i18n/angular-locale_de-be.js create mode 100755 app/lib/angular/i18n/angular-locale_de-ch.js create mode 100755 app/lib/angular/i18n/angular-locale_de-de.js create mode 100755 app/lib/angular/i18n/angular-locale_de-li.js create mode 100755 app/lib/angular/i18n/angular-locale_de-lu.js create mode 100755 app/lib/angular/i18n/angular-locale_de.js create mode 100755 app/lib/angular/i18n/angular-locale_el-cy.js create mode 100755 app/lib/angular/i18n/angular-locale_el-gr.js create mode 100755 app/lib/angular/i18n/angular-locale_el.js create mode 100755 app/lib/angular/i18n/angular-locale_en-as.js create mode 100755 app/lib/angular/i18n/angular-locale_en-au.js create mode 100755 app/lib/angular/i18n/angular-locale_en-bb.js create mode 100755 app/lib/angular/i18n/angular-locale_en-be.js create mode 100755 app/lib/angular/i18n/angular-locale_en-bm.js create mode 100755 app/lib/angular/i18n/angular-locale_en-bw.js create mode 100755 app/lib/angular/i18n/angular-locale_en-bz.js create mode 100755 app/lib/angular/i18n/angular-locale_en-ca.js create mode 100755 app/lib/angular/i18n/angular-locale_en-dsrt-us.js create mode 100755 app/lib/angular/i18n/angular-locale_en-dsrt.js create mode 100755 app/lib/angular/i18n/angular-locale_en-fm.js create mode 100755 app/lib/angular/i18n/angular-locale_en-gb.js create mode 100755 app/lib/angular/i18n/angular-locale_en-gu.js create mode 100755 app/lib/angular/i18n/angular-locale_en-gy.js create mode 100755 app/lib/angular/i18n/angular-locale_en-hk.js create mode 100755 app/lib/angular/i18n/angular-locale_en-ie.js create mode 100755 app/lib/angular/i18n/angular-locale_en-in.js create mode 100755 app/lib/angular/i18n/angular-locale_en-iso.js create mode 100755 app/lib/angular/i18n/angular-locale_en-jm.js create mode 100755 app/lib/angular/i18n/angular-locale_en-mh.js create mode 100755 app/lib/angular/i18n/angular-locale_en-mp.js create mode 100755 app/lib/angular/i18n/angular-locale_en-mt.js create mode 100755 app/lib/angular/i18n/angular-locale_en-mu.js create mode 100755 app/lib/angular/i18n/angular-locale_en-na.js create mode 100755 app/lib/angular/i18n/angular-locale_en-nz.js create mode 100755 app/lib/angular/i18n/angular-locale_en-ph.js create mode 100755 app/lib/angular/i18n/angular-locale_en-pk.js create mode 100755 app/lib/angular/i18n/angular-locale_en-pr.js create mode 100755 app/lib/angular/i18n/angular-locale_en-pw.js create mode 100755 app/lib/angular/i18n/angular-locale_en-sg.js create mode 100755 app/lib/angular/i18n/angular-locale_en-tc.js create mode 100755 app/lib/angular/i18n/angular-locale_en-tt.js create mode 100755 app/lib/angular/i18n/angular-locale_en-um.js create mode 100755 app/lib/angular/i18n/angular-locale_en-us.js create mode 100755 app/lib/angular/i18n/angular-locale_en-vg.js create mode 100755 app/lib/angular/i18n/angular-locale_en-vi.js create mode 100755 app/lib/angular/i18n/angular-locale_en-za.js create mode 100755 app/lib/angular/i18n/angular-locale_en-zw.js create mode 100755 app/lib/angular/i18n/angular-locale_en.js create mode 100755 app/lib/angular/i18n/angular-locale_es-419.js create mode 100755 app/lib/angular/i18n/angular-locale_es-ar.js create mode 100755 app/lib/angular/i18n/angular-locale_es-bo.js create mode 100755 app/lib/angular/i18n/angular-locale_es-cl.js create mode 100755 app/lib/angular/i18n/angular-locale_es-co.js create mode 100755 app/lib/angular/i18n/angular-locale_es-cr.js create mode 100755 app/lib/angular/i18n/angular-locale_es-do.js create mode 100755 app/lib/angular/i18n/angular-locale_es-ea.js create mode 100755 app/lib/angular/i18n/angular-locale_es-ec.js create mode 100755 app/lib/angular/i18n/angular-locale_es-es.js create mode 100755 app/lib/angular/i18n/angular-locale_es-gq.js create mode 100755 app/lib/angular/i18n/angular-locale_es-gt.js create mode 100755 app/lib/angular/i18n/angular-locale_es-hn.js create mode 100755 app/lib/angular/i18n/angular-locale_es-ic.js create mode 100755 app/lib/angular/i18n/angular-locale_es-mx.js create mode 100755 app/lib/angular/i18n/angular-locale_es-ni.js create mode 100755 app/lib/angular/i18n/angular-locale_es-pa.js create mode 100755 app/lib/angular/i18n/angular-locale_es-pe.js create mode 100755 app/lib/angular/i18n/angular-locale_es-pr.js create mode 100755 app/lib/angular/i18n/angular-locale_es-py.js create mode 100755 app/lib/angular/i18n/angular-locale_es-sv.js create mode 100755 app/lib/angular/i18n/angular-locale_es-us.js create mode 100755 app/lib/angular/i18n/angular-locale_es-uy.js create mode 100755 app/lib/angular/i18n/angular-locale_es-ve.js create mode 100755 app/lib/angular/i18n/angular-locale_es.js create mode 100755 app/lib/angular/i18n/angular-locale_et-ee.js create mode 100755 app/lib/angular/i18n/angular-locale_et.js create mode 100755 app/lib/angular/i18n/angular-locale_eu-es.js create mode 100755 app/lib/angular/i18n/angular-locale_eu.js create mode 100755 app/lib/angular/i18n/angular-locale_fa-af.js create mode 100755 app/lib/angular/i18n/angular-locale_fa-ir.js create mode 100755 app/lib/angular/i18n/angular-locale_fa.js create mode 100755 app/lib/angular/i18n/angular-locale_fi-fi.js create mode 100755 app/lib/angular/i18n/angular-locale_fi.js create mode 100755 app/lib/angular/i18n/angular-locale_fil-ph.js create mode 100755 app/lib/angular/i18n/angular-locale_fil.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-be.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-bf.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-bi.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-bj.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-bl.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-ca.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-cd.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-cf.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-cg.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-ch.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-ci.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-cm.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-dj.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-fr.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-ga.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-gf.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-gn.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-gp.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-gq.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-km.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-lu.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-mc.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-mf.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-mg.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-ml.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-mq.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-ne.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-re.js create mode 100755 app/lib/angular/i18n/angular-locale_fr-yt.js create mode 100755 app/lib/angular/i18n/angular-locale_fr.js create mode 100755 app/lib/angular/i18n/angular-locale_gl-es.js create mode 100755 app/lib/angular/i18n/angular-locale_gl.js create mode 100755 app/lib/angular/i18n/angular-locale_gsw-ch.js create mode 100755 app/lib/angular/i18n/angular-locale_gsw.js create mode 100755 app/lib/angular/i18n/angular-locale_gu-in.js create mode 100755 app/lib/angular/i18n/angular-locale_gu.js create mode 100755 app/lib/angular/i18n/angular-locale_he-il.js create mode 100755 app/lib/angular/i18n/angular-locale_he.js create mode 100755 app/lib/angular/i18n/angular-locale_hi-in.js create mode 100755 app/lib/angular/i18n/angular-locale_hi.js create mode 100755 app/lib/angular/i18n/angular-locale_hr-hr.js create mode 100755 app/lib/angular/i18n/angular-locale_hr.js create mode 100755 app/lib/angular/i18n/angular-locale_hu-hu.js create mode 100755 app/lib/angular/i18n/angular-locale_hu.js create mode 100755 app/lib/angular/i18n/angular-locale_id-id.js create mode 100755 app/lib/angular/i18n/angular-locale_id.js create mode 100755 app/lib/angular/i18n/angular-locale_in.js create mode 100755 app/lib/angular/i18n/angular-locale_is-is.js create mode 100755 app/lib/angular/i18n/angular-locale_is.js create mode 100755 app/lib/angular/i18n/angular-locale_it-it.js create mode 100755 app/lib/angular/i18n/angular-locale_it-sm.js create mode 100755 app/lib/angular/i18n/angular-locale_it.js create mode 100755 app/lib/angular/i18n/angular-locale_iw.js create mode 100755 app/lib/angular/i18n/angular-locale_ja-jp.js create mode 100755 app/lib/angular/i18n/angular-locale_ja.js create mode 100755 app/lib/angular/i18n/angular-locale_kn-in.js create mode 100755 app/lib/angular/i18n/angular-locale_kn.js create mode 100755 app/lib/angular/i18n/angular-locale_ko-kr.js create mode 100755 app/lib/angular/i18n/angular-locale_ko.js create mode 100755 app/lib/angular/i18n/angular-locale_ln-cd.js create mode 100755 app/lib/angular/i18n/angular-locale_ln.js create mode 100755 app/lib/angular/i18n/angular-locale_lt-lt.js create mode 100755 app/lib/angular/i18n/angular-locale_lt.js create mode 100755 app/lib/angular/i18n/angular-locale_lv-lv.js create mode 100755 app/lib/angular/i18n/angular-locale_lv.js create mode 100755 app/lib/angular/i18n/angular-locale_ml-in.js create mode 100755 app/lib/angular/i18n/angular-locale_ml.js create mode 100755 app/lib/angular/i18n/angular-locale_mr-in.js create mode 100755 app/lib/angular/i18n/angular-locale_mr.js create mode 100755 app/lib/angular/i18n/angular-locale_ms-my.js create mode 100755 app/lib/angular/i18n/angular-locale_ms.js create mode 100755 app/lib/angular/i18n/angular-locale_mt-mt.js create mode 100755 app/lib/angular/i18n/angular-locale_mt.js create mode 100755 app/lib/angular/i18n/angular-locale_nl-cw.js create mode 100755 app/lib/angular/i18n/angular-locale_nl-nl.js create mode 100755 app/lib/angular/i18n/angular-locale_nl-sx.js create mode 100755 app/lib/angular/i18n/angular-locale_nl.js create mode 100755 app/lib/angular/i18n/angular-locale_no.js create mode 100755 app/lib/angular/i18n/angular-locale_or-in.js create mode 100755 app/lib/angular/i18n/angular-locale_or.js create mode 100755 app/lib/angular/i18n/angular-locale_pl-pl.js create mode 100755 app/lib/angular/i18n/angular-locale_pl.js create mode 100755 app/lib/angular/i18n/angular-locale_pt-br.js create mode 100755 app/lib/angular/i18n/angular-locale_pt-pt.js create mode 100755 app/lib/angular/i18n/angular-locale_pt.js create mode 100755 app/lib/angular/i18n/angular-locale_ro-ro.js create mode 100755 app/lib/angular/i18n/angular-locale_ro.js create mode 100755 app/lib/angular/i18n/angular-locale_ru-ru.js create mode 100755 app/lib/angular/i18n/angular-locale_ru.js create mode 100755 app/lib/angular/i18n/angular-locale_sk-sk.js create mode 100755 app/lib/angular/i18n/angular-locale_sk.js create mode 100755 app/lib/angular/i18n/angular-locale_sl-si.js create mode 100755 app/lib/angular/i18n/angular-locale_sl.js create mode 100755 app/lib/angular/i18n/angular-locale_sq-al.js create mode 100755 app/lib/angular/i18n/angular-locale_sq.js create mode 100755 app/lib/angular/i18n/angular-locale_sr-cyrl-rs.js create mode 100755 app/lib/angular/i18n/angular-locale_sr-latn-rs.js create mode 100755 app/lib/angular/i18n/angular-locale_sr.js create mode 100755 app/lib/angular/i18n/angular-locale_sv-se.js create mode 100755 app/lib/angular/i18n/angular-locale_sv.js create mode 100755 app/lib/angular/i18n/angular-locale_sw-tz.js create mode 100755 app/lib/angular/i18n/angular-locale_sw.js create mode 100755 app/lib/angular/i18n/angular-locale_ta-in.js create mode 100755 app/lib/angular/i18n/angular-locale_ta.js create mode 100755 app/lib/angular/i18n/angular-locale_te-in.js create mode 100755 app/lib/angular/i18n/angular-locale_te.js create mode 100755 app/lib/angular/i18n/angular-locale_th-th.js create mode 100755 app/lib/angular/i18n/angular-locale_th.js create mode 100755 app/lib/angular/i18n/angular-locale_tl.js create mode 100755 app/lib/angular/i18n/angular-locale_tr-tr.js create mode 100755 app/lib/angular/i18n/angular-locale_tr.js create mode 100755 app/lib/angular/i18n/angular-locale_uk-ua.js create mode 100755 app/lib/angular/i18n/angular-locale_uk.js create mode 100755 app/lib/angular/i18n/angular-locale_ur-pk.js create mode 100755 app/lib/angular/i18n/angular-locale_ur.js create mode 100755 app/lib/angular/i18n/angular-locale_vi-vn.js create mode 100755 app/lib/angular/i18n/angular-locale_vi.js create mode 100755 app/lib/angular/i18n/angular-locale_zh-cn.js create mode 100755 app/lib/angular/i18n/angular-locale_zh-hans-cn.js create mode 100755 app/lib/angular/i18n/angular-locale_zh-hk.js create mode 100755 app/lib/angular/i18n/angular-locale_zh-tw.js create mode 100755 app/lib/angular/i18n/angular-locale_zh.js create mode 100755 app/lib/angular/i18n/angular-locale_zu-za.js create mode 100755 app/lib/angular/i18n/angular-locale_zu.js create mode 100755 app/lib/angular/version.json mode change 100644 => 100755 app/lib/angular/version.txt mode change 100644 => 100755 test/lib/angular/angular-mocks.js mode change 100644 => 100755 test/lib/angular/angular-scenario.js mode change 100644 => 100755 test/lib/angular/version.txt diff --git a/app/lib/angular/angular-animate.js b/app/lib/angular/angular-animate.js new file mode 100755 index 0000000000..5e1b7c6fe6 --- /dev/null +++ b/app/lib/angular/angular-animate.js @@ -0,0 +1,708 @@ +/** + * @license AngularJS v1.2.0-rc.2 + * (c) 2010-2012 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +/** + * @ngdoc overview + * @name ngAnimate + * @description + * + * # ngAnimate + * + * `ngAnimate` is an optional module that provides CSS and JavaScript animation hooks. + * + * {@installModule animate} + * + * # Usage + * + * To see animations in action, all that is required is to define the appropriate CSS classes + * or to register a JavaScript animation via the $animation service. The directives that support animation automatically are: + * `ngRepeat`, `ngInclude`, `ngSwitch`, `ngShow`, `ngHide` and `ngView`. Custom directives can take advantage of animation + * by using the `$animate` service. + * + * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives: + * + * | Directive | Supported Animations | + * |---------------------------------------------------------- |----------------------------------------------------| + * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move | + * | {@link ngRoute.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 ngClass} | add and remove | + * | {@link ng.directive:ngShow#animations ngShow & ngHide} | add and remove (the ng-hide class value) | + * + * You can find out more information about animations upon visiting each directive page. + * + * Below is an example of how to apply animations to a directive that supports animation hooks: + * + *
+ * 
+ *
+ * 
+ * 
+ * 
+ * + * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's + * animation has completed. + * + *

CSS-defined Animations

+ * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes + * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported + * and can be used to play along with this naming structure. + * + * The following code below demonstrates how to perform animations using **CSS transitions** with Angular: + * + *
+ * 
+ *
+ * 
+ *
+ *
+ *
+ * + * The following code below demonstrates how to perform animations using **CSS animations** with Angular: + * + *
+ * 
+ *
+ * 
+ *
+ *
+ *
+ * + * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing. + * + * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add + * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically + * detect the CSS code 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 its final state. This final state is when the DOM element + * has no CSS transition/animation classes applied to it. + * + *

JavaScript-defined Animations

+ * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not + * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module. + * + *
+ * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.
+ * var ngModule = angular.module('YourApp', []);
+ * ngModule.animation('.my-crazy-animation', function() {
+ *   return {
+ *     enter: function(element, done) {
+ *       //run the animation
+ *       //!annotate Cancel Animation|This function (if provided) will perform the cancellation of the animation when another is triggered
+ *       return function(element, done) {
+ *         //cancel the animation
+ *       }
+ *     }
+ *     leave: function(element, done) { },
+ *     move: function(element, done) { },
+ *     show: function(element, done) { },
+ *     hide: function(element, done) { },
+ *     addClass: function(element, className, done) { },
+ *     removeClass: function(element, className, done) { },
+ *   }
+ * });
+ * 
+ * + * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run + * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits + * the element's CSS class attribute value and then run the matching animation event function (if found). + * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function + * be executed. It should be also noted that only simple class selectors are allowed. + * + * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned. + * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run, + * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation + * or transition code that is defined via a stylesheet). + * + */ + +angular.module('ngAnimate', ['ng']) + + /** + * @ngdoc object + * @name ngAnimate.$animateProvider + * @description + * + * The `$AnimationProvider` allows developers to register and access custom JavaScript animations directly inside + * of a module. When an animation is triggered, the $animate service will query the $animation function to find any + * animations that match the provided name value. + * + * Requires the {@link ngAnimate `ngAnimate`} module to be installed. + * + * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. + * + */ + .config(['$provide', '$animateProvider', function($provide, $animateProvider) { + var noop = angular.noop; + var forEach = angular.forEach; + var selectors = $animateProvider.$$selectors; + + var NG_ANIMATE_STATE = '$$ngAnimateState'; + var rootAnimateState = {running:true}; + $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout', '$rootScope', + function($delegate, $injector, $sniffer, $rootElement, $timeout, $rootScope) { + + $rootElement.data(NG_ANIMATE_STATE, rootAnimateState); + + function lookup(name) { + if (name) { + var matches = [], + flagMap = {}, + classes = name.substr(1).split('.'); + + //the empty string value is the default animation + //operation which performs CSS transition and keyframe + //animations sniffing. This is always included for each + //element animation procedure + classes.push(''); + + for(var i=0; i < classes.length; i++) { + var klass = classes[i], + selectorFactoryName = selectors[klass]; + if(selectorFactoryName && !flagMap[klass]) { + matches.push($injector.get(selectorFactoryName)); + flagMap[klass] = true; + } + } + return matches; + } + } + + /** + * @ngdoc object + * @name ngAnimate.$animate + * @requires $timeout, $sniffer, $rootElement + * @function + * + * @description + * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) + * as well as during addClass and removeClass operations. When any of these operations are run, the $animate service + * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object) + * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run. + * + * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives + * will work out of the box without any extra configuration. + * + * Requires the {@link ngAnimate `ngAnimate`} module to be installed. + * + * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application. + * + */ + return { + /** + * @ngdoc function + * @name ngAnimate.$animate#enter + * @methodOf ngAnimate.$animate + * @function + * + * @description + * Appends the element to the parent element that resides in the document and then runs the enter animation. Once + * the animation is started, the following CSS classes will be present on the element for the duration of the animation: + * + * Below is a breakdown of each step that occurs during enter animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------|-----------------------------------------------| + * | 1. $animate.enter(...) is called | class="my-animation" | + * | 2. element is inserted into the parent element or beside the after element | class="my-animation" | + * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation" | + * | 4. the .ng-enter class is added to the element | class="my-animation ng-enter" | + * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-enter" | + * | 6. the .ng-enter-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-enter ng-enter-active" | + * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-enter ng-enter-active" | + * | 8. The animation ends and both CSS classes are removed from the element | class="my-animation" | + * | 9. The done() callback is fired (if provided) | class="my-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 + * @param {function()=} done callback function that will be called once the animation is complete + */ + enter : function(element, parent, after, done) { + $delegate.enter(element, parent, after); + $rootScope.$$postDigest(function() { + performAnimation('enter', 'ng-enter', element, parent, after, function() { + done && $timeout(done, 0, false); + }); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#leave + * @methodOf ngAnimate.$animate + * @function + * + * @description + * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once + * the animation is started, the following CSS classes will be added for the duration of the animation: + * + * Below is a breakdown of each step that occurs during enter animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------|----------------------------------------------| + * | 1. $animate.leave(...) is called | class="my-animation" | + * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation" | + * | 3. the .ng-leave class is added to the element | class="my-animation ng-leave" | + * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-leave" | + * | 5. the .ng-leave-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-leave ng-leave-active | + * | 6. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-leave ng-leave-active | + * | 7. The animation ends and both CSS classes are removed from the element | class="my-animation" | + * | 8. The element is removed from the DOM | ... | + * | 9. The done() callback is fired (if provided) | ... | + * + * @param {jQuery/jqLite element} element the element that will be the focus of the leave animation + * @param {function()=} done callback function that will be called once the animation is complete + */ + leave : function(element, done) { + $rootScope.$$postDigest(function() { + performAnimation('leave', 'ng-leave', element, null, null, function() { + $delegate.leave(element, done); + }); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#move + * @methodOf ngAnimate.$animate + * @function + * + * @description + * Fires the move DOM operation. Just before the animation starts, the animate service 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. Once + * the animation is started, the following CSS classes will be added for the duration of the animation: + * + * Below is a breakdown of each step that occurs during move animation: + * + * | Animation Step | What the element class attribute looks like | + * |----------------------------------------------------------------------------------------------|---------------------------------------------| + * | 1. $animate.move(...) is called | class="my-animation" | + * | 2. element is moved into the parent element or beside the after element | class="my-animation" | + * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation" | + * | 4. the .ng-move class is added to the element | class="my-animation ng-move" | + * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-move" | + * | 6. the .ng-move-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-move ng-move-active" | + * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-move ng-move-active" | + * | 8. The animation ends and both CSS classes are removed from the element | class="my-animation" | + * | 9. The done() callback is fired (if provided) | class="my-animation" | + * + * @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 + * @param {function()=} done callback function that will be called once the animation is complete + */ + move : function(element, parent, after, done) { + $delegate.move(element, parent, after); + $rootScope.$$postDigest(function() { + performAnimation('move', 'ng-move', element, null, null, function() { + done && $timeout(done, 0, false); + }); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#addClass + * @methodOf ngAnimate.$animate + * + * @description + * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class. + * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide + * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions + * or keyframes are defined on the -add CSS class). + * + * Below is a breakdown of each step that occurs during addClass animation: + * + * | Animation Step | What the element class attribute looks like | + * |------------------------------------------------------------------------------------------------|---------------------------------------------| + * | 1. $animate.addClass(element, 'super') is called | class="" | + * | 2. $animate runs any JavaScript-defined animations on the element | class="" | + * | 3. the .super-add class is added to the element | class="super-add" | + * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="super-add" | + * | 5. the .super-add-active class is added (this triggers the CSS transition/animation) | class="super-add super-add-active" | + * | 6. $animate waits for X milliseconds for the animation to complete | class="super-add super-add-active" | + * | 7. The animation ends and both CSS classes are removed from the element | class="" | + * | 8. The super class is added to the element | class="super" | + * | 9. The done() callback is fired (if provided) | class="super" | + * + * @param {jQuery/jqLite element} element the element that will be animated + * @param {string} className the CSS class that will be animated and then attached to the element + * @param {function()=} done callback function that will be called once the animation is complete + */ + addClass : function(element, className, done) { + performAnimation('addClass', className, element, null, null, function() { + $delegate.addClass(element, className, done); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#removeClass + * @methodOf ngAnimate.$animate + * + * @description + * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value + * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in + * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if + * no CSS transitions or keyframes are defined on the -remove CSS class). + * + * Below is a breakdown of each step that occurs during removeClass animation: + * + * | Animation Step | What the element class attribute looks like | + * |-----------------------------------------------------------------------------------------------|-------------------------------------------------| + * | 1. $animate.removeClass(element, 'super') is called | class="super" | + * | 2. $animate runs any JavaScript-defined animations on the element | class="super" | + * | 3. the .super-remove class is added to the element | class="super super-remove" | + * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="super super-remove" | + * | 5. the .super-remove-active class is added (this triggers the CSS transition/animation) | class="super super-remove super-remove-active" | + * | 6. $animate waits for X milliseconds for the animation to complete | class="super super-remove super-remove-active" | + * | 7. The animation ends and both CSS all three classes are removed from the element | class="" | + * | 8. The done() callback is fired (if provided) | class="" | + * + * @param {jQuery/jqLite element} element the element that will be animated + * @param {string} className the CSS class that will be animated and then removed from the element + * @param {function()=} done callback function that will be called once the animation is complete + */ + removeClass : function(element, className, done) { + performAnimation('removeClass', className, element, null, null, function() { + $delegate.removeClass(element, className, done); + }); + }, + + /** + * @ngdoc function + * @name ngAnimate.$animate#enabled + * @methodOf ngAnimate.$animate + * @function + * + * @param {boolean=} value If provided then set the animation on or off. + * @return {boolean} Current animation state. + * + * @description + * Globally enables/disables animations. + * + */ + enabled : function(value) { + if (arguments.length) { + rootAnimateState.running = !value; + } + return !rootAnimateState.running; + } + }; + + /* + all animations call this shared animation triggering function internally. + The event variable refers to the JavaScript animation event that will be triggered + and the className value is the name of the animation that will be applied within the + CSS code. Element, parent and after are provided DOM elements for the animation + and the onComplete callback will be fired once the animation is fully complete. + */ + function performAnimation(event, className, element, parent, after, onComplete) { + var classes = (element.attr('class') || '') + ' ' + className; + var animationLookup = (' ' + classes).replace(/\s+/g,'.'), + animations = []; + forEach(lookup(animationLookup), function(animation, index) { + animations.push({ + start : animation[event] + }); + }); + + if (!parent) { + parent = after ? after.parent() : element.parent(); + } + var disabledAnimation = { running : true }; + + //skip the animation if animations are disabled, a parent is already being animated + //or the element is not currently attached to the document body. + if ((parent.inheritedData(NG_ANIMATE_STATE) || disabledAnimation).running) { + //avoid calling done() since there is no need to remove any + //data or className values since this happens earlier than that + //and also use a timeout so that it won't be asynchronous + $timeout(onComplete || noop, 0, false); + return; + } + + var ngAnimateState = element.data(NG_ANIMATE_STATE) || {}; + + //if an animation is currently running on the element then lets take the steps + //to cancel that animation and fire any required callbacks + if(ngAnimateState.running) { + cancelAnimations(ngAnimateState.animations); + ngAnimateState.done(); + } + + element.data(NG_ANIMATE_STATE, { + running:true, + animations:animations, + done:done + }); + + forEach(animations, function(animation, index) { + var fn = function() { + progress(index); + }; + + if(animation.start) { + if(event == 'addClass' || event == 'removeClass') { + animation.endFn = animation.start(element, className, fn); + } else { + animation.endFn = animation.start(element, fn); + } + } else { + fn(); + } + }); + + function cancelAnimations(animations) { + var isCancelledFlag = true; + forEach(animations, function(animation) { + (animation.endFn || noop)(isCancelledFlag); + }); + } + + function progress(index) { + animations[index].done = true; + (animations[index].endFn || noop)(); + for(var i=0;i 0) { + done(); + return; + } + } + + element.addClass(className); + + //we want all the styles defined before and after + var duration = 0; + forEach(element, function(element) { + if (element.nodeType == ELEMENT_NODE) { + var elementStyles = $window.getComputedStyle(element) || {}; + + var transitionDelay = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + delayKey]), + parseMaxTime(elementStyles[vendorTransitionProp + delayKey])); + + var animationDelay = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + delayKey]), + parseMaxTime(elementStyles[vendorAnimationProp + delayKey])); + + var transitionDuration = Math.max(parseMaxTime(elementStyles[w3cTransitionProp + durationKey]), + parseMaxTime(elementStyles[vendorTransitionProp + durationKey])); + + var animationDuration = Math.max(parseMaxTime(elementStyles[w3cAnimationProp + durationKey]), + parseMaxTime(elementStyles[vendorAnimationProp + durationKey])); + + if(animationDuration > 0) { + animationDuration *= Math.max(parseInt(elementStyles[w3cAnimationProp + animationIterationCountKey]) || 0, + parseInt(elementStyles[vendorAnimationProp + animationIterationCountKey]) || 0, + 1); + } + + duration = Math.max(animationDelay + animationDuration, + transitionDelay + transitionDuration, + duration); + } + }); + + /* there is no point in performing a reflow if the animation + timeout is empty (this would cause a flicker bug normally + in the page */ + if(duration > 0) { + var node = element[0]; + + //temporarily disable the transition so that the enter styles + //don't animate twice (this is here to avoid a bug in Chrome/FF). + node.style[w3cTransitionProp + propertyKey] = 'none'; + node.style[vendorTransitionProp + propertyKey] = 'none'; + + var activeClassName = ''; + forEach(className.split(' '), function(klass, i) { + activeClassName += (i > 0 ? ' ' : '') + klass + '-active'; + }); + + //this triggers a reflow which allows for the transition animation to kick in + element.prop('clientWidth'); + node.style[w3cTransitionProp + propertyKey] = ''; + node.style[vendorTransitionProp + propertyKey] = ''; + element.addClass(activeClassName); + + $timeout(done, duration * 1000, false); + + //this will automatically be called by $animate so + //there is no need to attach this internally to the + //timeout done method + return function onEnd(cancelled) { + element.removeClass(className); + element.removeClass(activeClassName); + + //only when the animation is cancelled is the done() + //function not called for this animation therefore + //this must be also called + if(cancelled) { + done(); + } + } + } + else { + element.removeClass(className); + done(); + } + + function parseMaxTime(str) { + var total = 0, values = angular.isString(str) ? str.split(/\s*,\s*/) : []; + forEach(values, function(value) { + total = Math.max(parseFloat(value) || 0, total); + }); + return total; + } + } + + return { + enter : function(element, done) { + return animate(element, 'ng-enter', done); + }, + leave : function(element, done) { + return animate(element, 'ng-leave', done); + }, + move : function(element, done) { + return animate(element, 'ng-move', done); + }, + addClass : function(element, className, done) { + return animate(element, suffixClasses(className, '-add'), done); + }, + removeClass : function(element, className, done) { + return animate(element, suffixClasses(className, '-remove'), done); + } + }; + + function suffixClasses(classes, suffix) { + var className = ''; + classes = angular.isArray(classes) ? classes : classes.split(/\s+/); + forEach(classes, function(klass, i) { + if(klass && klass.length > 0) { + className += (i > 0 ? ' ' : '') + klass + suffix; + } + }); + return className; + } + }]); + }]); + + +})(window, window.angular); diff --git a/app/lib/angular/angular-animate.min.js b/app/lib/angular/angular-animate.min.js new file mode 100755 index 0000000000..768a4d7a19 --- /dev/null +++ b/app/lib/angular/angular-animate.min.js @@ -0,0 +1,15 @@ +/* + AngularJS v1.2.0-rc.2 + (c) 2010-2012 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(C,n,D){'use strict';n.module("ngAnimate",["ng"]).config(["$provide","$animateProvider",function(A,t){var u=n.noop,v=n.forEach,B=t.$$selectors,p="$$ngAnimateState",z={running:!0};A.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope",function(r,n,t,g,m,h){function w(a){if(a){var e=[],d={};a=a.substr(1).split(".");a.push("");for(var b=0;b @@ -128,6 +140,9 @@ angular.module('ngCookies', ['ng']). * 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. + * + * Requires the {@link ngCookies `ngCookies`} module to be installed. + * * @example */ factory('$cookieStore', ['$cookies', function($cookies) { diff --git a/app/lib/angular/angular-cookies.min.js b/app/lib/angular/angular-cookies.min.js old mode 100644 new mode 100755 index f774f8cfdb..4cfebbd4d1 --- a/app/lib/angular/angular-cookies.min.js +++ b/app/lib/angular/angular-cookies.min.js @@ -1,7 +1,10 @@ /* - AngularJS v1.0.7 + AngularJS v1.2.0-rc.2 (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -(function(m,f,l){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,b){var c={},g={},h,i=!1,j=f.copy,k=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,j(a,g),j(a,c),i&&d.$apply())})();i=!0;d.$watch(function(){var a,e,d;for(a in g)k(c[a])&&b.cookies(a,l);for(a in c)e=c[a],f.isString(e)?e!==g[a]&&(b.cookies(a,e),d=!0):f.isDefined(g[a])?c[a]=g[a]:delete c[a];if(d)for(a in e=b.cookies(),c)c[a]!==e[a]&&(k(e[a])?delete c[a]:c[a]=e[a])});return c}]).factory("$cookieStore", -["$cookies",function(d){return{get:function(b){return(b=d[b])?f.fromJson(b):b},put:function(b,c){d[b]=f.toJson(c)},remove:function(b){delete d[b]}}}])})(window,window.angular); +(function(p,f,n){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,b){var c={},g={},h,k=!1,l=f.copy,m=f.isUndefined;b.addPollFn(function(){var a=b.cookies();h!=a&&(h=a,l(a,g),l(a,c),k&&d.$apply())})();k=!0;d.$watch(function(){var a,e,d;for(a in g)m(c[a])&&b.cookies(a,n);for(a in c)(e=c[a],f.isString(e))?e!==g[a]&&(b.cookies(a,e),d=!0):f.isDefined(g[a])?c[a]=g[a]:delete c[a];if(d)for(a in e=b.cookies(),c)c[a]!==e[a]&&(m(e[a])?delete c[a]:c[a]=e[a])}); +return c}]).factory("$cookieStore",["$cookies",function(d){return{get:function(b){return(b=d[b])?f.fromJson(b):b},put:function(b,c){d[b]=f.toJson(c)},remove:function(b){delete d[b]}}}])})(window,window.angular); +/* +//@ sourceMappingURL=angular-cookies.min.js.map +*/ diff --git a/app/lib/angular/angular-cookies.min.js.map b/app/lib/angular/angular-cookies.min.js.map new file mode 100755 index 0000000000..21bed425b6 --- /dev/null +++ b/app/lib/angular/angular-cookies.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-cookies.min.js", +"lineCount":7, +"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkBC,CAAlB,CAA6B,CAmBtCD,CAAAE,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,QAAA,CA4BW,UA5BX,CA4BuB,CAAC,YAAD,CAAe,UAAf,CAA2B,QAAS,CAACC,CAAD,CAAaC,CAAb,CAAuB,CAAA,IACxEC,EAAU,EAD8D,CAExEC,EAAc,EAF0D,CAGxEC,CAHwE,CAIxEC,EAAU,CAAA,CAJ8D,CAKxEC,EAAOV,CAAAU,KALiE,CAMxEC,EAAcX,CAAAW,YAGlBN,EAAAO,UAAA,CAAmB,QAAQ,EAAG,CAC5B,IAAIC,EAAiBR,CAAAC,QAAA,EACjBE,EAAJ,EAA0BK,CAA1B,GACEL,CAGA,CAHqBK,CAGrB,CAFAH,CAAA,CAAKG,CAAL,CAAqBN,CAArB,CAEA,CADAG,CAAA,CAAKG,CAAL,CAAqBP,CAArB,CACA,CAAIG,CAAJ,EAAaL,CAAAU,OAAA,EAJf,CAF4B,CAA9B,CAAA,EAUAL,EAAA,CAAU,CAAA,CAKVL,EAAAW,OAAA,CAQAC,QAAa,EAAG,CAAA,IACVC,CADU,CAEVC,CAFU,CAIVC,CAGJ,KAAKF,CAAL,GAAaV,EAAb,CACMI,CAAA,CAAYL,CAAA,CAAQW,CAAR,CAAZ,CAAJ,EACEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBhB,CAAvB,CAKJ,KAAIgB,CAAJ,GAAYX,EAAZ,CAEE,CADAY,CACK,CADGZ,CAAA,CAAQW,CAAR,CACH,CAAAjB,CAAAoB,SAAA,CAAiBF,CAAjB,CAAL,EAMWA,CANX,GAMqBX,CAAA,CAAYU,CAAZ,CANrB,GAOEZ,CAAAC,QAAA,CAAiBW,CAAjB,CAAuBC,CAAvB,CACA,CAAAC,CAAA,CAAU,CAAA,CARZ,EACMnB,CAAAqB,UAAA,CAAkBd,CAAA,CAAYU,CAAZ,CAAlB,CAAJ,CACEX,CAAA,CAAQW,CAAR,CADF,CACkBV,CAAA,CAAYU,CAAZ,CADlB,CAGE,OAAOX,CAAA,CAAQW,CAAR,CASb,IAAIE,CAAJ,CAIE,IAAKF,CAAL,GAFAK,EAEahB,CAFID,CAAAC,QAAA,EAEJA,CAAAA,CAAb,CACMA,CAAA,CAAQW,CAAR,CAAJ,GAAsBK,CAAA,CAAeL,CAAf,CAAtB,GAEMN,CAAA,CAAYW,CAAA,CAAeL,CAAf,CAAZ,CAAJ,CACE,OAAOX,CAAA,CAAQW,CAAR,CADT,CAGEX,CAAA,CAAQW,CAAR,CAHF,CAGkBK,CAAA,CAAeL,CAAf,CALpB,CAlCU,CARhB,CAEA;MAAOX,EA1BqE,CAA3D,CA5BvB,CAAAH,QAAA,CA2HW,cA3HX,CA2H2B,CAAC,UAAD,CAAa,QAAQ,CAACoB,CAAD,CAAW,CAErD,MAAO,KAYAC,QAAQ,CAACC,CAAD,CAAM,CAEjB,MAAO,CADHP,CACG,CADKK,CAAA,CAASE,CAAT,CACL,EAAQzB,CAAA0B,SAAA,CAAiBR,CAAjB,CAAR,CAAkCA,CAFxB,CAZd,KA4BAS,QAAQ,CAACF,CAAD,CAAMP,CAAN,CAAa,CACxBK,CAAA,CAASE,CAAT,CAAA,CAAgBzB,CAAA4B,OAAA,CAAeV,CAAf,CADQ,CA5BrB,QA0CGW,QAAQ,CAACJ,CAAD,CAAM,CACpB,OAAOF,CAAA,CAASE,CAAT,CADa,CA1CjB,CAF8C,CAAhC,CA3H3B,CAnBsC,CAArC,CAAA,CAkME1B,MAlMF,CAkMUA,MAAAC,QAlMV;", +"sources":["angular-cookies.js"], +"names":["window","angular","undefined","module","factory","$rootScope","$browser","cookies","lastCookies","lastBrowserCookies","runEval","copy","isUndefined","addPollFn","currentCookies","$apply","$watch","push","name","value","updated","isString","isDefined","browserCookies","$cookies","get","key","fromJson","put","toJson","remove"] +} diff --git a/app/lib/angular/angular-loader.js b/app/lib/angular/angular-loader.js old mode 100644 new mode 100755 index 9e66972af2..7915a483d6 --- a/app/lib/angular/angular-loader.js +++ b/app/lib/angular/angular-loader.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.0.7 + * @license AngularJS v1.2.0-rc.2 * (c) 2010-2012 Google, Inc. http://angularjs.org * License: MIT */ @@ -29,15 +29,18 @@ function setupModuleLoader(window) { * @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 + * The `angular.module` is a global place for creating, registering and retrieving Angular modules. + * All modules (angular core or 3rd party) that should be available to an application must be * registered using this mechanism. * + * When passed two or more arguments, a new module is created. If passed only one argument, an + * existing module (the name passed as the first argument to `module`) is retrieved. + * * * # Module * - * A module is a collocation of services, directives, filters, and configuration information. Module - * is used to configure the {@link AUTO.$injector $injector}. + * A module is a collection of services, directives, filters, and configuration information. + * `angular.module` is used to configure the {@link AUTO.$injector $injector}. * *
      * // Create a new module
@@ -47,8 +50,7 @@ function setupModuleLoader(window) {
      * myModule.value('appName', 'MyCoolApp');
      *
      * // configure existing services inside initialization blocks.
-     * myModule.config(function($locationProvider) {
-'use strict';
+     * myModule.config(function($locationProvider) {'use strict';
      *   // Configure existing providers
      *   $locationProvider.hashPrefix('!');
      * });
@@ -77,7 +79,9 @@ function setupModuleLoader(window) {
       }
       return ensure(modules, name, function() {
         if (!requires) {
-          throw Error('No module: ' + name);
+          throw minErr('$injector')('nomod', "Module '{0}' is not available! You either misspelled the module name " +
+              "or forgot to load it. If registering a module ensure that you specify the dependencies as the second " +
+              "argument.", name);
         }
 
         /** @type {!Array.>} */
@@ -170,6 +174,39 @@ function setupModuleLoader(window) {
            */
           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
+           *
+           * **NOTE**: animations are take effect only if the **ngAnimate** module is loaded.
+           *
+           *
+           * Defines an animation hook that can be later used with {@link ngAnimate.$animate $animate} service and
+           * directives that use this service.
+           *
+           * 
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
+           *   }
+           * })
+           * 
+ * + * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and + * {@link ngAnimate ngAnimate module} for more information. + */ + animation: invokeLater('$animateProvider', 'register'), + /** * @ngdoc method * @name angular.Module#filter diff --git a/app/lib/angular/angular-loader.min.js b/app/lib/angular/angular-loader.min.js old mode 100644 new mode 100755 index 448dd1d09c..ebb7ff6050 --- a/app/lib/angular/angular-loader.min.js +++ b/app/lib/angular/angular-loader.min.js @@ -1,7 +1,10 @@ /* - AngularJS v1.0.7 + AngularJS v1.2.0-rc.2 (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -(function(i){'use strict';function d(c,b,e){return c[b]||(c[b]=e())}return d(d(i,"angular",Object),"module",function(){var c={};return function(b,e,f){e&&c.hasOwnProperty(b)&&(c[b]=null);return d(c,b,function(){function a(a,b,d){return function(){c[d||"push"]([a,b,arguments]);return g}}if(!e)throw Error("No module: "+b);var c=[],d=[],h=a("$injector","invoke"),g={_invokeQueue:c,_runBlocks:d,requires:e,name:b,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"), -value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:h,run:function(a){d.push(a);return this}};f&&h(f);return g})}})})(window); +(function(k){'use strict';function d(c,b,e){return c[b]||(c[b]=e())}return d(d(k,"angular",Object),"module",function(){var c={};return function(b,e,f){e&&c.hasOwnProperty(b)&&(c[b]=null);return d(c,b,function(){function a(a,b,d){return function(){c[d||"push"]([a,b,arguments]);return g}}if(!e)throw minErr("$injector")("nomod",b);var c=[],d=[],h=a("$injector","invoke"),g={_invokeQueue:c,_runBlocks:d,requires:e,name:b,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide", +"service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:h,run:function(a){d.push(a);return this}};f&&h(f);return g})}})})(window); +/* +//@ sourceMappingURL=angular-loader.min.js.map +*/ diff --git a/app/lib/angular/angular-loader.min.js.map b/app/lib/angular/angular-loader.min.js.map new file mode 100755 index 0000000000..6b8244f849 --- /dev/null +++ b/app/lib/angular/angular-loader.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-loader.min.js", +"lineCount":7, +"mappings":"A;;;;;aAgBAA,SAA0B,CAACC,CAAD,CAAS,CAEjCC,QAASA,EAAM,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAqB,CAClC,MAAOF,EAAA,CAAIC,CAAJ,CAAP,GAAqBD,CAAA,CAAIC,CAAJ,CAArB,CAAiCC,CAAA,EAAjC,CADkC,CAIpC,MAAOH,EAAA,CAAOA,CAAA,CAAOD,CAAP,CAAe,SAAf,CAA0BK,MAA1B,CAAP,CAA0C,QAA1C,CAAoD,QAAQ,EAAG,CAEpE,IAAIC,EAAU,EAmDd,OAAOC,SAAe,CAACJ,CAAD,CAAOK,CAAP,CAAiBC,CAAjB,CAA2B,CAC3CD,CAAJ,EAAgBF,CAAAI,eAAA,CAAuBP,CAAvB,CAAhB,GACEG,CAAA,CAAQH,CAAR,CADF,CACkB,IADlB,CAGA,OAAOF,EAAA,CAAOK,CAAP,CAAgBH,CAAhB,CAAsB,QAAQ,EAAG,CA2MtCQ,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiC,CACnD,MAAO,SAAQ,EAAG,CAChBC,CAAA,CAAYD,CAAZ,EAA4B,MAA5B,CAAA,CAAoC,CAACF,CAAD,CAAWC,CAAX,CAAmBG,SAAnB,CAApC,CACA,OAAOC,EAFS,CADiC,CA1MrD,GAAI,CAACT,CAAL,CACE,KAAMU,OAAA,CAAO,WAAP,CAAA,CAAoB,OAApB,CAEWf,CAFX,CAAN,CAMF,IAAIY,EAAc,EAAlB,CAGII,EAAY,EAHhB,CAKIC,EAAST,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CALb,CAQIM,EAAiB,cAELF,CAFK,YAGPI,CAHO,UAaTX,CAbS,MAsBbL,CAtBa,UAkCTQ,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAlCS,SA6CVA,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA7CU,SAwDVA,CAAA,CAAY,UAAZ;AAAwB,SAAxB,CAxDU,OAmEZA,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAnEY,UA+ETA,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CA/ES,WAgHRA,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CAhHQ,QA2HXA,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CA3HW,YAsIPA,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CAtIO,WAkJRA,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CAlJQ,QA6JXS,CA7JW,KAyKdC,QAAQ,CAACC,CAAD,CAAQ,CACnBH,CAAAI,KAAA,CAAeD,CAAf,CACA,OAAO,KAFY,CAzKF,CA+KjBb,EAAJ,EACEW,CAAA,CAAOX,CAAP,CAGF,OAAQQ,EAnM8B,CAAjC,CAJwC,CArDmB,CAA/D,CAN0B,CAAnClB,CAAA,CAsREC,MAtRF;", +"sources":["angular-loader.js"], +"names":["setupModuleLoader","window","ensure","obj","name","factory","Object","modules","module","requires","configFn","hasOwnProperty","invokeLater","provider","method","insertMethod","invokeQueue","arguments","moduleInstance","minErr","runBlocks","config","run","block","push"] +} diff --git a/app/lib/angular/angular-resource.js b/app/lib/angular/angular-resource.js old mode 100644 new mode 100755 index d67f501c43..8f3f7af0c2 --- a/app/lib/angular/angular-resource.js +++ b/app/lib/angular/angular-resource.js @@ -1,15 +1,26 @@ /** - * @license AngularJS v1.0.7 + * @license AngularJS v1.2.0-rc.2 * (c) 2010-2012 Google, Inc. http://angularjs.org * License: MIT */ -(function(window, angular, undefined) { -'use strict'; +(function(window, angular, undefined) {'use strict'; + +var $resourceMinErr = angular.$$minErr('$resource'); /** * @ngdoc overview * @name ngResource * @description + * + * # ngResource + * + * `ngResource` is the name of the optional Angular module that adds support for interacting with + * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. + * `ngReource` provides the {@link ngResource.$resource `$resource`} serivce. + * + * {@installModule resource} + * + * See {@link ngResource.$resource `$resource`} for usage. */ /** @@ -24,24 +35,22 @@ * 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: + * Requires the {@link ngResource `ngResource`} module to be installed. * - * angular.module('app', ['ngResource']); + * @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`), it will be respected. * - * and you are ready to get started! - * - * @param {string} url A parameterized 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. + * `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 `?`. @@ -53,21 +62,46 @@ * the data object (useful for non-GET operations). * * @param {Object.=} actions Hash with declaration of custom action that should extend the - * default set of resource actions. The declaration should be created in the following format: + * default set of resource actions. The declaration should be created in the format of {@link + * ng.$http#Parameters $http.config}: * - * {action1: {method:?, params:?, isArray:?}, - * action2: {method:?, params:?, isArray:?}, + * {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 + * - **`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. - * - isArray – {boolean=} – If true then the returned object for this action is an array, see + * - **`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.}` – + * 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.}` – + * 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}. + * - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods - + * `response` and `responseError`. Both `response` and `responseError` interceptors get called + * with `http response` object. See {@link ng.$http $http interceptors}. * * @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: @@ -106,6 +140,27 @@ * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])` * - non-GET instance actions: `instance.$action([parameters], [success], [error])` * + * Success callback is called with (value, responseHeaders) arguments. Error callback is called + * with (httpResponse) argument. + * + * Class actions return empty instance (with additional properties below). + * Instance actions return promise of the action. + * + * The Resource instances and collection have these additional properties: + * + * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this + * instance or collection. + * + * On success, the promise is resolved with the same resource instance or collection object, + * updated with data from server. This makes it easy to use in + * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view rendering + * until the resource(s) are loaded. + * + * On failure, the promise is resolved with the {@link ng.$http http response} object, + * without the `resource` property. + * + * - `$resolved`: `true` after first server interaction is completed (either with success or rejection), + * `false` before that. Knowing if the Resource has been resolved is useful in data-binding. * * @example * @@ -149,7 +204,7 @@ * 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` and `params`. + * 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. @@ -226,7 +281,7 @@ */ angular.module('ngResource', ['ng']). - factory('$resource', ['$http', '$parse', function($http, $parse) { + factory('$resource', ['$http', '$parse', '$q', function($http, $parse, $q) { var DEFAULT_ACTIONS = { 'get': {method:'GET'}, 'save': {method:'POST'}, @@ -264,7 +319,7 @@ angular.module('ngResource', ['ng']). /** * 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 / ":" / "@" @@ -283,32 +338,34 @@ angular.module('ngResource', ['ng']). } function Route(template, defaults) { - this.template = template = template + '#'; + this.template = template; this.defaults = defaults || {}; - var urlParams = this.urlParams = {}; - forEach(template.split(/\W/), function(param){ - if (param && (new RegExp("(^|[^\\\\]):" + param + "\\W").test(template))) { - urlParams[param] = true; - } - }); - this.template = template.replace(/\\:/g, ':'); + this.urlParams = {}; } Route.prototype = { - url: function(params) { + setUrlParams: function(config, params, actionUrl) { var self = this, - url = this.template, + url = actionUrl || self.template, val, encodedVal; + var urlParams = self.urlParams = {}; + forEach(url.split(/\W/), function(param){ + if (!(new RegExp("^\\d+$").test(param)) && param && (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { + urlParams[param] = true; + } + }); + url = url.replace(/\\:/g, ':'); + params = params || {}; - forEach(this.urlParams, function(_, urlParam){ + 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"); + url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), encodedVal + "$1"); } else { - url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W)", "g"), function(match, + url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match, leadingSlashes, tail) { if (tail.charAt(0) == '/') { return tail; @@ -318,16 +375,23 @@ angular.module('ngResource', ['ng']). }); } }); - url = url.replace(/\/?#$/, ''); - var query = []; + + // 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]) { - query.push(encodeUriQuery(key) + '=' + encodeUriQuery(value)); + config.params = config.params || {}; + config.params[key] = value; } }); - query.sort(); - url = url.replace(/\/*$/, ''); - return url + (query.length ? '?' + query.join('&') : ''); } }; @@ -341,23 +405,26 @@ angular.module('ngResource', ['ng']). var ids = {}; actionParams = extend({}, paramDefaults, actionParams); forEach(actionParams, function(value, key){ - ids[key] = value.charAt && value.charAt(0) == '@' ? getter(data, value.substr(1)) : value; + if (isFunction(value)) { value = value(); } + ids[key] = value && value.charAt && value.charAt(0) == '@' ? getter(data, value.substr(1)) : value; }); return ids; } + function defaultResponseInterceptor(response) { + return response.resource; + } + 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'; + var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); + Resource[name] = function(a1, a2, a3, a4) { - var params = {}; - var data; - var success = noop; - var error = null; + var params = {}, data, success, error; + switch(arguments.length) { case 4: error = a4; @@ -388,58 +455,83 @@ angular.module('ngResource', ['ng']). break; case 0: break; default: - throw "Expected between 0-4 arguments [params, data, success, error], got " + - arguments.length + " arguments."; + throw $resourceMinErr('badargs', + "Expected up to 4 arguments [params, data, success, error], got {0} arguments", arguments.length); } - var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data)); - $http({ - method: action.method, - url: route.url(https://github.com/extend(%7B%7D,%20extractParams(data,%20action.params%20||%20%7B%7D), params)), - data: data - }).then(function(response) { - var data = response.data; - - if (data) { - if (action.isArray) { - value.length = 0; - forEach(data, function(item) { - value.push(new Resource(item)); - }); - } else { - copy(data, value); - } - } - (success||noop)(value, response.headers); - }, error); + var isInstanceCall = data instanceof Resource; + var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data)); + var httpConfig = {}; + var responseInterceptor = action.interceptor && action.interceptor.response || defaultResponseInterceptor; + var responseErrorInterceptor = action.interceptor && action.interceptor.responseError || undefined; - return value; - }; + forEach(action, function(value, key) { + if (key != 'params' && key != 'isArray' && key != 'interceptor') { + httpConfig[key] = copy(value); + } + }); + httpConfig.data = data; + route.setUrlParams(httpConfig, extend({}, extractParams(data, action.params || {}), params), action.url); - Resource.prototype['$' + name] = function(a1, a2, a3) { - var params = extractParams(this), - success = noop, - error; + var promise = $http(httpConfig).then(function(response) { + var data = response.data, + promise = value.$promise; - 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; + if (data) { + if ( angular.isArray(data) != !!action.isArray ) { + throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected response' + + ' to contain an {0} but got an {1}', + action.isArray?'array':'object', angular.isArray(data)?'array':'object'); + } + if (action.isArray) { + value.length = 0; + forEach(data, function(item) { + value.push(new Resource(item)); + }); + } else { + copy(data, value); + value.$promise = promise; + } } - case 0: break; - default: - throw "Expected between 1-3 arguments [params, success, error], got " + - arguments.length + " arguments."; + + value.$resolved = true; + + (success||noop)(value, response.headers); + + response.resource = value; + + return response; + }, function(response) { + value.$resolved = true; + + (error||noop)(response); + + return $q.reject(response); + }).then(responseInterceptor, responseErrorInterceptor); + + + if (!isInstanceCall) { + // we are creating instance / collection + // - set the initial promise + // - return the instance / collection + value.$promise = promise; + value.$resolved = false; + + return value; + } + + // instance call + return promise; + }; + + + Resource.prototype['$' + name] = function(params, success, error) { + if (isFunction(params)) { + error = success; success = params; params = {}; } - var data = hasBody ? this : undefined; - Resource[name].call(this, params, data, success, error); + var result = Resource[name](params, this, success, error); + return result.$promise || result; }; }); diff --git a/app/lib/angular/angular-resource.min.js b/app/lib/angular/angular-resource.min.js old mode 100644 new mode 100755 index 20982fdee2..f8ccf9d466 --- a/app/lib/angular/angular-resource.min.js +++ b/app/lib/angular/angular-resource.min.js @@ -1,10 +1,14 @@ /* - AngularJS v1.0.7 + AngularJS v1.2.0-rc.2 (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -(function(C,d,w){'use strict';d.module("ngResource",["ng"]).factory("$resource",["$http","$parse",function(x,y){function s(b,e){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,e?"%20":"+")}function t(b,e){this.template=b+="#";this.defaults=e||{};var a=this.urlParams={};h(b.split(/\W/),function(f){f&&RegExp("(^|[^\\\\]):"+f+"\\W").test(b)&&(a[f]=!0)});this.template=b.replace(/\\:/g,":")}function u(b,e,a){function f(m,a){var b= -{},a=o({},e,a);h(a,function(a,z){var c;a.charAt&&a.charAt(0)=="@"?(c=a.substr(1),c=y(c)(m)):c=a;b[z]=c});return b}function g(a){v(a||{},this)}var k=new t(b),a=o({},A,a);h(a,function(a,b){a.method=d.uppercase(a.method);var e=a.method=="POST"||a.method=="PUT"||a.method=="PATCH";g[b]=function(b,c,d,B){var j={},i,l=p,q=null;switch(arguments.length){case 4:q=B,l=d;case 3:case 2:if(r(c)){if(r(b)){l=b;q=c;break}l=c;q=d}else{j=b;i=c;l=d;break}case 1:r(b)?l=b:e?i=b:j=b;break;case 0:break;default:throw"Expected between 0-4 arguments [params, data, success, error], got "+ -arguments.length+" arguments.";}var n=this instanceof g?this:a.isArray?[]:new g(i);x({method:a.method,url:k.url(https://github.com/o(%7B%7D,f(i,a.params||%7B%7D),j)),data:i}).then(function(b){var c=b.data;if(c)a.isArray?(n.length=0,h(c,function(a){n.push(new g(a))})):v(c,n);(l||p)(n,b.headers)},q);return n};g.prototype["$"+b]=function(a,d,h){var m=f(this),j=p,i;switch(arguments.length){case 3:m=a;j=d;i=h;break;case 2:case 1:r(a)?(j=a,i=d):(m=a,j=d||p);case 0:break;default:throw"Expected between 1-3 arguments [params, success, error], got "+ -arguments.length+" arguments.";}g[b].call(this,m,e?this:w,j,i)}});g.bind=function(d){return u(b,o({},e,d),a)};return g}var A={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},p=d.noop,h=d.forEach,o=d.extend,v=d.copy,r=d.isFunction;t.prototype={url:function(b){var e=this,a=this.template,f,g,b=b||{};h(this.urlParams,function(h,c){f=b.hasOwnProperty(c)?b[c]:e.defaults[c];d.isDefined(f)&&f!==null?(g=s(f,!0).replace(/%26/gi,"&").replace(/%3D/gi, -"=").replace(/%2B/gi,"+"),a=a.replace(RegExp(":"+c+"(\\W)","g"),g+"$1")):a=a.replace(RegExp("(/?):"+c+"(\\W)","g"),function(a,b,c){return c.charAt(0)=="/"?c:b+c})});var a=a.replace(/\/?#$/,""),k=[];h(b,function(a,b){e.urlParams[b]||k.push(s(b)+"="+s(a))});k.sort();a=a.replace(/\/*$/,"");return a+(k.length?"?"+k.join("&"):"")}};return u}])})(window,window.angular); +(function(H,g,C){'use strict';var A=g.$$minErr("$resource");g.module("ngResource",["ng"]).factory("$resource",["$http","$parse","$q",function(D,y,E){function n(g,h){this.template=g;this.defaults=h||{};this.urlParams={}}function u(l,h,d){function p(c,b){var e={};b=v({},h,b);q(b,function(a,b){t(a)&&(a=a());var m;a&&a.charAt&&"@"==a.charAt(0)?(m=a.substr(1),m=y(m)(c)):m=a;e[b]=m});return e}function b(c){return c.resource}function e(c){z(c||{},this)}var F=new n(l);d=v({},G,d);q(d,function(c,f){var h= +/^(POST|PUT|PATCH)$/i.test(c.method);e[f]=function(a,f,m,l){var d={},r,s,w;switch(arguments.length){case 4:w=l,s=m;case 3:case 2:if(t(f)){if(t(a)){s=a;w=f;break}s=f;w=m}else{d=a;r=f;s=m;break}case 1:t(a)?s=a:h?r=a:d=a;break;case 0:break;default:throw A("badargs",arguments.length);}var n=r instanceof e,k=n?r:c.isArray?[]:new e(r),x={},u=c.interceptor&&c.interceptor.response||b,y=c.interceptor&&c.interceptor.responseError||C;q(c,function(a,c){"params"!=c&&("isArray"!=c&&"interceptor"!=c)&&(x[c]=z(a))}); +x.data=r;F.setUrlParams(x,v({},p(r,c.params||{}),d),c.url);d=D(x).then(function(a){var b=a.data,f=k.$promise;if(b){if(g.isArray(b)!=!!c.isArray)throw A("badcfg",c.isArray?"array":"object",g.isArray(b)?"array":"object");c.isArray?(k.length=0,q(b,function(a){k.push(new e(a))})):(z(b,k),k.$promise=f)}k.$resolved=!0;(s||B)(k,a.headers);a.resource=k;return a},function(a){k.$resolved=!0;(w||B)(a);return E.reject(a)}).then(u,y);return n?d:(k.$promise=d,k.$resolved=!1,k)};e.prototype["$"+f]=function(a,c, +b){t(a)&&(b=c,c=a,a={});a=e[f](a,this,c,b);return a.$promise||a}});e.bind=function(c){return u(l,v({},h,c),d)};return e}var G={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},B=g.noop,q=g.forEach,v=g.extend,z=g.copy,t=g.isFunction;n.prototype={setUrlParams:function(l,h,d){var p=this,b=d||p.template,e,n,c=p.urlParams={};q(b.split(/\W/),function(f){!/^\d+$/.test(f)&&(f&&RegExp("(^|[^\\\\]):"+f+"(\\W|$)").test(b))&&(c[f]=!0)}); +b=b.replace(/\\:/g,":");h=h||{};q(p.urlParams,function(c,d){e=h.hasOwnProperty(d)?h[d]:p.defaults[d];g.isDefined(e)&&null!==e?(n=encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),b=b.replace(RegExp(":"+d+"(\\W|$)","g"),n+"$1")):b=b.replace(RegExp("(/?):"+d+"(\\W|$)","g"),function(a,c,b){return"/"==b.charAt(0)?b:c+b})});b=b.replace(/\/+$/,"");b=b.replace(/\/\.(?=\w+($|\?))/, +".");l.url=b.replace(/\/\\\./,"/.");q(h,function(c,b){p.urlParams[b]||(l.params=l.params||{},l.params[b]=c)})}};return u}])})(window,window.angular); +/* +//@ sourceMappingURL=angular-resource.min.js.map +*/ diff --git a/app/lib/angular/angular-resource.min.js.map b/app/lib/angular/angular-resource.min.js.map new file mode 100755 index 0000000000..dda271c76a --- /dev/null +++ b/app/lib/angular/angular-resource.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-resource.min.js", +"lineCount":11, +"mappings":"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", +"sources":["angular-resource.js"], +"names":["window","angular","undefined","$resourceMinErr","$$minErr","module","factory","$http","$parse","$q","Route","template","defaults","urlParams","ResourceFactory","url","paramDefaults","actions","extractParams","data","actionParams","ids","extend","forEach","value","key","isFunction","charAt","path","obj","defaultResponseInterceptor","response","resource","Resource","copy","route","DEFAULT_ACTIONS","action","name","hasBody","test","method","a1","a2","a3","a4","params","success","error","arguments","length","isInstanceCall","isArray","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","setUrlParams","promise","then","$promise","item","push","$resolved","noop","headers","reject","prototype","result","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","split","param","RegExp","replace","_","urlParam","hasOwnProperty","isDefined","encodeURIComponent","match","leadingSlashes","tail"] +} diff --git a/app/lib/angular/angular-route.js b/app/lib/angular/angular-route.js new file mode 100755 index 0000000000..f37116c875 --- /dev/null +++ b/app/lib/angular/angular-route.js @@ -0,0 +1,871 @@ +/** + * @license AngularJS v1.2.0-rc.2 + * (c) 2010-2012 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +var copy = angular.copy, + equals = angular.equals, + extend = angular.extend, + forEach = angular.forEach, + isDefined = angular.isDefined, + isFunction = angular.isFunction, + isString = angular.isString, + jqLite = angular.element, + noop = angular.noop, + toJson = angular.toJson; + + +function inherit(parent, extra) { + return extend(new (extend(function() {}, {prototype:parent}))(), extra); +} + +/** + * @ngdoc overview + * @name ngRoute + * @description + * + * # ngRoute + * + * The `ngRoute` module provides routing and deeplinking services and directives for angular apps. + * + * {@installModule route} + * + */ + +var ngRouteModule = angular.module('ngRoute', ['ng']). + provider('$route', $RouteProvider); + +/** + * @ngdoc object + * @name ngRoute.$routeProvider + * @function + * + * @description + * + * Used for configuring routes. See {@link ngRoute.$route $route} for an example. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + */ +function $RouteProvider(){ + var routes = {}; + + /** + * @ngdoc method + * @name ngRoute.$routeProvider#when + * @methodOf ngRoute.$routeProvider + * + * @param {string} path Route path (matched against `$location.path`). If `$location.path` + * contains redundant trailing slash or is missing one, the route will still match and the + * `$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 and ending with a star (`:name*`). + * All characters are eagerly stored in `$routeParams` under the given `name` + * when the route matches. + * * `path` can contain optional named groups with a question mark (`:name?`). + * + * 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. + * + * Object properties: + * + * - `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. + * - `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 a function that + * returns an html template as a string which should be used by {@link + * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives. + * This property takes precedence over `templateUrl`. + * + * If `template` is a function, it will be called with the following parameters: + * + * - `{Array.}` - 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 ngRoute.directive:ngView ngView}. + * + * If `templateUrl` is a function, it will be called with the following parameters: + * + * - `{Array.}` - route parameters extracted from the current + * `$location.path()` by applying the current route + * + * - `resolve` - `{Object.=}` - 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 + * `$routeChangeSuccess` event is fired. The map object is: + * + * - `key` – `{string}`: a name of a dependency to be injected into the controller. + * - `factory` - `{string|function}`: If `string` then it is an alias for a service. + * Otherwise if function, then it is {@link api/AUTO.$injector#invoke injected} + * and the return value is treated as the dependency. If the result is a promise, it is resolved + * before its value is injected into the controller. Be aware that `ngRoute.$routeParams` will + * still refer to the previous route within these resolve functions. Use `$route.current.params` + * to access the new route parameters, instead. + * + * - `redirectTo` – {(string|function())=} – value to update + * {@link ng.$location $location} path with and trigger route redirection. + * + * If `redirectTo` is a function, it will be called with the following parameters: + * + * - `{Object.}` - route parameters extracted from the current + * `$location.path()` by applying the current route templateUrl. + * - `{string}` - current `$location.path()` + * - `{Object}` - current `$location.search()` + * + * The custom `redirectTo` function is expected to return a string which will be used + * to update `$location.path()` and `$location.search()`. + * + * - `[reloadOnSearch=true]` - {boolean=} - reload route when only $location.search() + * changes. + * + * 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, + path && pathRegExp(path, route) + ); + + // create redirection for trailing slashes + if (path) { + var redirectPath = (path[path.length-1] == '/') + ? path.substr(0, path.length-1) + : path +'/'; + + routes[redirectPath] = extend( + {redirectTo: path}, + pathRegExp(redirectPath, route) + ); + } + + return this; + }; + + /** + * @param path {string} path + * @param opts {Object} options + * @return {?Object} + * + * @description + * Normalizes the given path, returning a regular expression + * and the original path. + * + * Inspired by pathRexp in visionmedia/express/lib/utils.js. + */ + function pathRegExp(path, opts) { + var insensitive = opts.caseInsensitiveMatch, + ret = { + originalPath: path, + regexp: path + }, + keys = ret.keys = []; + + path = path + .replace(/([().])/g, '\\$1') + .replace(/(\/)?:(\w+)([\?|\*])?/g, function(_, slash, key, option){ + var optional = option === '?' ? option : null; + var star = option === '*' ? option : null; + keys.push({ name: key, optional: !!optional }); + slash = slash || ''; + return '' + + (optional ? '' : slash) + + '(?:' + + (optional ? slash : '') + + (star && '(.+)?' || '([^/]+)?') + ')' + + (optional || ''); + }) + .replace(/([\/$\*])/g, '\\$1'); + + ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : ''); + return ret; + } + + /** + * @ngdoc method + * @name ngRoute.$routeProvider#otherwise + * @methodOf ngRoute.$routeProvider + * + * @description + * Sets route definition that will be used on route change when no other route definition + * is matched. + * + * @param {Object} params Mapping information to be assigned to `$route.current`. + * @returns {Object} self + */ + this.otherwise = function(params) { + this.when(null, params); + return this; + }; + + + this.$get = ['$rootScope', '$location', '$routeParams', '$q', '$injector', '$http', '$templateCache', '$sce', + function( $rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) { + + /** + * @ngdoc object + * @name ngRoute.$route + * @requires $location + * @requires $routeParams + * + * @property {Object} current Reference to the current route definition. + * The route definition contains: + * + * - `controller`: The controller constructor as define in route definition. + * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for + * controller instantiation. The `locals` contain + * the resolved values of the `resolve` map. Additionally the `locals` also contain: + * + * - `$scope` - The current route scope. + * - `$template` - The current route template HTML. + * + * @property {Array.} routes Array of all configured routes. + * + * @description + * `$route` is used for deep-linking URLs to controllers and views (HTML partials). + * It watches `$location.url()` and tries to map the path to an existing route definition. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + * + * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API. + * + * The `$route` service is typically used in conjunction with the {@link ngRoute.directive:ngView `ngView`} + * directive and the {@link ngRoute.$routeParams `$routeParams`} service. + * + * @example + This example shows how changing the URL hash causes the `$route` to match a route against the + URL, and the `ngView` pulls in the partial. + + Note that this example is using {@link ng.directive:script inlined templates} + to get it working on jsfiddle as well. + + + +
+ Choose: + Moby | + Moby: Ch1 | + Gatsby | + Gatsby: Ch4 | + Scarlet Letter
+ +
+
+ +
$location.path() = {{$location.path()}}
+
$route.current.templateUrl = {{$route.current.templateUrl}}
+
$route.current.params = {{$route.current.params}}
+
$route.current.scope.name = {{$route.current.scope.name}}
+
$routeParams = {{$routeParams}}
+
+
+ + + controller: {{name}}
+ Book Id: {{params.bookId}}
+
+ + + controller: {{name}}
+ Book Id: {{params.bookId}}
+ Chapter Id: {{params.chapterId}} +
+ + + angular.module('ngView', ['ngRoute']).config(function($routeProvider, $locationProvider) { + $routeProvider.when('/Book/:bookId', { + templateUrl: 'book.html', + controller: BookCntl, + resolve: { + // I will cause a 1 second delay + delay: function($q, $timeout) { + var delay = $q.defer(); + $timeout(delay.resolve, 1000); + return delay.promise; + } + } + }); + $routeProvider.when('/Book/:bookId/ch/:chapterId', { + templateUrl: 'chapter.html', + controller: ChapterCntl + }); + + // 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 BookCntl($scope, $routeParams) { + $scope.name = "BookCntl"; + $scope.params = $routeParams; + } + + function ChapterCntl($scope, $routeParams) { + $scope.name = "ChapterCntl"; + $scope.params = $routeParams; + } + + + + it('should load and compile correct template', function() { + element('a:contains("Moby: Ch1")').click(); + var content = element('.doc-example-live [ng-view]').text(); + expect(content).toMatch(/controller\: ChapterCntl/); + expect(content).toMatch(/Book Id\: Moby/); + expect(content).toMatch(/Chapter Id\: 1/); + + element('a:contains("Scarlet")').click(); + sleep(2); // promises are not part of scenario waiting + content = element('.doc-example-live [ng-view]').text(); + expect(content).toMatch(/controller\: BookCntl/); + expect(content).toMatch(/Book Id\: Scarlet/); + }); + +
+ */ + + /** + * @ngdoc event + * @name ngRoute.$route#$routeChangeStart + * @eventOf ngRoute.$route + * @eventType broadcast on root scope + * @description + * Broadcasted before a route change. At this point the route services starts + * resolving all of the dependencies needed for the route change to occurs. + * Typically this involves fetching the view template as well as any dependencies + * defined in `resolve` route property. Once all of the dependencies are resolved + * `$routeChangeSuccess` is fired. + * + * @param {Route} next Future route information. + * @param {Route} current Current route information. + */ + + /** + * @ngdoc event + * @name ngRoute.$route#$routeChangeSuccess + * @eventOf ngRoute.$route + * @eventType broadcast on root scope + * @description + * Broadcasted after a route dependencies are resolved. + * {@link ngRoute.directive:ngView ngView} listens for the directive + * to instantiate the controller and render the view. + * + * @param {Object} angularEvent Synthetic event object. + * @param {Route} current Current route information. + * @param {Route|Undefined} previous Previous route information, or undefined if current is first route entered. + */ + + /** + * @ngdoc event + * @name ngRoute.$route#$routeChangeError + * @eventOf ngRoute.$route + * @eventType broadcast on root scope + * @description + * Broadcasted if any of the resolve promises are rejected. + * + * @param {Route} current Current route information. + * @param {Route} previous Previous route information. + * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. + */ + + /** + * @ngdoc event + * @name ngRoute.$route#$routeUpdate + * @eventOf ngRoute.$route + * @eventType broadcast on root scope + * @description + * + * The `reloadOnSearch` property has been set to false, and we are reusing the same + * instance of the Controller. + */ + + var forceReload = false, + $route = { + routes: routes, + + /** + * @ngdoc method + * @name ngRoute.$route#reload + * @methodOf ngRoute.$route + * + * @description + * Causes `$route` service to reload the current route even if + * {@link ng.$location $location} hasn't changed. + * + * As a result of that, {@link ngRoute.directive:ngView ngView} + * creates new scope, reinstantiates the controller. + */ + reload: function() { + forceReload = true; + $rootScope.$evalAsync(updateRoute); + } + }; + + $rootScope.$on('$locationChangeSuccess', updateRoute); + + return $route; + + ///////////////////////////////////////////////////// + + /** + * @param on {string} current url + * @param route {Object} route regexp to match the url against + * @return {?Object} + * + * @description + * Check if the route matches the current url. + * + * Inspired by match in + * visionmedia/express/lib/router/router.js. + */ + function switchRouteMatcher(on, route) { + var keys = route.keys, + params = {}; + + if (!route.regexp) return null; + + var m = route.regexp.exec(on); + if (!m) return null; + + for (var i = 1, len = m.length; i < len; ++i) { + var key = keys[i - 1]; + + var val = 'string' == typeof m[i] + ? decodeURIComponent(m[i]) + : m[i]; + + if (key && val) { + params[key.name] = val; + } + } + return params; + } + + function updateRoute() { + var next = parseRoute(), + last = $route.current; + + if (next && last && next.$$route === last.$$route + && equals(next.pathParams, last.pathParams) && !next.reloadOnSearch && !forceReload) { + last.params = next.params; + copy(last.params, $routeParams); + $rootScope.$broadcast('$routeUpdate', last); + } else if (next || last) { + forceReload = false; + $rootScope.$broadcast('$routeChangeStart', next, last); + $route.current = next; + if (next) { + if (next.redirectTo) { + if (isString(next.redirectTo)) { + $location.path(interpolate(next.redirectTo, next.params)).search(next.params) + .replace(); + } else { + $location.url(https://github.com/next.redirectTo(next.pathParams,%20$location.path(), $location.search())) + .replace(); + } + } + } + + $q.when(next). + then(function() { + if (next) { + var locals = extend({}, next.resolve), + template, templateUrl; + + 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(templateUrl = next.templateUrl)) { + if (isFunction(templateUrl)) { + templateUrl = templateUrl(next.params); + } + templateUrl = $sce.getTrustedResourceUrl(templateUrl); + if (isDefined(templateUrl)) { + next.loadedTemplateUrl = templateUrl; + template = $http.get(templateUrl, {cache: $templateCache}). + then(function(response) { return response.data; }); + } + } + if (isDefined(template)) { + locals['$template'] = template; + } + return $q.all(locals); + } + }). + // after route change + then(function(locals) { + if (next == $route.current) { + if (next) { + next.locals = locals; + copy(next.params, $routeParams); + } + $rootScope.$broadcast('$routeChangeSuccess', next, last); + } + }, function(error) { + if (next == $route.current) { + $rootScope.$broadcast('$routeChangeError', next, last, error); + } + }); + } + } + + + /** + * @returns the current active route, by matching it against the URL + */ + function parseRoute() { + // Match a route + var params, match; + forEach(routes, function(route, path) { + if (!match && (params = switchRouteMatcher($location.path(), route))) { + match = inherit(route, { + params: extend({}, $location.search(), params), + pathParams: params}); + match.$$route = route; + } + }); + // No route matched; fallback to "otherwise" route + return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); + } + + /** + * @returns interpolation of the redirect path with the parameters + */ + function interpolate(string, params) { + var result = []; + forEach((string||'').split(':'), function(segment, i) { + if (i === 0) { + result.push(segment); + } else { + var segmentMatch = segment.match(/(\w+)(.*)/); + var key = segmentMatch[1]; + result.push(params[key]); + result.push(segmentMatch[2] || ''); + delete params[key]; + } + }); + return result.join(''); + } + }]; +} + +ngRouteModule.provider('$routeParams', $RouteParamsProvider); + + +/** + * @ngdoc object + * @name ngRoute.$routeParams + * @requires $route + * + * @description + * The `$routeParams` service allows you to retrieve the current set of route parameters. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + * + * The route parameters are a combination of {@link ng.$location `$location`}'s + * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}. + * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched. + * + * In case of parameter name collision, `path` params take precedence over `search` params. + * + * The service guarantees that the identity of the `$routeParams` object will remain unchanged + * (but its properties will likely change) even when a route change occurs. + * + * Note that the `$routeParams` are only updated *after* a route change completes successfully. + * This means that you cannot rely on `$routeParams` being correct in route resolve functions. + * Instead you can use `$route.current.params` to access the new route's parameters. + * + * @example + *
+ *  // Given:
+ *  // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
+ *  // Route: /Chapter/:chapterId/Section/:sectionId
+ *  //
+ *  // Then
+ *  $routeParams ==> {chapterId:1, sectionId:2, search:'moby'}
+ * 
+ */ +function $RouteParamsProvider() { + this.$get = function() { return {}; }; +} + +ngRouteModule.directive('ngView', ngViewFactory); + +/** + * @ngdoc directive + * @name ngRoute.directive:ngView + * @restrict ECA + * + * @description + * # Overview + * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by + * including the rendered template of the current route into the main layout (`index.html`) file. + * Every time the current route changes, the included view changes with it according to the + * configuration of the `$route` service. + * + * Requires the {@link ngRoute `ngRoute`} module to be installed. + * + * @animations + * enter - animation is used to bring new content into the browser. + * leave - animation is used to animate existing content away. + * + * The enter and leave animation occur concurrently. + * + * @scope + * @example + + +
+ Choose: + Moby | + Moby: Ch1 | + Gatsby | + Gatsby: Ch4 | + Scarlet Letter
+ +
+
+
+
+ +
$location.path() = {{main.$location.path()}}
+
$route.current.templateUrl = {{main.$route.current.templateUrl}}
+
$route.current.params = {{main.$route.current.params}}
+
$route.current.scope.name = {{main.$route.current.scope.name}}
+
$routeParams = {{main.$routeParams}}
+
+
+ + +
+ controller: {{book.name}}
+ Book Id: {{book.params.bookId}}
+
+
+ + +
+ controller: {{chapter.name}}
+ Book Id: {{chapter.params.bookId}}
+ Chapter Id: {{chapter.params.chapterId}} +
+
+ + + .example-animate-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .example-animate-container > div { + padding:10px; + } + + .view-example.ng-enter, .view-example.ng-leave { + -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; + -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; + + display:block; + width:100%; + border-left:1px solid black; + + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + padding:10px; + } + + .example-animate-container { + position:relative; + height:100px; + } + + .view-example.ng-enter { + left:100%; + } + .view-example.ng-enter.ng-enter-active { + left:0; + } + + .view-example.ng-leave { } + .view-example.ng-leave.ng-leave-active { + left:-100%; + } + + + + angular.module('ngViewExample', ['ngRoute', 'ngAnimate'], function($routeProvider, $locationProvider) { + $routeProvider.when('/Book/:bookId', { + templateUrl: 'book.html', + controller: BookCntl, + controllerAs: 'book' + }); + $routeProvider.when('/Book/:bookId/ch/:chapterId', { + templateUrl: 'chapter.html', + controller: ChapterCntl, + controllerAs: 'chapter' + }); + + // configure html5 to get links working on jsfiddle + $locationProvider.html5Mode(true); + }); + + function MainCntl($route, $routeParams, $location) { + this.$route = $route; + this.$location = $location; + this.$routeParams = $routeParams; + } + + function BookCntl($routeParams) { + this.name = "BookCntl"; + this.params = $routeParams; + } + + function ChapterCntl($routeParams) { + this.name = "ChapterCntl"; + this.params = $routeParams; + } + + + + it('should load and compile correct template', function() { + element('a:contains("Moby: Ch1")').click(); + var content = element('.doc-example-live [ng-view]').text(); + expect(content).toMatch(/controller\: ChapterCntl/); + expect(content).toMatch(/Book Id\: Moby/); + expect(content).toMatch(/Chapter Id\: 1/); + + element('a:contains("Scarlet")').click(); + content = element('.doc-example-live [ng-view]').text(); + expect(content).toMatch(/controller\: BookCntl/); + expect(content).toMatch(/Book Id\: Scarlet/); + }); + +
+ */ + + +/** + * @ngdoc event + * @name ngRoute.directive:ngView#$viewContentLoaded + * @eventOf ngRoute.directive:ngView + * @eventType emit on the current ngView scope + * @description + * Emitted every time the ngView content is reloaded. + */ +ngViewFactory.$inject = ['$route', '$anchorScroll', '$compile', '$controller', '$animate']; +function ngViewFactory( $route, $anchorScroll, $compile, $controller, $animate) { + return { + restrict: 'ECA', + terminal: true, + priority: 1000, + transclude: 'element', + compile: function(element, attr, linker) { + return function(scope, $element, attr) { + var currentScope, + currentElement, + onloadExp = attr.onload || ''; + + scope.$on('$routeChangeSuccess', update); + update(); + + function cleanupLastView() { + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + if(currentElement) { + $animate.leave(currentElement); + currentElement = null; + } + } + + function update() { + var locals = $route.current && $route.current.locals, + template = locals && locals.$template; + + if (template) { + var newScope = scope.$new(); + linker(newScope, function(clone) { + cleanupLastView(); + + clone.html(template); + $animate.enter(clone, null, $element); + + var link = $compile(clone.contents()), + current = $route.current; + + currentScope = current.scope = newScope; + currentElement = clone; + + if (current.controller) { + locals.$scope = currentScope; + var controller = $controller(current.controller, locals); + if (current.controllerAs) { + currentScope[current.controllerAs] = controller; + } + clone.data('$ngControllerController', controller); + clone.contents().data('$ngControllerController', controller); + } + + link(currentScope); + currentScope.$emit('$viewContentLoaded'); + currentScope.$eval(onloadExp); + + // $anchorScroll might listen on event... + $anchorScroll(); + }); + } else { + cleanupLastView(); + } + } + } + } + }; +} + + +})(window, window.angular); diff --git a/app/lib/angular/angular-route.min.js b/app/lib/angular/angular-route.min.js new file mode 100755 index 0000000000..ca302950c7 --- /dev/null +++ b/app/lib/angular/angular-route.min.js @@ -0,0 +1,15 @@ +/* + AngularJS v1.2.0-rc.2 + (c) 2010-2012 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(q,c,I){'use strict';function x(c,f){return m(new (m(function(){},{prototype:c})),f)}function t(c,f,a,p,n){return{restrict:"ECA",terminal:!0,priority:1E3,transclude:"element",compile:function(g,m,D){return function(u,m,e){function g(){k&&(k.$destroy(),k=null);l&&(n.leave(l),l=null)}function s(){var h=c.current&&c.current.locals,y=h&&h.$template;if(y){var z=u.$new();D(z,function(d){g();d.html(y);n.enter(d,null,m);var G=a(d.contents()),r=c.current;k=r.scope=z;l=d;if(r.controller){h.$scope= +k;var e=p(r.controller,h);r.controllerAs&&(k[r.controllerAs]=e);d.data("$ngControllerController",e);d.contents().data("$ngControllerController",e)}G(k);k.$emit("$viewContentLoaded");k.$eval(b);f()})}else g()}var k,l,b=e.onload||"";u.$on("$routeChangeSuccess",s);s()}}}}var A=c.copy,H=c.equals,m=c.extend,w=c.forEach,v=c.isDefined,B=c.isFunction,C=c.isString;q=c.module("ngRoute",["ng"]).provider("$route",function(){function c(a,p){var f=p.caseInsensitiveMatch,g={originalPath:a,regexp:a},m=g.keys=[]; +a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?|\*])?/g,function(a,c,p,e){a="?"===e?e:null;e="*"===e?e:null;m.push({name:p,optional:!!a});c=c||"";return""+(a?"":c)+"(?:"+(a?c:"")+(e&&"(.+)?"||"([^/]+)?")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");g.regexp=RegExp("^"+a+"$",f?"i":"");return g}var f={};this.when=function(a,p){f[a]=m({reloadOnSearch:!0},p,a&&c(a,p));if(a){var n="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";f[n]=m({redirectTo:a},c(n,p))}return this};this.otherwise=function(a){this.when(null, +a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,n,g,s,q,u,t){function e(){var b=E(),h=l.current;if(b&&h&&b.$$route===h.$$route&&H(b.pathParams,h.pathParams)&&!b.reloadOnSearch&&!k)h.params=b.params,A(h.params,n),a.$broadcast("$routeUpdate",h);else if(b||h)k=!1,a.$broadcast("$routeChangeStart",b,h),(l.current=b)&&b.redirectTo&&(C(b.redirectTo)?c.path(F(b.redirectTo,b.params)).search(b.params).replace():c.url(b.redirectTo(b.pathParams, +c.path(),c.search())).replace()),g.when(b).then(function(){if(b){var a=m({},b.resolve),c,d;w(a,function(b,c){a[c]=C(b)?s.get(b):s.invoke(b)});v(c=b.template)?B(c)&&(c=c(b.params)):v(d=b.templateUrl)&&(B(d)&&(d=d(b.params)),d=t.getTrustedResourceUrl(d),v(d)&&(b.loadedTemplateUrl=d,c=q.get(d,{cache:u}).then(function(b){return b.data})));v(c)&&(a.$template=c);return g.all(a)}}).then(function(c){b==l.current&&(b&&(b.locals=c,A(b.params,n)),a.$broadcast("$routeChangeSuccess",b,h))},function(c){b==l.current&& +a.$broadcast("$routeChangeError",b,h,c)})}function E(){var b,a;w(f,function(e,k){var d;if(d=!a){var f=c.path();d=e.keys;var r={};if(e.regexp)if(f=e.regexp.exec(f)){for(var g=1,l=f.length;g
Snippet: - + + - - - - + + + + + - - + + + + + + + + + - - - - -
FilterDirectiveHow Source Rendered
html filter -
<div ng-bind-html="snippet">
</div>
-
-
-
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html="snippet">
</div>
no filter
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value
<div ng-bind-html="deliberatelyTrustDangerousSnippet()">
</div>
ng-bindAutomatically escapes
<div ng-bind="snippet">
</div>
unsafe html filter
<div ng-bind-html-unsafe="snippet">
</div>
- it('should sanitize the html snippet ', function() { - expect(using('#html-filter').element('div').html()). + it('should sanitize the html snippet by default', function() { + expect(using('#bind-html-with-sanitize').element('div').html()). toBe('

an html\nclick here\nsnippet

'); }); + it('should inline raw snippet if bound to a trusted value', function() { + expect(using('#bind-html-with-trust').element("div").html()). + toBe("

an html\n" + + "click here\n" + + "snippet

"); + }); + it('should escape snippet without any filter', function() { - expect(using('#escaped-html').element('div').html()). + expect(using('#bind-default').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("

an html\n" + - "click here\n" + - "snippet

"); - }); - it('should update', function() { - input('snippet').enter('new text'); - expect(using('#html-filter').binding('snippet')).toBe('new text'); - expect(using('#escaped-html').element('div').html()).toBe("new <b>text</b>"); - expect(using('#html-unsafe-filter').binding("snippet")).toBe('new text'); + input('snippet').enter('new text'); + expect(using('#bind-html-with-sanitize').element('div').html()).toBe('new text'); + expect(using('#bind-html-with-trust').element('div').html()).toBe('new text'); + expect(using('#bind-default').element('div').html()).toBe("new <b onclick=\"alert(1)\">text</b>"); });
@@ -129,7 +141,7 @@ var START_TAG_REGEXP = /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?: BEGING_END_TAGE_REGEXP = /^<\s*\//, COMMENT_REGEXP = //g, CDATA_REGEXP = //g, - URI_REGEXP = /^((ftp|https?):\/\/|mailto:|#)/, + URI_REGEXP = /^((ftp|https?):\/\/|mailto:|tel:|#)/i, NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Match everything outside of normal chars and " (quote character) @@ -256,7 +268,7 @@ function htmlParser( html, handler ) { } if ( html == last ) { - throw "Parse Error: " + html; + throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block of html: {0}", html); } last = html; } @@ -283,10 +295,10 @@ function htmlParser( html, handler ) { var attrs = {}; - rest.replace(ATTR_REGEXP, function(match, name, doubleQuotedValue, singleQoutedValue, unqoutedValue) { + rest.replace(ATTR_REGEXP, function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { var value = doubleQuotedValue - || singleQoutedValue - || unqoutedValue + || singleQuotedValue + || unquotedValue || ''; attrs[name] = decodeEntities(value); @@ -400,39 +412,19 @@ function htmlSanitizeWriter(buf){ // 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. + * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and + * plain email address links. + * + * Requires the {@link ngSanitize `ngSanitize`} module to be installed. * * @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 @@ -449,6 +441,7 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san 'mailto:us@somewhere.org,\n'+ 'another@somewhere.org,\n'+ 'and one more: ftp://127.0.0.1/.'; + $scope.snippetWithTarget = 'http://angularjs.org/'; }
@@ -468,6 +461,15 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san
+ + linky target + +
<div ng-bind-html="snippetWithTarget | linky:'_blank'">
</div>
+ + +
+ + no filter
<div ng-bind="snippet">
</div>
@@ -500,6 +502,11 @@ angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($san toBe('new http://link.'); 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('http://angularjs.org/'); + }); */ @@ -507,7 +514,7 @@ 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) { + return function(text, target) { if (!text) return text; var match; var raw = text; @@ -516,6 +523,10 @@ angular.module('ngSanitize').filter('linky', function() { 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]; @@ -523,7 +534,8 @@ angular.module('ngSanitize').filter('linky', function() { if (match[2] == match[3]) url = 'mailto:' + url; i = match.index; writer.chars(raw.substr(0, i)); - writer.start('a', {href:url}); + properties.href = url; + writer.start('a', properties); writer.chars(match[0].replace(MAILTO_REGEXP, '')); writer.end('a'); raw = raw.substring(i + match[0].length); diff --git a/app/lib/angular/angular-sanitize.min.js b/app/lib/angular/angular-sanitize.min.js old mode 100644 new mode 100755 index dbe1d1388e..fa90c9276c --- a/app/lib/angular/angular-sanitize.min.js +++ b/app/lib/angular/angular-sanitize.min.js @@ -1,13 +1,15 @@ /* - AngularJS v1.0.7 + AngularJS v1.2.0-rc.2 (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -(function(I,g){'use strict';function i(a){var d={},a=a.split(","),b;for(b=0;b=0;e--)if(f[e]==b)break;if(e>=0){for(c=f.length-1;c>=e;c--)d.end&&d.end(f[c]);f.length= -e}}var c,h,f=[],j=a;for(f.last=function(){return f[f.length-1]};a;){h=!0;if(!f.last()||!q[f.last()]){if(a.indexOf("<\!--")===0)c=a.indexOf("--\>"),c>=0&&(d.comment&&d.comment(a.substring(4,c)),a=a.substring(c+3),h=!1);else if(B.test(a)){if(c=a.match(r))a=a.substring(c[0].length),c[0].replace(r,e),h=!1}else if(C.test(a)&&(c=a.match(s)))a=a.substring(c[0].length),c[0].replace(s,b),h=!1;h&&(c=a.indexOf("<"),h=c<0?a:a.substring(0,c),a=c<0?"":a.substring(c),d.chars&&d.chars(k(h)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+ -f.last()+"[^>]*>","i"),function(b,a){a=a.replace(D,"$1").replace(E,"$1");d.chars&&d.chars(k(a));return""}),e("",f.last());if(a==j)throw"Parse Error: "+a;j=a}e()}function k(a){l.innerHTML=a.replace(//g,">")}function u(a){var d=!1,b=g.bind(a,a.push);return{start:function(a,c,h){a=g.lowercase(a);!d&&q[a]&&(d=a);!d&&v[a]== -!0&&(b("<"),b(a),g.forEach(c,function(a,c){var e=g.lowercase(c);if(G[e]==!0&&(w[e]!==!0||a.match(H)))b(" "),b(c),b('="'),b(t(a)),b('"')}),b(h?"/>":">"))},end:function(a){a=g.lowercase(a);!d&&v[a]==!0&&(b(""));a==d&&(d=!1)},chars:function(a){d||b(t(a))}}}var s=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,r=/^<\s*\/\s*([\w:-]+)[^>]*>/,A=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,C=/^/g, -E=//g,H=/^((ftp|https?):\/\/|mailto:|#)/,F=/([^\#-~| |!])/g,p=i("area,br,col,hr,img,wbr"),x=i("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=i("rp,rt"),o=g.extend({},y,x),m=g.extend({},x,i("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")),n=g.extend({},y,i("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")), -q=i("script,style"),v=g.extend({},p,m,n,o),w=i("background,cite,href,longdesc,src,usemap"),G=g.extend({},w,i("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")),l=document.createElement("pre");g.module("ngSanitize",[]).value("$sanitize",function(a){var d=[]; -z(a,u(d));return d.join("")});g.module("ngSanitize").directive("ngBindHtml",["$sanitize",function(a){return function(d,b,e){b.addClass("ng-binding").data("$binding",e.ngBindHtml);d.$watch(e.ngBindHtml,function(c){c=a(c);b.html(c||"")})}}]);g.module("ngSanitize").filter("linky",function(){var a=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,d=/^mailto:/;return function(b){if(!b)return b;for(var e=b,c=[],h=u(c),f,g;b=e.match(a);)f=b[0],b[2]==b[3]&&(f="mailto:"+f),g=b.index, -h.chars(e.substr(0,g)),h.start("a",{href:f}),h.chars(b[0].replace(d,"")),h.end("a"),e=e.substring(g+b[0].length);h.chars(e);return c.join("")}})})(window,window.angular); +(function(m,g,n){'use strict';function h(a){var d={};a=a.split(",");var c;for(c=0;c=c;k--)d.end&&d.end(e[k]);e.length= +c}}var b,f,e=[],l=a;for(e.last=function(){return e[e.length-1]};a;){f=!0;if(e.last()&&v[e.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+e.last()+"[^>]*>","i"),function(a,b){b=b.replace(E,"$1").replace(F,"$1");d.chars&&d.chars(p(b));return""}),k("",e.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--\x3e"),0<=b&&(d.comment&&d.comment(a.substring(4,b)),a=a.substring(b+3),f=!1);else if(G.test(a)){if(b=a.match(w))a=a.substring(b[0].length),b[0].replace(w,k),f=!1}else H.test(a)&&(b=a.match(x))&& +(a=a.substring(b[0].length),b[0].replace(x,c),f=!1);f&&(b=a.indexOf("<"),f=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),d.chars&&d.chars(p(f)))}if(a==l)throw I("badparse",a);l=a}k()}function p(a){q.innerHTML=a.replace(//g,">")}function z(a){var d=!1,c=g.bind(a,a.push);return{start:function(a,b,f){a=g.lowercase(a); +!d&&v[a]&&(d=a);d||!0!=A[a]||(c("<"),c(a),g.forEach(b,function(a,b){var d=g.lowercase(b);!0!=K[d]||!0===B[d]&&!a.match(L)||(c(" "),c(b),c('="'),c(y(a)),c('"'))}),c(f?"/>":">"))},end:function(a){a=g.lowercase(a);d||!0!=A[a]||(c(""));a==d&&(d=!1)},chars:function(a){d||c(y(a))}}}var I=g.$$minErr("$sanitize"),x=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,w=/^<\s*\/\s*([\w:-]+)[^>]*>/,D=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, +H=/^]/,d=/^mailto:/;return function(c,k){if(!c)return c;var b,f=c,e=[],l=z(e),h,m,n={};g.isDefined(k)&&(n.target=k);for(;b=f.match(a);)h=b[0],b[2]==b[3]&&(h="mailto:"+h),m=b.index,l.chars(f.substr(0,m)),n.href=h,l.start("a",n),l.chars(b[0].replace(d,"")),l.end("a"),f=f.substring(m+b[0].length);l.chars(f);return e.join("")}})})(window,window.angular); +/* +//@ sourceMappingURL=angular-sanitize.min.js.map +*/ diff --git a/app/lib/angular/angular-sanitize.min.js.map b/app/lib/angular/angular-sanitize.min.js.map new file mode 100755 index 0000000000..dcff459756 --- /dev/null +++ b/app/lib/angular/angular-sanitize.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-sanitize.min.js", +"lineCount":12, +"mappings":"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", +"sources":["angular-sanitize.js"], +"names":["window","angular","undefined","makeMap","str","obj","items","split","i","length","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","lowercase","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","chars","stack.last","specialElements","RegExp","all","text","COMMENT_REGEXP","CDATA_REGEXP","indexOf","comment","substring","BEGING_END_TAGE_REGEXP","test","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","hiddenPre","innerHTML","innerText","textContent","encodeEntities","NON_ALPHANUMERIC_REGEXP","charCodeAt","htmlSanitizeWriter","buf","ignore","out","bind","validElements","forEach","key","lkey","validAttrs","uriAttrs","URI_REGEXP","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","document","createElement","module","$sanitize","join","filter","LINKY_URL_REGEXP","MAILTO_REGEXP","target","raw","writer","url","properties","isDefined","substr","href"] +} diff --git a/app/lib/angular/angular-touch.js b/app/lib/angular/angular-touch.js new file mode 100755 index 0000000000..3e98dfd376 --- /dev/null +++ b/app/lib/angular/angular-touch.js @@ -0,0 +1,553 @@ +/** + * @license AngularJS v1.2.0-rc.2 + * (c) 2010-2012 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) {'use strict'; + +/** + * @ngdoc overview + * @name ngTouch + * @description + * + * # ngTouch + * + * `ngTouch` is the name of the optional Angular module that provides touch events and other + * helpers for touch-enabled devices. + * The implementation is based on jQuery Mobile touch event handling + * ([jquerymobile.com](http://jquerymobile.com/)) + * + * {@installModule touch} + * + * See {@link ngTouch.$swipe `$swipe`} for usage. + */ + +// define ngTouch module +var ngTouch = angular.module('ngTouch', []); + +/** + * @ngdoc object + * @name ngTouch.$swipe + * + * @description + * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe + * behavior, to make implementing swipe-related directives more convenient. + * + * Requires the {@link ngTouch `ngTouch`} module to be installed. + * + * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by + * `ngCarousel` in a separate component. + * + * # Usage + * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element + * which is to be watched for swipes, and an object with four handler functions. See the + * documentation for `bind` below. + */ + +ngTouch.factory('$swipe', [function() { + // 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 { + /** + * @ngdoc method + * @name ngTouch.$swipe#bind + * @methodOf ngTouch.$swipe + * + * @description + * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an + * object containing event handlers. + * + * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end` + * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }`. + * + * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is + * watching for `touchmove` or `mousemove` events. These events are ignored until the total + * distance moved in either dimension exceeds a small threshold. + * + * Once this threshold is exceeded, either the horizontal or vertical delta is greater. + * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow. + * - If the vertical distance is greater, this is a scroll, and we let the browser take over. + * A `cancel` event is sent. + * + * `move` is called on `mousemove` and `touchmove` after the above logic has determined that + * a swipe is in progress. + * + * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`. + * + * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling + * as described above. + * + */ + bind: function(element, eventHandlers) { + // Absolute total movement, used to control swipe vs. scroll. + var totalX, totalY; + // Coordinates of the start position. + var startCoords; + // Last event's position. + var lastPos; + // Whether a swipe is active. + var active = false; + + element.on('touchstart mousedown', function(event) { + startCoords = getCoordinates(event); + active = true; + totalX = 0; + totalY = 0; + lastPos = startCoords; + eventHandlers['start'] && eventHandlers['start'](startCoords); + }); + + element.on('touchcancel', function(event) { + active = false; + eventHandlers['cancel'] && eventHandlers['cancel'](); + }); + + element.on('touchmove mousemove', function(event) { + if (!active) 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. + + if (!startCoords) return; + var coords = getCoordinates(event); + + totalX += Math.abs(coords.x - lastPos.x); + totalY += Math.abs(coords.y - lastPos.y); + + lastPos = coords; + + 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) { + // Allow native scrolling to take over. + active = false; + eventHandlers['cancel'] && eventHandlers['cancel'](); + return; + } else { + // Prevent the browser from scrolling. + event.preventDefault(); + + eventHandlers['move'] && eventHandlers['move'](coords); + } + }); + + element.on('touchend mouseup', function(event) { + if (!active) return; + active = false; + eventHandlers['end'] && eventHandlers['end'](getCoordinates(event)); + }); + } + }; +}]); + +/** + * @ngdoc directive + * @name ngTouch.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. + * + * Requires the {@link ngTouch `ngTouch`} module to be installed. + * + * 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 + + + + count: {{ count }} + + + */ + +ngTouch.config(['$provide', function($provide) { + $provide.decorator('ngClickDirective', ['$delegate', function($delegate) { + // drop the default ngClick directive + $delegate.shift(); + return $delegate; + }]); +}]); + +ngTouch.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(); + + // Blur focused form elements + event.target && event.target.blur(); + } + + + // 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.on('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.on('touchmove', function(event) { + resetState(); + }); + + element.on('touchcancel', function(event) { + resetState(); + }); + + element.on('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(); + } + + if (!angular.isDefined(attr.disabled) || attr.disabled === false) { + element.triggerHandler('click', 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) { }; + + // Actual click handler. + // There are three different kinds of clicks, only two of which reach this point. + // - On desktop browsers without touch events, their clicks will always come here. + // - On mobile browsers, the simulated "fast" click will call this. + // - But the browser's follow-up slow click will be "busted" before it reaches this handler. + // Therefore it's safe to use this directive on both mobile and desktop. + element.on('click', function(event) { + scope.$apply(function() { + clickHandler(scope, {$event: event}); + }); + }); + + element.on('mousedown', function(event) { + element.addClass(ACTIVE_CLASS_NAME); + }); + + element.on('mousemove mouseup', function(event) { + element.removeClass(ACTIVE_CLASS_NAME); + }); + + }; +}]); + +/** + * @ngdoc directive + * @name ngTouch.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. + * + * Requires the {@link ngTouch `ngTouch`} module to be installed. + * + * @element ANY + * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate + * upon left swipe. (Event object is available as `$event`) + * + * @example + + +
+ Some list content, like an email in the inbox +
+
+ + +
+
+
+ */ + +/** + * @ngdoc directive + * @name ngTouch.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. + * + * Requires the {@link ngTouch `ngTouch`} module to be installed. + * + * @element ANY + * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate + * upon right swipe. (Event object is available as `$event`) + * + * @example + + +
+ Some list content, like an email in the inbox +
+
+ + +
+
+
+ */ + +function makeSwipeDirective(directiveName, direction, eventName) { + ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) { + // 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; + + return function(scope, element, attr) { + var swipeHandler = $parse(attr[directiveName]); + + var startCoords, valid; + + function validSwipe(coords) { + // 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 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; + } + + $swipe.bind(element, { + 'start': function(coords) { + startCoords = coords; + valid = true; + }, + 'cancel': function() { + valid = false; + }, + 'end': function(coords) { + if (validSwipe(coords)) { + scope.$apply(function() { + element.triggerHandler(eventName); + swipeHandler(scope); + }); + } + } + }); + }; + }]); +} + +// Left is negative X-coordinate, right is positive. +makeSwipeDirective('ngSwipeLeft', -1, 'swipeleft'); +makeSwipeDirective('ngSwipeRight', 1, 'swiperight'); + + + +})(window, window.angular); diff --git a/app/lib/angular/angular-touch.min.js b/app/lib/angular/angular-touch.min.js new file mode 100755 index 0000000000..245a3deda1 --- /dev/null +++ b/app/lib/angular/angular-touch.min.js @@ -0,0 +1,14 @@ +/* + AngularJS v1.2.0-rc.2 + (c) 2010-2012 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(y,v,z){'use strict';function t(f,a,c){q.directive(f,["$parse","$swipe",function(l,n){var r=75,e=0.3,g=30;return function(p,m,k){function d(d){if(!u)return!1;var b=Math.abs(d.y-u.y);d=(d.x-u.x)*a;return h&&bg&&b/dl&&10>n||(n>l?(g=!1,c.cancel&& +c.cancel()):(a.preventDefault(),c.move&&c.move(m)))}});a.on("touchend mouseup",function(a){g&&(g=!1,c.end&&c.end(f(a)))})}}}]);q.config(["$provide",function(f){f.decorator("ngClickDirective",["$delegate",function(a){a.shift();return a}])}]);q.directive("ngClick",["$parse","$timeout","$rootElement",function(f,a,c){function l(d,a,c){for(var h=0;he)){var b=a.touches&&a.touches.length? +a.touches:[a],c=b[0].clientX,b=b[0].clientY;1>c&&1>b||l(k,c,b)||(a.stopPropagation(),a.preventDefault(),a.target&&a.target.blur())}}function r(d){d=d.touches&&d.touches.length?d.touches:[d];var b=d[0].clientX,c=d[0].clientY;k.push(b,c);a(function(){for(var a=0;a +d&&12>p)&&(k||(c[0].addEventListener("click",n,!0),c[0].addEventListener("touchstart",r,!0),k=[]),m=Date.now(),l(k,e,f),s&&s.blur(),v.isDefined(g.disabled)&&!1!==g.disabled||b.triggerHandler("click",a));h()});b.onclick=function(a){};b.on("click",function(b){a.$apply(function(){e(a,{$event:b})})});b.on("mousedown",function(a){b.addClass(p)});b.on("mousemove mouseup",function(a){b.removeClass(p)})}}]);t("ngSwipeLeft",-1,"swipeleft");t("ngSwipeRight",1,"swiperight")})(window,window.angular); +/* +//@ sourceMappingURL=angular-touch.min.js.map +*/ diff --git a/app/lib/angular/angular-touch.min.js.map b/app/lib/angular/angular-touch.min.js.map new file mode 100755 index 0000000000..86ff8498a2 --- /dev/null +++ b/app/lib/angular/angular-touch.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular-touch.min.js", +"lineCount":11, +"mappings":"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", +"sources":["angular-touch.js"], +"names":["window","angular","undefined","makeSwipeDirective","directiveName","direction","eventName","ngTouch","directive","$parse","$swipe","MAX_VERTICAL_DISTANCE","MAX_VERTICAL_RATIO","MIN_HORIZONTAL_DISTANCE","scope","element","attr","validSwipe","coords","startCoords","deltaY","Math","abs","y","deltaX","x","valid","swipeHandler","bind","start","cancel","end","$apply","triggerHandler","module","factory","getCoordinates","event","touches","length","e","changedTouches","originalEvent","clientX","clientY","eventHandlers","totalX","totalY","lastPos","active","on","MOVE_BUFFER_RADIUS","preventDefault","config","$provide","decorator","$delegate","shift","$timeout","$rootElement","checkAllowableRegions","touchCoordinates","i","x1","CLICKBUSTER_THRESHOLD","y1","splice","onClick","Date","now","lastPreventedTime","PREVENT_DURATION","stopPropagation","target","blur","onTouchStart","push","ACTIVE_CLASS_NAME","resetState","tapping","removeClass","clickHandler","ngClick","tapElement","startTime","touchStartX","touchStartY","srcElement","nodeType","parentNode","addClass","diff","dist","sqrt","pow","TAP_DURATION","MOVE_TOLERANCE","addEventListener","isDefined","disabled","onclick","element.onclick"] +} diff --git a/app/lib/angular/angular.js b/app/lib/angular/angular.js old mode 100644 new mode 100755 index a860c8594f..a91f9f4290 --- a/app/lib/angular/angular.js +++ b/app/lib/angular/angular.js @@ -1,13 +1,96 @@ /** - * @license AngularJS v1.0.7 + * @license AngularJS v1.2.0-rc.2 * (c) 2010-2012 Google, Inc. http://angularjs.org * License: MIT */ -(function(window, document, undefined) { -'use strict'; +(function(window, document, undefined) {'use strict'; + +/** + * @description + * + * This object provides a utility for producing rich Error messages within + * Angular. It can be called as follows: + * + * var exampleMinErr = minErr('example'); + * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); + * + * The above creates an instance of minErr in the example namespace. The + * resulting error will have a namespaced error code of example.one. The + * resulting error will replace {0} with the value of foo, and {1} with the + * value of bar. The object is not restricted in the number of arguments it can + * take. + * + * If fewer arguments are specified than necessary for interpolation, the extra + * interpolation markers will be preserved in the final string. + * + * Since data will be parsed statically during a build step, some restrictions + * are applied with respect to how minErr instances are created and called. + * Instances should have names of the form namespaceMinErr for a minErr created + * using minErr('namespace') . Error codes, namespaces and template strings + * should all be static strings, not variables or general expressions. + * + * @param {string} module The namespace to use for the new minErr instance. + * @returns {function(string, string, ...): Error} instance + */ + +function minErr(module) { + return function () { + var code = arguments[0], + prefix = '[' + (module ? module + ':' : '') + code + '] ', + template = arguments[1], + templateArgs = arguments, + stringify = function (obj) { + if (isFunction(obj)) { + return obj.toString().replace(/ \{[\s\S]*$/, ''); + } else if (isUndefined(obj)) { + return 'undefined'; + } else if (!isString(obj)) { + return JSON.stringify(obj); + } + return obj; + }, + message, i; + + message = prefix + template.replace(/\{\d+\}/g, function (match) { + var index = +match.slice(1, -1), arg; + + if (index + 2 < templateArgs.length) { + arg = templateArgs[index + 2]; + if (isFunction(arg)) { + return arg.toString().replace(/ ?\{[\s\S]*$/, ''); + } else if (isUndefined(arg)) { + return 'undefined'; + } else if (!isString(arg)) { + return toJson(arg); + } + return arg; + } + return match; + }); + + message = message + '\nhttp://errors.angularjs.org/' + version.full + '/' + + (module ? module + '/' : '') + code; + for (i = 2; i < arguments.length; i++) { + message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + + encodeURIComponent(stringify(arguments[i])); + } + + return new Error(message); + }; +} //////////////////////////////////// +/** + * hasOwnProperty may be overwritten by a property of the same name, or entirely + * absent from an object that does not inherit Object.prototype; this copy is + * used instead + */ +var hasOwnPropertyFn = Object.prototype.hasOwnProperty; +var hasOwnPropertyLocal = function(obj, key) { + return hasOwnPropertyFn.call(obj, key); +}; + /** * @ngdoc function * @name angular.lowercase @@ -54,19 +137,31 @@ if ('i' !== 'I'.toLowerCase()) { var /** holds major version number for IE or NaN for real browsers */ - msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]), + msie, jqLite, // delay binding since jQuery could be loaded after us. jQuery, // delay binding slice = [].slice, push = [].push, toString = Object.prototype.toString, + ngMinErr = minErr('ng'), + + _angular = window.angular, /** @name angular */ angular = window.angular || (window.angular = {}), angularModule, nodeName_, uid = ['0', '0', '0']; +/** + * IE 11 changed the format of the UserAgent string. + * See http://msdn.microsoft.com/en-us/library/ms537503.aspx + */ +msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); +if (isNaN(msie)) { + msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]); +} + /** * @private @@ -74,21 +169,20 @@ var /** holds major version number for IE or NaN for real browsers */ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, ...) */ function isArrayLike(obj) { - if (!obj || (typeof obj.length !== 'number')) return false; + if (obj == null || isWindow(obj)) { + return false; + } + + var length = obj.length; - // We have on object which has length property. Should we treat it as array? - if (typeof obj.hasOwnProperty != 'function' && - typeof obj.constructor != 'function') { - // This is here for IE8: it is a bogus object treat it as array; + if (obj.nodeType === 1 && length) { return true; - } else { - return obj instanceof JQLite || // JQLite - (jQuery && obj instanceof jQuery) || // jQuery - toString.call(obj) !== '[object Object]' || // some browser native object - typeof obj.callee === 'function'; // arguments (on IE8 looks like regular obj) } -} + return isArray(obj) || !isFunction(obj) && ( + length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj + ); +} /** * @ngdoc function @@ -203,7 +297,7 @@ function nextUid() { /** * Set or clear the hashkey for an object. - * @param obj object + * @param obj object * @param h the hashkey (!truthy to delete the hashkey) */ function setHashKey(obj, h) { @@ -251,7 +345,6 @@ function inherit(parent, extra) { return extend(new (extend(function() {}, {prototype:parent}))(), extra); } - /** * @ngdoc function * @name angular.noop @@ -282,7 +375,7 @@ noop.$inject = []; *
      function transformer(transformationFn, value) {
-       return (transformationFn || identity)(value);
+       return (transformationFn || angular.identity)(value);
      };
    
*/ @@ -409,6 +502,18 @@ function isArray(value) { function isFunction(value){return typeof value == 'function';} +/** + * Determines if a value is a regular expression object. + * + * @private + * @param {*} value Reference to check. + * @returns {boolean} True if `value` is a `RegExp`. + */ +function isRegExp(value) { + return toString.apply(value) == '[object RegExp]'; +} + + /** * Checks if `obj` is a window object. * @@ -436,9 +541,20 @@ function isBoolean(value) { } -function trim(value) { - return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; -} +var trim = (function() { + // native trim is way faster: http://jsperf.com/angular-trim-test + // but IE doesn't have it... :-( + // TODO: we should move this into IE/ES5 polyfill + if (!String.prototype.trim) { + return function(value) { + return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; + }; + } + return function(value) { + return isString(value) ? value.trim() : value; + }; +})(); + /** * @ngdoc function @@ -454,7 +570,7 @@ function trim(value) { function isElement(node) { return node && (node.nodeName // we are a direct element - || (node.bind && node.find)); // we have a bind and find method part of jQuery API + || (node.on && node.find)); // we have an on and find method part of jQuery API } /** @@ -573,7 +689,10 @@ function isLeafNode (node) { * @returns {*} The copy or updated `destination`, if `destination` was specified. */ function copy(source, destination){ - if (isWindow(source) || isScope(source)) throw Error("Can't copy Window or Scope"); + if (isWindow(source) || isScope(source)) { + throw ngMinErr('cpws', "Can't copy! Making copies of Window or Scope instances is not supported."); + } + if (!destination) { destination = source; if (source) { @@ -581,12 +700,14 @@ function copy(source, destination){ destination = copy(source, []); } else if (isDate(source)) { destination = new Date(source.getTime()); + } else if (isRegExp(source)) { + destination = new RegExp(source.source); } else if (isObject(source)) { destination = copy(source, {}); } } } else { - if (source === destination) throw Error("Can't copy equivalent objects or arrays"); + if (source === destination) throw ngMinErr('cpi', "Can't copy! Source and destination are identical."); if (isArray(source)) { destination.length = 0; for ( var i = 0; i < source.length; i++) { @@ -628,7 +749,7 @@ function shallowCopy(src, dst) { * @function * * @description - * Determines if two objects or two values are equivalent. Supports value types, arrays and + * Determines if two objects or two values are equivalent. Supports value types, regular expressions, arrays and * objects. * * Two objects or values are considered equivalent if at least one of the following is true: @@ -636,8 +757,11 @@ function shallowCopy(src, dst) { * * Both objects or values pass `===` comparison. * * 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) + * * Both values represent the same regular expression (In JavasScript, + * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual + * representation matches). * - * 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 (`===`). @@ -654,6 +778,7 @@ function equals(o1, o2) { if (t1 == t2) { if (t1 == 'object') { if (isArray(o1)) { + if (!isArray(o2)) return false; if ((length = o1.length) == o2.length) { for(key=0; key @@ -825,10 +971,19 @@ function startingTag(element) { function parseKeyValue(/**string*/keyValue) { var obj = {}, key_value, key; forEach((keyValue || "").split('&'), function(keyValue){ - if (keyValue) { + if ( keyValue ) { key_value = keyValue.split('='); - key = decodeURIComponent(key_value[0]); - obj[key] = isDefined(key_value[1]) ? decodeURIComponent(key_value[1]) : true; + key = tryDecodeURIComponent(key_value[0]); + if ( isDefined(key) ) { + var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; + if (!obj[key]) { + obj[key] = val; + } else if(isArray(obj[key])) { + obj[key].push(val); + } else { + obj[key] = [obj[key],val]; + } + } } }); return obj; @@ -837,14 +992,20 @@ function parseKeyValue(/**string*/keyValue) { function toKeyValue(obj) { var parts = []; forEach(obj, function(value, key) { + if (isArray(value)) { + forEach(value, function(arrayValue) { + parts.push(encodeUriQuery(key, true) + (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); + }); + } else { parts.push(encodeUriQuery(key, true) + (value === true ? '' : '=' + encodeUriQuery(value, true))); + } }); return parts.length ? parts.join('&') : ''; } /** - * 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 +1025,7 @@ function encodeUriSegment(val) { /** * 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 / ":" / "@" @@ -894,10 +1055,14 @@ function encodeUriQuery(val, pctEncodeSpaces) { * @description * * Use this directive to auto-bootstrap an application. Only - * one directive can be used per HTML document. The directive + * one ngApp directive can be used per HTML document. The directive * designates the root of the application and is typically placed * at the root of the page. * + * The first ngApp found in the document will be auto-bootstrapped. To use multiple applications in an + * HTML document you must manually bootstrap them using {@link angular.bootstrap}. + * Applications cannot be nested. + * * In the example below if the `ngApp` directive would not be placed * on the `html` element then the document would not be compiled * and the `{{ 1+2 }}` would not be resolved to `3`. @@ -963,25 +1128,35 @@ function angularInit(element, bootstrap) { * * See: {@link guide/bootstrap Bootstrap} * + * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually. + * They must use {@link api/ng.directive:ngApp ngApp}. + * * @param {Element} element DOM element which is the root of angular application. * @param {Array=} modules an array of module declarations. See: {@link angular.module modules} * @returns {AUTO.$injector} Returns the newly created injector for this app. */ function bootstrap(element, modules) { - var resumeBootstrapInternal = function() { + var doBootstrap = function() { element = jqLite(element); + + if (element.injector()) { + var tag = (element[0] === document) ? 'document' : startingTag(element); + throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); + } + modules = modules || []; modules.unshift(['$provide', function($provide) { $provide.value('$rootElement', element); }]); modules.unshift('ng'); var injector = createInjector(modules); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function(scope, element, compile, injector) { + injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate', + function(scope, element, compile, injector, animate) { scope.$apply(function() { element.data('$injector', injector); compile(element)(scope); }); + animate.enabled(true); }] ); return injector; @@ -990,7 +1165,7 @@ function bootstrap(element, modules) { var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return resumeBootstrapInternal(); + return doBootstrap(); } window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); @@ -998,7 +1173,7 @@ function bootstrap(element, modules) { forEach(extraModules, function(module) { modules.push(module); }); - resumeBootstrapInternal(); + doBootstrap(); }; } @@ -1022,9 +1197,10 @@ function bindJQuery() { injector: JQLitePrototype.injector, inheritedData: JQLitePrototype.inheritedData }); - JQLitePatchJQueryRemove('remove', true); - JQLitePatchJQueryRemove('empty'); - JQLitePatchJQueryRemove('html'); + // Method signature: JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) + JQLitePatchJQueryRemove('remove', true, true, false); + JQLitePatchJQueryRemove('empty', false, false, false); + JQLitePatchJQueryRemove('html', false, false, true); } else { jqLite = JQLite; } @@ -1036,7 +1212,7 @@ function bindJQuery() { */ function assertArg(arg, name, reason) { if (!arg) { - throw new Error("Argument '" + (name || '?') + "' is " + (reason || "required")); + throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); } return arg; } @@ -1051,6 +1227,33 @@ function assertArgFn(arg, name, acceptArrayAnnotation) { return arg; } +/** + * 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 accessible by path + */ +//TODO(misko): this function needs to be removed +function getter(obj, path, bindFnToScope) { + if (!path) return obj; + var keys = path.split('.'); + var key; + var lastInstance = obj; + var len = keys.length; + + for (var i = 0; i < len; i++) { + key = keys[i]; + if (obj) { + obj = (lastInstance = obj)[key]; + } + } + if (!bindFnToScope && isFunction(obj)) { + return bind(lastInstance, obj); + } + return obj; +} + /** * @ngdoc interface * @name angular.Module @@ -1074,15 +1277,18 @@ function setupModuleLoader(window) { * @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 + * The `angular.module` is a global place for creating, registering and retrieving Angular modules. + * All modules (angular core or 3rd party) that should be available to an application must be * registered using this mechanism. * + * When passed two or more arguments, a new module is created. If passed only one argument, an + * existing module (the name passed as the first argument to `module`) is retrieved. + * * * # Module * - * A module is a collocation of services, directives, filters, and configuration information. Module - * is used to configure the {@link AUTO.$injector $injector}. + * A module is a collection of services, directives, filters, and configuration information. + * `angular.module` is used to configure the {@link AUTO.$injector $injector}. * *
      * // Create a new module
@@ -1121,7 +1327,9 @@ function setupModuleLoader(window) {
       }
       return ensure(modules, name, function() {
         if (!requires) {
-          throw Error('No module: ' + name);
+          throw minErr('$injector')('nomod', "Module '{0}' is not available! You either misspelled the module name " +
+              "or forgot to load it. If registering a module ensure that you specify the dependencies as the second " +
+              "argument.", name);
         }
 
         /** @type {!Array.>} */
@@ -1214,6 +1422,39 @@ function setupModuleLoader(window) {
            */
           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
+           *
+           * **NOTE**: animations are take effect only if the **ngAnimate** module is loaded.
+           *
+           *
+           * Defines an animation hook that can be later used with {@link ngAnimate.$animate $animate} service and
+           * directives that use this service.
+           *
+           * 
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
+           *   }
+           * })
+           * 
+ * + * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and + * {@link ngAnimate ngAnimate module} for more information. + */ + animation: invokeLater('$animateProvider', 'register'), + /** * @ngdoc method * @name angular.Module#filter @@ -1313,11 +1554,11 @@ function setupModuleLoader(window) { * - `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.2.0-rc.2', // all of these placeholder strings will be replaced by grunt's major: 1, // package task - minor: 0, - dot: 7, - codeName: 'monochromatic-rainbow' + minor: 2, + dot: 0, + codeName: 'barehand-atomsplitting' }; @@ -1343,6 +1584,7 @@ function publishExternalAPI(angular){ 'isNumber': isNumber, 'isElement': isElement, 'isArray': isArray, + '$$minErr': minErr, 'version': version, 'isDate': isDate, 'lowercase': lowercase, @@ -1370,7 +1612,7 @@ function publishExternalAPI(angular){ style: styleDirective, option: optionDirective, ngBind: ngBindDirective, - ngBindHtmlUnsafe: ngBindHtmlUnsafeDirective, + ngBindHtml: ngBindHtmlDirective, ngBindTemplate: ngBindTemplateDirective, ngClass: ngClassDirective, ngClassEven: ngClassEvenDirective, @@ -1380,19 +1622,18 @@ function publishExternalAPI(angular){ ngController: ngControllerDirective, ngForm: ngFormDirective, ngHide: ngHideDirective, + ngIf: ngIfDirective, ngInclude: ngIncludeDirective, ngInit: ngInitDirective, ngNonBindable: ngNonBindableDirective, ngPluralize: ngPluralizeDirective, ngRepeat: ngRepeatDirective, ngShow: ngShowDirective, - ngSubmit: ngSubmitDirective, ngStyle: ngStyleDirective, ngSwitch: ngSwitchDirective, ngSwitchWhen: ngSwitchWhenDirective, ngSwitchDefault: ngSwitchDefaultDirective, ngOptions: ngOptionsDirective, - ngView: ngViewDirective, ngTransclude: ngTranscludeDirective, ngModel: ngModelDirective, ngList: ngListDirective, @@ -1405,6 +1646,7 @@ function publishExternalAPI(angular){ directive(ngEventDirectives); $provide.provider({ $anchorScroll: $AnchorScrollProvider, + $animate: $AnimateProvider, $browser: $BrowserProvider, $cacheFactory: $CacheFactoryProvider, $controller: $ControllerProvider, @@ -1417,14 +1659,15 @@ function publishExternalAPI(angular){ $location: $LocationProvider, $log: $LogProvider, $parse: $ParseProvider, - $route: $RouteProvider, - $routeParams: $RouteParamsProvider, $rootScope: $RootScopeProvider, $q: $QProvider, + $sce: $SceProvider, + $sceDelegate: $SceDelegateProvider, $sniffer: $SnifferProvider, $templateCache: $TemplateCacheProvider, $timeout: $TimeoutProvider, - $window: $WindowProvider + $window: $WindowProvider, + $$urlUtils: $$UrlUtilsProvider }); } ]); @@ -1456,13 +1699,14 @@ function publishExternalAPI(angular){ * Note: All element references in Angular are always wrapped with jQuery or jqLite; they are never * raw DOM references. * - * ## Angular's jQuery lite provides the following methods: + * ## Angular's jqLite + * Angular's lite version of jQuery provides only the following jQuery methods: * * - [addClass()](http://api.jquery.com/addClass/) * - [after()](http://api.jquery.com/after/) * - [append()](http://api.jquery.com/append/) * - [attr()](http://api.jquery.com/attr/) - * - [bind()](http://api.jquery.com/bind/) - Does not support namespaces + * - [bind()](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData * - [children()](http://api.jquery.com/children/) - Does not support selectors * - [clone()](http://api.jquery.com/clone/) * - [contents()](http://api.jquery.com/contents/) @@ -1473,6 +1717,8 @@ function publishExternalAPI(angular){ * - [hasClass()](http://api.jquery.com/hasClass/) * - [html()](http://api.jquery.com/html/) * - [next()](http://api.jquery.com/next/) - Does not support selectors + * - [on()](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData + * - [off()](http://api.jquery.com/off/) - Does not support namespaces or selectors * - [parent()](http://api.jquery.com/parent/) - Does not support selectors * - [prepend()](http://api.jquery.com/prepend/) * - [prop()](http://api.jquery.com/prop/) @@ -1484,13 +1730,19 @@ function publishExternalAPI(angular){ * - [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. - * - [unbind()](http://api.jquery.com/unbind/) - Does not support namespaces + * - [triggerHandler()](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. + * - [unbind()](http://api.jquery.com/off/) - 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: + * ## jQuery/jqLite Extras + * Angular also provides the following additional methods and events to both jQuery and jqLite: * + * ### Events + * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event + * on all DOM nodes being removed. This can be used to clean up and 3rd party bindings to the DOM + * element before it is removed. + * ### Methods * - `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 * camelCase directive name, then the controller for this directive will be retrieved (e.g. @@ -1520,6 +1772,7 @@ function jqNextId() { return ++jqId; } var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; var MOZ_HACK_REGEXP = /^moz([A-Z])/; +var jqLiteMinErr = minErr('jqLite'); /** * Converts snake_case to camelCase. @@ -1537,37 +1790,38 @@ function camelCase(name) { ///////////////////////////////////////////// // jQuery mutation patch // -// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a +// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a // $destroy event on all DOM nodes being removed. // ///////////////////////////////////////////// -function JQLitePatchJQueryRemove(name, dispatchThis) { +function JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) { var originalJqFn = jQuery.fn[name]; originalJqFn = originalJqFn.$original || originalJqFn; removePatch.$original = originalJqFn; jQuery.fn[name] = removePatch; - function removePatch() { - var list = [this], + function removePatch(param) { + var list = filterElems && param ? [this.filter(param)] : [this], fireEvent = dispatchThis, set, setIndex, setLength, - element, childIndex, childLength, children, - fns, events; - - while(list.length) { - set = list.shift(); - for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { - element = jqLite(set[setIndex]); - if (fireEvent) { - element.triggerHandler('$destroy'); - } else { - fireEvent = !fireEvent; - } - for(childIndex = 0, childLength = (children = element.children()).length; - childIndex < childLength; - childIndex++) { - list.push(jQuery(children[childIndex])); + element, childIndex, childLength, children; + + if (!getterIfNoArguments || param != null) { + while(list.length) { + set = list.shift(); + for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) { + element = jqLite(set[setIndex]); + if (fireEvent) { + element.triggerHandler('$destroy'); + } else { + fireEvent = !fireEvent; + } + for(childIndex = 0, childLength = (children = element.children()).length; + childIndex < childLength; + childIndex++) { + list.push(jQuery(children[childIndex])); + } } } } @@ -1582,7 +1836,7 @@ function JQLite(element) { } if (!(this instanceof JQLite)) { if (isString(element) && element.charAt(0) != '<') { - throw Error('selectors not implemented'); + throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); } return new JQLite(element); } @@ -1594,7 +1848,8 @@ function JQLite(element) { div.innerHTML = '
 
' + element; // IE insanity to make NoScope elements work! div.removeChild(div.firstChild); // remove the superfluous div JQLiteAddNodes(this, div.childNodes); - this.remove(); // detach the elements from the temporary DOM div. + var fragment = jqLite(document.createDocumentFragment()); + fragment.append(this); // detach the elements from the temporary DOM div. } else { JQLiteAddNodes(this, element); } @@ -1611,7 +1866,9 @@ function JQLiteDealoc(element){ } } -function JQLiteUnbind(element, type, fn) { +function JQLiteOff(element, type, fn, unsupported) { + if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); + var events = JQLiteExpandoStore(element, 'events'), handle = JQLiteExpandoStore(element, 'handle'); @@ -1623,23 +1880,30 @@ function JQLiteUnbind(element, type, fn) { delete events[type]; }); } else { - if (isUndefined(fn)) { - removeEventListenerFn(element, type, events[type]); - delete events[type]; - } else { - arrayRemove(events[type], fn); - } + forEach(type.split(' '), function(type) { + if (isUndefined(fn)) { + removeEventListenerFn(element, type, events[type]); + delete events[type]; + } else { + arrayRemove(events[type] || [], fn); + } + }); } } -function JQLiteRemoveData(element) { +function JQLiteRemoveData(element, name) { var expandoId = element[jqName], expandoStore = jqCache[expandoId]; if (expandoStore) { + if (name) { + delete jqCache[expandoId].data[name]; + return; + } + if (expandoStore.handle) { expandoStore.events.$destroy && expandoStore.handle({}, '$destroy'); - JQLiteUnbind(element); + JQLiteOff(element); } delete jqCache[expandoId]; element[jqName] = undefined; // ie does not allow deletion of attributes on elements. @@ -1739,7 +2003,7 @@ function JQLiteInheritedData(element, name, value) { } while (element.length) { - if (value = element.data(name)) return value; + if ((value = element.data(name)) !== undefined) return value; element = element.parent(); } } @@ -1757,9 +2021,14 @@ var JQLitePrototype = JQLite.prototype = { 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.on('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).on('load', trigger); // fallback to window.onload for others + } }, toString: function() { var value = []; @@ -1783,11 +2052,11 @@ var JQLitePrototype = JQLite.prototype = { // 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; }); @@ -1880,27 +2149,38 @@ forEach({ } }, - text: extend((msie < 9) - ? function(element, value) { - if (element.nodeType == 1 /** Element */) { - if (isUndefined(value)) - return element.innerText; - element.innerText = value; - } else { - if (isUndefined(value)) - return element.nodeValue; - element.nodeValue = value; - } + text: (function() { + var NODE_TYPE_TEXT_PROPERTY = []; + if (msie < 9) { + NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/ + NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/ + } else { + NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/ + NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/ + } + getText.$dv = ''; + return getText; + + function getText(element, value) { + var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType] + if (isUndefined(value)) { + return textProp ? element[textProp] : ''; } - : function(element, value) { - if (isUndefined(value)) { - return element.textContent; - } - element.textContent = value; - }, {$dv:''}), + element[textProp] = value; + } + })(), val: function(element, value) { if (isUndefined(value)) { + if (nodeName_(element) === 'SELECT' && element.multiple) { + var result = []; + forEach(element.options, function (option) { + if (option.selected) { + result.push(option.value || option.text); + } + }); + return result.length === 0 ? null : result; + } return element.value; } element.value = value; @@ -1942,8 +2222,14 @@ forEach({ return this; } else { // we are a read, so read the first child. - if (this.length) - return fn(this[0], arg1, arg2); + var value = fn.$dv; + // Only if we have $dv do we iterate over all, otherwise it is just the first element. + var jj = value == undefined ? Math.min(this.length, 1) : this.length; + for (var j = 0; j < jj; j++) { + var nodeValue = fn(this[j], arg1, arg2); + value = value ? value + nodeValue : nodeValue; + } + return value; } } else { // we are a write, so apply to all children @@ -1953,7 +2239,6 @@ forEach({ // return self for chaining return this; } - return fn.$dv; }; }); @@ -1985,7 +2270,7 @@ function createEventHandler(element, events) { } event.isDefaultPrevented = function() { - return event.defaultPrevented; + return event.defaultPrevented || event.returnValue == false; }; forEach(events[type || event.type], function(fn) { @@ -2020,7 +2305,9 @@ forEach({ dealoc: JQLiteDealoc, - bind: function bindFn(element, type, fn){ + on: function onFn(element, type, fn, unsupported){ + if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); + var events = JQLiteExpandoStore(element, 'events'), handle = JQLiteExpandoStore(element, 'handle'); @@ -2051,22 +2338,22 @@ forEach({ } } return false; - }; + }; events[type] = []; - - // Refer to jQuery's implementation of mouseenter & mouseleave + + // Refer to jQuery's implementation of mouseenter & mouseleave // Read about mouseenter and mouseleave: // http://www.quirksmode.org/js/events_mouse.html#link8 - var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"} - bindFn(element, eventmap[type], function(event) { - var ret, target = this, related = event.relatedTarget; + var eventmap = { mouseleave : "mouseout", mouseenter : "mouseover"}; + + onFn(element, eventmap[type], function(event) { + var target = this, related = event.relatedTarget; // 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 && !contains(target, related)) ){ handle(event, type); - } - + } }); } else { @@ -2079,7 +2366,7 @@ forEach({ }); }, - unbind: JQLiteUnbind, + off: JQLiteOff, replaceWith: function(element, replaceNode) { var index, parent = element.parentNode; @@ -2109,8 +2396,9 @@ forEach({ append: function(element, node) { forEach(new JQLite(node), function(child){ - if (element.nodeType === 1) + if (element.nodeType === 1 || element.nodeType === 11) { element.appendChild(child); + } }); }, @@ -2118,12 +2406,7 @@ forEach({ if (element.nodeType === 1) { var index = element.firstChild; forEach(new JQLite(node), function(child){ - if (index) { - element.insertBefore(child, index); - } else { - element.appendChild(child); - index = child; - } + element.insertBefore(child, index); }); } }, @@ -2185,32 +2468,40 @@ forEach({ clone: JQLiteClone, - triggerHandler: function(element, eventName) { + triggerHandler: function(element, eventName, eventData) { var eventFns = (JQLiteExpandoStore(element, 'events') || {})[eventName]; + eventData = eventData || { + preventDefault: noop, + stopPropagation: noop + }; forEach(eventFns, function(fn) { - fn.call(element, null); + fn.call(element, eventData); }); } }, function(fn, name){ /** * chaining functions */ - JQLite.prototype[name] = function(arg1, arg2) { + JQLite.prototype[name] = function(arg1, arg2, arg3) { var value; for(var i=0; i < this.length; i++) { if (value == undefined) { - value = fn(this[i], arg1, arg2); + value = fn(this[i], arg1, arg2, arg3); if (value !== undefined) { // any function which returns a value needs to be wrapped value = jqLite(value); } } else { - JQLiteAddNodes(value, fn(this[i], arg1, arg2)); + JQLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); } } return value == undefined ? this : value; }; + + // bind legacy bind/unbind to on/off + JQLite.prototype.bind = JQLite.prototype.on; + JQLite.prototype.unbind = JQLite.prototype.off; }); /** @@ -2278,50 +2569,6 @@ HashMap.prototype = { } }; -/** - * 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 @@ -2364,6 +2611,7 @@ var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; var FN_ARG_SPLIT = /,/; var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; +var $injectorMinErr = minErr('$injector'); function annotate(fn) { var $inject, fnText, @@ -2373,13 +2621,15 @@ function annotate(fn) { if (typeof fn == 'function') { if (!($inject = fn.$inject)) { $inject = []; - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ - arg.replace(FN_ARG, function(all, underscore, name){ - $inject.push(name); + if (fn.length) { + fnText = fn.toString().replace(STRIP_COMMENTS, ''); + argDecl = fnText.match(FN_ARGS); + forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){ + arg.replace(FN_ARG, function(all, underscore, name){ + $inject.push(name); + }); }); - }); + } fn.$inject = $inject; } } else if (isArray(fn)) { @@ -2473,6 +2723,18 @@ function annotate(fn) { * @returns {*} the value returned by the invoked `fn` function. */ +/** + * @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 @@ -2511,7 +2773,7 @@ function annotate(fn) { * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); *
* - * This method does not work with code minfication / obfuscation. For this reason the following annotation strategies + * This method does not work with code minification / obfuscation. For this reason the following annotation strategies * are supported. * * # The `$inject` property @@ -2730,9 +2992,10 @@ function createInjector(modulesToLoad) { decorator: decorator } }, - providerInjector = createInternalInjector(providerCache, function() { - throw Error("Unknown provider: " + path.join(' <- ')); - }), + providerInjector = (providerCache.$injector = + createInternalInjector(providerCache, function() { + throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); + })), instanceCache = {}, instanceInjector = (instanceCache.$injector = createInternalInjector(instanceCache, function(servicename) { @@ -2764,7 +3027,7 @@ function createInjector(modulesToLoad) { provider_ = providerInjector.instantiate(provider_); } if (!provider_.$get) { - throw Error('Provider ' + name + ' must define $get factory method.'); + throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); } return providerCache[name + providerSuffix] = provider_; } @@ -2802,39 +3065,36 @@ function createInjector(modulesToLoad) { forEach(modulesToLoad, function(module) { if (loadedModules.get(module)) return; loadedModules.put(module, true); - if (isString(module)) { - var moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - try { + try { + if (isString(module)) { + var moduleFn = angularModule(module); + runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); + 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]); } - } catch (e) { - if (e.message) e.message += ' from ' + module; - throw e; + } else if (isFunction(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else if (isArray(module)) { + runBlocks.push(providerInjector.invoke(module)); + } else { + assertArgFn(module, 'module'); } - } else if (isFunction(module)) { - try { - runBlocks.push(providerInjector.invoke(module)); - } catch (e) { - if (e.message) e.message += ' from ' + module; - throw e; + } catch (e) { + if (isArray(module)) { + module = module[module.length - 1]; } - } else if (isArray(module)) { - try { - runBlocks.push(providerInjector.invoke(module)); - } catch (e) { - if (e.message) e.message += ' from ' + String(module[module.length - 1]); - throw e; + if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { + // Safari & FF's stack traces don't contain error.message content unlike those of Chrome and IE + // So if stack doesn't contain message, we create a new string that contains both. + // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. + e = e.message + '\n' + e.stack; } - } else { - assertArgFn(module, 'module'); + throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", module, e.stack || e.message || e); } }); return runBlocks; @@ -2847,12 +3107,9 @@ function createInjector(modulesToLoad) { function createInternalInjector(cache, factory) { function getService(serviceName) { - if (typeof serviceName !== 'string') { - throw Error('Service name expected'); - } if (cache.hasOwnProperty(serviceName)) { if (cache[serviceName] === INSTANTIATING) { - throw Error('Circular dependency: ' + path.join(' <- ')); + throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); } return cache[serviceName]; } else { @@ -2874,6 +3131,9 @@ function createInjector(modulesToLoad) { for(i = 0, length = $inject.length; i < length; i++) { key = $inject[i]; + if (typeof key !== 'string') { + throw $injectorMinErr('itkn', 'Incorrect injection token! Expected service name as string, got {0}', key); + } args.push( locals && locals.hasOwnProperty(key) ? locals[key] @@ -2920,7 +3180,10 @@ function createInjector(modulesToLoad) { invoke: invoke, instantiate: instantiate, get: getService, - annotate: annotate + annotate: annotate, + has: function(name) { + return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); + } }; } } @@ -2992,65 +3255,251 @@ function $AnchorScrollProvider() { }]; } +var $animateMinErr = minErr('$animate'); + /** - * ! This is a private undocumented service ! + * @ngdoc object + * @name ng.$animateProvider * - * @name ng.$browser - * @requires $log * @description - * This object has two goals: + * Default implementation of $animate that doesn't perform any animations, instead just synchronously performs DOM + * updates and calls done() callbacks. * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies + * In order to enable animations the ngAnimate module has to be loaded. * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {function()} XHR XMLHttpRequest constructor. - * @param {object} $log console.log or an object with the same interface. - * @param {object} $sniffer $sniffer service + * To see the functional implementation check out src/ngAnimate/animate.js */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; +var $AnimateProvider = ['$provide', function($provide) { - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; + this.$$selectors = {}; - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. + * @ngdoc function + * @name ng.$animateProvider#register + * @methodOf ng.$animateProvider + * + * @description + * Registers a new injectable animation factory function. The factory function produces the animation object which + * contains callback functions for each event that is expected to be animated. + * + * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` must be called once the + * element animation is complete. If a function is returned then the animation service will use this function to + * cancel the animation whenever a cancel event is triggered. + * + * + *
+   *   return {
+     *     eventFn : function(element, done) {
+     *       //code to run the animation
+     *       //once complete, then run done()
+     *       return function cancellationFunction() {
+     *         //code to cancel the animation
+     *       }
+     *     }
+     *   }
+   *
+ * + * @param {string} name The name of the animation. + * @param {function} factory The factory function that will be executed to return the animation object. */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while(outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } + this.register = function(name, factory) { + var key = name + '-animation'; + if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', + "Expecting class selector starting with '.' got '{0}'.", name); + this.$$selectors[name.substr(1)] = key; + $provide.factory(key, factory); + }; + + this.$get = ['$timeout', function($timeout) { + + /** + * @ngdoc object + * @name ng.$animate + * + * @description + * The $animate service provides rudimentary DOM manipulation functions to insert, remove, move elements within + * the DOM as well as adding and removing classes. This service is the core service used by the ngAnimate $animator + * service which provides high-level animation hooks for CSS and JavaScript. + * + * $animate is available in the AngularJS core, however, the ngAnimate module must be included to enable full out + * animation support. Otherwise, $animate will only perform simple DOM manipulation operations. + * + * To learn more about enabling animation support, click here to visit the {@link ngAnimate ngAnimate module page} + * as well as the {@link ngAnimate.$animate ngAnimate $animate service page}. + */ + return { + + /** + * @ngdoc function + * @name ng.$animate#enter + * @methodOf ng.$animate + * @function + * + * @description + * Inserts the element into the DOM either after the `after` element or within the `parent` element. Once complete, + * the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will be inserted into the DOM + * @param {jQuery/jqLite element} parent the parent element which will append the element as a child (if the after element is not present) + * @param {jQuery/jqLite element} after the sibling element which will append the element after itself + * @param {function=} done callback function that will be called after the element has been inserted into the DOM + */ + enter : function(element, parent, after, done) { + var afterNode = after && after[after.length - 1]; + var parentNode = parent && parent[0] || afterNode && afterNode.parentNode; + // IE does not like undefined so we have to pass null. + var afterNextSibling = (afterNode && afterNode.nextSibling) || null; + forEach(element, function(node) { + parentNode.insertBefore(node, afterNextSibling); + }); + done && $timeout(done, 0, false); + }, + + /** + * @ngdoc function + * @name ng.$animate#leave + * @methodOf ng.$animate + * @function + * + * @description + * Removes the element from the DOM. Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will be removed from the DOM + * @param {function=} done callback function that will be called after the element has been removed from the DOM + */ + leave : function(element, done) { + element.remove(); + done && $timeout(done, 0, false); + }, + + /** + * @ngdoc function + * @name ng.$animate#move + * @methodOf ng.$animate + * @function + * + * @description + * Moves the position of the provided element within the DOM to be placed either after the `after` element or inside of the `parent` element. + * Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will be moved around within the DOM + * @param {jQuery/jqLite element} parent the parent element where the element will be inserted into (if the after element is not present) + * @param {jQuery/jqLite element} after the sibling element where the element will be positioned next to + * @param {function=} done the callback function (if provided) that will be fired after the element has been moved to it's new position + */ + move : function(element, parent, after, done) { + // Do not remove element before insert. Removing will cause data associated with the + // element to be dropped. Insert will implicitly do the remove. + this.enter(element, parent, after, done); + }, + + /** + * @ngdoc function + * @name ng.$animate#addClass + * @methodOf ng.$animate + * @function + * + * @description + * Adds the provided className CSS class value to the provided element. Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will have the className value added to it + * @param {string} className the CSS class which will be added to the element + * @param {function=} done the callback function (if provided) that will be fired after the className value has been added to the element + */ + addClass : function(element, className, done) { + className = isString(className) ? + className : + isArray(className) ? className.join(' ') : ''; + element.addClass(className); + done && $timeout(done, 0, false); + }, + + /** + * @ngdoc function + * @name ng.$animate#removeClass + * @methodOf ng.$animate + * @function + * + * @description + * Removes the provided className CSS class value from the provided element. Once complete, the done() callback will be fired (if provided). + * + * @param {jQuery/jqLite element} element the element which will have the className value removed from it + * @param {string} className the CSS class which will be removed from the element + * @param {function=} done the callback function (if provided) that will be fired after the className value has been removed from the element + */ + removeClass : function(element, className, done) { + className = isString(className) ? + className : + isArray(className) ? className.join(' ') : ''; + element.removeClass(className); + done && $timeout(done, 0, false); + }, + + enabled : noop + }; + }]; +}]; + +/** + * ! This is a private undocumented service ! + * + * @name ng.$browser + * @requires $log + * @description + * This object has two goals: + * + * - hide all the global state in the browser caused by the window object + * - abstract away all the browser specific features and inconsistencies + * + * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` + * service, which can be used for convenient testing of the application without the interaction with + * the real browser apis. + */ +/** + * @param {object} window The global window object. + * @param {object} document jQuery wrapped document. + * @param {function()} XHR XMLHttpRequest constructor. + * @param {object} $log console.log or an object with the same interface. + * @param {object} $sniffer $sniffer service + */ +function Browser(window, document, $log, $sniffer) { + var self = this, + rawDocument = document[0], + location = window.location, + history = window.history, + setTimeout = window.setTimeout, + clearTimeout = window.clearTimeout, + pendingDeferIds = {}; + + self.isMock = false; + + var outstandingRequestCount = 0; + var outstandingRequestCallbacks = []; + + // TODO(vojta): remove this temporary api + self.$$completeOutstandingRequest = completeOutstandingRequest; + self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; + + /** + * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` + * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. + */ + function completeOutstandingRequest(fn) { + try { + fn.apply(null, sliceArgs(arguments, 1)); + } finally { + outstandingRequestCount--; + if (outstandingRequestCount === 0) { + while(outstandingRequestCallbacks.length) { + try { + outstandingRequestCallbacks.pop()(); + } catch (e) { + $log.error(e); + } + } + } + } } /** @@ -3116,7 +3565,8 @@ function Browser(window, document, $log, $sniffer) { ////////////////////////////////////////////////////////////// var lastBrowserUrl = location.href, - baseElement = document.find('base'); + baseElement = document.find('base'), + replacedUrl = null; /** * @name ng.$browser#url @@ -3151,14 +3601,21 @@ function Browser(window, document, $log, $sniffer) { baseElement.attr('href', baseElement.attr('href')); } } else { - if (replace) location.replace(url); - else location.href = url; + if (replace) { + location.replace(url); + replacedUrl = url; + } else { + location.href = url; + replacedUrl = null; + } } return self; // getter } else { - // the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return location.href.replace(/%27/g,"'"); + // - the replacedUrl is a workaround for an IE8-9 issue with location.replace method that doesn't update + // location.href synchronously + // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 + return replacedUrl || location.href.replace(/%27/g,"'"); } }; @@ -3204,9 +3661,9 @@ function Browser(window, document, $log, $sniffer) { // changed by push/replaceState // html5 history api - popstate event - if ($sniffer.history) jqLite(window).bind('popstate', fireUrlChange); + if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange); // hashchange event - if ($sniffer.hashchange) jqLite(window).bind('hashchange', fireUrlChange); + if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange); // polling else self.addPollFn(fireUrlChange); @@ -3244,7 +3701,7 @@ function Browser(window, document, $log, $sniffer) { * @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. @@ -3307,12 +3764,12 @@ function Browser(window, document, $log, $sniffer) { /** * @name ng.$browser#defer * @methodOf ng.$browser - * @param {function()} fn A function, who's execution should be defered. + * @param {function()} fn A function, who's execution should be deferred. * @param {number=} [delay=0] of milliseconds to defer the function execution. * @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 @@ -3336,10 +3793,10 @@ function Browser(window, document, $log, $sniffer) { * @methodOf ng.$browser.defer * * @description - * Cancels a defered task identified with `deferId`. + * Cancels a deferred 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]) { @@ -3365,7 +3822,20 @@ function $BrowserProvider(){ * @name ng.$cacheFactory * * @description - * Factory that constructs cache objects. + * Factory that constructs cache objects and gives access to them. + * + *
+ * 
+ *  var cache = $cacheFactory('cacheId');
+ *  expect($cacheFactory.get('cacheId')).toBe(cache);
+ *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
+ *
+ *  cache.put("key", "value");
+ *  cache.put("another key", "another value");
+ * 
+ *  expect(cache.info()).toEqual({id: 'cacheId', size: 2}); // Since we've specified no options on creation
+ * 
+ * 
* * * @param {string} cacheId Name or id of the newly created cache. @@ -3376,7 +3846,7 @@ function $BrowserProvider(){ * @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. @@ -3390,7 +3860,7 @@ function $CacheFactoryProvider() { function cacheFactory(cacheId, options) { if (cacheId in caches) { - throw Error('cacheId ' + cacheId + ' taken'); + throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); } var size = 0, @@ -3415,6 +3885,8 @@ function $CacheFactoryProvider() { if (size > capacity) { this.remove(staleEnd.key); } + + return value; }, @@ -3497,6 +3969,16 @@ function $CacheFactoryProvider() { } + /** + * @ngdoc method + * @name ng.$cacheFactory#info + * @methodOf ng.$cacheFactory + * + * @description + * Get information about all the of the caches that have been created + * + * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` + */ cacheFactory.info = function() { var info = {}; forEach(caches, function(cache, cacheId) { @@ -3506,6 +3988,17 @@ function $CacheFactoryProvider() { }; + /** + * @ngdoc method + * @name ng.$cacheFactory#get + * @methodOf ng.$cacheFactory + * + * @description + * Get access to a cache object by the `cacheId` used when it was created. + * + * @param {string} cacheId Name or id of a cache to access. + * @returns {object} Cache object identified by the cacheId or undefined if no such cache. + */ cacheFactory.get = function(cacheId) { return caches[cacheId]; }; @@ -3520,8 +4013,44 @@ function $CacheFactoryProvider() { * @name ng.$templateCache * * @description - * Cache used for storing html templates. - * + * The first time a template is used, it is loaded in the template cache for quick retrieval. You can + * load templates directly into the cache in a `script` tag, or by consuming the `$templateCache` + * service directly. + * + * Adding via the `script` tag: + *
+ * 
+ * 
+ * 
+ * 
+ *   ...
+ * 
+ * 
+ * + * **Note:** the `script` tag containing the template does not need to be included in the `head` of the document, but + * it must be below the `ng-app` definition. + * + * Adding via the $templateCache service: + * + *
+ * var myApp = angular.module('myApp', []);
+ * myApp.run(function($templateCache) {
+ *   $templateCache.put('templateId.html', 'This is the content of the template');
+ * });
+ * 
+ * + * To retrieve the template later, simply use it in your HTML: + *
+ * 
+ *
+ * + * or get it via Javascript: + *
+ * $templateCache.get('templateId.html')
+ * 
+ * * See {@link ng.$cacheFactory $cacheFactory}. * */ @@ -3549,9 +4078,6 @@ function $TemplateCacheProvider() { */ -var NON_ASSIGNABLE_MODEL_EXPRESSION = 'Non-assignable model expression: '; - - /** * @ngdoc function * @name ng.$compile @@ -3672,6 +4198,7 @@ var NON_ASSIGNABLE_MODEL_EXPRESSION = 'Non-assignable model expression: '; * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. */ +var $compileMinErr = minErr('$compile'); /** * @ngdoc service @@ -3686,9 +4213,13 @@ function $CompileProvider($provide) { Suffix = 'Directive', COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/, - MULTI_ROOT_TEMPLATE_ERROR = 'Template must have exactly one root element. was: ', - urlSanitizationWhitelist = /^\s*(https?|ftp|mailto|file):/; + aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|file):/, + imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; + // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes + // The assumption is that future DOM event attribute names will begin with + // 'on' and be composed of only English letters. + var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]*|formaction)$/; /** * @ngdoc function @@ -3697,17 +4228,17 @@ function $CompileProvider($provide) { * @function * * @description - * Register a new directives with the compiler. + * Register a new directive with the compiler. * * @param {string} name Name of the directive in camel-case. (ie ngBind which will match as * ng-bind). - * @param {function} directiveFactory An injectable directive factroy function. See {@link guide/directive} for more + * @param {function|Array} directiveFactory An injectable directive factory function. See {@link guide/directive} for more * info. * @returns {ng.$compileProvider} Self for chaining. */ this.directive = function registerDirective(name, directiveFactory) { if (isString(name)) { - assertArg(directiveFactory, 'directive'); + assertArg(directiveFactory, 'directiveFactory'); if (!hasDirectives.hasOwnProperty(name)) { hasDirectives[name] = []; $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', @@ -3743,7 +4274,7 @@ function $CompileProvider($provide) { /** * @ngdoc function - * @name ng.$compileProvider#urlSanitizationWhitelist + * @name ng.$compileProvider#aHrefSanitizationWhitelist * @methodOf ng.$compileProvider * @function * @@ -3753,29 +4284,59 @@ function $CompileProvider($provide) { * * The sanitization is a security measure aimed at prevent XSS attacks via html links. * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into an - * absolute url. Afterwards the url is matched against the `urlSanitizationWhitelist` regular - * expression. If a match is found the original url is written into the dom. Otherwise the - * absolute url is prefixed with `'unsafe:'` string and only then it is written into the DOM. + * Any url about to be assigned to a[href] via data-binding is first normalized and turned into + * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` + * regular expression. If a match is found, the original url is written into the dom. Otherwise, + * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. + * + * @param {RegExp=} regexp New regexp to whitelist urls with. + * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for + * chaining otherwise. + */ + this.aHrefSanitizationWhitelist = function(regexp) { + if (isDefined(regexp)) { + aHrefSanitizationWhitelist = regexp; + return this; + } + return aHrefSanitizationWhitelist; + }; + + + /** + * @ngdoc function + * @name ng.$compileProvider#imgSrcSanitizationWhitelist + * @methodOf ng.$compileProvider + * @function + * + * @description + * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * urls during img[src] sanitization. + * + * The sanitization is a security measure aimed at prevent XSS attacks via html links. + * + * Any url about to be assigned to img[src] via data-binding is first normalized and turned into an + * absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` regular + * expression. If a match is found, the original url is written into the dom. Otherwise, the + * absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. * * @param {RegExp=} regexp New regexp to whitelist urls with. * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for * chaining otherwise. */ - this.urlSanitizationWhitelist = function(regexp) { + this.imgSrcSanitizationWhitelist = function(regexp) { if (isDefined(regexp)) { - urlSanitizationWhitelist = regexp; + imgSrcSanitizationWhitelist = regexp; return this; } - return urlSanitizationWhitelist; + return imgSrcSanitizationWhitelist; }; this.$get = [ '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', + '$controller', '$rootScope', '$document', '$sce', '$$urlUtils', '$animate', function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document) { + $controller, $rootScope, $document, $sce, $$urlUtils, $animate) { var Attributes = function(element, attr) { this.$$element = element; @@ -3786,6 +4347,42 @@ function $CompileProvider($provide) { $normalize: directiveNormalize, + /** + * @ngdoc function + * @name ng.$compile.directive.Attributes#$addClass + * @methodOf ng.$compile.directive.Attributes + * @function + * + * @description + * Adds the CSS class value specified by the classVal parameter to the element. If animations + * are enabled then an animation will be triggered for the class addition. + * + * @param {string} classVal The className value that will be added to the element + */ + $addClass : function(classVal) { + if(classVal && classVal.length > 0) { + $animate.addClass(this.$$element, classVal); + } + }, + + /** + * @ngdoc function + * @name ng.$compile.directive.Attributes#$removeClass + * @methodOf ng.$compile.directive.Attributes + * @function + * + * @description + * Removes the CSS class value specified by the classVal parameter from the element. If animations + * are enabled then an animation will be triggered for the class removal. + * + * @param {string} classVal The className value that will be removed from the element + */ + $removeClass : function(classVal) { + if(classVal && classVal.length > 0) { + $animate.removeClass(this.$$element, classVal); + } + }, + /** * Set a normalized attribute on the element in a way such that all directives * can share the attribute. This function properly handles boolean attributes. @@ -3796,49 +4393,64 @@ function $CompileProvider($provide) { * @param {string=} attrName Optional none normalized name. Defaults to key. */ $set: function(key, value, writeAttr, attrName) { - var booleanKey = getBooleanAttrName(this.$$element[0], key), - $$observers = this.$$observers, - normalizedVal; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; + //special case for class attribute addition + removal + //so that class changes can tap into the animation + //hooks provided by the $animate service + if(key == 'class') { + value = value || ''; + var current = this.$$element.attr('class') || ''; + this.$removeClass(tokenDifference(current, value).join(' ')); + this.$addClass(tokenDifference(value, current).join(' ')); } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } + var booleanKey = getBooleanAttrName(this.$$element[0], key), + normalizedVal, + nodeName; + if (booleanKey) { + this.$$element.prop(key, value); + attrName = booleanKey; + } - // sanitize a[href] values - if (nodeName_(this.$$element[0]) === 'A' && key === 'href') { - urlSanitizationNode.setAttribute('href', value); + this[key] = value; - // href property always returns normalized absolute url, so we can match against that - normalizedVal = urlSanitizationNode.href; - if (!normalizedVal.match(urlSanitizationWhitelist)) { - this[key] = value = 'unsafe:' + normalizedVal; + // translate normalized key to actual key + if (attrName) { + this.$attr[key] = attrName; + } else { + attrName = this.$attr[key]; + if (!attrName) { + this.$attr[key] = attrName = snake_case(key, '-'); + } } - } + nodeName = nodeName_(this.$$element); + + // sanitize a[href] and img[src] values + if ((nodeName === 'A' && key === 'href') || + (nodeName === 'IMG' && key === 'src')) { + // NOTE: $$urlUtils.resolve() doesn't support IE < 8 so we don't sanitize for that case. + if (!msie || msie >= 8 ) { + normalizedVal = $$urlUtils.resolve(value); + if (normalizedVal !== '') { + if ((key === 'href' && !normalizedVal.match(aHrefSanitizationWhitelist)) || + (key === 'src' && !normalizedVal.match(imgSrcSanitizationWhitelist))) { + this[key] = value = 'unsafe:' + normalizedVal; + } + } + } + } - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); + if (writeAttr !== false) { + if (value === null || value === undefined) { + this.$$element.removeAttr(attrName); + } else { + this.$$element.attr(attrName, value); + } } } // fire observers + var $$observers = this.$$observers; $$observers && forEach($$observers[key], function(fn) { try { fn(value); @@ -3846,6 +4458,22 @@ function $CompileProvider($provide) { $exceptionHandler(e); } }); + + function tokenDifference(str1, str2) { + var values = [], + tokens1 = str1.split(/\s+/), + tokens2 = str2.split(/\s+/); + + outer: + for(var i=0;i forEach($compileNodes, function(node, index){ if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = jqLite(node).wrap('').parent()[0]; + $compileNodes[index] = node = jqLite(node).wrap('').parent()[0]; } }); - var compositeLinkFn = compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority); + var compositeLinkFn = compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority, ignoreDirective); return function publicLinkFn(scope, cloneConnectFn){ assertArg(scope, 'scope'); // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart @@ -3922,10 +4551,6 @@ function $CompileProvider($provide) { }; } - function wrongMode(localName, mode) { - throw Error("Unsupported '" + mode + "' for '" + localName + "'."); - } - function safeAddClass($element, className) { try { $element.addClass(className); @@ -3950,7 +4575,7 @@ function $CompileProvider($provide) { * @param {number=} max directive priority * @returns {?function} A composite linking function of all of the matched directives or null. */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority) { + function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective) { var linkFns = [], nodeLinkFn, childLinkFn, directives, attrs, linkFnFound; @@ -3958,7 +4583,7 @@ function $CompileProvider($provide) { attrs = new Attributes(); // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, maxPriority); + directives = collectDirectives(nodeList[i], [], attrs, i == 0 ? maxPriority : undefined, ignoreDirective); nodeLinkFn = (directives.length) ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement) @@ -4007,7 +4632,7 @@ function $CompileProvider($provide) { transcludeScope.$$transcluded = true; return transcludeFn(transcludeScope, cloneFn). - bind('$destroy', bind(transcludeScope, transcludeScope.$destroy)); + on('$destroy', bind(transcludeScope, transcludeScope.$destroy)); }; })(childTranscludeFn || transcludeFn) ); @@ -4032,7 +4657,7 @@ function $CompileProvider($provide) { * @param attrs The shared attrs object which is used to populate the normalized attributes. * @param {number=} maxPriority Max directive priority. */ - function collectDirectives(node, directives, attrs, maxPriority) { + function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { var nodeType = node.nodeType, attrsMap = attrs.$attr, match, @@ -4042,14 +4667,28 @@ function $CompileProvider($provide) { case 1: /* Element */ // use the node name: addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority); + directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); // 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++) { + var attrStartName; + var attrEndName; + var index; + attr = nAttrs[j]; - if (attr.specified) { + if (!msie || msie >= 8 || attr.specified) { name = attr.name; + // support ngAttr attribute binding + ngAttrName = directiveNormalize(name); + if (NG_ATTR_BINDING.test(ngAttrName)) { + name = ngAttrName.substr(6).toLowerCase(); + } + if ((index = ngAttrName.lastIndexOf('Start')) != -1 && index == ngAttrName.length - 5) { + attrStartName = name; + attrEndName = name.substr(0, name.length - 5) + 'end'; + name = name.substr(0, name.length - 6); + } nName = directiveNormalize(name.toLowerCase()); attrsMap[nName] = name; attrs[nName] = value = trim((msie && name == 'href') @@ -4059,7 +4698,7 @@ function $CompileProvider($provide) { attrs[nName] = true; // presence means true } addAttrInterpolateDirective(node, directives, value, nName); - addDirective(directives, nName, 'A', maxPriority); + addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, attrEndName); } } @@ -4068,7 +4707,7 @@ function $CompileProvider($provide) { if (isString(className) && className !== '') { while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority)) { + if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { attrs[nName] = trim(match[3]); } className = className.substr(match.index + match[0].length); @@ -4083,7 +4722,7 @@ function $CompileProvider($provide) { match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); if (match) { nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority)) { + if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { attrs[nName] = trim(match[2]); } } @@ -4098,6 +4737,49 @@ function $CompileProvider($provide) { return directives; } + /** + * Given a node with an directive-start it collects all of the siblings until it find directive-end. + * @param node + * @param attrStart + * @param attrEnd + * @returns {*} + */ + function groupScan(node, attrStart, attrEnd) { + var nodes = []; + var depth = 0; + if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { + var startNode = node; + do { + if (!node) { + throw $compileMinErr('uterdir', "Unterminated attribute, found '{0}' but no matching '{1}' found.", attrStart, attrEnd); + } + if (node.nodeType == 1 /** Element **/) { + if (node.hasAttribute(attrStart)) depth++; + if (node.hasAttribute(attrEnd)) depth--; + } + nodes.push(node); + node = node.nextSibling; + } while (depth > 0); + } else { + nodes.push(node); + } + return jqLite(nodes); + } + + /** + * Wrapper for linking function which converts normal linking function into a grouped + * linking function. + * @param linkFn + * @param attrStart + * @param attrEnd + * @returns {Function} + */ + function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { + return function(scope, element, attrs, controllers) { + element = groupScan(element[0], attrStart, attrEnd); + return linkFn(scope, element, attrs, controllers); + } + } /** * Once the directives have been collected, their compile functions are executed. This method @@ -4114,7 +4796,7 @@ function $CompileProvider($provide) { * argument has the root jqLite array so that we can replace nodes on it. * @returns linkFn */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, jqCollection) { + function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, jqCollection, originalReplaceDirective) { var terminalPriority = -Number.MAX_VALUE, preLinkFns = [], postLinkFns = [], @@ -4126,6 +4808,7 @@ function $CompileProvider($provide) { directiveName, $template, transcludeDirective, + replaceDirective = originalReplaceDirective, childTranscludeFn = transcludeFn, controllerDirectives, linkFn, @@ -4134,6 +4817,13 @@ function $CompileProvider($provide) { // executes all directives on the current element for(var i = 0, ii = directives.length; i < ii; i++) { directive = directives[i]; + var attrStart = directive.$$start; + var attrEnd = directive.$$end; + + // collect multiblock sections + if (attrStart) { + $compileNode = groupScan(compileNode, attrStart, attrEnd) + } $template = undefined; if (terminalPriority > directive.priority) { @@ -4164,12 +4854,14 @@ function $CompileProvider($provide) { transcludeDirective = directive; terminalPriority = directive.priority; if (directiveValue == 'element') { - $template = jqLite(compileNode); + $template = groupScan(compileNode, attrStart, attrEnd) $compileNode = templateAttrs.$$element = jqLite(document.createComment(' ' + directiveName + ': ' + templateAttrs[directiveName] + ' ')); compileNode = $compileNode[0]; - replaceWith(jqCollection, jqLite($template[0]), compileNode); - childTranscludeFn = compile($template, transcludeFn, terminalPriority); + replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); + + childTranscludeFn = compile($template, transcludeFn, terminalPriority, + replaceDirective && replaceDirective.name); } else { $template = jqLite(JQLiteClone(compileNode)).contents(); $compileNode.html(''); // clear contents @@ -4177,19 +4869,25 @@ function $CompileProvider($provide) { } } - 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) { + replaceDirective = directive; $template = jqLite('
' + trim(directiveValue) + '
').contents(); compileNode = $template[0]; if ($template.length != 1 || compileNode.nodeType !== 1) { - throw new Error(MULTI_ROOT_TEMPLATE_ERROR + directiveValue); + throw $compileMinErr('tplrt', "Template for directive '{0}' must have exactly one root element. {1}", directiveName, ''); } replaceWith(jqCollection, $compileNode, compileNode); @@ -4219,17 +4917,20 @@ function $CompileProvider($provide) { if (directive.templateUrl) { assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; + + if (directive.replace) { + replaceDirective = directive; + } nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), - nodeLinkFn, $compileNode, templateAttrs, jqCollection, directive.replace, - childTranscludeFn); + nodeLinkFn, $compileNode, templateAttrs, jqCollection, childTranscludeFn); ii = directives.length; } else if (directive.compile) { try { linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); if (isFunction(linkFn)) { - addLinkFns(null, linkFn); + addLinkFns(null, linkFn, attrStart, attrEnd); } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post); + addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); } } catch (e) { $exceptionHandler(e, startingTag($compileNode)); @@ -4251,12 +4952,14 @@ function $CompileProvider($provide) { //////////////////// - function addLinkFns(pre, post) { + function addLinkFns(pre, post, attrStart, attrEnd) { if (pre) { + if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); pre.require = directive.require; preLinkFns.push(pre); } if (post) { + if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); post.require = directive.require; postLinkFns.push(post); } @@ -4275,7 +4978,7 @@ function $CompileProvider($provide) { } value = $element[retrievalMethod]('$' + require + 'Controller'); if (!value && !optional) { - throw Error("No controller: " + require); + throw $compileMinErr('ctreq', "Controller '{0}', required by directive '{1}', can't be found!", require, directiveName); } return value; } else if (isArray(require)) { @@ -4299,13 +5002,14 @@ function $CompileProvider($provide) { $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, + forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { + var match = definition.match(LOCAL_REGEXP) || [], + attrName = match[3] || scopeName, + optional = (match[2] == '?'), mode = match[1], // @, =, or & lastValue, parentGet, parentSet; @@ -4319,16 +5023,23 @@ function $CompileProvider($provide) { 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 lastValue = scope[scopeName] = parentGet(parentScope); - throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + attrs[attrName] + - ' (directive: ' + newIsolateScopeDirective.name + ')'); + throw $compileMinErr('nonassign', "Expression '{0}' used with directive '{1}' is non-assignable!", + attrs[attrName], newIsolateScopeDirective.name); }; lastValue = scope[scopeName] = parentGet(parentScope); scope.$watch(function parentValueWatch() { @@ -4358,8 +5069,8 @@ function $CompileProvider($provide) { } default: { - throw Error('Invalid isolate scope definition for directive ' + - newIsolateScopeDirective.name + ': ' + definiton); + throw $compileMinErr('iscp', "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", + newIsolateScopeDirective.name, scopeName, definition); } } }); @@ -4372,16 +5083,20 @@ function $CompileProvider($provide) { $element: $element, $attrs: attrs, $transclude: boundTranscludeFn - }; + }, controllerInstance; controller = directive.controller; if (controller == '@') { controller = attrs[directive.name]; } + controllerInstance = $controller(controller, locals); $element.data( '$' + directive.name + 'Controller', - $controller(controller, locals)); + controllerInstance); + if (directive.controllerAs) { + locals.$scope[directive.controllerAs] = controllerInstance; + } }); } @@ -4427,8 +5142,9 @@ function $CompileProvider($provide) { * * `M`: comment * @returns true if directive was added. */ - function addDirective(tDirectives, name, location, maxPriority) { - var match = false; + function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, endAttrName) { + if (name === ignoreDirective) return null; + var match = null; if (hasDirectives.hasOwnProperty(name)) { for(var directive, directives = $injector.get(name + Suffix), i = 0, ii = directives.length; i directive.priority) && directive.restrict.indexOf(location) != -1) { + if (startAttrName) { + directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); + } tDirectives.push(directive); - match = true; + match = directive; } } catch(e) { $exceptionHandler(e); } } @@ -4485,7 +5204,7 @@ function $CompileProvider($provide) { function compileTemplateUrl(directives, beforeTemplateNodeLinkFn, $compileNode, tAttrs, - $rootElement, replace, childTranscludeFn) { + $rootElement, childTranscludeFn) { var linkQueue = [], afterTemplateNodeLinkFn, afterTemplateChildLinkFn, @@ -4493,23 +5212,27 @@ function $CompileProvider($provide) { origAsyncDirective = directives.shift(), // The fact that we have to copy and patch the directive seems wrong! derivedSyncDirective = extend({}, origAsyncDirective, { - controller: null, templateUrl: null, transclude: null, scope: null - }); + controller: null, templateUrl: null, transclude: null, scope: null, replace: null + }), + templateUrl = (isFunction(origAsyncDirective.templateUrl)) + ? origAsyncDirective.templateUrl($compileNode, tAttrs) + : origAsyncDirective.templateUrl; $compileNode.html(''); - $http.get(origAsyncDirective.templateUrl, {cache: $templateCache}). + $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). success(function(content) { var compileNode, tempTemplateAttrs, $template; content = denormalizeTemplate(content); - if (replace) { + if (origAsyncDirective.replace) { $template = jqLite('
' + trim(content) + '
').contents(); compileNode = $template[0]; if ($template.length != 1 || compileNode.nodeType !== 1) { - throw new Error(MULTI_ROOT_TEMPLATE_ERROR + content); + throw $compileMinErr('tplrt', "Template for directive '{0}' must have exactly one root element. {1}", + origAsyncDirective.name, templateUrl); } tempTemplateAttrs = {$attr: {}}; @@ -4522,16 +5245,22 @@ function $CompileProvider($provide) { } directives.unshift(derivedSyncDirective); - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn); + + afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn, $compileNode, origAsyncDirective); + forEach($rootElement, function(node, i) { + if (node == compileNode) { + $rootElement[i] = $compileNode[0]; + } + }); afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); while(linkQueue.length) { - var controller = linkQueue.pop(), - linkRootElement = linkQueue.pop(), - beforeTemplateLinkNode = linkQueue.pop(), - scope = linkQueue.pop(), - linkNode = compileNode; + var scope = linkQueue.shift(), + beforeTemplateLinkNode = linkQueue.shift(), + linkRootElement = linkQueue.shift(), + controller = linkQueue.shift(), + linkNode = $compileNode[0]; if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { // it was cloned therefore we have to clone as well. @@ -4539,14 +5268,15 @@ function $CompileProvider($provide) { replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); } - afterTemplateNodeLinkFn(function() { - beforeTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, controller); - }, scope, linkNode, $rootElement, controller); + afterTemplateNodeLinkFn( + beforeTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, controller), + scope, linkNode, $rootElement, controller + ); } linkQueue = null; }). error(function(response, code, headers, config) { - throw Error('Failed to load template: ' + config.url); + throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url); }); return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, controller) { @@ -4574,8 +5304,8 @@ function $CompileProvider($provide) { function assertNoDuplicate(what, previousDirective, directive, element) { if (previousDirective) { - throw Error('Multiple directives [' + previousDirective.name + ', ' + - directive.name + '] asking for ' + what + ' on: ' + startingTag(element)); + throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', + previousDirective.name, directive.name, what, startingTag(element)); } } @@ -4599,6 +5329,16 @@ function $CompileProvider($provide) { } + function getTrustedContext(node, attrNormalizedName) { + // maction[xlink:href] can source SVG. It's not limited to . + if (attrNormalizedName == "xlinkHref" || + (nodeName_(node) != "IMG" && (attrNormalizedName == "src" || + attrNormalizedName == "ngSrc"))) { + return $sce.RESOURCE_URL; + } + } + + function addAttrInterpolateDirective(node, directives, value, name) { var interpolateFn = $interpolate(value, true); @@ -4606,18 +5346,31 @@ function $CompileProvider($provide) { if (!interpolateFn) return; + if (name === "multiple" && nodeName_(node) === "SELECT") { + throw $compileMinErr("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", + startingTag(node)); + } + directives.push({ priority: 100, 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); + if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { + throw $compileMinErr('nodomevents', + "Interpolations for HTML DOM event attributes are disallowed. Please use the ng- " + + "versions (such as ng-click instead of onclick) instead."); } - attr[name] = undefined; + // 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, getTrustedContext(node, name)); + + // 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) { @@ -4634,30 +5387,50 @@ function $CompileProvider($provide) { * * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes * in the root of the tree. - * @param {JqLite} $element The jqLite element which we are going to replace. We keep the shell, + * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep the shell, * but replace its DOM node reference. * @param {Node} newNode The new DOM node. */ - function replaceWith($rootElement, $element, newNode) { - var oldNode = $element[0], - parent = oldNode.parentNode, + function replaceWith($rootElement, elementsToRemove, newNode) { + var firstElementToRemove = elementsToRemove[0], + removeCount = elementsToRemove.length, + parent = firstElementToRemove.parentNode, i, ii; if ($rootElement) { for(i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == oldNode) { - $rootElement[i] = newNode; + if ($rootElement[i] == firstElementToRemove) { + $rootElement[i++] = newNode; + for (var j = i, j2 = j + removeCount - 1, + jj = $rootElement.length; + j < jj; j++, j2++) { + if (j2 < jj) { + $rootElement[j] = $rootElement[j2]; + } else { + delete $rootElement[j]; + } + } + $rootElement.length -= removeCount - 1; break; } } } if (parent) { - parent.replaceChild(newNode, oldNode); + parent.replaceChild(newNode, firstElementToRemove); + } + var fragment = document.createDocumentFragment(); + fragment.appendChild(firstElementToRemove); + newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]; + for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { + var element = elementsToRemove[k]; + jqLite(element).remove(); // must do this way to clean up expando + fragment.appendChild(element); + delete elementsToRemove[k]; } - newNode[jqLite.expando] = oldNode[jqLite.expando]; - $element[0] = newNode; + elementsToRemove[0] = newNode; + elementsToRemove.length = 1 } }]; } @@ -4666,7 +5439,7 @@ var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; /** * Converts all accepted directives format into proper directive name. * All of these will become 'myDirective': - * my:DiRective + * my:Directive * my-directive * x-my-directive * data-my:directive @@ -4712,7 +5485,7 @@ function directiveNormalize(name) { * @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 +5520,8 @@ function directiveLinkingFn( * {@link ng.$controllerProvider#register register} method. */ function $ControllerProvider() { - var controllers = {}; + var controllers = {}, + CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; /** @@ -4792,17 +5566,31 @@ function $ControllerProvider() { * 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; + + 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); + } + + instance = $injector.instantiate(expression, locals); + + if (identifier) { + if (!(locals && typeof locals.$scope == 'object')) { + throw minErr('$controller')('noscp', "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", constructor || expression.name, identifier); + } - assertArgFn(constructor, name, true); + locals.$scope[identifier] = instance; } - return $injector.instantiate(constructor, locals); + return instance; }; }]; } @@ -4849,557 +5637,1862 @@ function $ExceptionHandlerProvider() { } /** - * @ngdoc object - * @name ng.$interpolateProvider - * @function - * - * @description + * Parse headers into key value object * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. + * @param {string} headers Raw headers as a string + * @returns {Object} Parsed headers as key value object */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name ng.$interpolateProvider#startSymbol - * @methodOf ng.$interpolateProvider - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value){ - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name ng.$interpolateProvider#endSymbol - * @methodOf ng.$interpolateProvider - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value){ - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', function($parse) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length; - - /** - * @ngdoc function - * @name ng.$interpolate - * @function - * - * @requires $parse - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * -
-         var $interpolate = ...; // injected
-         var exp = $interpolate('Hello {{name}}!');
-         expect(exp({name:'Angular'}).toEqual('Hello Angular!');
-       
- * - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @returns {function(context)} an interpolation function which is used to compute the interpolated - * string. The function has these parameters: - * - * * `context`: an object against which any expressions embedded in the strings are evaluated - * against. - * - */ - function $interpolate(text, mustHaveExpression) { - var startIndex, - endIndex, - index = 0, - parts = [], - length = text.length, - hasInterpolation = false, - fn, - exp, - concat = []; +function parseHeaders(headers) { + var parsed = {}, key, val, i; - while(index < length) { - if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { - (index != startIndex) && parts.push(text.substring(index, startIndex)); - parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); - fn.exp = exp; - index = endIndex + endSymbolLength; - hasInterpolation = true; - } else { - // we did not find anything, so we have to add the remainder to the parts array - (index != length) && parts.push(text.substring(index)); - index = length; - } - } + if (!headers) return parsed; - if (!(length = parts.length)) { - // we added, nothing, must have been an empty string. - parts.push(''); - length = 1; - } + forEach(headers.split('\n'), function(line) { + i = line.indexOf(':'); + key = lowercase(trim(line.substr(0, i))); + val = trim(line.substr(i + 1)); - if (!mustHaveExpression || hasInterpolation) { - concat.length = length; - fn = function(context) { - for(var i = 0, ii = length, part; i)} fns Function or an array of functions. + * @returns {*} Transformed data. */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } +function transformData(data, headers, fns) { + if (isFunction(fns)) + return fns(data, headers); - return segments.join('/'); -} + forEach(fns, function(fn) { + data = fn(data, headers); + }); -function stripHash(url) { - return url.split('#')[0]; + return data; } -function matchUrl(url, obj) { - var match = URL_MATCH.exec(url); - - 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; +function isSuccess(status) { + return 200 <= status && status < 300; } -function composeProtocolHostPort(protocol, host, port) { - return protocol + '://' + host + (port == DEFAULT_PORTS[protocol] ? '' : ':' + port); -} - - -function pathPrefixFromBase(basePath) { - return basePath.substr(0, basePath.lastIndexOf('/')); -} - - -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 convertToHashbangUrl(url, basePath, hashPrefix) { - var match = matchUrl(url); - - // 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; - } -} - - -/** - * LocationUrl 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 - */ -function LocationUrl(url, pathPrefix, appBaseUrl) { - pathPrefix = pathPrefix || ''; - - /** - * 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.$$path = decodeURIComponent(match.path.substr(pathPrefix.length)); - this.$$search = parseKeyValue(match.search); - this.$$hash = match.hash && decodeURIComponent(match.hash) || ''; - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - 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.$$rewriteAppUrl = function(absoluteLinkUrl) { - if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) { - return absoluteLinkUrl; - } - } - - - this.$$parse(url); -} - - -/** - * LocationHashbangUrl represents url - * 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) - */ -function LocationHashbangUrl(url, hashPrefix, appBaseUrl) { - var basePath; - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @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 + '" !'); - } - - 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 = ''; - } +function $HttpProvider() { + var JSON_START = /^\s*(\[|\{[^\{])/, + JSON_END = /[\}\]]\s*$/, + PROTECTION_PREFIX = /^\)\]\}',?\n/, + CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; - this.$$search = parseKeyValue(match[3]); - this.$$hash = match[5] && decodeURIComponent(match[5]) || ''; + var defaults = this.defaults = { + // transform incoming response data + transformResponse: [function(data) { + if (isString(data)) { + // strip json vulnerability protection prefix + data = data.replace(PROTECTION_PREFIX, ''); + if (JSON_START.test(data) && JSON_END.test(data)) + data = fromJson(data); + } + return data; + }], - this.$$compose(); - }; + // transform outgoing request data + transformRequest: [function(d) { + return isObject(d) && !isFile(d) ? toJson(d) : d; + }], - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; + // default headers + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + }, + post: CONTENT_TYPE_APPLICATION_JSON, + put: CONTENT_TYPE_APPLICATION_JSON, + patch: CONTENT_TYPE_APPLICATION_JSON + }, - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = composeProtocolHostPort(this.$$protocol, this.$$host, this.$$port) + - basePath + (this.$$url ? '#' + hashPrefix + this.$$url : ''); + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN' }; - this.$$rewriteAppUrl = function(absoluteLinkUrl) { - if(absoluteLinkUrl.indexOf(appBaseUrl) == 0) { - return absoluteLinkUrl; - } - } - - - this.$$parse(url); -} - - -LocationUrl.prototype = { - - /** - * Has any change been replacing ? - * @private - */ - $$replace: false, - /** - * @ngdoc method - * @name ng.$location#absUrl - * @methodOf ng.$location - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * {@link http://www.ietf.org/rfc/rfc3986.txt RFC 3986}. - * - * @return {string} full url + * Are order by request. I.E. they are applied in the same order as + * array on request, but revers order on response. */ - absUrl: locationGetter('$$absUrl'), - + var interceptorFactories = this.interceptors = []; /** - * @ngdoc method - * @name ng.$location#url - * @methodOf ng.$location - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @return {string} url + * For historical reasons, response interceptors ordered by the order in which + * they are applied to response. (This is in revers to interceptorFactories) */ - url: function(url, replace) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1]) this.path(decodeURIComponent(match[1])); - if (match[2] || match[1]) this.search(match[3] || ''); - this.hash(match[5] || '', replace); - - return this; - }, + var responseInterceptorFactories = this.responseInterceptors = []; - /** - * @ngdoc method - * @name ng.$location#protocol - * @methodOf ng.$location - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), + this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', '$$urlUtils', + function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector, $$urlUtils) { - /** - * @ngdoc method - * @name ng.$location#host - * @methodOf ng.$location - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), + var defaultCache = $cacheFactory('$http'); - /** - * @ngdoc method - * @name ng.$location#port - * @methodOf ng.$location - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * @return {Number} port - */ - port: locationGetter('$$port'), + /** + * 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 = []; - /** - * @ngdoc method - * @name ng.$location#path - * @methodOf ng.$location - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * @param {string=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - return path.charAt(0) == '/' ? path : '/' + path; - }), + forEach(interceptorFactories, function(interceptorFactory) { + reversedInterceptors.unshift(isString(interceptorFactory) + ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); + }); - /** - * @ngdoc method - * @name ng.$location#search - * @methodOf ng.$location - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * @param {string|object=} search New search params - string or hash object - * @param {string=} paramValue If `search` is a string, then `paramValue` will override only a - * single search parameter. If the value is `null`, the parameter will be deleted. - * - * @return {string} search - */ - search: function(search, paramValue) { - if (isUndefined(search)) - return this.$$search; + forEach(responseInterceptorFactories, function(interceptorFactory, index) { + var responseFn = isString(interceptorFactory) + ? $injector.get(interceptorFactory) + : $injector.invoke(interceptorFactory); - if (isDefined(paramValue)) { - if (paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } else { - this.$$search = isString(search) ? parseKeyValue(search) : search; - } + /** + * Response interceptors go before "around" interceptors (no real reason, just + * had to pick one.) But they are already reversed, 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)); + } + }); + }); - this.$$compose(); - return this; - }, - /** - * @ngdoc method - * @name ng.$location#hash - * @methodOf ng.$location - * + /** + * @ngdoc function + * @name ng.$http + * @requires $httpBackend + * @requires $browser + * @requires $cacheFactory + * @requires $rootScope + * @requires $q + * @requires $injector + * + * @description + * The `$http` service is a core Angular service that facilitates communication with the remote + * HTTP servers via the browser's {@link https://developer.mozilla.org/en/xmlhttprequest + * XMLHttpRequest} object or via {@link http://en.wikipedia.org/wiki/JSONP JSONP}. + * + * For unit testing applications that use `$http` service, see + * {@link ngMock.$httpBackend $httpBackend mock}. + * + * For a higher level of abstraction, please check out the {@link ngResource.$resource + * $resource} service. + * + * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by + * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage + * it is important to familiarize yourself with these APIs and the guarantees they provide. + * + * + * # General usage + * The `$http` service is a function which takes a single argument — a configuration object — + * that is used to generate an HTTP request and returns a {@link ng.$q promise} + * with two $http specific methods: `success` and `error`. + * + *
+     *   $http({method: 'GET', url: '/someUrl'}).
+     *     success(function(data, status, headers, config) {
+     *       // this callback will be called asynchronously
+     *       // when the response is available
+     *     }).
+     *     error(function(data, status, headers, config) {
+     *       // called asynchronously if an error occurs
+     *       // or server returns response with an error status.
+     *     });
+     * 
+ * + * Since the returned value of calling the $http function is a `promise`, you can also use + * the `then` method to register callbacks, and these callbacks will receive a single argument – + * an object representing the response. See the API signature and type info below for more + * details. + * + * A response status code between 200 and 299 is considered a success status and + * will result in the success callback being called. Note that if the response is a redirect, + * XMLHttpRequest will transparently follow it, meaning that the error callback will not be + * called for such responses. + * + * # Shortcut methods + * + * Since all invocations of the $http service require passing in an HTTP method and URL, and + * POST/PUT requests require request data to be provided as well, shortcut methods + * were created: + * + *
+     *   $http.get('/someUrl').success(successCallback);
+     *   $http.post('/someUrl', data).success(successCallback);
+     * 
+ * + * Complete list of shortcut methods: + * + * - {@link ng.$http#get $http.get} + * - {@link ng.$http#head $http.head} + * - {@link ng.$http#post $http.post} + * - {@link ng.$http#put $http.put} + * - {@link ng.$http#delete $http.delete} + * - {@link ng.$http#jsonp $http.jsonp} + * + * + * # Setting HTTP Headers + * + * The $http service will automatically add certain HTTP headers to all requests. These defaults + * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration + * object, which currently contains this default configuration: + * + * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): + * - `Accept: application/json, text/plain, * / *` + * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) + * - `Content-Type: application/json` + * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) + * - `Content-Type: application/json` + * + * To add or overwrite these defaults, simply add or remove a property from these configuration + * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object + * with the lowercased HTTP method name as the key, e.g. + * `$httpProvider.defaults.headers.get['My-Header']='value'`. + * + * Additionally, the defaults can be set at runtime via the `$http.defaults` object in the same + * fashion. + * + * + * # Transforming Requests and Responses + * + * Both requests and responses can be transformed using transform functions. By default, Angular + * applies these transformations: + * + * Request transformations: + * + * - If the `data` property of the request configuration object contains an object, serialize it into + * JSON format. + * + * Response transformations: + * + * - If XSRF prefix is detected, strip it (see Security Considerations section below). + * - If JSON response is detected, deserialize it using a JSON parser. + * + * To globally augment or override the default transforms, modify the `$httpProvider.defaults.transformRequest` and + * `$httpProvider.defaults.transformResponse` properties. These properties are by default an + * array of transform functions, which allows you to `push` or `unshift` a new transformation function into the + * transformation chain. You can also decide to completely override any default transformations by assigning your + * transformation functions to these properties directly without the array wrapper. + * + * Similarly, to locally override the request/response transforms, augment the `transformRequest` and/or + * `transformResponse` properties of the configuration object passed into `$http`. + * + * + * # Caching + * + * To enable caching, set the configuration property `cache` to `true`. When the cache is + * enabled, `$http` stores the response from the server in local cache. Next time the + * response is served from the cache without sending a request to the server. + * + * Note that even if the response is served from cache, delivery of the data is asynchronous in + * the same way that real requests are. + * + * If there are multiple GET requests for the same URL that should be cached using the same + * 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`. + * + * + * # 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. + * + * + *
+     *   // 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
+     *       }
+     *   });
+     * 
+ * + * # 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 + * initiated these requests. The response interceptors leverage the {@link ng.$q + * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. + * + * The interceptors are service factories that are registered with the $httpProvider by + * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and + * injected with dependencies (if specified) and returns the interceptor — a function that + * takes a {@link ng.$q promise} and returns the original or a new promise. + * + *
+     *   // register the interceptor as a service
+     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+     *     return function(promise) {
+     *       return promise.then(function(response) {
+     *         // do something on success
+     *         return response;
+     *       }, function(response) {
+     *         // do something on error
+     *         if (canRecover(response)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(response);
+     *       });
+     *     }
+     *   });
+     *
+     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');
+     *
+     *
+     *   // register the interceptor via an anonymous factory
+     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {
+     *     return function(promise) {
+     *       // same as above
+     *     }
+     *   });
+     * 
+ * + * + * # Security Considerations + * + * When designing web applications, consider security threats from: + * + * - {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx + * JSON vulnerability} + * - {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} + * + * Both server and the client must cooperate in order to eliminate these threats. Angular comes + * pre-configured with strategies that address these issues, but for this to work backend server + * cooperation is required. + * + * ## JSON Vulnerability Protection + * + * A {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx + * JSON vulnerability} allows third party website to turn your JSON resource URL into + * {@link http://en.wikipedia.org/wiki/JSONP JSONP} request under some conditions. To + * counter this your server can prefix all JSON requests with following string `")]}',\n"`. + * Angular will automatically strip the prefix before processing it as JSON. + * + * For example if your server needs to return: + *
+     * ['one','two']
+     * 
+ * + * which is vulnerable to attack, your server can return: + *
+     * )]}',
+     * ['one','two']
+     * 
+ * + * Angular will strip the prefix, before processing the JSON. + * + * + * ## Cross Site Request Forgery (XSRF) Protection + * + * {@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 + * (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 + * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure + * that only JavaScript running on your domain could have sent the request. The token must be + * unique for each user and must be verifiable by the server (to prevent the JavaScript from making + * 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: + * + * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) + * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. + * - **params** – `{Object.}` – Map of strings or objects which will be turned to + * `?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 or functions which return strings representing + * HTTP headers to send to the server. If the return value of a function is null, the header will + * not be sent. + * - **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.}` – + * 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.}` – + * 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 {HttpPromise} Returns a {@link ng.$q promise} object with the + * standard `then` method and two http specific methods: `success` and `error`. The `then` + * method takes two arguments a success and an error callback which will be called with a + * response object. The `success` and `error` methods take a single argument - a function that + * will be called when the request succeeds or fails respectively. The arguments passed into + * these functions are destructured representation of the response object passed into the + * `then` method. The response object has these properties: + * + * - **data** – `{string|Object}` – The response body transformed with the transform functions. + * - **status** – `{number}` – HTTP status code of the response. + * - **headers** – `{function([headerName])}` – Header getter function. + * - **config** – `{Object}` – The configuration object that was used to generate the request. + * + * @property {Array.} pendingRequests Array of config objects for currently pending + * requests. This is primarily meant to be used for debugging purposes. + * + * + * @example + + +
+ + +
+ + + +
http status code: {{status}}
+
http response data: {{data}}
+
+
+ + function FetchCtrl($scope, $http, $templateCache) { + $scope.method = 'GET'; + $scope.url = 'http-hello.html'; + + $scope.fetch = function() { + $scope.code = null; + $scope.response = null; + + $http({method: $scope.method, url: $scope.url, cache: $templateCache}). + success(function(data, status) { + $scope.status = status; + $scope.data = data; + }). + error(function(data, status) { + $scope.data = data || "Request failed"; + $scope.status = status; + }); + }; + + $scope.updateModel = function(method, url) { + $scope.method = method; + $scope.url = url; + }; + } + + + Hello, $http! + + + it('should make an xhr GET request', function() { + element(':button:contains("Sample GET")').click(); + element(':button:contains("fetch")').click(); + expect(binding('status')).toBe('200'); + expect(binding('data')).toMatch(/Hello, \$http!/); + }); + + it('should make a JSONP request to angularjs.org', function() { + element(':button:contains("Sample JSONP")').click(); + element(':button:contains("fetch")').click(); + expect(binding('status')).toBe('200'); + expect(binding('data')).toMatch(/Super Hero!/); + }); + + it('should make JSONP request to invalid URL and invoke the error handler', + function() { + element(':button:contains("Invalid JSONP")').click(); + element(':button:contains("fetch")').click(); + expect(binding('status')).toBe('0'); + expect(binding('data')).toBe('Request failed'); + }); + +
+ */ + function $http(requestConfig) { + var config = { + transformRequest: defaults.transformRequest, + transformResponse: defaults.transformResponse + }; + var headers = mergeHeaders(requestConfig); + + extend(config, requestConfig); + config.headers = headers; + config.method = uppercase(config.method); + + var xsrfValue = $$urlUtils.isSameOrigin(config.url) + ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] + : undefined; + if (xsrfValue) { + headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; + } + + + var serverRequest = function(config) { + headers = config.headers; + var reqData = transformData(config.data, headersGetter(headers), config.transformRequest); + + // strip content-type if data is undefined + if (isUndefined(config.data)) { + forEach(headers, function(value, header) { + if (lowercase(header) === 'content-type') { + delete headers[header]; + } + }); + } + + 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(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); + }); + return promise; + }; + + promise.error = function(fn) { + promise.then(null, function(response) { + fn(response.data, response.status, response.headers, config); + }); + return promise; + }; + + return promise; + + function transformResponse(response) { + // make a copy since the response must be cacheable + var resp = extend({}, response, { + data: transformData(response.data, response.headers, config.transformResponse) + }); + return (isSuccess(response.status)) + ? resp + : $q.reject(resp); + } + + function mergeHeaders(config) { + var defHeaders = defaults.headers, + reqHeaders = extend({}, config.headers), + defHeaderName, lowercaseDefHeaderName, reqHeaderName; + + defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); + + // execute if header value is function + execHeaders(defHeaders); + execHeaders(reqHeaders); + + // using for-in instead of forEach to avoid unecessary iteration after header has been found + defaultHeadersIteration: + for (defHeaderName in defHeaders) { + lowercaseDefHeaderName = lowercase(defHeaderName); + + for (reqHeaderName in reqHeaders) { + if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { + continue defaultHeadersIteration; + } + } + + reqHeaders[defHeaderName] = defHeaders[defHeaderName]; + } + + return reqHeaders; + + function execHeaders(headers) { + var headerContent; + + forEach(headers, function(headerFn, header) { + if (isFunction(headerFn)) { + headerContent = headerFn(); + if (headerContent != null) { + headers[header] = headerContent; + } else { + delete headers[header]; + } + } + }); + } + } + } + + $http.pendingRequests = []; + + /** + * @ngdoc method + * @name ng.$http#get + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `GET` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#delete + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `DELETE` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#head + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `HEAD` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#jsonp + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `JSONP` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request. + * Should contain `JSON_CALLBACK` string. + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + createShortMethods('get', 'delete', 'head', 'jsonp'); + + /** + * @ngdoc method + * @name ng.$http#post + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `POST` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + + /** + * @ngdoc method + * @name ng.$http#put + * @methodOf ng.$http + * + * @description + * Shortcut method to perform `PUT` request. + * + * @param {string} url Relative or absolute URL specifying the destination of the request + * @param {*} data Request content + * @param {Object=} config Optional configuration object + * @returns {HttpPromise} Future object + */ + createShortMethodsWithData('post', 'put'); + + /** + * @ngdoc property + * @name ng.$http#defaults + * @propertyOf ng.$http + * + * @description + * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of + * default headers, withCredentials as well as request and response transformations. + * + * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. + */ + $http.defaults = defaults; + + + return $http; + + + function createShortMethods(names) { + forEach(arguments, function(name) { + $http[name] = function(url, config) { + return $http(extend(config || {}, { + method: name, + url: url + })); + }; + }); + } + + + function createShortMethodsWithData(name) { + forEach(arguments, function(name) { + $http[name] = function(url, data, config) { + return $http(extend(config || {}, { + method: name, + url: url, + data: data + })); + }; + }); + } + + + /** + * Makes the request. + * + * !!! ACCESSES CLOSURE VARS: + * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests + */ + function sendReq(config, reqData, reqHeaders) { + var deferred = $q.defer(), + promise = deferred.promise, + cache, + cachedResp, + url = buildUrl(config.url, config.params); + + $http.pendingRequests.push(config); + promise.then(removePendingReq, removePendingReq); + + + 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) { + cachedResp = cache.get(url); + if (isDefined(cachedResp)) { + if (cachedResp.then) { + // cached request has already been sent, but there is no response yet + cachedResp.then(removePendingReq, removePendingReq); + return cachedResp; + } else { + // serving from cache + if (isArray(cachedResp)) { + resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2])); + } else { + resolvePromise(cachedResp, 200, {}); + } + } + } else { + // put the promise for the non-transformed response into cache as a placeholder + cache.put(url, promise); + } + } + + // if we won't have the response in cache, send the request to the backend + if (isUndefined(cachedResp)) { + $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, + config.withCredentials, config.responseType); + } + + return promise; + + + /** + * Callback registered to $httpBackend(): + * - caches the response if desired + * - resolves the raw $http promise + * - calls $apply + */ + function done(status, response, headersString) { + if (cache) { + if (isSuccess(status)) { + cache.put(url, [status, response, parseHeaders(headersString)]); + } else { + // remove promise from the cache + cache.remove(url); + } + } + + resolvePromise(response, status, headersString); + if (!$rootScope.$$phase) $rootScope.$apply(); + } + + + /** + * Resolves the raw $http promise. + */ + function resolvePromise(response, status, headers) { + // normalize internal statuses to 0 + status = Math.max(status, 0); + + (isSuccess(status) ? deferred.resolve : deferred.reject)({ + data: response, + status: status, + headers: headersGetter(headers), + config: config + }); + } + + + function removePendingReq() { + var idx = indexOf($http.pendingRequests, config); + if (idx !== -1) $http.pendingRequests.splice(idx, 1); + } + } + + + function buildUrl(url, params) { + if (!params) return url; + var parts = []; + forEachSorted(params, function(value, key) { + if (value == null || value == undefined) return; + 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('&'); + } + + + }]; +} + +var XHR = window.XMLHttpRequest || function() { + try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} + try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} + try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} + throw minErr('$httpBackend')('noxhr', "This browser does not support XMLHttpRequest."); +}; + + +/** + * @ngdoc object + * @name ng.$httpBackend + * @requires $browser + * @requires $window + * @requires $document + * + * @description + * HTTP backend used by the {@link ng.$http service} that delegates to + * XMLHttpRequest object or JSONP and deals with browser incompatibilities. + * + * You should never need to use this service directly, instead use the higher-level abstractions: + * {@link ng.$http $http} or {@link ngResource.$resource $resource}. + * + * During testing this implementation is swapped with {@link ngMock.$httpBackend mock + * $httpBackend} which can be trained with responses. + */ +function $HttpBackendProvider() { + this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { + return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, + $document[0], $window.location.protocol.replace(':', '')); + }]; +} + +function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) { + // TODO(vojta): fix the signature + return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { + var status; + $browser.$$incOutstandingRequestCount(); + url = url || $browser.url(); + + if (lowercase(method) == 'jsonp') { + var callbackId = '_' + (callbacks.counter++).toString(36); + callbacks[callbackId] = function(data) { + callbacks[callbackId].data = data; + }; + + var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), + function() { + if (callbacks[callbackId].data) { + completeRequest(callback, 200, callbacks[callbackId].data); + } else { + completeRequest(callback, status || -2); + } + delete callbacks[callbackId]; + }); + } else { + var xhr = new XHR(); + xhr.open(method, url, true); + forEach(headers, function(value, key) { + if (value) xhr.setRequestHeader(key, value); + }); + + // 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 + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + var responseHeaders = xhr.getAllResponseHeaders(); + + // TODO(vojta): remove once Firefox 21 gets released. + // begin: workaround to overcome Firefox CORS http response headers bug + // https://bugzilla.mozilla.org/show_bug.cgi?id=608735 + // Firefox already patched in nightly. Should land in Firefox 21. + + // CORS "simple response headers" http://www.w3.org/TR/cors/ + var value, + simpleHeaders = ["Cache-Control", "Content-Language", "Content-Type", + "Expires", "Last-Modified", "Pragma"]; + if (!responseHeaders) { + responseHeaders = ""; + forEach(simpleHeaders, function (header) { + var value = xhr.getResponseHeader(header); + if (value) { + responseHeaders += header + ": " + value + "\n"; + } + }); + } + // end of the workaround. + + // 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); + } + }; + + if (withCredentials) { + xhr.withCredentials = true; + } + + if (responseType) { + xhr.responseType = responseType; + } + + xhr.send(post || ''); + } + + 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(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; + + // normalize IE bug (http://bugs.jquery.com/ticket/1450) + status = status == 1223 ? 204 : status; + + callback(status, response, headersString); + $browser.$$completeOutstandingRequest(noop); + } + }; + + function jsonpReq(url, done) { + // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: + // - fetches local scripts via XHR and evals them + // - adds and immediately removes script elements from the document + var script = rawDocument.createElement('script'), + doneWrapper = function() { + rawDocument.body.removeChild(script); + if (done) done(); + }; + + script.type = 'text/javascript'; + script.src = url; + + if (msie) { + script.onreadystatechange = function() { + if (/loaded|complete/.test(script.readyState)) doneWrapper(); + }; + } else { + script.onload = script.onerror = doneWrapper; + } + + rawDocument.body.appendChild(script); + return doneWrapper; + } +} + +var $interpolateMinErr = minErr('$interpolate'); + +/** + * @ngdoc object + * @name ng.$interpolateProvider + * @function + * + * @description + * + * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. + * + * @example + + + +
+ //demo.label// +
+
+ + it('should interpolate binding with custom symbols', function() { + expect(binding('demo.label')).toBe('This bindings is brought you you by // interpolation symbols.'); + }); + +
+ */ +function $InterpolateProvider() { + var startSymbol = '{{'; + var endSymbol = '}}'; + + /** + * @ngdoc method + * @name ng.$interpolateProvider#startSymbol + * @methodOf ng.$interpolateProvider + * @description + * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. + * + * @param {string=} value new value to set the starting symbol to. + * @returns {string|self} Returns the symbol when used as getter and self if used as setter. + */ + this.startSymbol = function(value){ + if (value) { + startSymbol = value; + return this; + } else { + return startSymbol; + } + }; + + /** + * @ngdoc method + * @name ng.$interpolateProvider#endSymbol + * @methodOf ng.$interpolateProvider + * @description + * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. + * + * @param {string=} value new value to set the ending symbol to. + * @returns {string|self} Returns the symbol when used as getter and self if used as setter. + */ + this.endSymbol = function(value){ + if (value) { + endSymbol = value; + return this; + } else { + return endSymbol; + } + }; + + + this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { + var startSymbolLength = startSymbol.length, + endSymbolLength = endSymbol.length; + + /** + * @ngdoc function + * @name ng.$interpolate + * @function + * + * @requires $parse + * @requires $sce + * + * @description + * + * Compiles a string with markup into an interpolation function. This service is used by the + * HTML {@link ng.$compile $compile} service for data binding. See + * {@link ng.$interpolateProvider $interpolateProvider} for configuring the + * interpolation markup. + * + * +
+         var $interpolate = ...; // injected
+         var exp = $interpolate('Hello {{name}}!');
+         expect(exp({name:'Angular'}).toEqual('Hello Angular!');
+       
+ * + * + * @param {string} text The text with markup to interpolate. + * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have + * embedded expression in order to return an interpolation function. Strings with no + * embedded expression will return null for the interpolation function. + * @param {string=} trustedContext when provided, the returned function passes the interpolated + * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, + * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that + * provides Strict Contextual Escaping for details. + * @returns {function(context)} an interpolation function which is used to compute the interpolated + * string. The function has these parameters: + * + * * `context`: an object against which any expressions embedded in the strings are evaluated + * against. + * + */ + function $interpolate(text, mustHaveExpression, trustedContext) { + var startIndex, + endIndex, + index = 0, + parts = [], + length = text.length, + hasInterpolation = false, + fn, + exp, + concat = []; + + while(index < length) { + if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) && + ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) { + (index != startIndex) && parts.push(text.substring(index, startIndex)); + parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex))); + fn.exp = exp; + index = endIndex + endSymbolLength; + hasInterpolation = true; + } else { + // we did not find anything, so we have to add the remainder to the parts array + (index != length) && parts.push(text.substring(index)); + index = length; + } + } + + if (!(length = parts.length)) { + // we added, nothing, must have been an empty string. + parts.push(''); + length = 1; + } + + // Concatenating expressions makes it hard to reason about whether some combination of concatenated + // values are unsafe to use and could easily lead to XSS. By requiring that a single + // expression be used for iframe[src], object[src], etc., we ensure that the value that's used + // is assigned or constructed by some JS code somewhere that is more testable or make it + // obvious that you bound the value to some user controlled value. This helps reduce the load + // when auditing for XSS issues. + if (trustedContext && parts.length > 1) { + throw $interpolateMinErr('noconcat', + "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + + "interpolations that concatenate multiple expressions when a trusted value is " + + "required. See http://docs.angularjs.org/api/ng.$sce", text); + } + + if (!mustHaveExpression || hasInterpolation) { + concat.length = length; + fn = function(context) { + try { + for(var i = 0, ii = length, part; i|Object.>} search New search params - string or hash object. Hash object + * may contain an array of values, which will be decoded as duplicates in the url. + * @param {string=} paramValue If `search` is a string, then `paramValue` will override only a + * single search parameter. If the value is `null`, the parameter will be deleted. + * + * @return {string} search + */ + search: function(search, paramValue) { + switch (arguments.length) { + case 0: + return this.$$search; + case 1: + if (isString(search)) { + this.$$search = parseKeyValue(search); + } else if (isObject(search)) { + this.$$search = search; + } else { + throw $locationMinErr('isrcharg', 'The first argument of the `$location#search()` call must be a string or an object.'); + } + break; + default: + if (paramValue == undefined || paramValue == null) { + delete this.$$search[search]; + } else { + this.$$search[search] = paramValue; + } + } + + this.$$compose(); + return this; + }, + + /** + * @ngdoc method + * @name ng.$location#hash + * @methodOf ng.$location + * * @description * This method is getter / setter. * @@ -5427,21 +7520,6 @@ LocationUrl.prototype = { } }; -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,39 +7616,22 @@ function $LocationProvider(){ 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(), // if base[href] is undefined, it defaults to '' + 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 = serverBase(initialUrl) + (baseHref || '/'); + 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) { + $rootElement.on('click', function(event) { // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) // currently we open nice url link and redirect then @@ -5584,22 +7645,24 @@ function $LocationProvider(){ 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(https://github.com/$location.absUrl(), true); } @@ -5684,7 +7747,33 @@ function $LocationProvider(){ */ +/** + * @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 { /** @@ -5699,23 +7788,23 @@ function $LogProvider(){ /** * @ngdoc method - * @name ng.$log#warn + * @name ng.$log#info * @methodOf ng.$log * * @description - * Write a warning message + * Write an information message */ - warn: consoleLog('warn'), + info: consoleLog('info'), /** * @ngdoc method - * @name ng.$log#info + * @name ng.$log#warn * @methodOf ng.$log * * @description - * Write an information message + * Write a warning message */ - info: consoleLog('info'), + warn: consoleLog('warn'), /** * @ngdoc method @@ -5725,7 +7814,25 @@ function $LogProvider(){ * @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) { @@ -5764,6 +7871,54 @@ function $LogProvider(){ }]; } +var $parseMinErr = minErr('$parse'); + +// Sandboxing Angular Expressions +// ------------------------------ +// Angular expressions are generally considered safe because these expressions only have direct access to $scope and +// locals. However, one can obtain the ability to execute arbitrary JS code by obtaining a reference to native JS +// functions such as the Function constructor. +// +// As an example, consider the following Angular expression: +// +// {}.toString.constructor(alert("evil JS code")) +// +// We want to prevent this type of access. For the sake of performance, during the lexing phase we disallow any "dotted" +// access to any member named "constructor". +// +// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor while evaluating +// the expression, which is a stronger but more expensive test. Since reflective calls are expensive anyway, this is not +// such a big deal compared to static dereferencing. +// +// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits against the +// expression language, but not to prevent exploits that were enabled by exposing sensitive JavaScript or browser apis +// on Scope. Exposing such objects on a Scope is never a good practice and therefore we are not even trying to protect +// against interaction with an object explicitly exposed in this way. +// +// A developer could foil the name check by aliasing the Function constructor under a different name on the scope. +// +// In general, it is not possible to access a Window object from an angular expression unless a window or some DOM +// object that has a reference to window is published onto a Scope. + +function ensureSafeMemberName(name, fullExpression) { + if (name === "constructor") { + throw $parseMinErr('isecfld', + 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', fullExpression); + } + return name; +}; + +function ensureSafeObject(obj, fullExpression) { + // nifty check if obj is Function that is fast and works across iframes and other contexts + if (obj && obj.constructor === obj) { + throw $parseMinErr('isecfn', + 'Referencing Function in Angular expressions is disallowed! Expression: {0}', fullExpression); + } else { + return obj; + } +} + + var OPERATORS = { 'null':function(){return null;}, 'true':function(){return true;}, @@ -5784,6 +7939,8 @@ var OPERATORS = { '%':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) 1; i++) { - var key = element.shift(); - var propertyObj = obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = propertyObj; - } - obj[element.shift()] = setValue; - return setValue; -} - -/** - * Return the value accesible 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 - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; + }, { + literal:true, + constant:allConstant + }); + } +} - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; +////////////////////////////////////////////////// +// Parser helper functions +////////////////////////////////////////////////// + +function setter(obj, path, setValue, fullExp) { + var element = path.split('.'), key; + for (var i = 0; element.length > 1; i++) { + key = ensureSafeMemberName(element.shift(), fullExp); + var propertyObj = obj[key]; + if (!propertyObj) { + propertyObj = {}; + obj[key] = propertyObj; + } + obj = propertyObj; + if (obj.then) { + if (!("$$v" in obj)) { + (function(promise) { + promise.then(function(val) { promise.$$v = val; }); } + )(obj); + } + if (obj.$$v === undefined) { + obj.$$v = {}; + } + obj = obj.$$v; } } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; + key = ensureSafeMemberName(element.shift(), fullExp); + obj[key] = setValue; + return setValue; } var getterFnCache = {}; @@ -6461,7 +8672,12 @@ var getterFnCache = {}; * - http://jsperf.com/angularjs-parse-getter/4 * - http://jsperf.com/path-evaluation-simplified/7 */ -function cspSafeGetterFn(key0, key1, key2, key3, key4) { +function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp) { + ensureSafeMemberName(key0, fullExp); + ensureSafeMemberName(key1, fullExp); + ensureSafeMemberName(key2, fullExp); + ensureSafeMemberName(key3, fullExp); + ensureSafeMemberName(key4, fullExp); return function(scope, locals) { var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope, promise; @@ -6525,7 +8741,7 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4) { }; } -function getterFn(path, csp) { +function getterFn(path, csp, fullExp) { if (getterFnCache.hasOwnProperty(path)) { return getterFnCache[path]; } @@ -6536,12 +8752,12 @@ function getterFn(path, csp) { if (csp) { fn = (pathKeysLength < 6) - ? cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4]) + ? cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp) : function(scope, locals) { var i = 0, val; do { val = cspSafeGetterFn( - pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++] + pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], fullExp )(scope, locals); locals = undefined; // clear after first iteration @@ -6552,6 +8768,7 @@ function getterFn(path, csp) { } else { var code = 'var l, fn, p;\n'; forEach(pathKeys, function(key, index) { + ensureSafeMemberName(key, fullExp); code += 'if(s === null || s === undefined) return s;\n' + 'l=s;\n' + 's='+ (index @@ -6604,12 +8821,17 @@ function getterFn(path, csp) { * @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() { @@ -6656,6 +8878,8 @@ function $ParseProvider() { * // since this fn executes async in a future turn of the event loop, we need to wrap * // our code into an $apply call so that the model changes are properly observed. * scope.$apply(function() { + * deferred.notify('About to greet ' + name + '.'); + * * if (okToGreet(name)) { * deferred.resolve('Hello, ' + name + '!'); * } else { @@ -6672,6 +8896,8 @@ function $ParseProvider() { * alert('Success: ' + greeting); * }, function(reason) { * alert('Failed: ' + reason); + * }, function(update) { + * alert('Got notification: ' + update); * }); * * @@ -6690,7 +8916,8 @@ function $ParseProvider() { * A new instance of deferred is constructed by calling `$q.defer()`. * * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion of the task. + * that can be used for signaling the successful or unsuccessful completion, as well as the status + * of the task. * * **Methods** * @@ -6698,6 +8925,8 @@ function $ParseProvider() { * constructed via `$q.reject`, the promise will be rejected instead. * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to * resolving it with a rejection constructed via `$q.reject`. + * - `notify(value)` - provides updates on the status of the promises execution. This may be called + * multiple times before the promise is either resolved or rejected. * * **Properties** * @@ -6714,17 +8943,31 @@ function $ParseProvider() { * * **Methods** * - * - `then(successCallback, errorCallback)` – regardless of when the promise was or will be resolved - * or rejected calls one of the success or error callbacks asynchronously as soon as the result - * is available. The callbacks are called with a single argument the result or rejection reason. + * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or + * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously + * as soon as the result is available. The callbacks are called with a single argument: the result + * or rejection reason. Additionally, the notify callback may be called zero or more times to + * provide a progress indication, before the promise is resolved or rejected. * * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback` or `errorCallback`. + * `successCallback`, `errorCallback`. It also notifies via the return value of the `notifyCallback` + * method. The promise can not be resolved or rejected from the notifyCallback method. + * + * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` + * + * - `finally(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#promisefinallycallback) for + * more information. * + * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as + * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to + * make your code IE8 compatible. * * # Chaining promises * - * Because calling `then` api of a promise returns a new derived promise, it is easily possible + * Because calling the `then` method of a promise returns a new derived promise, it is easily possible * to create a chain of promises: * *
@@ -6732,13 +8975,13 @@ function $ParseProvider() {
  *     return result + 1;
  *   });
  *
- *   // promiseB will be resolved immediately after promiseA is resolved and its value will be
- *   // the result of promiseA incremented by 1
+ *   // promiseB will be resolved immediately after promiseA is resolved and its value
+ *   // will be the result of promiseA incremented by 1
  * 
* * It is possible to create chains of any length and since a promise can be resolved with another * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful apis like + * the promises at any point in the chain. This makes it possible to implement powerful APIs like * $http's response interceptors. * * @@ -6753,25 +8996,25 @@ function $ParseProvider() { * you can treat promises attached to a scope as if they were the resulting values. * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains * all the important functionality needed for common async tasks. - * + * * # Testing - * + * *
  *    it('should simulate promise', inject(function($q, $rootScope) {
  *      var deferred = $q.defer();
  *      var promise = deferred.promise;
  *      var resolvedValue;
- * 
+ *
  *      promise.then(function(value) { resolvedValue = value; });
  *      expect(resolvedValue).toBeUndefined();
- * 
+ *
  *      // Simulate resolving of promise
  *      deferred.resolve(123);
  *      // Note that the 'then' function does not get called synchronously.
  *      // This is because we want the promise API to always be async, whether or not
  *      // it got called synchronously or asynchronously.
  *      expect(resolvedValue).toBeUndefined();
- * 
+ *
  *      // Propagate promise resolution to 'then' functions using $apply().
  *      $rootScope.$apply();
  *      expect(resolvedValue).toEqual(123);
@@ -6824,7 +9067,7 @@ function qFactory(nextTick, exceptionHandler) {
               var callback;
               for (var i = 0, ii = callbacks.length; i < ii; i++) {
                 callback = callbacks[i];
-                value.then(callback[0], callback[1]);
+                value.then(callback[0], callback[1], callback[2]);
               }
             });
           }
@@ -6837,35 +9080,101 @@ function qFactory(nextTick, exceptionHandler) {
       },
 
 
+      notify: function(progress) {
+        if (pending) {
+          var callbacks = pending;
+
+          if (pending.length) {
+            nextTick(function() {
+              var callback;
+              for (var i = 0, ii = callbacks.length; i < ii; i++) {
+                callback = callbacks[i];
+                callback[2](progress);
+              }
+            });
+          }
+        }
+      },
+
+
       promise: {
-        then: function(callback, errback) {
+        then: function(callback, errback, progressback) {
           var result = defer();
 
           var wrappedCallback = function(value) {
             try {
-              result.resolve((callback || defaultCallback)(value));
+              result.resolve((isFunction(callback) ? callback : defaultCallback)(value));
             } catch(e) {
-              exceptionHandler(e);
               result.reject(e);
+              exceptionHandler(e);
             }
           };
 
           var wrappedErrback = function(reason) {
             try {
-              result.resolve((errback || defaultErrback)(reason));
+              result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));
             } catch(e) {
-              exceptionHandler(e);
               result.reject(e);
+              exceptionHandler(e);
+            }
+          };
+
+          var wrappedProgressback = function(progress) {
+            try {
+              result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));
+            } catch(e) {
+              exceptionHandler(e);
             }
           };
 
           if (pending) {
-            pending.push([wrappedCallback, wrappedErrback]);
+            pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);
           } else {
-            value.then(wrappedCallback, wrappedErrback);
+            value.then(wrappedCallback, wrappedErrback, wrappedProgressback);
           }
 
           return result.promise;
+        },
+
+        "catch": function(callback) {
+          return this.then(null, callback);
+        },
+
+        "finally": 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 && isFunction(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);
+          });
         }
       }
     };
@@ -6875,7 +9184,7 @@ function qFactory(nextTick, exceptionHandler) {
 
 
   var ref = function(value) {
-    if (value && value.then) return value;
+    if (value && isFunction(value.then)) return value;
     return {
       then: function(callback) {
         var result = defer();
@@ -6928,7 +9237,12 @@ function qFactory(nextTick, exceptionHandler) {
       then: function(callback, errback) {
         var result = defer();
         nextTick(function() {
-          result.resolve((errback || defaultErrback)(reason));
+          try {
+            result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));
+          } catch(e) {
+            result.reject(e);
+            exceptionHandler(e);
+          }
         });
         return result.promise;
       }
@@ -6948,13 +9262,13 @@ function qFactory(nextTick, exceptionHandler) {
    * @param {*} value Value or a promise
    * @returns {Promise} Returns a promise of the passed value or promise
    */
-  var when = function(value, callback, errback) {
+  var when = function(value, callback, errback, progressback) {
     var result = defer(),
         done;
 
     var wrappedCallback = function(value) {
       try {
-        return (callback || defaultCallback)(value);
+        return (isFunction(callback) ? callback : defaultCallback)(value);
       } catch (e) {
         exceptionHandler(e);
         return reject(e);
@@ -6963,22 +9277,33 @@ function qFactory(nextTick, exceptionHandler) {
 
     var wrappedErrback = function(reason) {
       try {
-        return (errback || defaultErrback)(reason);
+        return (isFunction(errback) ? errback : defaultErrback)(reason);
       } catch (e) {
         exceptionHandler(e);
         return reject(e);
       }
     };
 
+    var wrappedProgressback = function(progress) {
+      try {
+        return (isFunction(progressback) ? progressback : defaultCallback)(progress);
+      } catch (e) {
+        exceptionHandler(e);
+      }
+    };
+
     nextTick(function() {
       ref(value).then(function(value) {
         if (done) return;
         done = true;
-        result.resolve(ref(value).then(wrappedCallback, wrappedErrback));
+        result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback));
       }, function(reason) {
         if (done) return;
         done = true;
         result.resolve(wrappedErrback(reason));
+      }, function(progress) {
+        if (done) return;
+        result.notify(wrappedProgressback(progress));
       });
     });
 
@@ -7004,29 +9329,30 @@ function qFactory(nextTick, exceptionHandler) {
    * Combines multiple promises into a single promise that is resolved when all of the input
    * promises are resolved.
    *
-   * @param {Array.} 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.|Object.} 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 = [];
-
-    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);
-        });
+        counter = 0,
+        results = isArray(promises) ? [] : {};
+
+    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);
     }
 
@@ -7041,504 +9367,6 @@ function qFactory(nextTick, exceptionHandler) {
   };
 }
 
-/**
- * @ngdoc object
- * @name ng.$routeProvider
- * @function
- *
- * @description
- *
- * Used for configuring routes. See {@link ng.$route $route} for an example.
- */
-function $RouteProvider(){
-  var routes = {};
-
-  /**
-   * @ngdoc method
-   * @name ng.$routeProvider#when
-   * @methodOf ng.$routeProvider
-   *
-   * @param {string} path Route path (matched against `$location.path`). If `$location.path`
-   *    contains redundant trailing slash or is missing one, the route will still match and the
-   *    `$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.
-   *
-   * @param {Object} route Mapping information to be assigned to `$route.current` on route
-   *    match.
-   *
-   *    Object properties:
-   *
-   *    - `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
-   *      {@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}.
-   *    - `resolve` - `{Object.=}` - 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
-   *      `$routeChangeSuccess` event is fired. The map object is:
-   *
-   *      - `key` – `{string}`: a name of a dependency to be injected into the controller.
-   *      - `factory` - `{string|function}`: If `string` then it is an alias for a service.
-   *        Otherwise if function, then it is {@link api/AUTO.$injector#invoke injected}
-   *        and the return value is treated as the dependency. If the result is a promise, it is resolved
-   *        before its value is injected into the controller.
-   *
-   *    - `redirectTo` – {(string|function())=} – value to update
-   *      {@link ng.$location $location} path with and trigger route redirection.
-   *
-   *      If `redirectTo` is a function, it will be called with the following parameters:
-   *
-   *      - `{Object.}` - route parameters extracted from the current
-   *        `$location.path()` by applying the current route templateUrl.
-   *      - `{string}` - current `$location.path()`
-   *      - `{Object}` - current `$location.search()`
-   *
-   *      The custom `redirectTo` function is expected to return a string which will be used
-   *      to update `$location.path()` and `$location.search()`.
-   *
-   *    - `[reloadOnSearch=true]` - {boolean=} - reload route when only $location.search()
-   *    changes.
-   *
-   *      If the option is set to `false` and url in the browser changes, then
-   *      `$routeUpdate` event is broadcasted on the root scope.
-   *
-   * @returns {Object} self
-   *
-   * @description
-   * Adds a new route definition to the `$route` service.
-   */
-  this.when = function(path, route) {
-    routes[path] = extend({reloadOnSearch: true}, route);
-
-    // create redirection for trailing slashes
-    if (path) {
-      var redirectPath = (path[path.length-1] == '/')
-          ? path.substr(0, path.length-1)
-          : path +'/';
-
-      routes[redirectPath] = {redirectTo: path};
-    }
-
-    return this;
-  };
-
-  /**
-   * @ngdoc method
-   * @name ng.$routeProvider#otherwise
-   * @methodOf ng.$routeProvider
-   *
-   * @description
-   * Sets route definition that will be used on route change when no other route definition
-   * is matched.
-   *
-   * @param {Object} params Mapping information to be assigned to `$route.current`.
-   * @returns {Object} self
-   */
-  this.otherwise = function(params) {
-    this.when(null, params);
-    return this;
-  };
-
-
-  this.$get = ['$rootScope', '$location', '$routeParams', '$q', '$injector', '$http', '$templateCache',
-      function( $rootScope,   $location,   $routeParams,   $q,   $injector,   $http,   $templateCache) {
-
-    /**
-     * @ngdoc object
-     * @name ng.$route
-     * @requires $location
-     * @requires $routeParams
-     *
-     * @property {Object} current Reference to the current route definition.
-     * The route definition contains:
-     *
-     *   - `controller`: The controller constructor as define in route definition.
-     *   - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for
-     *     controller instantiation. The `locals` contain
-     *     the resolved values of the `resolve` map. Additionally the `locals` also contain:
-     *
-     *     - `$scope` - The current route scope.
-     *     - `$template` - The current route template HTML.
-     *
-     * @property {Array.} routes Array of all configured routes.
-     *
-     * @description
-     * Is used for deep-linking URLs to controllers and views (HTML partials).
-     * It watches `$location.url()` and tries to map the path to an existing route definition.
-     *
-     * You can define routes through {@link ng.$routeProvider $routeProvider}'s API.
-     *
-     * The `$route` service is typically used in conjunction with {@link ng.directive:ngView ngView}
-     * directive and the {@link ng.$routeParams $routeParams} service.
-     *
-     * @example
-       This example shows how changing the URL hash causes the `$route` to match a route against the
-       URL, and the `ngView` pulls in the partial.
-
-       Note that this example is using {@link ng.directive:script inlined templates}
-       to get it working on jsfiddle as well.
-
-     
-       
-         
- Choose: - Moby | - Moby: Ch1 | - Gatsby | - Gatsby: Ch4 | - Scarlet Letter
- -
-
- -
$location.path() = {{$location.path()}}
-
$route.current.templateUrl = {{$route.current.templateUrl}}
-
$route.current.params = {{$route.current.params}}
-
$route.current.scope.name = {{$route.current.scope.name}}
-
$routeParams = {{$routeParams}}
-
-
- - - controller: {{name}}
- Book Id: {{params.bookId}}
-
- - - controller: {{name}}
- Book Id: {{params.bookId}}
- Chapter Id: {{params.chapterId}} -
- - - angular.module('ngView', [], function($routeProvider, $locationProvider) { - $routeProvider.when('/Book/:bookId', { - templateUrl: 'book.html', - controller: BookCntl, - resolve: { - // I will cause a 1 second delay - delay: function($q, $timeout) { - var delay = $q.defer(); - $timeout(delay.resolve, 1000); - return delay.promise; - } - } - }); - $routeProvider.when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: ChapterCntl - }); - - // 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 BookCntl($scope, $routeParams) { - $scope.name = "BookCntl"; - $scope.params = $routeParams; - } - - function ChapterCntl($scope, $routeParams) { - $scope.name = "ChapterCntl"; - $scope.params = $routeParams; - } - - - - it('should load and compile correct template', function() { - element('a:contains("Moby: Ch1")').click(); - var content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: ChapterCntl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element('a:contains("Scarlet")').click(); - sleep(2); // promises are not part of scenario waiting - content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: BookCntl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - -
- */ - - /** - * @ngdoc event - * @name ng.$route#$routeChangeStart - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * Broadcasted before a route change. At this point the route services starts - * resolving all of the dependencies needed for the route change to occurs. - * Typically this involves fetching the view template as well as any dependencies - * defined in `resolve` route property. Once all of the dependencies are resolved - * `$routeChangeSuccess` is fired. - * - * @param {Route} next Future route information. - * @param {Route} current Current route information. - */ - - /** - * @ngdoc event - * @name ng.$route#$routeChangeSuccess - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * Broadcasted after a route dependencies are resolved. - * {@link ng.directive:ngView ngView} listens for the directive - * to instantiate the controller and render the view. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} current Current route information. - * @param {Route|Undefined} previous Previous route information, or undefined if current is first route entered. - */ - - /** - * @ngdoc event - * @name ng.$route#$routeChangeError - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * Broadcasted if any of the resolve promises are rejected. - * - * @param {Route} current Current route information. - * @param {Route} previous Previous route information. - * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. - */ - - /** - * @ngdoc event - * @name ng.$route#$routeUpdate - * @eventOf ng.$route - * @eventType broadcast on root scope - * @description - * - * The `reloadOnSearch` property has been set to false, and we are reusing the same - * instance of the Controller. - */ - - var forceReload = false, - $route = { - routes: routes, - - /** - * @ngdoc method - * @name ng.$route#reload - * @methodOf ng.$route - * - * @description - * Causes `$route` service to reload the current route even if - * {@link ng.$location $location} hasn't changed. - * - * As a result of that, {@link ng.directive:ngView ngView} - * creates new scope, reinstantiates the controller. - */ - reload: function() { - forceReload = true; - $rootScope.$evalAsync(updateRoute); - } - }; - - $rootScope.$on('$locationChangeSuccess', updateRoute); - - return $route; - - ///////////////////////////////////////////////////// - - /** - * @param on {string} current url - * @param when {string} route when template to match the url against - * @return {?Object} - */ - function switchRouteMatcher(on, when) { - // 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, "\\$&") + '$'; - var regex = '', - params = [], - dst = {}; - - var re = /:(\w+)/g, - paramMatch, - lastMatchedIndex = 0; - - while ((paramMatch = re.exec(when)) !== null) { - // 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]); - lastMatchedIndex = re.lastIndex; - } - // Append trailing path part. - regex += when.substr(lastMatchedIndex); - - var match = on.match(new RegExp(regex)); - if (match) { - forEach(params, function(name, index) { - dst[name] = match[index + 1]; - }); - } - return match ? dst : null; - } - - function updateRoute() { - var next = parseRoute(), - last = $route.current; - - if (next && last && next.$$route === last.$$route - && equals(next.pathParams, last.pathParams) && !next.reloadOnSearch && !forceReload) { - last.params = next.params; - copy(last.params, $routeParams); - $rootScope.$broadcast('$routeUpdate', last); - } else if (next || last) { - forceReload = false; - $rootScope.$broadcast('$routeChangeStart', next, last); - $route.current = next; - if (next) { - if (next.redirectTo) { - if (isString(next.redirectTo)) { - $location.path(interpolate(next.redirectTo, next.params)).search(next.params) - .replace(); - } else { - $location.url(https://github.com/next.redirectTo(next.pathParams,%20$location.path(), $location.search())) - .replace(); - } - } - } - - $q.when(next). - then(function() { - if (next) { - var keys = [], - values = [], - template; - - forEach(next.resolve || {}, function(value, key) { - keys.push(key); - values.push(isString(value) ? $injector.get(value) : $injector.invoke(value)); - }); - if (isDefined(template = next.template)) { - } else if (isDefined(template = next.templateUrl)) { - template = $http.get(template, {cache: $templateCache}). - then(function(response) { return response.data; }); - } - if (isDefined(template)) { - keys.push('$template'); - values.push(template); - } - return $q.all(values).then(function(values) { - var locals = {}; - forEach(values, function(value, index) { - locals[keys[index]] = value; - }); - return locals; - }); - } - }). - // after route change - then(function(locals) { - if (next == $route.current) { - if (next) { - next.locals = locals; - copy(next.params, $routeParams); - } - $rootScope.$broadcast('$routeChangeSuccess', next, last); - } - }, function(error) { - if (next == $route.current) { - $rootScope.$broadcast('$routeChangeError', next, last, error); - } - }); - } - } - - - /** - * @returns the current active route, by matching it against the URL - */ - function parseRoute() { - // Match a route - var params, match; - forEach(routes, function(route, path) { - if (!match && (params = switchRouteMatcher($location.path(), path))) { - match = inherit(route, { - params: extend({}, $location.search(), params), - pathParams: params}); - match.$$route = route; - } - }); - // No route matched; fallback to "otherwise" route - return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); - } - - /** - * @returns interpolation of the redirect path with the parametrs - */ - function interpolate(string, params) { - var result = []; - forEach((string||'').split(':'), function(segment, i) { - if (i == 0) { - result.push(segment); - } else { - var segmentMatch = segment.match(/(\w+)(.*)/); - var key = segmentMatch[1]; - result.push(params[key]); - result.push(segmentMatch[2] || ''); - delete params[key]; - } - }); - return result.join(''); - } - }]; -} - -/** - * @ngdoc object - * @name ng.$routeParams - * @requires $route - * - * @description - * Current set of route parameters. The route parameters are a combination of the - * {@link ng.$location $location} `search()`, and `path()`. The `path` parameters - * are extracted when the {@link ng.$route $route} path is matched. - * - * In case of parameter name collision, `path` params take precedence over `search` params. - * - * The service guarantees that the identity of the `$routeParams` object will remain unchanged - * (but its properties will likely change) even when a route change occurs. - * - * @example - *
- *  // Given:
- *  // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
- *  // Route: /Chapter/:chapterId/Section/:sectionId
- *  //
- *  // Then
- *  $routeParams ==> {chapterId:1, sectionId:2, search:'moby'}
- * 
- */ -function $RouteParamsProvider() { - this.$get = valueFn({}); -} - /** * DESIGN NOTES * @@ -7599,6 +9427,7 @@ function $RouteParamsProvider() { */ function $RootScopeProvider(){ var TTL = 10; + var $rootScopeMinErr = minErr('$rootScope'); this.digestTtl = function(value) { if (arguments.length) { @@ -7607,8 +9436,8 @@ function $RootScopeProvider(){ return TTL; }; - this.$get = ['$injector', '$exceptionHandler', '$parse', - function( $injector, $exceptionHandler, $parse) { + this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', + function( $injector, $exceptionHandler, $parse, $browser) { /** * @ngdoc function @@ -7622,25 +9451,7 @@ function $RootScopeProvider(){ * * Here is a simple scope snippet to show how you can interact with the scope. *
-        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!');
-        });
+     * 
      * 
* * # Inheritance @@ -7675,6 +9486,7 @@ function $RootScopeProvider(){ this['this'] = this.$root = this; this.$$destroyed = false; this.$$asyncQueue = []; + this.$$postDigestQueue = []; this.$$listeners = {}; this.$$isolateBindings = {}; } @@ -7689,6 +9501,7 @@ function $RootScopeProvider(){ Scope.prototype = { + constructor: Scope, /** * @ngdoc function * @name ng.$rootScope.Scope#$new @@ -7718,13 +9531,12 @@ function $RootScopeProvider(){ var Child, child; - if (isFunction(isolate)) { - // TODO: remove at some point - throw Error('API-CHANGE: Use $controller to instantiate controllers.'); - } if (isolate) { child = new Scope(); child.$root = this.$root; + // ensure that there is just one async queue per $rootScope and it's children + child.$$asyncQueue = this.$$asyncQueue; + child.$$postDigestQueue = this.$$postDigestQueue; } else { Child = function() {}; // should be anonymous; This is so that when the minifier munges // the name it does not become random set of chars. These will then show up as class @@ -7736,7 +9548,6 @@ function $RootScopeProvider(){ 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 +9651,14 @@ function $RootScopeProvider(){ 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,6 +9671,147 @@ function $RootScopeProvider(){ }; }, + + /** + * @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 + *
+          $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);
+       * 
+ * + * + * @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 @@ -7903,7 +9863,8 @@ function $RootScopeProvider(){ $digest: function() { var watch, value, last, watchers, - asyncQueue, + asyncQueue = this.$$asyncQueue, + postDigestQueue = this.$$postDigestQueue, length, dirty, ttl = TTL, next, current, target = this, @@ -7912,18 +9873,19 @@ function $RootScopeProvider(){ 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; @@ -7932,7 +9894,7 @@ function $RootScopeProvider(){ watch = watchers[length]; // Most common watches are on primitives, in which case we can short // circuit it with === operator, only when === fails do we use .equals - if ((value = watch.get(current)) !== (last = watch.last) && + if (watch && (value = watch.get(current)) !== (last = watch.last) && !(watch.eq ? equals(value, last) : (typeof value == 'number' && typeof last == 'number' @@ -7968,12 +9930,21 @@ function $RootScopeProvider(){ if(dirty && !(ttl--)) { clearPhase(); - throw Error(TTL + ' $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: ' + toJson(watchLog)); + throw $rootScopeMinErr('infdig', + '{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}', + TTL, toJson(watchLog)); } } while (dirty || asyncQueue.length); clearPhase(); + + while(postDigestQueue.length) { + try { + postDigestQueue.shift()(); + } catch (e) { + $exceptionHandler(e); + } + } }, @@ -7985,6 +9956,9 @@ function $RootScopeProvider(){ * * @description * Broadcasted when a scope and its children are being destroyed. + * + * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to + * clean up DOM bindings before an element is removed from the DOM. */ /** @@ -8006,6 +9980,9 @@ function $RootScopeProvider(){ * Just before a scope is destroyed a `$destroy` event is broadcasted on this scope. * Application code can register a `$destroy` event handler that will give it chance to * perform any necessary cleanup. + * + * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to + * clean up DOM bindings before an element is removed from the DOM. */ $destroy: function() { // we can't destroy the root scope or a scope that has been already destroyed @@ -8068,13 +10045,16 @@ function $RootScopeProvider(){ * * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only that: * - * - it will execute in the current script execution context (before any DOM rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. + * - it will execute after the function that schedule the evaluation is done running (preferably before DOM rendering). + * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after `expression` execution. * * Any exceptions from the execution of the expression are forwarded to the * {@link ng.$exceptionHandler $exceptionHandler} service. * + * __Note:__ if this function is called outside of `$digest` cycle, a new $digest cycle will be scheduled. + * It is however encouraged to always call code that changes the model from withing an `$apply` call. + * That includes code evaluated via `$evalAsync`. + * * @param {(string|function())=} expression An angular expression to be executed. * * - `string`: execute using the rules as defined in {@link guide/expression expression}. @@ -8082,9 +10062,23 @@ function $RootScopeProvider(){ * */ $evalAsync: function(expr) { + // if we are outside of an $digest loop and this is the first time we are scheduling async task also schedule + // async auto-flush + if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) { + $browser.defer(function() { + if ($rootScope.$$asyncQueue.length) { + $rootScope.$digest(); + } + }); + } + this.$$asyncQueue.push(expr); }, + $$postDigest : function(expr) { + this.$$postDigestQueue.push(expr); + }, + /** * @ngdoc function * @name ng.$rootScope.Scope#$apply @@ -8267,7 +10261,7 @@ function $RootScopeProvider(){ * 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. @@ -8331,7 +10325,7 @@ function $RootScopeProvider(){ function beginPhase(phase) { if ($rootScope.$$phase) { - throw Error($rootScope.$$phase + ' already in progress'); + throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); } $rootScope.$$phase = phase; @@ -8355,1080 +10349,1036 @@ function $RootScopeProvider(){ }]; } -/** - * !!! This is an undocumented "private" service !!! - * - * @name ng.$sniffer - * @requires $window - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} hashchange Does the browser support hashchange event ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', function($window) { - var eventSupport = {}, - android = int((/android (\d+)/.exec(lowercase($window.navigator.userAgent)) || [])[1]); - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - history: !!($window.history && $window.history.pushState && !(android < 4)), - hashchange: 'onhashchange' in $window && - // IE8 compatible mode lies - (!$window.document.documentMode || $window.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 - // when cut operation is performed. - if (event == 'input' && msie == 9) return false; +var $sceMinErr = minErr('$sce'); - if (isUndefined(eventSupport[event])) { - var divElm = $window.document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } +var SCE_CONTEXTS = { + HTML: 'html', + CSS: 'css', + URL: 'url', + // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a + // url. (e.g. ng-include, script src, templateUrl) + RESOURCE_URL: 'resourceUrl', + JS: 'js' +}; - return eventSupport[event]; - }, - // TODO(i): currently there is no way to feature detect CSP without triggering alerts - csp: false - }; - }]; -} /** - * @ngdoc object - * @name ng.$window + * @ngdoc service + * @name ng.$sceDelegate + * @function * * @description - * 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. - * - * All expressions are evaluated with respect to current scope so they don't - * suffer from window globality. - * - * @example - - - -
- - -
-
- - it('should display the greeting in the input box', function() { - input('greeting').enter('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - -
- */ -function $WindowProvider(){ - this.$get = valueFn(window); -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = {}, key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: + * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict + * Contextual Escaping (SCE)} services to AngularJS. * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - return headersObj[lowercase(name)] || null; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions + * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of + * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is + * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to + * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things + * work because `$sce` delegates to `$sceDelegate` for these operations. * - * This function is used for both request and response transforming + * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. * - * @param {*} data Data to transform. - * @param {function(string=)} headers Http headers getter fn. - * @param {(function|Array.)} fns Function or an array of functions. - * @returns {*} Transformed data. + * The default instance of `$sceDelegate` should work out of the box with little pain. While you + * can override it completely to change the behavior of `$sce`, the common case would + * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting + * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as + * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist + * $sceDelegateProvider.resourceUrlWhitelist} and {@link + * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} */ -function transformData(data, headers, fns) { - if (isFunction(fns)) - return fns(data, headers); - - forEach(fns, function(fn) { - data = fn(data, headers); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -function $HttpProvider() { - var JSON_START = /^\s*(\[|\{[^\{])/, - JSON_END = /[\}\]]\s*$/, - PROTECTION_PREFIX = /^\)\]\}',?\n/; - - var $config = this.defaults = { - // transform incoming response data - transformResponse: [function(data) { - if (isString(data)) { - // strip json vulnerability protection prefix - data = data.replace(PROTECTION_PREFIX, ''); - if (JSON_START.test(data) && JSON_END.test(data)) - data = fromJson(data, true); - } - return data; - }], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*', - 'X-Requested-With': 'XMLHttpRequest' - }, - post: {'Content-Type': 'application/json;charset=utf-8'}, - put: {'Content-Type': 'application/json;charset=utf-8'} - } - }; - - var providerResponseInterceptors = this.responseInterceptors = []; - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { +/** + * @ngdoc object + * @name ng.$sceDelegateProvider + * @description + * + * The $sceDelegateProvider provider allows developers to configure the {@link ng.$sceDelegate + * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure + * that URLs used for sourcing Angular templates are safe. Refer {@link + * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and + * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} + * + * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. + */ - var defaultCache = $cacheFactory('$http'), - responseInterceptors = []; +function $SceDelegateProvider() { + this.SCE_CONTEXTS = SCE_CONTEXTS; - forEach(providerResponseInterceptors, function(interceptor) { - responseInterceptors.push( - isString(interceptor) - ? $injector.get(interceptor) - : $injector.invoke(interceptor) - ); - }); + // Resource URLs can also be trusted by policy. + var resourceUrlWhitelist = ['self'], + resourceUrlBlacklist = []; + /** + * @ngdoc function + * @name ng.sceDelegateProvider#resourceUrlWhitelist + * @methodOf ng.$sceDelegateProvider + * @function + * + * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value + * provided. This must be an array. + * + * Each element of this array must either be a regex or the special string `'self'`. + * + * When a regex is used, it is matched against the normalized / absolute URL of the resource + * being tested. + * + * The **special string** `'self'` can be used to match against all URLs of the same domain as the + * application document with the same protocol (allows sourcing https resources from http documents.) + * + * Please note that **an empty whitelist array will block all URLs**! + * + * @return {Array} the currently set whitelist array. + * + * The **default value** when no whitelist has been explicitly set is `['self']`. + * + * @description + * Sets/Gets the whitelist of trusted resource URLs. + */ + this.resourceUrlWhitelist = function (value) { + if (arguments.length) { + resourceUrlWhitelist = value; + } + return resourceUrlWhitelist; + }; - /** - * @ngdoc function - * @name ng.$http - * @requires $httpBackend - * @requires $browser - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's {@link https://developer.mozilla.org/en/xmlhttprequest - * XMLHttpRequest} object or via {@link http://en.wikipedia.org/wiki/JSONP JSONP}. - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * # General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - *
-     *   $http({method: 'GET', url: '/someUrl'}).
-     *     success(function(data, status, headers, config) {
-     *       // this callback will be called asynchronously
-     *       // when the response is available
-     *     }).
-     *     error(function(data, status, headers, config) {
-     *       // called asynchronously if an error occurs
-     *       // or server returns response with an error status.
-     *     });
-     * 
- * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * # Shortcut methods - * - * Since all invocations of the $http service require passing in an HTTP method and URL, and - * POST/PUT requests require request data to be provided as well, shortcut methods - * were created: - * - *
-     *   $http.get('/someUrl').success(successCallback);
-     *   $http.post('/someUrl', data).success(successCallback);
-     * 
- * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - * - * # Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$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) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get['My-Header']='value'`. - * - * Additionally, the defaults can be set at runtime via the `$http.defaults` object in the same - * fashion. - * - * - * # Transforming Requests and Responses - * - * Both requests and responses can be transformed using transform functions. By default, Angular - * applies these transformations: - * - * Request transformations: - * - * - If the `data` property of the request configuration object contains an object, serialize it into - * JSON format. - * - * Response transformations: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * To globally augment or override the default transforms, modify the `$httpProvider.defaults.transformRequest` and - * `$httpProvider.defaults.transformResponse` properties. These properties are by default an - * array of transform functions, which allows you to `push` or `unshift` a new transformation function into the - * transformation chain. You can also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. - * - * Similarly, to locally override the request/response transforms, augment the `transformRequest` and/or - * `transformResponse` properties of the configuration object passed into `$http`. - * - * - * # Caching - * - * To enable caching, set the configuration property `cache` to `true`. When the cache is - * enabled, `$http` stores the response from the server in local cache. Next time the - * response is served from the cache without sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * 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. - * - * - * # Response 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 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 - * initiated these requests. The response interceptors leverage the {@link ng.$q - * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing. - * - * The interceptors are service factories that are registered with the $httpProvider by - * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor — a function that - * takes a {@link ng.$q promise} and returns the original or a new promise. - * - *
-     *   // register the interceptor as a service
-     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
-     *     return function(promise) {
-     *       return promise.then(function(response) {
-     *         // do something on success
-     *       }, function(response) {
-     *         // do something on error
-     *         if (canRecover(response)) {
-     *           return responseOrNewPromise
-     *         }
-     *         return $q.reject(response);
-     *       });
-     *     }
-     *   });
-     *
-     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');
-     *
-     *
-     *   // register the interceptor via an anonymous factory
-     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {
-     *     return function(promise) {
-     *       // same as above
-     *     }
-     *   });
-     * 
- * - * - * # Security Considerations - * - * When designing web applications, consider security threats from: - * - * - {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx - * JSON vulnerability} - * - {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ## JSON Vulnerability Protection - * - * A {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx - * JSON vulnerability} allows third party website to turn your JSON resource URL into - * {@link http://en.wikipedia.org/wiki/JSONP JSONP} request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - *
-     * ['one','two']
-     * 
- * - * which is vulnerable to attack, your server can return: - *
-     * )]}',
-     * ['one','two']
-     * 
- * - * Angular will strip the prefix, before processing the JSON. - * - * - * ## Cross Site Request Forgery (XSRF) Protection - * - * {@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. - * - * 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 - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from making - * 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. - * + /** + * @ngdoc function + * @name ng.sceDelegateProvider#resourceUrlBlacklist + * @methodOf ng.$sceDelegateProvider + * @function + * + * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value + * provided. This must be an array. + * + * Each element of this array must either be a regex or the special string `'self'` (see + * `resourceUrlWhitelist` for meaning - it's only really useful there.) + * + * When a regex is used, it is matched against the normalized / absolute URL of the resource + * being tested. + * + * The typical usage for the blacklist is to **block [open redirects](http://cwe.mitre.org/data/definitions/601.html)** + * served by your domain as these would otherwise be trusted but actually return content from the redirected + * domain. + * + * Finally, **the blacklist overrides the whitelist** and has the final say. + * + * @return {Array} the currently set blacklist array. + * + * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there is + * no blacklist.) + * + * @description + * Sets/Gets the blacklist of trusted resource URLs. + */ + + this.resourceUrlBlacklist = function (value) { + if (arguments.length) { + resourceUrlBlacklist = value; + } + return resourceUrlBlacklist; + }; + + // Helper functions for matching resource urls by policy. + function isCompatibleProtocol(documentProtocol, resourceProtocol) { + return ((documentProtocol === resourceProtocol) || + (documentProtocol === "http:" && resourceProtocol === "https:")); + } + + this.$get = ['$log', '$document', '$injector', '$$urlUtils', function( + $log, $document, $injector, $$urlUtils) { + + var htmlSanitizer = function htmlSanitizer(html) { + throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); + }; + + if ($injector.has('$sanitize')) { + htmlSanitizer = $injector.get('$sanitize'); + } + + + function matchUrl(matcher, parsedUrl) { + if (matcher === 'self') { + return $$urlUtils.isSameOrigin(parsedUrl); + } else { + return !!parsedUrl.href.match(matcher); + } + } + + function isResourceUrlAllowedByPolicy(url) { + var parsedUrl = $$urlUtils.resolve(url.toString(), true); + var i, n, allowed = false; + // Ensure that at least one item from the whitelist allows this url. + for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { + if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { + allowed = true; + break; + } + } + if (allowed) { + // Ensure that no item from the blacklist blocked this url. + for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { + if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { + allowed = false; + break; + } + } + } + return allowed; + } + + function generateHolderType(base) { + var holderType = function TrustedValueHolderType(trustedValue) { + this.$$unwrapTrustedValue = function() { + return trustedValue; + }; + }; + if (base) { + holderType.prototype = new base(); + } + holderType.prototype.valueOf = function sceValueOf() { + return this.$$unwrapTrustedValue(); + } + holderType.prototype.toString = function sceToString() { + return this.$$unwrapTrustedValue().toString(); + } + return holderType; + } + + var trustedValueHolderBase = generateHolderType(), + byType = {}; + + byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); + byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); + + /** + * @ngdoc method + * @name ng.$sceDelegate#trustAs + * @methodOf ng.$sceDelegate * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: + * @description + * Returns an object that is trusted by angular for use in specified strict + * contextual escaping contexts (such as ng-html-bind-unsafe, ng-include, any src + * attribute interpolation, any dom event binding attribute interpolation + * such as for onclick, etc.) that uses the provided value. + * See {@link ng.$sce $sce} for enabling strict contextual escaping. * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.}` – Map of strings or objects which will be turned to - * `?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. - * - **transformRequest** – `{function(data, headersGetter)|Array.}` – - * 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.}` – - * 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}` – timeout in milliseconds. - * - **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. + * @param {string} type The kind of context in which this value is safe for use. e.g. url, + * resourceUrl, html, js and css. + * @param {*} value The value that that should be considered trusted/safe. + * @returns {*} A value that can be used to stand in for the provided `value` in places + * where Angular expects a $sce.trustAs() return value. + */ + function trustAs(type, trustedValue) { + var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); + if (!constructor) { + throw $sceMinErr('icontext', 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', + type, trustedValue); + } + if (trustedValue === null || trustedValue === undefined || trustedValue === '') { + return trustedValue; + } + // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting + // mutable objects, we ensure here that the value passed in is actually a string. + if (typeof trustedValue !== 'string') { + throw $sceMinErr('itype', + 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', + type); + } + return new constructor(trustedValue); + } + + /** + * @ngdoc method + * @name ng.$sceDelegate#valueOf + * @methodOf ng.$sceDelegate * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: + * @description + * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link + * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. * - * - **data** – `{string|Object}` – The response body transformed with the transform functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. + * If the passed parameter is not a value that had been returned by {@link + * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. * - * @property {Array.} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. + * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} + * call or anything else. + * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns `value` + * unchanged. + */ + function valueOf(maybeTrusted) { + if (maybeTrusted instanceof trustedValueHolderBase) { + return maybeTrusted.$$unwrapTrustedValue(); + } else { + return maybeTrusted; + } + } + + /** + * @ngdoc method + * @name ng.$sceDelegate#getTrusted + * @methodOf ng.$sceDelegate * + * @description + * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and returns the + * originally supplied value if the queried context type is a supertype of the created type. If + * this condition isn't satisfied, throws an exception. * - * @example - - -
- - -
- - - -
http status code: {{status}}
-
http response data: {{data}}
-
-
- - function FetchCtrl($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; + * @param {string} type The kind of context in which this value is to be used. + * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} call. + * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs + * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. + */ + function getTrusted(type, maybeTrusted) { + if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { + return maybeTrusted; + } + var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); + if (constructor && maybeTrusted instanceof constructor) { + return maybeTrusted.$$unwrapTrustedValue(); + } + // If we get here, then we may only take one of two actions. + // 1. sanitize the value for the requested type, or + // 2. throw an exception. + if (type === SCE_CONTEXTS.RESOURCE_URL) { + if (isResourceUrlAllowedByPolicy(maybeTrusted)) { + return maybeTrusted; + } else { + throw $sceMinErr('insecurl', + 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', maybeTrusted.toString()); + } + } else if (type === SCE_CONTEXTS.HTML) { + return htmlSanitizer(maybeTrusted); + } + throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); + } - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; + return { trustAs: trustAs, + getTrusted: getTrusted, + valueOf: valueOf }; + }]; +} - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - } - - - Hello, $http! - - - it('should make an xhr GET request', function() { - element(':button:contains("Sample GET")').click(); - element(':button:contains("fetch")').click(); - expect(binding('status')).toBe('200'); - expect(binding('data')).toMatch(/Hello, \$http!/); - }); +/** + * @ngdoc object + * @name ng.$sceProvider + * @description + * + * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. + * - enable/disable Strict Contextual Escaping (SCE) in a module + * - override the default implementation with a custom delegate + * + * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. + */ - it('should make a JSONP request to angularjs.org', function() { - element(':button:contains("Sample JSONP")').click(); - element(':button:contains("fetch")').click(); - expect(binding('status')).toBe('200'); - expect(binding('data')).toMatch(/Super Hero!/); - }); +/** + * @ngdoc service + * @name ng.$sce + * @function + * + * @description + * + * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. + * + * # Strict Contextual Escaping + * + * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain + * contexts to result in a value that is marked as safe to use for that context One example of such + * a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer to these + * contexts as privileged or SCE contexts. + * + * As of version 1.2, Angular ships with SCE enabled by default. + * + * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows + * one to execute arbitrary javascript by the use of the expression() syntax. Refer + * to learn more about them. + * You can ensure your document is in standards mode and not quirks mode by adding `` + * to the top of your HTML document. + * + * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for + * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. + * + * Here's an example of a binding in a privileged context: + * + *
+ *     
+ *     
+ *
+ * + * Notice that `ng-bind-html` is bound to `{{userHtml}}` controlled by the user. With SCE + * disabled, this application allows the user to render arbitrary HTML into the DIV. + * In a more realistic example, one may be rendering user comments, blog articles, etc. via + * bindings. (HTML is just one example of a context where rendering user controlled input creates + * security vulnerabilities.) + * + * For the case of HTML, you might use a library, either on the client side, or on the server side, + * to sanitize unsafe HTML before binding to the value and rendering it in the document. + * + * How would you ensure that every place that used these types of bindings was bound to a value that + * was sanitized by your library (or returned as safe for rendering by your server?) How can you + * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some + * properties/fields and forgot to update the binding to the sanitized value? + * + * To be secure by default, you want to ensure that any such bindings are disallowed unless you can + * determine that something explicitly says it's safe to use a value for binding in that + * context. You can then audit your code (a simple grep would do) to ensure that this is only done + * for those values that you can easily tell are safe - because they were received from your server, + * sanitized by your library, etc. You can organize your codebase to help with this - perhaps + * allowing only the files in a specific directory to do this. Ensuring that the internal API + * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. + * + * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} (and shorthand + * methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to obtain values that will be + * accepted by SCE / privileged contexts. + * + * + * ## How does it work? + * + * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted + * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link + * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the + * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. + * + * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link + * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly + * simplified): + * + *
+ *   var ngBindHtmlDirective = ['$sce', function($sce) {
+ *     return function(scope, element, attr) {
+ *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
+ *         element.html(value || '');
+ *       });
+ *     };
+ *   }];
+ * 
+ * + * ## Impact on loading templates + * + * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as + * `templateUrl`'s specified by {@link guide/directive directives}. + * + * By default, Angular only loads templates from the same domain and protocol as the application + * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or + * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist + * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. + * + * *Please note*: + * The browser's + * {@link https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest + * Same Origin Policy} and {@link http://www.w3.org/TR/cors/ Cross-Origin Resource Sharing (CORS)} + * policy apply in addition to this and may further restrict whether the template is successfully + * loaded. This means that without the right CORS policy, loading templates from a different domain + * won't work on all browsers. Also, loading templates from `file://` URL does not work on some + * browsers. + * + * ## This feels like too much overhead for the developer? + * + * It's important to remember that SCE only applies to interpolation expressions. + * + * If your expressions are constant literals, they're automatically trusted and you don't need to + * call `$sce.trustAs` on them. (e.g. + * `
`) just works. + * + * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them + * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. + * + * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load + * templates in `ng-include` from your application's domain without having to even know about SCE. + * It blocks loading templates from other domains or loading templates over http from an https + * served document. You can change these by setting your own custom {@link + * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link + * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. + * + * This significantly reduces the overhead. It is far easier to pay the small overhead and have an + * application that's secure and can be audited to verify that with much more ease than bolting + * security onto an application later. + * + * ## What trusted context types are supported? + * + * | Context | Notes | + * |---------------------|----------------| + * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | + * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | + * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | + * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | + * + * ## Show me an example. + * + * + * + * @example + + +
+

+ User comments
+ By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when $sanitize is available. If $sanitize isn't available, this results in an error instead of an exploit. +
+
+ {{userComment.name}}: + +
+
+
+
+
- it('should make JSONP request to invalid URL and invoke the error handler', - function() { - element(':button:contains("Invalid JSONP")').click(); - element(':button:contains("fetch")').click(); - expect(binding('status')).toBe('0'); - expect(binding('data')).toBe('Request failed'); - }); -
-
- */ - function $http(config) { - config.method = uppercase(config.method); + + var mySceApp = angular.module('mySceApp', ['ngSanitize']); - 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; + mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { + var self = this; + $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { + self.userComments = userComments; + }); + self.explicitlyTrustedHtml = $sce.trustAsHtml( + 'Hover over this text.'); + }); + - // strip content-type if data is undefined - if (isUndefined(config.data)) { - delete reqHeaders['Content-Type']; + + [ + { "name": "Alice", + "htmlComment": "Is anyone reading this?" + }, + { "name": "Bob", + "htmlComment": "Yes! Am I the only other one?" } + ] + - // send request - promise = sendReq(config, reqData, reqHeaders); - - - // transform future response - promise = promise.then(transformResponse, transformResponse); - - // apply interceptors - forEach(responseInterceptors, function(interceptor) { - promise = interceptor(promise); + + describe('SCE doc demo', function() { + it('should sanitize untrusted values', function() { + expect(element('.htmlComment').html()).toBe('Is anyone reading this?'); }); + it('should NOT sanitize explicitly trusted values', function() { + expect(element('#explicitlyTrustedHtml').html()).toBe( + 'Hover over this text.'); + }); + }); + + + * + * + * + * ## Can I disable SCE completely? + * + * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits + * for little coding overhead. It will be much harder to take an SCE disabled application and + * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE + * for cases where you have a lot of existing code that was written before SCE was introduced and + * you're migrating them a module at a time. + * + * That said, here's how you can completely disable SCE: + * + *
+ *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
+ *     // Completely disable SCE.  For demonstration purposes only!
+ *     // Do not use in new projects.
+ *     $sceProvider.enabled(false);
+ *   });
+ * 
+ * + */ - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; +function $SceProvider() { + var enabled = true; - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; + /** + * @ngdoc function + * @name ng.sceProvider#enabled + * @methodOf ng.$sceProvider + * @function + * + * @param {boolean=} value If provided, then enables/disables SCE. + * @return {boolean} true if SCE is enabled, false otherwise. + * + * @description + * Enables/disables SCE and returns the current value. + */ + this.enabled = function (value) { + if (arguments.length) { + enabled = !!value; + } + return enabled; + }; - return promise; - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response, { - data: transformData(response.data, response.headers, respTransformFn) - }); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); + /* Design notes on the default implementation for SCE. + * + * The API contract for the SCE delegate + * ------------------------------------- + * The SCE delegate object must provide the following 3 methods: + * + * - trustAs(contextEnum, value) + * This method is used to tell the SCE service that the provided value is OK to use in the + * contexts specified by contextEnum. It must return an object that will be accepted by + * getTrusted() for a compatible contextEnum and return this value. + * + * - valueOf(value) + * For values that were not produced by trustAs(), return them as is. For values that were + * produced by trustAs(), return the corresponding input value to trustAs. Basically, if + * trustAs is wrapping the given values into some type, this operation unwraps it when given + * such a value. + * + * - getTrusted(contextEnum, value) + * This function should return the a value that is safe to use in the context specified by + * contextEnum or throw and exception otherwise. + * + * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be opaque + * or wrapped in some holder object. That happens to be an implementation detail. For instance, + * an implementation could maintain a registry of all trusted objects by context. In such a case, + * trustAs() would return the same object that was passed in. getTrusted() would return the same + * object passed in if it was found in the registry under a compatible context or throw an + * exception otherwise. An implementation might only wrap values some of the time based on + * some criteria. getTrusted() might return a value and not throw an exception for special + * constants or objects even if not wrapped. All such implementations fulfill this contract. + * + * + * A note on the inheritance model for SCE contexts + * ------------------------------------------------ + * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This + * is purely an implementation details. + * + * The contract is simply this: + * + * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) + * will also succeed. + * + * Inheritance happens to capture this in a natural way. In some future, we + * may not use inheritance anymore. That is OK because no code outside of + * sce.js and sceSpecs.js would need to be aware of this detail. + */ + + this.$get = ['$parse', '$document', '$sceDelegate', function( + $parse, $document, $sceDelegate) { + // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows + // the "expression(javascript expression)" syntax which is insecure. + if (enabled && msie) { + var documentMode = $document[0].documentMode; + if (documentMode !== undefined && documentMode < 8) { + throw $sceMinErr('iequirks', + 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' + + 'mode. You can fix this by adding the text to the top of your HTML ' + + 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); } } - $http.pendingRequests = []; + var sce = copy(SCE_CONTEXTS); + + /** + * @ngdoc function + * @name ng.sce#isEnabled + * @methodOf ng.$sce + * @function + * + * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you + * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. + * + * @description + * Returns a boolean indicating if SCE is enabled. + */ + sce.isEnabled = function () { + return enabled; + }; + sce.trustAs = $sceDelegate.trustAs; + sce.getTrusted = $sceDelegate.getTrusted; + sce.valueOf = $sceDelegate.valueOf; + + if (!enabled) { + sce.trustAs = sce.getTrusted = function(type, value) { return value; }, + sce.valueOf = identity + } /** * @ngdoc method - * @name ng.$http#get - * @methodOf ng.$http + * @name ng.$sce#parse + * @methodOf ng.$sce * * @description - * Shortcut method to perform `GET` request. + * Converts Angular {@link guide/expression expression} into a function. This is like {@link + * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it + * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, + * *result*)} * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object + * @param {string} type The kind of SCE context in which this result will be used. + * @param {string} expression String expression to compile. + * @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 (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. */ + sce.parseAs = function sceParseAs(type, expr) { + var parsed = $parse(expr); + if (parsed.literal && parsed.constant) { + return parsed; + } else { + return function sceParseAsTrusted(self, locals) { + return sce.getTrusted(type, parsed(self, locals)); + } + } + }; /** * @ngdoc method - * @name ng.$http#delete - * @methodOf ng.$http + * @name ng.$sce#trustAs + * @methodOf ng.$sce * * @description - * Shortcut method to perform `DELETE` request. + * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, returns an object + * that is trusted by angular for use in specified strict contextual escaping contexts (such as + * ng-html-bind-unsafe, ng-include, any src attribute interpolation, any dom event binding + * attribute interpolation such as for onclick, etc.) that uses the provided value. See * + * {@link ng.$sce $sce} for enabling strict contextual escaping. * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object + * @param {string} type The kind of context in which this value is safe for use. e.g. url, + * resource_url, html, js and css. + * @param {*} value The value that that should be considered trusted/safe. + * @returns {*} A value that can be used to stand in for the provided `value` in places + * where Angular expects a $sce.trustAs() return value. */ /** * @ngdoc method - * @name ng.$http#head - * @methodOf ng.$http + * @name ng.$sce#trustAsHtml + * @methodOf ng.$sce * * @description - * Shortcut method to perform `HEAD` request. + * Shorthand method. `$sce.trustAsHtml(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml + * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) */ /** * @ngdoc method - * @name ng.$http#jsonp - * @methodOf ng.$http + * @name ng.$sce#trustAsUrl + * @methodOf ng.$sce * * @description - * Shortcut method to perform `JSONP` request. + * Shorthand method. `$sce.trustAsUrl(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * Should contain `JSON_CALLBACK` string. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl + * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) */ - createShortMethods('get', 'delete', 'head', 'jsonp'); /** * @ngdoc method - * @name ng.$http#post - * @methodOf ng.$http + * @name ng.$sce#trustAsResourceUrl + * @methodOf ng.$sce * * @description - * Shortcut method to perform `POST` request. + * Shorthand method. `$sce.trustAsResourceUrl(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the return + * value of {@link ng.$sce#trustAs $sce.trustAs}.) */ /** * @ngdoc method - * @name ng.$http#put - * @methodOf ng.$http + * @name ng.$sce#trustAsJs + * @methodOf ng.$sce * * @description - * Shortcut method to perform `PUT` request. + * Shorthand method. `$sce.trustAsJs(value)` → {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object + * @param {*} value The value to trustAs. + * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs + * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives + * only accept expressions that are either literal constants or are the + * return value of {@link ng.$sce#trustAs $sce.trustAs}.) */ - createShortMethodsWithData('post', 'put'); - - /** - * @ngdoc property - * @name ng.$http#defaults - * @propertyOf ng.$http - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = $config; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - /** - * Makes the request. + * @ngdoc method + * @name ng.$sce#getTrusted + * @methodOf ng.$sce * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, $config, $log, $rootScope, defaultCache, $http.pendingRequests + * @description + * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, takes + * the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the originally supplied + * value if the queried context type is a supertype of the created type. If this condition + * isn't satisfied, throws an exception. + * + * @param {string} type The kind of context in which this value is to be used. + * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} call. + * @returns {*} The value the was originally provided to {@link ng.$sce#trustAs `$sce.trustAs`} if + * valid in this context. Otherwise, throws an exception. */ - function sendReq(config, reqData, reqHeaders) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if (config.cache && config.method == 'GET') { - cache = isObject(config.cache) ? config.cache : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (cachedResp) { - if (cachedResp.then) { - // cached request has already been sent, but there is no response yet - cachedResp.then(removePendingReq, removePendingReq); - return cachedResp; - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2])); - } else { - resolvePromise(cachedResp, 200, {}); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - // 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); - } - return promise; + /** + * @ngdoc method + * @name ng.$sce#getTrustedHtml + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedHtml(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` + */ + /** + * @ngdoc method + * @name ng.$sce#getTrustedCss + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedCss(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` + */ - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString)]); - } else { - // remove promise from the cache - cache.remove(url); - } - } + /** + * @ngdoc method + * @name ng.$sce#getTrustedUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedUrl(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` + */ - resolvePromise(response, status, headersString); - $rootScope.$apply(); - } + /** + * @ngdoc method + * @name ng.$sce#getTrustedResourceUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedResourceUrl(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} + * + * @param {*} value The value to pass to `$sceDelegate.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` + */ + /** + * @ngdoc method + * @name ng.$sce#getTrustedJs + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.getTrustedJs(value)` → {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} + * + * @param {*} value The value to pass to `$sce.getTrusted`. + * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` + */ - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers) { - // normalize internal statuses to 0 - status = Math.max(status, 0); + /** + * @ngdoc method + * @name ng.$sce#parseAsHtml + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsHtml(expression string)` → {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`} + * + * @param {string} expression String expression to compile. + * @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 (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config - }); - } + /** + * @ngdoc method + * @name ng.$sce#parseAsCss + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsCss(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`} + * + * @param {string} expression String expression to compile. + * @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 (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + /** + * @ngdoc method + * @name ng.$sce#parseAsUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsUrl(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`} + * + * @param {string} expression String expression to compile. + * @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 (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ - function removePendingReq() { - var idx = indexOf($http.pendingRequests, config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } + /** + * @ngdoc method + * @name ng.$sce#parseAsResourceUrl + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsResourceUrl(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`} + * + * @param {string} expression String expression to compile. + * @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 (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ + /** + * @ngdoc method + * @name ng.$sce#parseAsJs + * @methodOf ng.$sce + * + * @description + * Shorthand method. `$sce.parseAsJs(value)` → {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`} + * + * @param {string} expression String expression to compile. + * @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 (typically a scope object). + * * `locals` – `{object=}` – local variables context object, useful for overriding values in + * `context`. + */ - function buildUrl(url, params) { - if (!params) return url; - 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)); - }); - return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } + // Shorthand delegations. + var parse = sce.parseAs, + getTrusted = sce.getTrusted, + trustAs = sce.trustAs; + angular.forEach(SCE_CONTEXTS, function (enumValue, name) { + var lName = lowercase(name); + sce[camelCase("parse_as_" + lName)] = function (expr) { + return parse(enumValue, expr); + } + sce[camelCase("get_trusted_" + lName)] = function (value) { + return getTrusted(enumValue, value); + } + sce[camelCase("trust_as_" + lName)] = function (value) { + return trustAs(enumValue, value); + } + }); + return sce; }]; } -var XHR = window.XMLHttpRequest || function() { - try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e1) {} - try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e2) {} - try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e3) {} - throw new Error("This browser does not support XMLHttpRequest."); -}; - - /** - * @ngdoc object - * @name ng.$httpBackend - * @requires $browser + * !!! This is an undocumented "private" service !!! + * + * @name ng.$sniffer * @requires $window * @requires $document * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. + * @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 ? * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. + * @description + * This is very simple implementation of testing browser's features. */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks, - $document[0], $window.location.protocol.replace(':', '')); - }]; -} - -function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) { - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials) { - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - }; - - jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - function() { - if (callbacks[callbackId].data) { - completeRequest(callback, 200, callbacks[callbackId].data); - } else { - completeRequest(callback, -2); - } - delete callbacks[callbackId]; - }); - } else { - var xhr = new XHR(); - xhr.open(method, url, true); - forEach(headers, function(value, key) { - 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 - xhr.onreadystatechange = function() { - if (xhr.readyState == 4) { - var responseHeaders = xhr.getAllResponseHeaders(); - - // TODO(vojta): remove once Firefox 21 gets released. - // begin: workaround to overcome Firefox CORS http response headers bug - // https://bugzilla.mozilla.org/show_bug.cgi?id=608735 - // Firefox already patched in nightly. Should land in Firefox 21. - - // CORS "simple response headers" http://www.w3.org/TR/cors/ - var value, - simpleHeaders = ["Cache-Control", "Content-Language", "Content-Type", - "Expires", "Last-Modified", "Pragma"]; - if (!responseHeaders) { - responseHeaders = ""; - forEach(simpleHeaders, function (header) { - var value = xhr.getResponseHeader(header); - if (value) { - responseHeaders += header + ": " + value + "\n"; - } - }); - } - // end of the workaround. - - completeRequest(callback, status || xhr.status, xhr.responseText, - responseHeaders); +function $SnifferProvider() { + this.$get = ['$window', '$document', function($window, $document) { + var eventSupport = {}, + android = int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), + boxee = /Boxee/i.test(($window.navigator || {}).userAgent), + 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; } - }; - - if (withCredentials) { - xhr.withCredentials = true; } - xhr.send(post || ''); - - if (timeout > 0) { - $browserDefer(function() { - status = -1; - xhr.abort(); - }, timeout); + if(!vendorPrefix) { + vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; } - } - - - function completeRequest(callback, status, response, headersString) { - // URL_MATCH is defined in src/service/location.js - var protocol = (url.match(URL_MATCH) || ['', locationProtocol])[1]; - - // fix status code for file protocol (it's always 0) - status = (protocol == 'file') ? (response ? 200 : 404) : status; - - // normalize IE bug (http://bugs.jquery.com/ticket/1450) - status = status == 1223 ? 204 : status; - - callback(status, response, headersString); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), - doneWrapper = function() { - rawDocument.body.removeChild(script); - if (done) done(); - }; - script.type = 'text/javascript'; - script.src = url; + transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); + animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - if (msie) { - script.onreadystatechange = function() { - if (/loaded|complete/.test(script.readyState)) doneWrapper(); - }; - } else { - script.onload = script.onerror = doneWrapper; + if (android && (!transitions||!animations)) { + transitions = isString(document.body.style.webkitTransition); + animations = isString(document.body.style.webkitAnimation); + } } - rawDocument.body.appendChild(script); - } -} -/** - * @ngdoc object - * @name ng.$locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider(){ - this.$get = function() { return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, + // Android has history.pushState, but it does not update location correctly + // so let's not use the history API at all. + // http://code.google.com/p/android/issues/detail?id=17471 + // https://github.com/angular/angular.js/issues/904 - DATETIME_FORMATS: { - MONTH: 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - 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' - }, + // older webit browser (533.9) on Boxee box has exactly the same problem as Android has + // so let's not use the history API also + history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), + hashchange: 'onhashchange' in $window && + // IE8 compatible mode lies + (!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 + // when cut operation is performed. + if (event == 'input' && msie == 9) return false; - pluralCat: function(num) { - if (num === 1) { - return 'one'; + if (isUndefined(eventSupport[event])) { + var divElm = document.createElement('div'); + eventSupport[event] = 'on' + event in divElm; } - return 'other'; - } + + return eventSupport[event]; + }, + csp: document.securityPolicy ? document.securityPolicy.isActive : false, + vendorPrefix: vendorPrefix, + transitions : transitions, + animations : animations }; - }; + }]; } function $TimeoutProvider() { @@ -9466,7 +11416,7 @@ function $TimeoutProvider() { var deferred = $q.defer(), promise = deferred.promise, skipApply = (isDefined(invokeApply) && !invokeApply), - timeoutId, cleanup; + timeoutId; timeoutId = $browser.defer(function() { try { @@ -9475,17 +11425,15 @@ function $TimeoutProvider() { deferred.reject(e); $exceptionHandler(e); } + finally { + delete deferreds[promise.$$timeoutId]; + } if (!skipApply) $rootScope.$apply(); }, delay); - cleanup = function() { - delete deferreds[promise.$$timeoutId]; - }; - promise.$$timeoutId = timeoutId; deferreds[timeoutId] = deferred; - promise.then(cleanup, cleanup); return promise; } @@ -9507,15 +11455,176 @@ function $TimeoutProvider() { timeout.cancel = function(promise) { if (promise && promise.$$timeoutId in deferreds) { deferreds[promise.$$timeoutId].reject('canceled'); + delete deferreds[promise.$$timeoutId]; return $browser.defer.cancel(promise.$$timeoutId); } - return false; - }; + return false; + }; + + return timeout; + }]; +} + +function $$UrlUtilsProvider() { + this.$get = [function() { + var urlParsingNode = document.createElement("a"), + // NOTE: The usage of window and document instead of $window and $document here is + // deliberate. This service depends on the specific behavior of anchor nodes created by the + // browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and + // cause us to break tests. In addition, when the browser resolves a URL for XHR, it + // doesn't know about mocked locations and resolves URLs to the real document - which is + // exactly the behavior needed here. There is little value is mocking these our for this + // service. + originUrl = resolve(window.location.href, true); + + /** + * @description + * Normalizes and optionally parses a URL. + * + * NOTE: This is a private service. The API is subject to change unpredictably in any commit. + * + * Implementation Notes for non-IE browsers + * ---------------------------------------- + * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, + * results both in the normalizing and parsing of the URL. Normalizing means that a relative + * URL will be resolved into an absolute URL in the context of the application document. + * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related + * properties are all populated to reflect the normalized URL. This approach has wide + * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See + * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html + * + * Implementation Notes for IE + * --------------------------- + * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other + * browsers. However, the parsed components will not be set if the URL assigned did not specify + * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We + * work around that by performing the parsing in a 2nd step by taking a previously normalized + * URL (e.g. by assining to a.href) and assigning it a.href again. This correctly populates the + * properties such as protocol, hostname, port, etc. + * + * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one + * uses the inner HTML approach to assign the URL as part of an HTML snippet - + * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. + * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. + * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that + * method and IE < 8 is unsupported. + * + * References: + * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement + * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html + * http://url.spec.whatwg.org/#urlutils + * https://github.com/angular/angular.js/pull/2902 + * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ + * + * @param {string} url The URL to be parsed. + * @param {boolean=} parse When true, returns an object for the parsed URL. Otherwise, returns + * a single string that is the normalized URL. + * @returns {object|string} When parse is true, returns the normalized URL as a string. + * Otherwise, returns an object with the following members. + * + * | member name | Description | + * |---------------|----------------| + * | href | A normalized version of the provided URL if it was not an absolute URL | + * | protocol | The protocol including the trailing colon | + * | host | The host and port (if the port is non-default) of the normalizedUrl | + * + * These fields from the UrlUtils interface are currently not needed and hence not returned. + * + * | member name | Description | + * |---------------|----------------| + * | hostname | The host without the port of the normalizedUrl | + * | pathname | The path following the host in the normalizedUrl | + * | hash | The URL hash if present | + * | search | The query string | + * + */ + function resolve(url, parse) { + var href = url; + if (msie <= 11) { + // Normalize before parse. Refer Implementation Notes on why this is + // done in two steps on IE. + urlParsingNode.setAttribute("href", href); + href = urlParsingNode.href; + } + urlParsingNode.setAttribute('href', href); - return timeout; + if (!parse) { + return urlParsingNode.href; + } + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol, + host: urlParsingNode.host + // Currently unused and hence commented out. + // hostname: urlParsingNode.hostname, + // port: urlParsingNode.port, + // pathname: urlParsingNode.pathname, + // hash: urlParsingNode.hash, + // search: urlParsingNode.search + }; + } + + return { + resolve: resolve, + /** + * Parse a request URL and determine whether this is a same-origin request as the application document. + * + * @param {string|object} requestUrl The url of the request as a string that will be resolved + * or a parsed URL object. + * @returns {boolean} Whether the request is for the same origin as the application document. + */ + isSameOrigin: function isSameOrigin(requestUrl) { + var parsed = (typeof requestUrl === 'string') ? resolve(requestUrl, true) : requestUrl; + return (parsed.protocol === originUrl.protocol && + parsed.host === originUrl.host); + } + }; }]; } +/** + * @ngdoc object + * @name ng.$window + * + * @description + * 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 overridden, removed or mocked for testing. + * + * Expressions, like the one defined for the `ngClick` directive in the example + * below, are evaluated with respect to the current scope. Therefore, there is + * no risk of inadvertently coding in a dependency on a global value in such an + * expression. + * + * @example + + + +
+ + +
+
+ + it('should display the greeting in the input box', function() { + input('greeting').enter('Hello, E2E Tests'); + // If we click the button it will block the test runner + // element(':button').click(); + }); + +
+ */ +function $WindowProvider(){ + this.$get = valueFn(window); +} + /** * @ngdoc object * @name ng.$filterProvider @@ -9546,7 +11655,7 @@ function $TimeoutProvider() { * } * * - * The filter function is registered with the `$injector` under the filter name suffixe with `Filter`. + * The filter function is registered with the `$injector` under the filter name suffix with `Filter`. *
  *   it('should be the same instance', inject(
  *     function($filterProvider) {
@@ -9650,6 +11759,22 @@ function $FilterProvider($provide) {
  *     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
    
      
@@ -9657,7 +11782,8 @@ function $FilterProvider($provide) {
                                 {name:'Mary', phone:'800-BIG-MARY'},
                                 {name:'Mike', phone:'555-4321'},
                                 {name:'Adam', phone:'555-5678'},
-                                {name:'Julie', phone:'555-8765'}]">
+                                {name:'Julie', phone:'555-8765'},
+                                {name:'Juliette', phone:'555-5678'}]">
 
        Search: 
        
@@ -9671,9 +11797,10 @@ function $FilterProvider($provide) {
        Any: 
Name only
Phone only
+ Equality
- + @@ -9693,13 +11820,19 @@ function $FilterProvider($provide) { 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']); }); */ function filterFilter() { - return function(array, expression) { + return function(array, expression, comperator) { if (!isArray(array)) return array; var predicates = []; predicates.check = function(value) { @@ -9710,20 +11843,43 @@ function filterFilter() { } 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 +11902,18 @@ function filterFilter() { 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 (typeof(expression[key]) == 'undefined') { 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]); }); })(); } @@ -9843,7 +11998,9 @@ function currencyFilter($locale) { * If the input is not a number an empty string is returned. * * @param {number|string} number Number to format. - * @param {(number|string)=} [fractionSize=2] Number of decimal places to round the number to. + * @param {(number|string)=} fractionSize Number of decimal places to round the number to. + * If this is not provided then the fraction size is computed from the current locale's number + * formatting pattern. In the case of the default locale, it will be 3. * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. * * @example @@ -9950,6 +12107,11 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { } if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); + } else { + + if (fractionSize > 0 && number > -1 && number < 1) { + formatedText = number.toFixed(fractionSize); + } } parts.push(isNegative ? pattern.negPre : pattern.posPre); @@ -10024,6 +12186,9 @@ var DATE_FORMATS = { 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 +12227,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ * * `'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) * @@ -10073,7 +12239,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm) * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010 + * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) @@ -10081,7 +12247,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ * * `format` string can contain literal values. These need to be quoted with single quotes (e.g. * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence - * (e.g. `"h o''clock"`). + * (e.g. `"h 'o''clock'"`). * * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its @@ -10118,18 +12284,26 @@ function dateFilter($locale) { 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 +12417,20 @@ var uppercaseFilter = valueFn(uppercase); * @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 @@ -10264,59 +12438,76 @@ var uppercaseFilter = valueFn(uppercase);
- Limit {{numbers}} to: -

Output: {{ numbers | limitTo:limit }}

+ Limit {{numbers}} to: +

Output numbers: {{ numbers | limitTo:numLimit }}

+ Limit {{letters}} to: +

Output letters: {{ letters | limitTo:letterLimit }}

- 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'); });
*/ 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} expression A predicate to be @@ -10448,8 +12639,10 @@ function orderByFilter($parse){ var t1 = typeof v1; var t2 = typeof v2; if (t1 == t2) { - if (t1 == "string") v1 = v1.toLowerCase(); - if (t1 == "string") v2 = v2.toLowerCase(); + if (t1 == "string") { + v1 = v1.toLowerCase(); + v2 = v2.toLowerCase(); + } if (v1 === v2) return 0; return v1 < v2 ? -1 : 1; } else { @@ -10502,7 +12695,7 @@ var htmlAnchorDirective = valueFn({ } return function(scope, element) { - element.bind('click', function(event){ + element.on('click', function(event){ // if we have no href url, then don't navigate anywhere. if (!element.attr('href')) { event.preventDefault(); @@ -10617,6 +12810,31 @@ var htmlAnchorDirective = valueFn({ * @param {template} ngSrc any string which can contain `{{}}` markup. */ +/** + * @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: + *
+ * 
+ * 
+ * + * The correct way to write it: + *
+ * 
+ * 
+ * + * @element IMG + * @param {template} ngSrcset any string which can contain `{{}}` markup. + */ + /** * @ngdoc directive * @name ng.directive:ngDisabled @@ -10686,42 +12904,6 @@ var htmlAnchorDirective = valueFn({ */ -/** - * @ngdoc directive - * @name ng.directive:ngMultiple - * @restrict A - * - * @description - * The HTML specs do not require browsers to preserve the special attributes such as multiple. - * (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 `ngMultiple` directive. - * - * @example - - - Check me check multiple:
- -
- - it('should toggle multiple', function() { - expect(element('.doc-example-live #select').prop('multiple')).toBeFalsy(); - input('checked').check(); - expect(element('.doc-example-live #select').prop('multiple')).toBeTruthy(); - }); - -
- * - * @element SELECT - * @param {expression} ngMultiple Angular expression that will be evaluated. - */ - - /** * @ngdoc directive * @name ng.directive:ngReadonly @@ -10784,12 +12966,46 @@ var htmlAnchorDirective = valueFn({ * @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 + + + Check me check multiple:
+
+ Show/Hide me +
+
+ + it('should toggle open', function() { + expect(element('#details').prop('open')).toBeFalsy(); + input('open').check(); + expect(element('#details').prop('open')).toBeTruthy(); + }); + +
+ * + * @element DETAILS + * @param {string} expression Angular expression that will be evaluated. + */ var ngAttributeAliasDirectives = {}; // boolean attrs are evaluated forEach(BOOLEAN_ATTR, function(propName, attrName) { + // binding to multiple is not supported + if (propName == "multiple") return; + var normalized = directiveNormalize('ng-' + attrName); ngAttributeAliasDirectives[normalized] = function() { return { @@ -10806,8 +13022,8 @@ forEach(BOOLEAN_ATTR, function(propName, attrName) { }); -// 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 +13050,8 @@ var nullFormCtrl = { $addControl: noop, $removeControl: noop, $setValidity: noop, - $setDirty: noop + $setDirty: noop, + $setPristine: noop }; /** @@ -10866,10 +13083,11 @@ function FormController(element, attrs) { 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; + form.$name = attrs.name || attrs.ngForm; form.$dirty = false; form.$pristine = true; form.$valid = true; @@ -10889,12 +13107,34 @@ function FormController(element, attrs) { addClass((isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); } + /** + * @ngdoc function + * @name ng.directive:form.FormController#$addControl + * @methodOf ng.directive:form.FormController + * + * @description + * Register a control with the form. + * + * Input elements using ngModelController do this automatically when they are linked. + */ form.$addControl = function(control) { + controls.push(control); + if (control.$name && !form.hasOwnProperty(control.$name)) { form[control.$name] = control; } }; + /** + * @ngdoc function + * @name ng.directive:form.FormController#$removeControl + * @methodOf ng.directive:form.FormController + * + * @description + * Deregister a control from the form. + * + * Input elements using ngModelController do this automatically when they are destroyed. + */ form.$removeControl = function(control) { if (control.$name && form[control.$name] === control) { delete form[control.$name]; @@ -10902,8 +13142,20 @@ function FormController(element, attrs) { forEach(errors, function(queue, validationToken) { form.$setValidity(validationToken, true, control); }); + + arrayRemove(controls, control); }; + /** + * @ngdoc function + * @name ng.directive:form.FormController#$setValidity + * @methodOf ng.directive:form.FormController + * + * @description + * Sets the validity of a form control. + * + * This method will also propagate to parent forms. + */ form.$setValidity = function(validationToken, isValid, control) { var queue = errors[validationToken]; @@ -10942,6 +13194,17 @@ function FormController(element, attrs) { } }; + /** + * @ngdoc function + * @name ng.directive:form.FormController#$setDirty + * @methodOf ng.directive:form.FormController + * + * @description + * Sets the form to a dirty state. + * + * This method can be called to add the 'ng-dirty' class and set the form to a dirty + * state (ng-dirty class). This method will also propagate to parent forms. + */ form.$setDirty = function() { element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS); form.$dirty = true; @@ -10949,6 +13212,29 @@ function FormController(element, attrs) { 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(); + }); + }; } @@ -11083,7 +13369,7 @@ var formDirectiveFactory = function(isNgForm) { // unregister the preventDefault listener so that we don't not leak memory but in a // way that will achieve the prevention of the default action. - formElement.bind('$destroy', function() { + formElement.on('$destroy', function() { $timeout(function() { removeEventListenerFn(formElement[0], 'submit', preventDefaultListener); }, 0, false); @@ -11094,13 +13380,13 @@ var formDirectiveFactory = function(isNgForm) { alias = attr.name || attr.ngForm; if (alias) { - scope[alias] = controller; + setter(scope, alias, controller, alias); } if (parentFormCtrl) { - formElement.bind('$destroy', function() { + formElement.on('$destroy', function() { parentFormCtrl.$removeControl(controller); if (alias) { - scope[alias] = undefined; + setter(scope, alias, undefined, alias); } extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards }); @@ -11118,7 +13404,7 @@ var formDirective = formDirectiveFactory(); var ngFormDirective = formDirectiveFactory(true); var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/; +var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/; var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; var inputType = { @@ -11145,6 +13431,8 @@ var inputType = { * 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 @@ -11152,12 +13440,12 @@ var inputType = {
Single word: + ng-pattern="word" required ng-trim="false"> Required! @@ -11186,6 +13474,12 @@ var inputType = { 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'); + });
*/ @@ -11229,9 +13523,9 @@ var inputType = { Number: - + Required! - + Not valid number! value = {{value}}
myForm.input.$valid = {{myForm.input.$valid}}
@@ -11352,6 +13646,8 @@ var inputType = { * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for * patterns defined as scope expressions. + * @param {string=} ngChange Angular expression to be executed when input changes due to user + * interaction with the input element. * * @example @@ -11499,7 +13795,14 @@ function isEmpty(value) { 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. + if (toBoolean(attr.ngTrim || 'T')) { + value = trim(value); + } if (ctrl.$viewValue !== value) { scope.$apply(function() { @@ -11511,7 +13814,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the // input event on backspace, delete or cut if ($sniffer.hasEvent('input')) { - element.bind('input', listener); + element.on('input', listener); } else { var timeout; @@ -11524,7 +13827,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { } }; - element.bind('keydown', function(event) { + element.on('keydown', function(event) { var key = event.keyCode; // ignore @@ -11535,11 +13838,11 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { }); // if user paste into input using mouse, we need "change" event to catch it - element.bind('change', listener); + element.on('change', listener); // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it if ($sniffer.hasEvent('paste')) { - element.bind('paste cut', deferListener); + element.on('paste cut', deferListener); } } @@ -11550,7 +13853,8 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // pattern validator var pattern = attr.ngPattern, - patternValidator; + patternValidator, + match; var validate = function(regexp, value) { if (isEmpty(value) || regexp.test(value)) { @@ -11563,8 +13867,9 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { }; 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) }; @@ -11573,7 +13878,9 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { var patternObj = scope.$eval(pattern); if (!patternObj || !patternObj.test) { - throw new Error('Expected ' + pattern + ' to be a RegExp but was ' + patternObj); + throw minErr('ngPattern')('noregexp', + 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, + patternObj, startingTag(element)); } return validate(patternObj, value); }; @@ -11720,7 +14027,7 @@ function radioInputType(scope, element, attr, ctrl) { element.attr('name', nextUid()); } - element.bind('click', function() { + element.on('click', function() { if (element[0].checked) { scope.$apply(function() { ctrl.$setViewValue(attr.value); @@ -11743,7 +14050,7 @@ function checkboxInputType(scope, element, attr, ctrl) { if (!isString(trueValue)) trueValue = true; if (!isString(falseValue)) falseValue = false; - element.bind('click', function() { + element.on('click', function() { scope.$apply(function() { ctrl.$setViewValue(element[0].checked); }); @@ -11910,13 +14217,26 @@ var VALID_CLASS = 'ng-valid', * * @property {string} $viewValue Actual string value in the view. * @property {*} $modelValue The value in the model, that the control is bound to. - * @property {Array.} $parsers Whenever the control reads value from the DOM, it executes - * all of these functions to sanitize / convert the value as well as validate. - * - * @property {Array.} $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 {Array.} $parsers Array of functions to execute, as a pipeline, whenever + the control reads value from the DOM. Each function is called, in turn, passing the value + through to the next. Used to sanitize / convert the value as well as validation. + For validation, the parsers should update the validity state using + {@link ng.directive:ngModel.NgModelController#$setValidity $setValidity()}, + and return `undefined` for invalid values. + + * + * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever + the model value changes. Each function is called, in turn, passing the value through to the + next. Used to format / convert values for display in the control and validation. + *
+ *      function formatter(value) {
+ *        if (value) {
+ *          return value.toUpperCase();
+ *        }
+ *      }
+ *      ngModel.$formatters.push(formatter);
+ *      
+ * @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. @@ -11930,6 +14250,10 @@ var VALID_CLASS = 'ng-valid', * specifically does not contain any logic which deals with DOM rendering or listening to * DOM events. The `NgModelController` is meant to be extended by other directives where, the * directive provides DOM manipulation and the `NgModelController` provides the data-binding. + * Note that you cannot use `NgModelController` in a directive with an isolated scope, + * as, in that case, the `ng-model` value gets put into the isolated scope and does not get + * propogated to the parent scope. + * * * This example shows how to use `NgModelController` with a custom control to achieve * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) @@ -11963,14 +14287,20 @@ var VALID_CLASS = 'ng-valid', }; // Listen for change events to enable binding - element.bind('blur keyup change', function() { + element.on('blur keyup change', function() { scope.$apply(read); }); read(); // initialize // Write data to the model function read() { - ngModel.$setViewValue(element.html()); + var html = element.html(); + // When we clear the content editable the browser leaves a
behind + // If strip-br attribute is provided then we strip this out + if( attrs.stripBr && html == '
' ) { + html = ''; + } + ngModel.$setViewValue(html); } } }; @@ -11980,6 +14310,7 @@ var VALID_CLASS = 'ng-valid',
Change me!
Required!
@@ -12016,8 +14347,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ ngModelSet = ngModelGet.assign; if (!ngModelSet) { - throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + $attr.ngModel + - ' (' + startingTag($element) + ')'); + throw minErr('ngModel')('nonassign', "Expression '{0}' is non-assignable. Element: {1}", + $attr.ngModel, startingTag($element)); } /** @@ -12089,6 +14420,22 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ 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 @@ -12102,8 +14449,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * For example {@link ng.directive:input input} or * {@link ng.directive:select select} directives call it. * - * It internally calls all `parsers` and if resulted value is valid, updates the model and - * calls all registered change listeners. + * It internally calls all `$parsers` (including validators) and updates the `$modelValue` and the actual model path. + * Lastly it calls all registered change listeners. * * @param {string} value Value from the view. */ @@ -12168,8 +14515,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * @element input * * @description - * Is directive that tells Angular to do two-way data binding. It works together with `input`, - * `select`, `textarea`. You can easily write your own directives to use `ngModel` as well. + * Is a directive that tells Angular to do two-way data binding. It works together with `input`, + * `select`, `textarea` and even custom form controls that use {@link ng.directive:ngModel.NgModelController + * NgModelController} exposed by this directive. * * `ngModel` is responsible for: * @@ -12180,6 +14528,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * - setting related css class onto the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`), * - register the control with parent {@link ng.directive:form form}. * + * Note: `ngModel` will try to bind to the property given by evaluating the expression on the + * current scope. If the property doesn't already exist on this scope, it will be created + * implicitly and added to the scope. + * * For basic examples, how to use `ngModel`, see: * * - {@link ng.directive:input input} @@ -12205,7 +14557,7 @@ var ngModelDirective = function() { formCtrl.$addControl(modelCtrl); - element.bind('$destroy', function() { + element.on('$destroy', function() { formCtrl.$removeControl(modelCtrl); }); } @@ -12320,8 +14672,9 @@ var requiredDirective = function() { List: - + Required! +
names = {{names}}
myForm.namesInput.$valid = {{myForm.namesInput.$valid}}
myForm.namesInput.$error = {{myForm.namesInput.$error}}
@@ -12333,12 +14686,14 @@ var requiredDirective = function() { it('should initialize to model', function() { expect(binding('names')).toEqual('["igor","misko","vojta"]'); expect(binding('myForm.namesInput.$valid')).toEqual('true'); + expect(element('span.error').css('display')).toBe('none'); }); it('should be invalid if empty', function() { input('names').enter(''); expect(binding('names')).toEqual('[]'); expect(binding('myForm.namesInput.$valid')).toEqual('false'); + expect(element('span.error').css('display')).not().toBe('none'); });
@@ -12388,7 +14743,7 @@ var ngValueDirective = function() { } else { return function(scope, elm, attr) { scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value, false); + attr.$set('value', value); }); }; } @@ -12408,10 +14763,9 @@ var ngValueDirective = function() { * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like * `{{ expression }}` which is similar but less verbose. * - * One scenario in which the use of `ngBind` is preferred over `{{ expression }}` binding is when - * it's desirable to put bindings into template that is momentarily displayed by the browser in its - * raw state before Angular compiles it. Since `ngBind` is an element attribute, it makes the - * bindings invisible to the user while the page is loading. + * It is preferrable to use `ngBind` instead of `{{ expression }}` when a template is momentarily + * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an + * element attribute, it makes the bindings invisible to the user while the page is loading. * * An alternative solution to this problem would be using the * {@link ng.directive:ngCloak ngCloak} directive. @@ -12457,10 +14811,11 @@ var ngBindDirective = ngDirective(function(scope, element, attr) { * * @description * The `ngBindTemplate` directive specifies that the element - * text should be replaced with the template in ngBindTemplate. - * Unlike ngBind the ngBindTemplate can contain multiple `{{` `}}` - * expressions. (This is required since some HTML elements - * can not have SPAN elements such as TITLE, or OPTION to name a few.) + * text content should be replaced with the interpolation of the template + * in the `ngBindTemplate` attribute. + * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` + * expressions. This directive is needed since some HTML elements + * (such as TITLE and OPTION) cannot contain SPAN elements. * * @element ANY * @param {string} ngBindTemplate template of form @@ -12512,83 +14867,99 @@ var ngBindTemplateDirective = ['$interpolate', function($interpolate) { /** * @ngdoc directive - * @name ng.directive:ngBindHtmlUnsafe + * @name ng.directive:ngBindHtml * * @description * Creates a binding that will innerHTML the result of evaluating the `expression` into the current - * element. *The innerHTML-ed content will not be sanitized!* You should use this directive only if - * {@link ngSanitize.directive:ngBindHtml ngBindHtml} directive is too - * restrictive and when you absolutely trust the source of the content you are binding to. + * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link + * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize` + * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in + * core Angular.) You may also bypass sanitization for values you know are safe. To do so, bind to + * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example + * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}. * - * See {@link ngSanitize.$sanitize $sanitize} docs for examples. + * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you + * will have an exception (instead of an exploit.) * * @element ANY - * @param {expression} ngBindHtmlUnsafe {@link guide/expression Expression} to evaluate. + * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. */ -var ngBindHtmlUnsafeDirective = [function() { +var ngBindHtmlDirective = ['$sce', function($sce) { return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtmlUnsafe); - scope.$watch(attr.ngBindHtmlUnsafe, function ngBindHtmlUnsafeWatchAction(value) { - element.html(value || ''); + element.addClass('ng-binding').data('$binding', attr.ngBindHtml); + scope.$watch(attr.ngBindHtml, function ngBindHtmlWatchAction(value) { + element.html($sce.getTrustedHtml(value) || ''); }); }; }]; function classDirective(name, selector) { name = 'ngClass' + name; - return ngDirective(function(scope, element, attr) { - var oldVal = undefined; + return function() { + return { + restrict: 'AC', + link: function(scope, element, attr) { + var oldVal = undefined; - scope.$watch(attr[name], ngClassWatchAction, true); + scope.$watch(attr[name], ngClassWatchAction, true); - attr.$observe('class', function(value) { - var ngClass = scope.$eval(attr[name]); - ngClassWatchAction(ngClass, ngClass); - }); + attr.$observe('class', function(value) { + ngClassWatchAction(scope.$eval(attr[name])); + }); - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - var mod = $index & 1; - if (mod !== old$index & 1) { - if (mod === selector) { - addClass(scope.$eval(attr[name])); - } else { - removeClass(scope.$eval(attr[name])); + if (name !== 'ngClass') { + scope.$watch('$index', function($index, old$index) { + var mod = $index & 1; + if (mod !== old$index & 1) { + if (mod === selector) { + addClass(scope.$eval(attr[name])); + } else { + removeClass(scope.$eval(attr[name])); + } + } + }); + } + + + function ngClassWatchAction(newVal) { + if (selector === true || scope.$index % 2 === selector) { + if (oldVal && !equals(newVal,oldVal)) { + removeClass(oldVal); + } + addClass(newVal); } + oldVal = copy(newVal); } - }); - } - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - if (oldVal && !equals(newVal,oldVal)) { - removeClass(oldVal); + function removeClass(classVal) { + attr.$removeClass(flattenClasses(classVal)); } - addClass(newVal); - } - oldVal = copy(newVal); - } - function removeClass(classVal) { - if (isObject(classVal) && !isArray(classVal)) { - classVal = map(classVal, function(v, k) { if (v) return k }); - } - element.removeClass(isArray(classVal) ? classVal.join(' ') : classVal); - } + function addClass(classVal) { + attr.$addClass(flattenClasses(classVal)); + } + function flattenClasses(classVal) { + if(isArray(classVal)) { + return classVal.join(' '); + } else if (isObject(classVal)) { + var classes = [], i = 0; + forEach(classVal, function(v, k) { + if (v) { + classes.push(k); + } + }); + return classes.join(' '); + } - function addClass(classVal) { - if (isObject(classVal) && !isArray(classVal)) { - classVal = map(classVal, function(v, k) { if (v) return k }); - } - if (classVal) { - element.addClass(isArray(classVal) ? classVal.join(' ') : classVal); + return classVal; + }; } - } - }); + }; + }; } /** @@ -12596,21 +14967,86 @@ function classDirective(name, selector) { * @name ng.directive:ngClass * * @description - * The `ngClass` allows you to set CSS class on HTML element dynamically by databinding an - * expression that represents all classes to be added. + * The `ngClass` allows you to set CSS classes on HTML an element, dynamically, by databinding + * an expression that represents all classes to be added. * * The directive won't add duplicate classes if a particular class was already set. * * When the expression changes, the previously added classes are removed and only then the * new classes are added. * + * @animations + * add - happens just before the class is applied to the element + * remove - happens just before the class is removed from the element + * * @element ANY * @param {expression} ngClass {@link guide/expression Expression} to eval. The result * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. + * names, an array, or a map of class names to boolean values. In the case of a map, the + * names of the properties whose values are truthy will be added as css classes to the + * element. * - * @example + * @example Example that demostrates basic bindings via ngClass directive. + +

Map Syntax Example

+ bold + strike + red +
+

Using String Syntax

+ +
+

Using Array Syntax

+
+
+
+
+ + .strike { + text-decoration: line-through; + } + .bold { + font-weight: bold; + } + .red { + color: red; + } + + + it('should let you toggle the class', function() { + + expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/bold/); + expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/red/); + + input('bold').check(); + expect(element('.doc-example-live p:first').prop('className')).toMatch(/bold/); + + input('red').check(); + expect(element('.doc-example-live p:first').prop('className')).toMatch(/red/); + }); + + it('should let you toggle string example', function() { + expect(element('.doc-example-live p:nth-of-type(2)').prop('className')).toBe(''); + input('style').enter('red'); + expect(element('.doc-example-live p:nth-of-type(2)').prop('className')).toBe('red'); + }); + + it('array example should have 3 classes', function() { + expect(element('.doc-example-live p:last').prop('className')).toBe(''); + input('style1').enter('bold'); + input('style2').enter('strike'); + input('style3').enter('red'); + expect(element('.doc-example-live p:last').prop('className')).toBe('bold strike red'); + }); + +
+ + ## Animations + + The example below demonstrates how to perform animations using ngClass. + + @@ -12618,8 +15054,22 @@ function classDirective(name, selector) { Sample Text - .my-class { + .my-class-add, .my-class-remove { + -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; + -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; + } + + .my-class, + .my-class-add.my-class-add-active { color: red; + font-size:3em; + } + + .my-class-remove.my-class-remove-active { + font-size:1.0em; + color:black; } @@ -12639,6 +15089,14 @@ function classDirective(name, selector) { }); + + + ## ngClass and pre-existing CSS3 Transitions/Animations + The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. + Therefore, if any CSS3 Transition/Animation styles (outside of ngAnimate) are set on the element, then, if a ngClass animation + is triggered, the ngClass animation will be skipped so that ngAnimate can allow for the pre-existing transition or animation to + take over. This restriction allows for ngClass to still work with standard CSS3 Transitions/Animations that are defined + outside of ngAnimate. */ var ngClassDirective = classDirective('', true); @@ -12746,14 +15204,14 @@ var ngClassEvenDirective = classDirective('Even', 1); * directive to avoid the undesirable flicker effect caused by the html template display. * * The directive can be applied to the `` 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: * *
  * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
- *   display: none;
+ *   display: none !important;
  * }
  * 
* @@ -12811,13 +15269,14 @@ var ngCloakDirective = ngDirective({ * * Controller — The `ngController` directive specifies a Controller class; the class has * methods that typically express the business logic behind the application. * - * Note that an alternative way to define controllers is via the {@link ng.$route $route} service. + * Note that an alternative way to define controllers is via the {@link ngRoute.$route $route} service. * * @element ANY * @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,11 +15284,75 @@ var ngCloakDirective = ngDirective({ * 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. +
+ Name: + [ greet ]
+ Contact: +
    +
  • + + + [ clear + | X ] +
  • +
  • [ add ]
  • +
+
+
+ + it('should check controller as', function() { + expect(element('#ctrl-as-exmpl>:input').val()).toBe('John Smith'); + expect(element('#ctrl-as-exmpl li:nth-child(1) input').val()) + .toBe('408 555 1212'); + expect(element('#ctrl-as-exmpl li:nth-child(2) input').val()) + .toBe('john.smith@example.org'); + + element('#ctrl-as-exmpl li:first a:contains("clear")').click(); + expect(element('#ctrl-as-exmpl li:first input').val()).toBe(''); + + element('#ctrl-as-exmpl li:last a:contains("add")').click(); + expect(element('#ctrl-as-exmpl li:nth-child(3) input').val()) + .toBe('yourname@example.org'); + }); + +
+ + + -
+
Name: [ greet ]
Contact: @@ -12874,21 +15397,22 @@ var ngCloakDirective = ngDirective({ 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()) + expect(element('#ctrl-exmpl>:input').val()).toBe('John Smith'); + expect(element('#ctrl-exmpl li:nth-child(1) input').val()) .toBe('408 555 1212'); - expect(element('.doc-example-live li:nth-child(2) input').val()) + expect(element('#ctrl-exmpl li:nth-child(2) input').val()) .toBe('john.smith@example.org'); - element('.doc-example-live li:first a:contains("clear")').click(); - expect(element('.doc-example-live li:first input').val()).toBe(''); + element('#ctrl-exmpl li:first a:contains("clear")').click(); + expect(element('#ctrl-exmpl 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()) + element('#ctrl-exmpl li:last a:contains("add")').click(); + expect(element('#ctrl-exmpl li:nth-child(3) input').val()) .toBe('yourname@example.org'); }); + */ var ngControllerDirective = [function() { return { @@ -12976,13 +15500,13 @@ var ngCspDirective = ['$sniffer', function($sniffer) { */ 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 submit focus blur'.split(' '), function(name) { var directiveName = directiveNormalize('ng-' + name); ngEventDirectives[directiveName] = ['$parse', function($parse) { return function(scope, element, attr) { var fn = $parse(attr[directiveName]); - element.bind(lowercase(name), function(event) { + element.on(lowercase(name), function(event) { scope.$apply(function() { fn(scope, {$event:event}); }); @@ -13103,6 +15627,54 @@ forEach( */ +/** + * @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 @@ -13111,10 +15683,11 @@ forEach( * Enables binding angular expressions to onsubmit events. * * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page). + * server and reloading the current page) **but only if the form does not contain an `action` + * attribute**. * * @element form - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. + * @param {expression} ngSubmit {@link guide/expression Expression} to eval. (Event object is available as `$event`) * * @example @@ -13154,11 +15727,144 @@ forEach( */ -var ngSubmitDirective = ngDirective(function(scope, element, attrs) { - element.bind('submit', function() { - scope.$apply(attrs.ngSubmit); - }); -}); + +/** + * @ngdoc directive + * @name ng.directive:ngFocus + * + * @description + * Specify custom behavior on focus event. + * + * @element window, input, select, textarea, a + * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon + * focus. (Event object is available as `$event`) + * + * @example + * See {@link ng.directive:ngClick ngClick} + */ + +/** + * @ngdoc directive + * @name ng.directive:ngBlur + * + * @description + * Specify custom behavior on blur event. + * + * @element window, input, select, textarea, a + * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon + * blur. (Event object is available as `$event`) + * + * @example + * See {@link ng.directive:ngClick ngClick} + */ + +/** + * @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-Inheritance 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 module 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 + + + Click me:
+ Show when checked: + + I'm removed when the checkbox is unchecked. + +
+ + .animate-if { + background:white; + border:1px solid black; + padding:10px; + } + + .animate-if.ng-enter, .animate-if.ng-leave { + -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; + -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; + } + + .animate-if.ng-enter, + .animate-if.ng-leave.ng-leave-active { + opacity:0; + } + + .animate-if.ng-enter.ng-enter-active, + .animate-if.ng-leave { + opacity:1; + } + +
+ */ +var ngIfDirective = ['$animate', function($animate) { + return { + transclude: 'element', + priority: 1000, + terminal: true, + restrict: 'A', + compile: function (element, attr, transclude) { + return function ($scope, $element, $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 @@ -13168,9 +15874,26 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { * @description * Fetches, compiles and includes an external HTML fragment. * - * Keep in mind that Same Origin Policy applies to included resources - * (e.g. ngInclude won't work for cross-domain requests on all browsers and for - * file:// access on some browsers). + * Keep in mind that: + * + * - by default, the template URL is restricted to the same domain and protocol as the + * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl + * $sce.getTrustedResourceUrl} on it. To load templates from other domains and/or protocols, + * you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or + * {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. Refer Angular's {@link + * ng.$sce Strict Contextual Escaping}. + * - in addition, the browser's + * {@link https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest + * Same Origin Policy} and {@link http://www.w3.org/TR/cors/ Cross-Origin Resource Sharing + * (CORS)} policy apply that may further restrict whether the template is successfully loaded. + * (e.g. ngInclude won't work for cross-domain requests on all browsers and for `file://` + * access on some browsers) + * + * @animations + * enter - animation is used to bring new content into the browser. + * leave - animation is used to animate existing content away. + * + * The enter and leave animation occur concurrently. * * @scope * @@ -13186,7 +15909,7 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { * - Otherwise enable scrolling only if the expression evaluates to truthy value. * * @example - +
url of the template: {{template.url}}
-
+
+
+
@@ -13211,6 +15936,48 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { Content of template2.html + + .example-animate-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .example-animate-container > div { + padding:10px; + } + + .include-example.ng-enter, .include-example.ng-leave { + -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; + -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; + display:block; + padding:10px; + } + + .include-example.ng-enter { + top:-50px; + } + .include-example.ng-enter.ng-enter-active { + top:0; + } + + .include-example.ng-leave { + top:0; + } + .include-example.ng-leave.ng-leave-active { + top:50px; + } + it('should load template1.html', function() { expect(element('.doc-example-live [ng-include]').text()). @@ -13223,13 +15990,23 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { }); it('should change to blank', function() { select('template').option(''); - expect(element('.doc-example-live [ng-include]').text()).toEqual(''); + expect(element('.doc-example-live [ng-include]')).toBe(undefined); });
*/ +/** + * @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 @@ -13238,52 +16015,65 @@ var ngSubmitDirective = ngDirective(function(scope, element, attrs) { * @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', '$animate', '$sce', + function($http, $templateCache, $anchorScroll, $compile, $animate, $sce) { return { restrict: 'ECA', terminal: true, - compile: function(element, attr) { + transclude: 'element', + compile: function(element, attr, transclusion) { var srcExp = attr.ngInclude || attr.src, onloadExp = attr.onload || '', autoScrollExp = attr.autoscroll; - return function(scope, element) { + return function(scope, $element) { var changeCounter = 0, - childScope; + currentScope, + currentElement; - var clearContent = function() { - if (childScope) { - childScope.$destroy(); - childScope = null; + var cleanupLastIncludeContent = function() { + if (currentScope) { + currentScope.$destroy(); + currentScope = null; + } + if(currentElement) { + $animate.leave(currentElement); + currentElement = null; } - - element.html(''); }; - scope.$watch(srcExp, function ngIncludeWatchAction(src) { + scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { var thisChangeId = ++changeCounter; if (src) { $http.get(src, {cache: $templateCache}).success(function(response) { if (thisChangeId !== changeCounter) return; + var newScope = scope.$new(); - if (childScope) childScope.$destroy(); - childScope = scope.$new(); + transclusion(newScope, function(clone) { + cleanupLastIncludeContent(); - element.html(response); - $compile(element.contents())(childScope); + currentScope = newScope; + currentElement = clone; - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } + currentElement.html(response); + $animate.enter(currentElement, null, $element); + $compile(currentElement.contents())(currentScope); + + if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { + $anchorScroll(); + } - childScope.$emit('$includeContentLoaded'); - scope.$eval(onloadExp); + currentScope.$emit('$includeContentLoaded'); + scope.$eval(onloadExp); + }); }).error(function() { - if (thisChangeId === changeCounter) clearContent(); + if (thisChangeId === changeCounter) cleanupLastIncludeContent(); }); - } else clearContent(); + scope.$emit('$includeContentRequested'); + } else { + cleanupLastIncludeContent(); + } }); }; } @@ -13366,7 +16156,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * @description * # Overview * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js and the rules can be overridden + * These rules are bundled with angular.js, but can be overridden * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive * by specifying the mappings between * {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html @@ -13377,10 +16167,10 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html * 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. + * explicit number rule for "3" matches the number 3. There are examples of plural categories + * and explicit number rules throughout the rest of this documentation. * * # Configuring ngPluralize * You configure ngPluralize by providing 2 attributes: `count` and `when`. @@ -13390,8 +16180,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * Angular expression}; these are evaluated on the current scope for its bound value. * * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object so that Angular - * can interpret it correctly. + * string to be displayed. The value of the attribute should be a JSON object. * * The following example shows how to configure ngPluralize: * @@ -13445,7 +16234,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * 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 @@ -13533,13 +16322,20 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp restrict: 'EA', link: function(scope, element, attr) { var numberExp = attr.count, - whenExp = element.attr(attr.$attr.when), // this is because we have {{}} in attrs + whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs offset = attr.offset || 0, - whens = scope.$eval(whenExp), + whens = scope.$eval(whenExp) || {}, whensExpFns = {}, startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(); + endSymbol = $interpolate.endSymbol(), + isWhen = /^when(Minus)?(.+)$/; + forEach(attr, function(expression, attributeName) { + if (isWhen.test(attributeName)) { + whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] = + element.attr(attr.$attr[attributeName]); + } + }); forEach(whens, function(expression, key) { whensExpFns[key] = $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' + @@ -13575,203 +16371,514 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * * Special properties are exposed on the local scope of each template instance, including: * - * * `$index` – `{number}` – iterator offset of the repeated element (0..length-1) - * * `$first` – `{boolean}` – true if the repeated element is first in the iterator. - * * `$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. + * | Variable | Type | Details | + * |-----------|-----------------|-----------------------------------------------------------------------------| + * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | + * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | + * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | + * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | + * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | + * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | + * + * + * # Special repeat start and end points + * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending + * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. + * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) + * up to and including the ending HTML tag where **ng-repeat-end** is placed. + * + * The example below makes use of this feature: + *
+ *   
+ * Header {{ item }} + *
+ *
+ * Body {{ item }} + *
+ *
+ * Footer {{ item }} + *
+ *
+ * + * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: + *
+ *   
+ * Header A + *
+ *
+ * Body A + *
+ *
+ * Footer A + *
+ *
+ * Header B + *
+ *
+ * Body B + *
+ *
+ * Footer B + *
+ *
+ * + * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such + * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). * + * @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` * is a scope expression giving the collection to enumerate. * - * For example: `track in cd.tracks`. + * For example: `album in artist.albums`. * * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, * and `expression` is the scope expression giving the collection to enumerate. * * 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 tracking function + * is specified the ng-repeat associates elements by identity in the collection. It is an error to have + * more than one tracking 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.) Filters should be applied to the expression, + * before specifying a tracking expression. + * + * 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. + * + * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter + * to items in conjunction with a tracking expression. + * * @example * This example initializes the scope to a list of names and * then uses `ngRepeat` to display every person: - - -
- I have {{friends.length}} friends. They are: -
    -
  • - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. -
  • -
-
-
- - 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"]); - }); - -
- */ -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 + "'."); - } - 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 + "'."); - } - valueIdent = match[3] || match[1]; - keyIdent = match[2]; - - // 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(); - - 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} - - - - 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); - } - } - array.sort(); - } else { - array = collection || []; - } + + +
+ I have {{friends.length}} friends. They are: + +
    +
  • + [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. +
  • +
+
+
+ + .example-animate-container { + background:white; + border:1px solid black; + list-style:none; + margin:0; + padding:0; + } + + .example-animate-container > li { + padding:10px; + list-style:none; + } + + .animate-repeat.ng-enter, + .animate-repeat.ng-leave, + .animate-repeat.ng-move { + -webkit-transition:all linear 0.5s; + -moz-transition:all linear 0.5s; + -o-transition:all linear 0.5s; + transition:all linear 0.5s; + } - arrayBound = array.length-1; + .animate-repeat.ng-enter { + line-height:0; + opacity:0; + padding-top:0; + padding-bottom:0; + } + .animate-repeat.ng-enter.ng-enter-active { + line-height:20px; + opacity:1; + padding:10px; + } - // 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]; + .animate-repeat.ng-leave { + opacity:1; + line-height:20px; + padding:10px; + } + .animate-repeat.ng-leave.ng-leave-active { + opacity:0; + line-height:0; + padding-top:0; + padding-bottom:0; + } - last = lastOrder.shift(value); + .animate-repeat.ng-move { } + .animate-repeat.ng-move.ng-move-active { } + + + 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"); + }); - 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); + it('should update repeater when filter predicate changes', function() { + var r = using('.doc-example-live').repeater('ul li'); + expect(r.count()).toBe(10); - 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; - } - } else { - // new item which we don't know about - childScope = scope.$new(); - } + input('q').enter('ma'); - childScope[valueIdent] = value; - if (keyIdent) childScope[keyIdent] = key; - childScope.$index = index; - - childScope.$first = (index === 0); - childScope.$last = (index === arrayBound); - childScope.$middle = !(childScope.$first || childScope.$last); - - if (!last) { - linker(childScope, function(clone){ - cursor.after(clone); - last = { - scope: childScope, - element: (cursor = clone), - index: index - }; - nextOrder.push(value, last); - }); + expect(r.count()).toBe(2); + expect(r.row(0)).toEqual(["1","Mary","28"]); + expect(r.row(1)).toEqual(["2","Samantha","60"]); + }); + +
+ */ +var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { + var NG_REMOVED = '$$NG_REMOVED'; + var ngRepeatMinErr = minErr('ngRepeat'); + return { + transclude: 'element', + priority: 1000, + terminal: true, + compile: function(element, attr, linker) { + return function($scope, $element, $attr){ + var expression = $attr.ngRepeat; + var match = expression.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/), + trackByExp, trackByExpGetter, trackByIdFn, trackByIdArrayFn, trackByIdObjFn, lhs, rhs, valueIdentifier, keyIdentifier, + hashFnLocals = {$id: hashKey}; + + if (!match) { + throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", + 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 { + trackByIdArrayFn = function(key, value) { + return hashKey(value); + } + trackByIdObjFn = function(key) { + return key; } } - //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(); + match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/); + if (!match) { + throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", + lhs); + } + valueIdentifier = match[3] || match[1]; + keyIdentifier = match[2]; + + // 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 = {}; + + //watch props + $scope.$watchCollection(rhs, function ngRepeatAction(collection){ + var index, length, + previousNode = $element[0], // current position of the node + nextNode, + // 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 (isArrayLike(collection)) { + collectionKeys = collection; + trackByIdFn = trackByIdFn || trackByIdArrayFn; + } else { + trackByIdFn = trackByIdFn || trackByIdObjFn; + // 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); + } } + collectionKeys.sort(); } - } - lastOrder = nextOrder; - }); - }; - } -}); + arrayLength = collectionKeys.length; + + // 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.startNode) lastBlockMap[block.id] = block; + }); + // This is a duplicate and we need to throw an error + throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", + expression, trackById); + } else { + // new never before seen block + nextBlockOrder[index] = { id: trackById }; + nextBlockMap[trackById] = false; + } + } + + // remove existing items + for (key in lastBlockMap) { + if (lastBlockMap.hasOwnProperty(key)) { + block = lastBlockMap[key]; + $animate.leave(block.elements); + forEach(block.elements, function(element) { element[NG_REMOVED] = true}); + block.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.startNode) { + // if we have already seen this object, then we need to reuse the + // associated scope/element + childScope = block.scope; + + nextNode = previousNode; + do { + nextNode = nextNode.nextSibling; + } while(nextNode && nextNode[NG_REMOVED]); + + if (block.startNode == nextNode) { + // do nothing + } else { + // existing item which got moved + $animate.move(block.elements, null, jqLite(previousNode)); + } + previousNode = block.endNode; + } 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); + childScope.$odd = !(childScope.$even = index%2==0); + + if (!block.startNode) { + linker(childScope, function(clone) { + $animate.enter(clone, null, jqLite(previousNode)); + previousNode = clone; + block.scope = childScope; + block.startNode = clone[0]; + block.elements = clone; + block.endNode = clone[clone.length - 1]; + nextBlockMap[block.id] = block; + }); + } + } + lastBlockMap = nextBlockMap; + }); + }; + } + }; +}]; /** * @ngdoc directive * @name ng.directive:ngShow * * @description - * The `ngShow` and `ngHide` directives show or hide a portion of the DOM tree (HTML) - * conditionally. + * The `ngShow` directive shows and hides the given HTML element conditionally based on the expression + * provided to the ngShow attribute. The show and hide mechanism is a achieved by removing and adding + * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is a predefined CSS class present + * in AngularJS which sets the display style to none (using an !important flag). + * + *
+ * 
+ * 
+ * + * + *
+ *
+ * + * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute + * on the element causing it to become hidden. When true, the ng-hide CSS class is removed + * from the element causing the element not to appear hidden. + * + * ## Why is !important used? + * + * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector + * can be easily overridden by heavier selectors. For example, something as simple + * as changing the display style on a HTML list item would make hidden elements appear visible. + * This also becomes a bigger issue when dealing with CSS frameworks. + * + * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector + * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the + * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. + * + * ### Overriding .ng-hide + * + * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by + * restating the styles for the .ng-hide class in CSS: + *
+ * .ng-hide {
+ *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...
+ *   display:block!important;
+ *
+ *   //this is just another form of hiding an element
+ *   position:absolute;
+ *   top:-9999px;
+ *   left:-9999px;
+ * }
+ * 
+ * + * Just remember to include the important flag so the CSS override will function. + * + * ## A note about animations with ngShow + * + * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression + * is true and false. This system works similar to the animation system present with ngClass, however, the + * only difference is that you must also include the !important flag to override the display property so + * that you can perform an animation when the element is hidden during the time of the animation. + * + *
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ *   transition:0.5s linear all;
+ *   display:block!important;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * 
+ * + * @animations + * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible + * removeClass: .ng-hide - happens after 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 - - - Click me:
- Show: I show up when your checkbox is checked.
- Hide: I hide when your checkbox is checked. -
- + + + Click me:
+
+ Show: +
+ I show up when your checkbox is checked. +
+
+
+ Hide: +
+ I hide when your checkbox is checked. +
+
+
+ + .animate-show.ng-hide-add, + .animate-show.ng-hide-remove { + -webkit-transition:all linear 0.5s; + -moz-transition:all linear 0.5s; + -o-transition:all linear 0.5s; + transition:all linear 0.5s; + display:block!important; + } + + .animate-show.ng-hide-add.ng-hide-add-active, + .animate-show.ng-hide-remove { + line-height:0; + opacity:0; + padding:0 10px; + } + + .animate-show.ng-hide-add, + .animate-show.ng-hide-remove.ng-hide-remove-active { + line-height:20px; + opacity:1; + padding:10px; + border:1px solid black; + background:white; + } + + .check-element { + padding:10px; + border:1px solid black; + background:white; + } + + 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 +16888,16 @@ var ngRepeatDirective = ngDirective({ expect(element('.doc-example-live span:first:visible').count()).toEqual(1); expect(element('.doc-example-live span:last:hidden').count()).toEqual(1); }); -
-
+ +
*/ -//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 = ['$animate', function($animate) { + return function(scope, element, attr) { + scope.$watch(attr.ngShow, function ngShowWatchAction(value){ + $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide'); + }); + }; +}]; /** @@ -13797,39 +16905,151 @@ var ngShowDirective = ngDirective(function(scope, element, attr){ * @name ng.directive:ngHide * * @description - * The `ngHide` and `ngShow` directives hide or show a portion of the DOM tree (HTML) - * conditionally. + * The `ngHide` directive shows and hides the given HTML element conditionally based on the expression + * provided to the ngHide attribute. The show and hide mechanism is a achieved by removing and adding + * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is a predefined CSS class present + * in AngularJS which sets the display style to none (using an !important flag). + * + *
+ * 
+ * 
+ * + * + *
+ *
+ * + * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute + * on the element causing it to become hidden. When false, the ng-hide CSS class is removed + * from the element causing the element not to appear hidden. + * + * ## Why is !important used? + * + * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector + * can be easily overridden by heavier selectors. For example, something as simple + * as changing the display style on a HTML list item would make hidden elements appear visible. + * This also becomes a bigger issue when dealing with CSS frameworks. + * + * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector + * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the + * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. + * + * ### Overriding .ng-hide + * + * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by + * restating the styles for the .ng-hide class in CSS: + *
+ * .ng-hide {
+ *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...
+ *   display:block!important;
+ *
+ *   //this is just another form of hiding an element
+ *   position:absolute;
+ *   top:-9999px;
+ *   left:-9999px;
+ * }
+ * 
+ * + * Just remember to include the important flag so the CSS override will function. + * + * ## A note about animations with ngHide + * + * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression + * is true and false. This system works similar to the animation system present with ngClass, however, the + * only difference is that you must also include the !important flag to override the display property so + * that you can perform an animation when the element is hidden during the time of the animation. + * + *
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ *   transition:0.5s linear all;
+ *   display:block!important;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * 
+ * + * @animations + * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden + * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible * * @element ANY * @param {expression} ngHide If the {@link guide/expression expression} is truthy then * the element is shown or hidden respectively. * * @example - - - Click me:
- Show: I show up when you checkbox is checked?
- Hide: I hide when you checkbox is checked? -
- + + + Click me:
+
+ Show: +
+ I show up when your checkbox is checked. +
+
+
+ Hide: +
+ I hide when your checkbox is checked. +
+
+
+ + .animate-hide.ng-hide-add, + .animate-hide.ng-hide-remove { + -webkit-transition:all linear 0.5s; + -moz-transition:all linear 0.5s; + -o-transition:all linear 0.5s; + transition:all linear 0.5s; + display:block!important; + } + + .animate-hide.ng-hide-add.ng-hide-add-active, + .animate-hide.ng-hide-remove { + line-height:0; + opacity:0; + padding:0 10px; + } + + .animate-hide.ng-hide-add, + .animate-hide.ng-hide-remove.ng-hide-remove-active { + line-height:20px; + opacity:1; + padding:10px; + border:1px solid black; + background:white; + } + + .check-element { + padding:10px; + border:1px solid black; + background:white; + } + + 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); }); -
-
+ + */ -//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 = ['$animate', function($animate) { + return function(scope, element, attr) { + scope.$watch(attr.ngHide, function ngHideWatchAction(value){ + $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide'); + }); + }; +}]; /** * @ngdoc directive @@ -13883,92 +17103,162 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { * @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. + * + * @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 * * ... * ... - * ... * ... * * * @scope * @param {*} ngSwitch|on expression to match against ng-switch-when. * @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 - - - -
- - selection={{selection}} -
-
+ + +
+ + selection={{selection}} +
+
Settings Div
- Home Span - default -
+
Home Span
+
default
- - - 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/); - }); - - - */ -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; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - if (selectedElement) { - selectedScope.$destroy(); - selectedElement.remove(); - selectedElement = selectedScope = null; - } - if ((selectedTransclude = ctrl.cases['!' + value] || ctrl.cases['?'])) { - scope.$eval(attr.change); - selectedScope = scope.$new(); - selectedTransclude(selectedScope, function(caseElement) { - selectedElement = caseElement; - element.append(caseElement); - }); +
+ + + function Ctrl($scope) { + $scope.items = ['settings', 'home', 'other']; + $scope.selection = $scope.items[0]; } - }); + + + .animate-switch-container { + position:relative; + background:white; + border:1px solid black; + height:40px; + overflow:hidden; + } + + .animate-switch-container > div { + padding:10px; + } + + .animate-switch-container > .ng-enter, + .animate-switch-container > .ng-leave { + -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; + -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; + } + + .animate-switch-container > .ng-enter { + top:-50px; + } + .animate-switch-container > .ng-enter.ng-enter-active { + top:0; + } + + .animate-switch-container > .ng-leave { + top:0; + } + .animate-switch-container > .ng-leave.ng-leave-active { + top:50px; + } + + + 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/); + }); + + + */ +var ngSwitchDirective = ['$animate', function($animate) { + 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 watchExpr = attr.ngSwitch || attr.on, + selectedTranscludes, + selectedElements, + selectedScopes = []; + + scope.$watch(watchExpr, function ngSwitchWatchAction(value) { + for (var i= 0, ii=selectedScopes.length; i' + '
{{title}}
' + '
' + @@ -14042,177 +17335,21 @@ var ngSwitchDefaultDirective = ngDirective({ * */ var ngTranscludeDirective = ngDirective({ - controller: ['$transclude', '$element', function($transclude, $element) { - $transclude(function(clone) { + controller: ['$transclude', function($transclude) { + // remember the transclusion fn but call it during linking so that we don't process transclusion before directives on + // the parent element even when the transclusion replaces the current element. (we can't use priority here because + // that applies only to compile fns and not controllers + this.$transclude = $transclude; + }], + + link: function($scope, $element, $attrs, controller) { + controller.$transclude(function(clone) { + $element.html(''); $element.append(clone); }); - }] + } }); -/** - * @ngdoc directive - * @name ng.directive:ngView - * @restrict ECA - * - * @description - * # Overview - * `ngView` is a directive that complements the {@link ng.$route $route} service by - * including the rendered template of the current route into the main layout (`index.html`) file. - * Every time the current route changes, the included view changes with it according to the - * configuration of the `$route` service. - * - * @scope - * @example - - -
- Choose: - Moby | - Moby: Ch1 | - Gatsby | - Gatsby: Ch4 | - Scarlet Letter
- -
-
- -
$location.path() = {{$location.path()}}
-
$route.current.templateUrl = {{$route.current.templateUrl}}
-
$route.current.params = {{$route.current.params}}
-
$route.current.scope.name = {{$route.current.scope.name}}
-
$routeParams = {{$routeParams}}
-
-
- - - controller: {{name}}
- Book Id: {{params.bookId}}
-
- - - controller: {{name}}
- Book Id: {{params.bookId}}
- Chapter Id: {{params.chapterId}} -
- - - angular.module('ngView', [], function($routeProvider, $locationProvider) { - $routeProvider.when('/Book/:bookId', { - templateUrl: 'book.html', - controller: BookCntl - }); - $routeProvider.when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: ChapterCntl - }); - - // 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 BookCntl($scope, $routeParams) { - $scope.name = "BookCntl"; - $scope.params = $routeParams; - } - - function ChapterCntl($scope, $routeParams) { - $scope.name = "ChapterCntl"; - $scope.params = $routeParams; - } - - - - it('should load and compile correct template', function() { - element('a:contains("Moby: Ch1")').click(); - var content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: ChapterCntl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element('a:contains("Scarlet")').click(); - content = element('.doc-example-live [ng-view]').text(); - expect(content).toMatch(/controller\: BookCntl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - -
- */ - - -/** - * @ngdoc event - * @name ng.directive:ngView#$viewContentLoaded - * @eventOf ng.directive:ngView - * @eventType emit on the current ngView scope - * @description - * Emitted every time the ngView content is reloaded. - */ -var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$compile', - '$controller', - function($http, $templateCache, $route, $anchorScroll, $compile, - $controller) { - return { - restrict: 'ECA', - terminal: true, - link: function(scope, element, attr) { - var lastScope, - onloadExp = attr.onload || ''; - - scope.$on('$routeChangeSuccess', update); - update(); - - - function destroyLastScope() { - if (lastScope) { - lastScope.$destroy(); - lastScope = null; - } - } - - function clearContent() { - element.html(''); - destroyLastScope(); - } - - function update() { - var locals = $route.current && $route.current.locals, - template = locals && locals.$template; - - if (template) { - element.html(template); - destroyLastScope(); - - var link = $compile(element.contents()), - current = $route.current, - controller; - - lastScope = current.scope = scope.$new(); - if (current.controller) { - locals.$scope = lastScope; - controller = $controller(current.controller, locals); - element.children().data('$ngControllerController', controller); - } - - link(lastScope); - lastScope.$emit('$viewContentLoaded'); - lastScope.$eval(onloadExp); - - // $anchorScroll might listen on event... - $anchorScroll(); - } else { - clearContent(); - } - } - } - }; -}]; - /** * @ngdoc directive * @name ng.directive:script @@ -14271,8 +17408,8 @@ var scriptDirective = ['$templateCache', function($templateCache) { * Optionally `ngOptions` attribute can be used to dynamically generate a list of `` * 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 @@ -14381,8 +17521,8 @@ var scriptDirective = ['$templateCache', function($templateCache) { 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 { @@ -14512,7 +17652,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { } }; - selectElement.bind('change', function() { + selectElement.on('change', function() { scope.$apply(function() { if (unknownOption.parent()) unknownOption.remove(); ngModelCtrl.$setViewValue(selectElement.val()); @@ -14538,7 +17678,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { } }); - selectElement.bind('change', function() { + selectElement.on('change', function() { scope.$apply(function() { var array = []; forEach(selectElement.find('option'), function(option) { @@ -14555,9 +17695,9 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { var match; if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw Error( - "Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '" + optionsExp + "'."); + throw minErr('ngOptions')('iexp', + "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", + optionsExp, startingTag(selectElement)); } var displayFn = $parse(match[2] || match[1]), @@ -14566,6 +17706,8 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { 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 @@ -14587,7 +17729,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { // clear contents, we'll add what's needed based on the model selectElement.html(''); - selectElement.bind('change', function() { + selectElement.on('change', function() { scope.$apply(function() { var optionGroup, collection = valuesFn(scope) || [], @@ -14606,7 +17748,14 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { 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 +17767,19 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { } 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 +17811,15 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { 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 +17831,21 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { 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 }); @@ -14820,7 +17993,7 @@ var optionDirective = ['$interpolate', function($interpolate) { selectCtrl.addOption(attr.value); } - element.bind('$destroy', function() { + element.on('$destroy', function() { selectCtrl.removeOption(attr.value); }); }; @@ -14844,4 +18017,4 @@ var styleDirective = valueFn({ }); })(window, document); -angular.element(document).find('head').append(''); \ No newline at end of file +angular.element(document).find('head').prepend(''); \ No newline at end of file diff --git a/app/lib/angular/angular.min.js b/app/lib/angular/angular.min.js old mode 100644 new mode 100755 index 2b220688df..6456697db4 --- a/app/lib/angular/angular.min.js +++ b/app/lib/angular/angular.min.js @@ -1,163 +1,186 @@ /* - AngularJS v1.0.7 + AngularJS v1.2.0-rc.2 (c) 2010-2012 Google, Inc. http://angularjs.org License: MIT */ -(function(P,T,q){'use strict';function m(b,a,c){var d;if(b)if(H(b))for(d in b)d!="prototype"&&d!="length"&&d!="name"&&b.hasOwnProperty(d)&&a.call(c,b[d],d);else if(b.forEach&&b.forEach!==m)b.forEach(a,c);else if(!b||typeof b.length!=="number"?0:typeof b.hasOwnProperty!="function"&&typeof b.constructor!="function"||b instanceof K||ca&&b instanceof ca||wa.call(b)!=="[object Object]"||typeof b.callee==="function")for(d=0;d=0&&b.splice(c,1);return a}function U(b,a){if(oa(b)||b&&b.$evalAsync&&b.$watch)throw Error("Can't copy Window or Scope");if(a){if(b===a)throw Error("Can't copy equivalent objects or arrays");if(E(b))for(var c=a.length=0;c2?ha.call(arguments,2):[];return H(a)&&!(a instanceof RegExp)?c.length?function(){return arguments.length?a.apply(b,c.concat(ha.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}:a}function ic(b,a){var c=a;/^\$+/.test(b)?c=q:oa(a)?c="$WINDOW":a&&T===a?c="$DOCUMENT":a&&a.$evalAsync&&a.$watch&&(c="$SCOPE");return c}function da(b,a){return JSON.stringify(b, -ic,a?" ":null)}function pb(b){return B(b)?JSON.parse(b):b}function Ua(b){b&&b.length!==0?(b=z(""+b),b=!(b=="f"||b=="0"||b=="false"||b=="no"||b=="n"||b=="[]")):b=!1;return b}function pa(b){b=u(b).clone();try{b.html("")}catch(a){}var c=u("
").append(b).html();try{return b[0].nodeType===3?z(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+z(b)})}catch(d){return z(c)}}function Va(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.split("="),d=decodeURIComponent(c[0]), -a[d]=y(c[1])?decodeURIComponent(c[1]):!0)});return a}function qb(b){var a=[];m(b,function(b,d){a.push(Wa(d,!0)+(b===!0?"":"="+Wa(b,!0)))});return a.length?a.join("&"):""}function Xa(b){return Wa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Wa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function jc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,h=["ng:app","ng-app","x-ng-app", -"data-ng-app"],f=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;m(h,function(a){h[a]=!0;c(T.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(m(b.querySelectorAll("."+a),c),m(b.querySelectorAll("."+a+"\\:"),c),m(b.querySelectorAll("["+a+"]"),c))});m(d,function(a){if(!e){var b=f.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):m(a.attributes,function(b){if(!e&&h[b.name])e=a,g=b.value})}});e&&a(e,g?[g]:[])}function rb(b,a){var c=function(){b=u(b);a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement", -b)}]);a.unshift("ng");var c=sb(a);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(P&&!d.test(P.name))return c();P.name=P.name.replace(d,"");Ya.resumeBootstrap=function(b){m(b,function(b){a.push(b)});c()}}function Za(b,a){a=a||"_";return b.replace(kc,function(b,d){return(d?a:"")+b.toLowerCase()})}function $a(b,a,c){if(!b)throw Error("Argument '"+(a||"?")+"' is "+(c||"required")); -return b}function qa(b,a,c){c&&E(b)&&(b=b[b.length-1]);$a(H(b),a,"not a function, got "+(b&&typeof b=="object"?b.constructor.name||"Object":typeof b));return b}function lc(b){function a(a,b,e){return a[b]||(a[b]=e())}return a(a(b,"angular",Object),"module",function(){var b={};return function(d,e,g){e&&b.hasOwnProperty(d)&&(b[d]=null);return a(b,d,function(){function a(c,d,e){return function(){b[e||"push"]([c,d,arguments]);return k}}if(!e)throw Error("No module: "+d);var b=[],c=[],j=a("$injector", -"invoke"),k={_invokeQueue:b,_runBlocks:c,requires:e,name:d,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:j,run:function(a){c.push(a);return this}};g&&j(g);return k})}})}function tb(b){return b.replace(mc,function(a,b,d,e){return e?d.toUpperCase(): -d}).replace(nc,"Moz$1")}function ab(b,a){function c(){var e;for(var b=[this],c=a,h,f,i,j,k,l;b.length;){h=b.shift();f=0;for(i=h.length;f 
"+b;a.removeChild(a.firstChild);bb(this,a.childNodes);this.remove()}else bb(this,b)}function cb(b){return b.cloneNode(!0)}function ra(b){ub(b);for(var a=0,b=b.childNodes||[];a-1}function xb(b,a){a&&m(a.split(" "),function(a){b.className=Q((" "+b.className+" ").replace(/[\n\t]/g," ").replace(" "+Q(a)+" "," "))})} -function yb(b,a){a&&m(a.split(" "),function(a){if(!Ca(b,a))b.className=Q(b.className+" "+Q(a))})}function bb(b,a){if(a)for(var a=!a.nodeName&&y(a.length)&&!oa(a)?a:[a],c=0;c4096&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!")}else{if(i.cookie!==$){$=i.cookie;d=$.split("; ");r={};for(f=0;f0&&(a=unescape(e.substring(0,j)),r[a]===q&&(r[a]=unescape(e.substring(j+1))))}return r}};f.defer=function(a,b){var c; -p++;c=l(function(){delete o[c];e(a)},b||0);o[c]=!0;return c};f.defer.cancel=function(a){return o[a]?(delete o[a],n(a),e(C),!0):!1}}function wc(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new vc(b,d,a,c)}]}function xc(){this.$get=function(){function b(b,d){function e(a){if(a!=l){if(n){if(n==a)n=a.n}else n=a;g(a.n,a.p);g(a,l);l=a;l.n=null}}function g(a,b){if(a!=b){if(a)a.p=b;if(b)b.n=a}}if(b in a)throw Error("cacheId "+b+" taken");var h=0,f=v({},d,{id:b}),i={},j=d&& -d.capacity||Number.MAX_VALUE,k={},l=null,n=null;return a[b]={put:function(a,b){var c=k[a]||(k[a]={key:a});e(c);w(b)||(a in i||h++,i[a]=b,h>j&&this.remove(n.key))},get:function(a){var b=k[a];if(b)return e(b),i[a]},remove:function(a){var b=k[a];if(b){if(b==l)l=b.p;if(b==n)n=b.n;g(b.n,b.p);delete k[a];delete i[a];h--}},removeAll:function(){i={};h=0;k={};l=n=null},destroy:function(){k=f=i=null;delete a[b]},info:function(){return v({},f,{size:h})}}}var a={};b.info=function(){var b={};m(a,function(a,e){b[e]= -a.info()});return b};b.get=function(b){return a[b]};return b}}function yc(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function Db(b){var a={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,g="Template must have exactly one root element. was: ",h=/^\s*(https?|ftp|mailto|file):/;this.directive=function i(d,e){B(d)?($a(e,"directive"),a.hasOwnProperty(d)||(a[d]=[],b.factory(d+c,["$injector","$exceptionHandler",function(b,c){var e=[];m(a[d], -function(a){try{var g=b.invoke(a);if(H(g))g={compile:I(g)};else if(!g.compile&&g.link)g.compile=I(g.link);g.priority=g.priority||0;g.name=g.name||d;g.require=g.require||g.controller&&g.name;g.restrict=g.restrict||"A";e.push(g)}catch(h){c(h)}});return e}])),a[d].push(e)):m(d,nb(i));return this};this.urlSanitizationWhitelist=function(a){return y(a)?(h=a,this):h};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document",function(b, -j,k,l,n,o,p,s,t){function x(a,b,c){a instanceof u||(a=u(a));m(a,function(b,c){b.nodeType==3&&b.nodeValue.match(/\S+/)&&(a[c]=u(b).wrap("").parent()[0])});var d=A(a,b,a,c);return function(b,c){$a(b,"scope");for(var e=c?ua.clone.call(a):a,j=0,g=e.length;jr.priority)break;if(Y=r.scope)ta("isolated scope",J,r,D),L(Y)&&(M(D,"ng-isolate-scope"),J=r),M(D,"ng-scope"),s=s||r;F=r.name;if(Y=r.controller)y=y||{},ta("'"+F+"' controller",y[F],r,D),y[F]=r;if(Y=r.transclude)ta("transclusion",ja,r,D),ja=r,l=r.priority,Y=="element"?(W=u(b),D=c.$$element=u(T.createComment(" "+ -F+": "+c[F]+" ")),b=D[0],C(e,u(W[0]),b),V=x(W,d,l)):(W=u(cb(b)).contents(),D.html(""),V=x(W,d));if(Y=r.template)if(ta("template",A,r,D),A=r,Y=Fb(Y),r.replace){W=u("
"+Q(Y)+"
").contents();b=W[0];if(W.length!=1||b.nodeType!==1)throw Error(g+Y);C(e,D,b);F={$attr:{}};a=a.concat(N(b,a.splice(v+1,a.length-(v+1)),F));$(c,F);z=a.length}else D.html(Y);if(r.templateUrl)ta("template",A,r,D),A=r,i=R(a.splice(v,a.length-v),i,D,c,e,r.replace,V),z=a.length;else if(r.compile)try{w=r.compile(D,c,V),H(w)? -j(null,w):w&&j(w.pre,w.post)}catch(G){k(G,pa(D))}if(r.terminal)i.terminal=!0,l=Math.max(l,r.priority)}i.scope=s&&s.scope;i.transclude=ja&&V;return i}function r(d,e,g,j){var h=!1;if(a.hasOwnProperty(e))for(var o,e=b.get(e+c),l=0,p=e.length;lo.priority)&&o.restrict.indexOf(g)!=-1)d.push(o),h=!0}catch(n){k(n)}return h}function $(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;m(a,function(d,e){e.charAt(0)!="$"&&(b[e]&&(d+=(e==="style"?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});m(b, -function(b,g){g=="class"?(M(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):g=="style"?e.attr("style",e.attr("style")+";"+b):g.charAt(0)!="$"&&!a.hasOwnProperty(g)&&(a[g]=b,d[g]=c[g])})}function R(a,b,c,d,e,j,h){var i=[],k,o,p=c[0],t=a.shift(),s=v({},t,{controller:null,templateUrl:null,transclude:null,scope:null});c.html("");l.get(t.templateUrl,{cache:n}).success(function(l){var n,t,l=Fb(l);if(j){t=u("
"+Q(l)+"
").contents();n=t[0];if(t.length!=1||n.nodeType!==1)throw Error(g+l);l={$attr:{}}; -C(e,c,n);N(n,a,l);$(d,l)}else n=p,c.html(l);a.unshift(s);k=J(a,n,d,h);for(o=A(c[0].childNodes,h);i.length;){var r=i.pop(),l=i.pop();t=i.pop();var ia=i.pop(),D=n;t!==p&&(D=cb(n),C(l,u(t),D));k(function(){b(o,ia,D,e,r)},ia,D,e,r)}i=null}).error(function(a,b,c,d){throw Error("Failed to load template: "+d.url);});return function(a,c,d,e,g){i?(i.push(c),i.push(d),i.push(e),i.push(g)):k(function(){b(o,c,d,e,g)},c,d,e,g)}}function F(a,b){return b.priority-a.priority}function ta(a,b,c,d){if(b)throw Error("Multiple directives ["+ -b.name+", "+c.name+"] asking for "+a+" on: "+pa(d));}function y(a,b){var c=j(b,!0);c&&a.push({priority:0,compile:I(function(a,b){var d=b.parent(),e=d.data("$binding")||[];e.push(c);M(d.data("$binding",e),"ng-binding");a.$watch(c,function(a){b[0].nodeValue=a})})})}function V(a,b,c,d){var e=j(c,!0);e&&b.push({priority:100,compile:I(function(a,b,c){b=c.$$observers||(c.$$observers={});d==="class"&&(e=j(c[d],!0));c[d]=q;(b[d]||(b[d]=[])).$$inter=!0;(c.$$observers&&c.$$observers[d].$$scope||a).$watch(e, -function(a){c.$set(d,a)})})})}function C(a,b,c){var d=b[0],e=d.parentNode,g,j;if(a){g=0;for(j=a.length;g -0){var e=R[0],f=e.text;if(f==a||f==b||f==c||f==d||!a&&!b&&!c&&!d)return e}return!1}function f(b,c,d,f){return(b=h(b,c,d,f))?(a&&!b.json&&e("is not valid json",b),R.shift(),b):!1}function i(a){f(a)||e("is unexpected, expecting ["+a+"]",h())}function j(a,b){return function(c,d){return a(c,d,b)}}function k(a,b,c){return function(d,e){return b(d,e,a,c)}}function l(){for(var a=[];;)if(R.length>0&&!h("}",")",";","]")&&a.push(w()),!f(";"))return a.length==1?a[0]:function(b,c){for(var d,e=0;e","<=",">="))a=k(a,b.fn,t());return a}function x(){for(var a=m(),b;b=f("*","/","%");)a=k(a,b.fn,m());return a}function m(){var a;return f("+")?A():(a=f("-"))?k(r,a.fn,m()):(a=f("!"))?j(a.fn,m()):A()}function A(){var a;if(f("("))a=w(),i(")");else if(f("["))a=N();else if(f("{"))a=J();else{var b=f();(a=b.fn)||e("not a primary expression",b)}for(var c;b=f("(","[",".");)b.text==="("?(a=y(a,c),c=null):b.text==="["?(c=a,a=V(a)):b.text==="."?(c=a,a=u(a)):e("IMPOSSIBLE");return a}function N(){var a= -[];if(g().text!="]"){do a.push(F());while(f(","))}i("]");return function(b,c){for(var d=[],e=0;e1;d++){var e=a.shift(),g=b[e];g||(g={},b[e]=g);b=g}return b[a.shift()]= -c}function gb(b,a,c){if(!a)return b;for(var a=a.split("."),d,e=b,g=a.length,h=0;h7),hasEvent:function(c){if(c=="input"&&Z==9)return!1;if(w(a[c])){var e=b.document.createElement("div");a[c]="on"+c in e}return a[c]},csp:!1}}]}function Vc(){this.$get=I(P)}function Ob(b){var a={},c,d,e;if(!b)return a;m(b.split("\n"),function(b){e=b.indexOf(":");c=z(Q(b.substr(0, -e)));d=Q(b.substr(e+1));c&&(a[c]?a[c]+=", "+d:a[c]=d)});return a}function Pb(b){var a=L(b)?b:q;return function(c){a||(a=Ob(b));return c?a[z(c)]||null:a}}function Qb(b,a,c){if(H(c))return c(b,a);m(c,function(c){b=c(b,a)});return b}function Wc(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d=this.defaults={transformResponse:[function(d){B(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=pb(d,!0)));return d}],transformRequest:[function(a){return L(a)&&wa.apply(a)!=="[object File]"?da(a):a}], -headers:{common:{Accept:"application/json, text/plain, */*","X-Requested-With":"XMLHttpRequest"},post:{"Content-Type":"application/json;charset=utf-8"},put:{"Content-Type":"application/json;charset=utf-8"}}},e=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,i,j,k){function l(a){function c(a){var b=v({},a,{data:Qb(a.data,a.headers,f)});return 200<=a.status&&a.status<300?b:j.reject(b)}a.method=la(a.method);var e=a.transformRequest|| -d.transformRequest,f=a.transformResponse||d.transformResponse,g=d.headers,g=v({"X-XSRF-TOKEN":b.cookies()["XSRF-TOKEN"]},g.common,g[z(a.method)],a.headers),e=Qb(a.data,Pb(g),e),i;w(a.data)&&delete g["Content-Type"];i=n(a,e,g);i=i.then(c,c);m(s,function(a){i=a(i)});i.success=function(b){i.then(function(c){b(c.data,c.status,c.headers,a)});return i};i.error=function(b){i.then(null,function(c){b(c.data,c.status,c.headers,a)});return i};return i}function n(b,c,d){function e(a,b,c){m&&(200<=a&&a<300?m.put(q, -[a,b,Ob(c)]):m.remove(q));f(b,a,c);i.$apply()}function f(a,c,d){c=Math.max(c,0);(200<=c&&c<300?k.resolve:k.reject)({data:a,status:c,headers:Pb(d),config:b})}function h(){var a=za(l.pendingRequests,b);a!==-1&&l.pendingRequests.splice(a,1)}var k=j.defer(),n=k.promise,m,s,q=o(b.url,b.params);l.pendingRequests.push(b);n.then(h,h);b.cache&&b.method=="GET"&&(m=L(b.cache)?b.cache:p);if(m)if(s=m.get(q))if(s.then)return s.then(h,h),s;else E(s)?f(s[1],s[0],U(s[2])):f(s,200,{});else m.put(q,n);s||a(b.method, -q,c,e,d,b.timeout,b.withCredentials);return n}function o(a,b){if(!b)return a;var c=[];fc(b,function(a,b){a==null||a==q||(L(a)&&(a=da(a)),c.push(encodeURIComponent(b)+"="+encodeURIComponent(a)))});return a+(a.indexOf("?")==-1?"?":"&")+c.join("&")}var p=c("$http"),s=[];m(e,function(a){s.push(B(a)?k.get(a):k.invoke(a))});l.pendingRequests=[];(function(a){m(arguments,function(a){l[a]=function(b,c){return l(v(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){m(arguments,function(a){l[a]= -function(b,c,d){return l(v(d||{},{method:a,url:b,data:c}))}})})("post","put");l.defaults=d;return l}]}function Xc(){this.$get=["$browser","$window","$document",function(b,a,c){return Yc(b,Zc,b.defer,a.angular.callbacks,c[0],a.location.protocol.replace(":",""))}]}function Yc(b,a,c,d,e,g){function h(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;Z?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror= -d;e.body.appendChild(c)}return function(e,i,j,k,l,n,o){function p(a,c,d,e){c=(i.match(Hb)||["",g])[1]=="file"?d?200:404:c;a(c==1223?204:c,d,e);b.$$completeOutstandingRequest(C)}b.$$incOutstandingRequestCount();i=i||b.url();if(z(e)=="jsonp"){var s="_"+(d.counter++).toString(36);d[s]=function(a){d[s].data=a};h(i.replace("JSON_CALLBACK","angular.callbacks."+s),function(){d[s].data?p(k,200,d[s].data):p(k,-2);delete d[s]})}else{var t=new a;t.open(e,i,!0);m(l,function(a,b){a&&t.setRequestHeader(b,a)}); -var q;t.onreadystatechange=function(){if(t.readyState==4){var a=t.getAllResponseHeaders(),b=["Cache-Control","Content-Language","Content-Type","Expires","Last-Modified","Pragma"];a||(a="",m(b,function(b){var c=t.getResponseHeader(b);c&&(a+=b+": "+c+"\n")}));p(k,q||t.status,t.responseText,a)}};if(o)t.withCredentials=!0;t.send(j||"");n>0&&c(function(){q=-1;t.abort()},n)}}}function $c(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0, -maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),SHORTMONTH:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),DAY:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),SHORTDAY:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","), -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"},pluralCat:function(b){return b===1?"one":"other"}}}}function ad(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,f,i){var j=c.defer(),k=j.promise,l=y(i)&&!i,f=a.defer(function(){try{j.resolve(e())}catch(a){j.reject(a),d(a)}l||b.$apply()},f),i=function(){delete g[k.$$timeoutId]}; -k.$$timeoutId=f;g[f]=j;k.then(i,i);return k}var g={};e.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),a.defer.cancel(b.$$timeoutId)):!1};return e}]}function Rb(b){function a(a,e){return b.factory(a+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Sb);a("date",Tb);a("filter",bd);a("json",cd);a("limitTo",dd);a("lowercase",ed);a("number",Ub);a("orderBy",Vb);a("uppercase",fd)}function bd(){return function(b, -a){if(!E(b))return b;var c=[];c.check=function(a){for(var b=0;b-1;case "object":for(var c in a)if(c.charAt(0)!=="$"&&d(a[c],b))return!0;return!1;case "array":for(c=0;ce+1?h="0":(f=h,j=!0)}if(!j){h=(h.split(Xb)[1]||"").length;w(e)&&(e=Math.min(Math.max(a.minFrac,h),a.maxFrac));var h=Math.pow(10,e),b=Math.round(b*h)/h,b=(""+b).split(Xb),h=b[0],b=b[1]||"",j=0,k=a.lgSize, -l=a.gSize;if(h.length>=k+l)for(var j=h.length-k,n=0;n0||e> --c)e+=c;e===0&&c==-12&&(e=12);return jb(e,a,d)}}function Ja(b,a){return function(c,d){var e=c["get"+b](),g=la(a?"SHORT"+b:b);return d[g][e]}}function Tb(b){function a(a){var b;if(b=a.match(c)){var a=new Date(0),g=0,h=0;b[9]&&(g=G(b[9]+b[10]),h=G(b[9]+b[11]));a.setUTCFullYear(G(b[1]),G(b[2])-1,G(b[3]));a.setUTCHours(G(b[4]||0)-g,G(b[5]||0)-h,G(b[6]||0),G(b[7]||0))}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c, -e){var g="",h=[],f,i,e=e||"mediumDate",e=b.DATETIME_FORMATS[e]||e;B(c)&&(c=gd.test(c)?G(c):a(c));Qa(c)&&(c=new Date(c));if(!na(c))return c;for(;e;)(i=hd.exec(e))?(h=h.concat(ha.call(i,1)),e=h.pop()):(h.push(e),e=null);m(h,function(a){f=id[a];g+=f?f(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function cd(){return function(b){return da(b,!0)}}function dd(){return function(b,a){if(!(b instanceof Array))return b;var a=G(a),c=[],d,e;if(!b||!(b instanceof Array))return c; -a>b.length?a=b.length:a<-b.length&&(a=-b.length);a>0?(d=0,e=a):(d=b.length+a,e=b.length);for(;dn?(d.$setValidity("maxlength",!1),q):(d.$setValidity("maxlength",!0),a)};d.$parsers.push(c);d.$formatters.push(c)}}function kb(b,a){b="ngClass"+b;return S(function(c,d,e){function g(b){if(a===!0||c.$index%2===a)i&&!fa(b,i)&&h(i),f(b);i=U(b)}function h(a){L(a)&& -!E(a)&&(a=Ra(a,function(a,b){if(a)return b}));d.removeClass(E(a)?a.join(" "):a)}function f(a){L(a)&&!E(a)&&(a=Ra(a,function(a,b){if(a)return b}));a&&d.addClass(E(a)?a.join(" "):a)}var i=q;c.$watch(e[b],g,!0);e.$observe("class",function(){var a=c.$eval(e[b]);g(a,a)});b!=="ngClass"&&c.$watch("$index",function(d,g){var i=d&1;i!==g&1&&(i===a?f(c.$eval(e[b])):h(c.$eval(e[b])))})})}var z=function(b){return B(b)?b.toLowerCase():b},la=function(b){return B(b)?b.toUpperCase():b},Z=G((/msie (\d+)/.exec(z(navigator.userAgent))|| -[])[1]),u,ca,ha=[].slice,Pa=[].push,wa=Object.prototype.toString,Ya=P.angular||(P.angular={}),sa,fb,aa=["0","0","0"];C.$inject=[];ma.$inject=[];fb=Z<9?function(b){b=b.nodeName?b:b[0];return b.scopeName&&b.scopeName!="HTML"?la(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var kc=/[A-Z]/g,jd={full:"1.0.7",major:1,minor:0,dot:7,codeName:"monochromatic-rainbow"},Ba=K.cache={},Aa=K.expando="ng-"+(new Date).getTime(),oc=1,$b=P.document.addEventListener? -function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},db=P.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},mc=/([\:\-\_]+(.))/g,nc=/^moz([A-Z])/,ua=K.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;this.bind("DOMContentLoaded",a);K(P).bind("load",a)},toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return b>=0?u(this[b]):u(this[this.length+ -b])},length:0,push:Pa,sort:[].sort,splice:[].splice},Ea={};m("multiple,selected,checked,disabled,readOnly,required".split(","),function(b){Ea[z(b)]=b});var Bb={};m("input,select,option,textarea,button,form".split(","),function(b){Bb[la(b)]=!0});m({data:wb,inheritedData:Da,scope:function(b){return Da(b,"$scope")},controller:zb,injector:function(b){return Da(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Ca,css:function(b,a,c){a=tb(a);if(y(c))b.style[a]=c;else{var d;Z<=8&&(d= -b.currentStyle&&b.currentStyle[a],d===""&&(d="auto"));d=d||b.style[a];Z<=8&&(d=d===""?q:d);return d}},attr:function(b,a,c){var d=z(a);if(Ea[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||C).specified?d:q;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),b===null?q:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:v(Z<9?function(b,a){if(b.nodeType==1){if(w(a))return b.innerText; -b.innerText=a}else{if(w(a))return b.nodeValue;b.nodeValue=a}}:function(b,a){if(w(a))return b.textContent;b.textContent=a},{$dv:""}),val:function(b,a){if(w(a))return b.value;b.value=a},html:function(b,a){if(w(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Mc={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'},ib={},Zc=P.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest."); -};Rb.$inject=["$provide"];Sb.$inject=["$locale"];Ub.$inject=["$locale"];var Xb=".",id={yyyy:O("FullYear",4),yy:O("FullYear",2,0,!0),y:O("FullYear",1),MMMM:Ja("Month"),MMM:Ja("Month",!0),MM:O("Month",2,1),M:O("Month",1,1),dd:O("Date",2),d:O("Date",1),HH:O("Hours",2),H:O("Hours",1),hh:O("Hours",2,-12),h:O("Hours",1,-12),mm:O("Minutes",2),m:O("Minutes",1),ss:O("Seconds",2),s:O("Seconds",1),EEEE:Ja("Day"),EEE:Ja("Day",!0),a:function(a,c){return a.getHours()<12?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){var a= --1*a.getTimezoneOffset(),c=a>=0?"+":"";c+=jb(Math[a>0?"floor":"ceil"](a/60),2)+jb(Math.abs(a%60),2);return c}},hd=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,gd=/^\d+$/;Tb.$inject=["$locale"];var ed=I(z),fd=I(la);Vb.$inject=["$parse"];var kd=I({restrict:"E",compile:function(a,c){Z<=8&&(!c.href&&!c.name&&c.$set("href",""),a.append(T.createComment("IE fix")));return function(a,c){c.bind("click",function(a){c.attr("href")||a.preventDefault()})}}}),lb={};m(Ea,function(a, -c){var d=ea("ng-"+c);lb[d]=function(){return{priority:100,compile:function(){return function(a,g,h){a.$watch(h[d],function(a){h.$set(c,!!a)})}}}}});m(["src","href"],function(a){var c=ea("ng-"+a);lb[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(a,c),Z&&e.prop(a,g[a]))})}}}});var Ma={$addControl:C,$removeControl:C,$setValidity:C,$setDirty:C};Yb.$inject=["$element","$attrs","$scope"];var Pa=function(a){return["$timeout",function(c){var d={name:"form",restrict:"E", -controller:Yb,compile:function(){return{pre:function(a,d,h,f){if(!h.action){var i=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};$b(d[0],"submit",i);d.bind("$destroy",function(){c(function(){db(d[0],"submit",i)},0,!1)})}var j=d.parent().controller("form"),k=h.name||h.ngForm;k&&(a[k]=f);j&&d.bind("$destroy",function(){j.$removeControl(f);k&&(a[k]=q);v(f,Ma)})}}}};return a?v(U(d),{restrict:"EAC"}):d}]},ld=Pa(),md=Pa(!0),nd=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, -od=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/,pd=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,bc={text:Oa,number:function(a,c,d,e,g,h){Oa(a,c,d,e,g,h);e.$parsers.push(function(a){var c=X(a);return c||pd.test(a)?(e.$setValidity("number",!0),a===""?null:c?a:parseFloat(a)):(e.$setValidity("number",!1),q)});e.$formatters.push(function(a){return X(a)?"":""+a});if(d.min){var f=parseFloat(d.min),a=function(a){return!X(a)&&ai?(e.$setValidity("max",!1),q):(e.$setValidity("max",!0),a)};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(a){return X(a)||Qa(a)?(e.$setValidity("number",!0),a):(e.$setValidity("number",!1),q)})},url:function(a,c,d,e,g,h){Oa(a,c,d,e,g,h);a=function(a){return X(a)||nd.test(a)?(e.$setValidity("url",!0),a):(e.$setValidity("url",!1),q)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a, -c,d,e,g,h){Oa(a,c,d,e,g,h);a=function(a){return X(a)||od.test(a)?(e.$setValidity("email",!0),a):(e.$setValidity("email",!1),q)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){w(d.name)&&c.attr("name",xa());c.bind("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,h=d.ngFalseValue;B(g)||(g=!0);B(h)||(h=!1);c.bind("click", -function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:h})},hidden:C,button:C,submit:C,reset:C},cc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,h){h&&(bc[z(g.type)]||bc.text)(d,e,g,h,c,a)}}}],La="ng-valid",Ka="ng-invalid",Na="ng-pristine",Zb="ng-dirty",qd=["$scope","$exceptionHandler","$attrs","$element","$parse", -function(a,c,d,e,g){function h(a,c){c=c?"-"+Za(c,"-"):"";e.removeClass((a?Ka:La)+c).addClass((a?La:Ka)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var f=g(d.ngModel),i=f.assign;if(!i)throw Error(Eb+d.ngModel+" ("+pa(e)+")");this.$render=C;var j=e.inheritedData("$formController")||Ma,k=0,l=this.$error={};e.addClass(Na);h(!0);this.$setValidity=function(a, -c){if(l[a]!==!c){if(c){if(l[a]&&k--,!k)h(!0),this.$valid=!0,this.$invalid=!1}else h(!1),this.$invalid=!0,this.$valid=!1,k++;l[a]=!c;h(c,a);j.$setValidity(a,c,this)}};this.$setViewValue=function(d){this.$viewValue=d;if(this.$pristine)this.$dirty=!0,this.$pristine=!1,e.removeClass(Na).addClass(Zb),j.$setDirty();m(this.$parsers,function(a){d=a(d)});if(this.$modelValue!==d)this.$modelValue=d,i(a,d),m(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};var n=this;a.$watch(function(){var c= -f(a);if(n.$modelValue!==c){var d=n.$formatters,e=d.length;for(n.$modelValue=c;e--;)c=d[e](c);if(n.$viewValue!==c)n.$viewValue=c,n.$render()}})}],rd=function(){return{require:["ngModel","^?form"],controller:qd,link:function(a,c,d,e){var g=e[0],h=e[1]||Ma;h.$addControl(g);c.bind("$destroy",function(){h.$removeControl(g)})}}},sd=I({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),dc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required= -!0;var g=function(a){if(d.required&&(X(a)||a===!1))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},td=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){var c=[];a&&m(a.split(g),function(a){a&&c.push(Q(a))});return c});e.$formatters.push(function(a){return E(a)?a.join(", "): -q})}}},ud=/^(true|false|\d+)$/,vd=function(){return{priority:100,compile:function(a,c){return ud.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a,!1)})}}}},wd=S(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==q?"":a)})}),xd=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate", -function(a){d.text(a)})}}],yd=[function(){return function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBindHtmlUnsafe);a.$watch(d.ngBindHtmlUnsafe,function(a){c.html(a||"")})}}],zd=kb("",!0),Ad=kb("Odd",0),Bd=kb("Even",1),Cd=S({compile:function(a,c){c.$set("ngCloak",q);a.removeClass("ng-cloak")}}),Dd=[function(){return{scope:!0,controller:"@"}}],Ed=["$sniffer",function(a){return{priority:1E3,compile:function(){a.csp=!0}}}],ec={};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave".split(" "), -function(a){var c=ea("ng-"+a);ec[c]=["$parse",function(d){return function(e,g,h){var f=d(h[c]);g.bind(z(a),function(a){e.$apply(function(){f(e,{$event:a})})})}}]});var Fd=S(function(a,c,d){c.bind("submit",function(){a.$apply(d.ngSubmit)})}),Gd=["$http","$templateCache","$anchorScroll","$compile",function(a,c,d,e){return{restrict:"ECA",terminal:!0,compile:function(g,h){var f=h.ngInclude||h.src,i=h.onload||"",j=h.autoscroll;return function(g,h){var n=0,o,p=function(){o&&(o.$destroy(),o=null);h.html("")}; -g.$watch(f,function(f){var m=++n;f?a.get(f,{cache:c}).success(function(a){m===n&&(o&&o.$destroy(),o=g.$new(),h.html(a),e(h.contents())(o),y(j)&&(!j||g.$eval(j))&&d(),o.$emit("$includeContentLoaded"),g.$eval(i))}).error(function(){m===n&&p()}):p()})}}}}],Hd=S({compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Id=S({terminal:!0,priority:1E3}),Jd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,h){var f=h.count,i=g.attr(h.$attr.when),j=h.offset|| -0,k=e.$eval(i),l={},n=c.startSymbol(),o=c.endSymbol();m(k,function(a,e){l[e]=c(a.replace(d,n+f+"-"+j+o))});e.$watch(function(){var c=parseFloat(e.$eval(f));return isNaN(c)?"":(c in k||(c=a.pluralCat(c-j)),l[c](e,g,!0))},function(a){g.text(a)})}}}],Kd=S({transclude:"element",priority:1E3,terminal:!0,compile:function(a,c,d){return function(a,c,h){var f=h.ngRepeat,h=f.match(/^\s*(.+)\s+in\s+(.*)\s*$/),i,j,k;if(!h)throw Error("Expected ngRepeat in form of '_item_ in _collection_' but got '"+f+"'.");f= -h[1];i=h[2];h=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!h)throw Error("'item' in 'item in collection' should be identifier or (key, value) but got '"+f+"'.");j=h[3]||h[1];k=h[2];var l=new eb;a.$watch(function(a){var e,f,h=a.$eval(i),m=c,q=new eb,y,A,u,w,r,v;if(E(h))r=h||[];else{r=[];for(u in h)h.hasOwnProperty(u)&&u.charAt(0)!="$"&&r.push(u);r.sort()}y=r.length-1;e=0;for(f=r.length;ez;)u.pop().element.remove()}for(;r.length> -x;)r.pop()[0].element.remove()}var i;if(!(i=s.match(d)))throw Error("Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '"+s+"'.");var j=c(i[2]||i[1]),k=i[4]||i[6],l=i[5],m=c(i[3]||""),n=c(i[2]?i[1]:k),o=c(i[7]),r=[[{element:f,label:""}]];t&&(a(t)(e),t.removeClass("ng-scope"),t.remove());f.html("");f.bind("change",function(){e.$apply(function(){var a,c=o(e)||[],d={},h,i,j,m,s,t;if(p){i=[];m=0;for(t=r.length;m@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\\:form{display:block;}'); +(function(Y,T,s){'use strict';function P(a){return function(){var b=arguments[0],c,b="["+(a?a+":":"")+b+"] http://errors.angularjs.org/undefined/"+(a?a+"/":"")+b;for(c=1;c").append(a).html();try{return 3===a[0].nodeType?J(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(b,a){return"<"+J(a)})}catch(d){return J(c)}}function Jb(a){try{return decodeURIComponent(a)}catch(b){}}function Kb(a){var b={},c,d;q((a||"").split("&"),function(a){a&&(c=a.split("="),d=Jb(c[0]),z(d)&&(a=z(c[1])? +Jb(c[1]):!0,b[d]?D(b[d])?b[d].push(a):b[d]=[b[d],a]:b[d]=a))});return b}function Lb(a){var b=[];q(a,function(a,d){D(a)?q(a,function(a){b.push(ua(d,!0)+(!0===a?"":"="+ua(a,!0)))}):b.push(ua(d,!0)+(!0===a?"":"="+ua(a,!0)))});return b.length?b.join("&"):""}function ob(a){return ua(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ua(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,b?"%20":"+")} +function Hc(a,b){function c(a){a&&d.push(a)}var d=[a],e,g,h=["ng:app","ng-app","x-ng-app","data-ng-app"],f=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(h,function(b){h[b]=!0;c(T.getElementById(b));b=b.replace(":","\\:");a.querySelectorAll&&(q(a.querySelectorAll("."+b),c),q(a.querySelectorAll("."+b+"\\:"),c),q(a.querySelectorAll("["+b+"]"),c))});q(d,function(b){if(!e){var a=f.exec(" "+b.className+" ");a?(e=b,g=(a[2]||"").replace(/\s+/g,",")):q(b.attributes,function(a){!e&&h[a.name]&&(e=b,g=a.value)})}}); +e&&b(e,g?[g]:[])}function Mb(a,b){var c=function(){a=w(a);if(a.injector()){var c=a[0]===T?"document":ia(a);throw Wa("btstrpd",c);}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);b.unshift("ng");c=Nb(b);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(b,a,c,d,e){b.$apply(function(){a.data("$injector",d);c(a)(b)});e.enabled(!0)}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(Y&&!d.test(Y.name))return c();Y.name=Y.name.replace(d,"");Ha.resumeBootstrap= +function(a){q(a,function(a){b.push(a)});c()}}function pb(a,b){b=b||"_";return a.replace(Ic,function(a,d){return(d?b:"")+a.toLowerCase()})}function qb(a,b,c){if(!a)throw Wa("areq",b||"?",c||"required");return a}function Ia(a,b,c){c&&D(a)&&(a=a[a.length-1]);qb(B(a),b,"not a function, got "+(a&&"object"==typeof a?a.constructor.name||"Object":typeof a));return a}function rb(a,b,c){if(!b)return a;b=b.split(".");for(var d,e=a,g=b.length,h=0;h 
"+a;b.removeChild(b.firstChild);ub(this,b.childNodes);w(T.createDocumentFragment()).append(this)}else ub(this, +a)}function vb(a){return a.cloneNode(!0)}function Ka(a){Ob(a);var b=0;for(a=a.childNodes||[];b=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)}; +c.elem=a;return c}function za(a){var b=typeof a,c;"object"==b&&null!==a?"function"==typeof(c=a.$$hashKey)?c=a.$$hashKey():c===s&&(c=a.$$hashKey=Ta()):c=a;return b+":"+c}function Ma(a){q(a,this.put,this)}function Wb(a){var b,c;"function"==typeof a?(b=a.$inject)||(b=[],a.length&&(c=a.toString().replace(Oc,""),c=c.match(Pc),q(c[1].split(Qc),function(a){a.replace(Rc,function(a,c,d){b.push(d)})})),a.$inject=b):D(a)?(c=a.length-1,Ia(a[c],"fn"),b=a.slice(0,c)):Ia(a,"fn",!0);return b}function Nb(a){function b(a){return function(b, +c){if(U(b))q(b,Gb(a));else return a(b,c)}}function c(a,b){if(B(b)||D(b))b=p.instantiate(b);if(!b.$get)throw Na("pget",a);return m[a+f]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[];q(a,function(a){if(!l.get(a)){l.put(a,!0);try{if(H(a)){var c=Oa(a);b=b.concat(e(c.requires)).concat(c._runBlocks);for(var d=c._invokeQueue,c=0,f=d.length;c 4096 bytes)!"));else{if(k.cookie!==ba)for(ba=k.cookie,d=ba.split("; "),Z={},f=0;fl&&this.remove(n.key),b},get:function(a){var b=m[a];if(b)return e(b),k[a]},remove:function(a){var b=m[a];b&&(b==p&&(p=b.p),b==n&&(n=b.n),g(b.n,b.p),delete m[a],delete k[a],h--)},removeAll:function(){k={};h=0;m={};p=n=null},destroy:function(){m=f=k=null;delete b[a]},info:function(){return E({},f,{size:h})}}}var b={};a.info=function(){var a={};q(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}} +function Xc(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Xb(a){var b={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,g=/^\s*(https?|ftp|mailto|file):/,h=/^\s*(https?|ftp|file):|data:image\//,f=/^(on[a-z]*|formaction)$/;this.directive=function l(d,e){H(d)?(qb(e,"directiveFactory"),b.hasOwnProperty(d)||(b[d]=[],a.factory(d+c,["$injector","$exceptionHandler",function(a,c){var e=[];q(b[d],function(b){try{var f=a.invoke(b);B(f)? +f={compile:$(f)}:!f.compile&&f.link&&(f.compile=$(f.link));f.priority=f.priority||0;f.name=f.name||d;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(g){c(g)}});return e}])),b[d].push(e)):q(d,Gb(l));return this};this.aHrefSanitizationWhitelist=function(a){return z(a)?(g=a,this):g};this.imgSrcSanitizationWhitelist=function(a){return z(a)?(h=a,this):h};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope", +"$document","$sce","$$urlUtils","$animate",function(a,m,p,n,t,r,y,x,R,N,u,v){function F(a,b,c,d){a instanceof w||(a=w(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=w(b).wrap("").parent()[0])});var e=Z(a,b,a,c,d);return function(b,c){qb(b,"scope");for(var d=c?Pa.clone.call(a):a,f=0,g=d.length;fu.priority)break;if(O=u.scope)C("isolated scope",v,u,K),U(O)&&(I(K,"ng-isolate-scope"),v=u),I(K,"ng-scope"),x=x||u;R=u.name;if(O=u.controller)pa= +pa||{},C("'"+R+"' controller",pa[R],u,K),pa[R]=u;if(O=u.transclude)C("transclusion",N,u,K),N=u,n=u.priority,"element"==O?(O=W(b,A,z),K=c.$$element=w(T.createComment(" "+R+": "+c[R]+" ")),b=K[0],bb(e,w(ta.call(O,0)),b),qa=F(O,d,n,f&&f.name)):(O=w(vb(b)).contents(),K.html(""),qa=F(O,d));if(u.template)if(C("template",G,u,K),G=u,O=B(u.template)?u.template(K,c):u.template,O=Yb(O),u.replace){f=u;O=w("
"+aa(O)+"
").contents();b=O[0];if(1!=O.length||1!==b.nodeType)throw ga("tplrt",R,"");bb(e,K,b); +ma={$attr:{}};a=a.concat(ba(b,a.splice(L+1,a.length-(L+1)),ma));ab(c,ma);ma=a.length}else K.html(O);if(u.templateUrl)C("template",G,u,K),G=u,u.replace&&(f=u),l=Uc(a.splice(L,a.length-L),l,K,c,e,qa),ma=a.length;else if(u.compile)try{ka=u.compile(K,c,qa),B(ka)?g(null,ka,A,z):ka&&g(ka.pre,ka.post,A,z)}catch(E){p(E,ia(K))}u.terminal&&(l.terminal=!0,n=Math.max(n,u.priority))}l.scope=x&&x.scope;l.transclude=N&&qa;return l}function G(d,e,f,g,h,n,m){if(e===h)return null;h=null;if(b.hasOwnProperty(e)){var t; +e=a.get(e+c);for(var r=0,C=e.length;rt.priority)&&-1!=t.restrict.indexOf(f)&&(n&&(t=Cc(t,{$$start:n,$$end:m})),d.push(t),h=t)}catch(u){p(u)}}return h}function ab(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(I(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?e.attr("style",e.attr("style")+";"+b):"$"==f.charAt(0)||a.hasOwnProperty(f)|| +(a[f]=b,d[f]=c[f])})}function Uc(a,b,c,d,e,f){var g=[],h,p,l=c[0],m=a.shift(),r=E({},m,{controller:null,templateUrl:null,transclude:null,scope:null,replace:null}),C=B(m.templateUrl)?m.templateUrl(c,d):m.templateUrl;c.html("");n.get(N.getTrustedResourceUrl(C),{cache:t}).success(function(n){var t;n=Yb(n);if(m.replace){n=w("
"+aa(n)+"
").contents();t=n[0];if(1!=n.length||1!==t.nodeType)throw ga("tplrt",m.name,C);n={$attr:{}};bb(e,c,t);ba(t,a,n);ab(d,n)}else t=l,c.html(n);a.unshift(r);h=ka(a, +t,d,f,c,m);q(e,function(a,b){a==t&&(e[b]=c[0])});for(p=Z(c[0].childNodes,f);g.length;){n=g.shift();var u=g.shift(),y=g.shift(),I=g.shift(),x=c[0];u!==l&&(x=vb(t),bb(y,w(u),x));h(b(p,n,x,e,I),n,x,e,I)}g=null}).error(function(a,b,c,d){throw ga("tpload",d.url);});return function(a,c,d,e,f){g?(g.push(c),g.push(d),g.push(e),g.push(f)):h(function(){b(p,c,d,e,f)},c,d,e,f)}}function L(a,b){return b.priority-a.priority}function C(a,b,c,d){if(b)throw ga("multidir",b.name,c.name,a,ia(d));}function K(a,b){var c= +m(b,!0);c&&a.push({priority:0,compile:$(function(a,b){var d=b.parent(),e=d.data("$binding")||[];e.push(c);I(d.data("$binding",e),"ng-binding");a.$watch(c,function(a){b[0].nodeValue=a})})})}function O(a,b){if("xlinkHref"==b||"IMG"!=Aa(a)&&("src"==b||"ngSrc"==b))return N.RESOURCE_URL}function pa(a,b,c,d){var e=m(c,!0);if(e){if("multiple"===d&&"SELECT"===Aa(a))throw ga("selmulti",ia(a));b.push({priority:100,compile:$(function(b,c,g){c=g.$$observers||(g.$$observers={});if(f.test(d))throw ga("nodomevents"); +if(e=m(g[d],!0,O(a,d)))g[d]=e(b),(c[d]||(c[d]=[])).$$inter=!0,(g.$$observers&&g.$$observers[d].$$scope||b).$watch(e,function(a){g.$set(d,a)})})})}}function bb(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;ga.status?b:p.reject(b)}var d={transformRequest:e.transformRequest,transformResponse:e.transformResponse},f=function(a){function b(a){var c;q(a,function(b,d){B(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=E({},a.headers),f,g,c=E({},c.common,c[J(a.method)]);b(c);b(d);a:for(f in c){a=J(f);for(g in d)if(J(g)===a)continue a;d[f]=c[f]}return d}(a);E(d,a);d.headers=f;d.method=Ba(d.method);(a=t.isSameOrigin(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:s)&&(f[d.xsrfHeaderName|| +e.xsrfHeaderName]=a);var g=[function(a){f=a.headers;var b=ac(a.data,$b(f),a.transformRequest);M(a.data)&&q(f,function(a,b){"content-type"===J(b)&&delete f[b]});M(a.withCredentials)&&!M(e.withCredentials)&&(a.withCredentials=e.withCredentials);return y(a,b,f).then(c,c)},s],h=p.when(d);for(q(N,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){a=g.shift();var n=g.shift(),h=h.then(a,n)}h.success= +function(a){h.then(function(b){a(b.data,b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function y(b,c,g){function k(a,b,c){y&&(200<=a&&300>a?y.put(s,[a,b,Zb(c)]):y.remove(s));h(b,a,c);d.$$phase||d.$apply()}function h(a,c,d){c=Math.max(c,0);(200<=c&&300>c?l.resolve:l.reject)({data:a,status:c,headers:$b(d),config:b})}function n(){var a=Va(r.pendingRequests,b);-1!==a&&r.pendingRequests.splice(a,1)}var l=p.defer(),t=l.promise, +y,q,s=x(b.url,b.params);r.pendingRequests.push(b);t.then(n,n);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(y=U(b.cache)?b.cache:U(e.cache)?e.cache:R);if(y)if(q=y.get(s),z(q)){if(q.then)return q.then(n,n),q;D(q)?h(q[1],q[0],da(q[2])):h(q,200,{})}else y.put(s,t);M(q)&&a(b.method,s,c,k,g,b.timeout,b.withCredentials,b.responseType);return t}function x(a,b){if(!b)return a;var c=[];Bc(b,function(a,b){null!=a&&a!=s&&(D(a)||(a=[a]),q(a,function(a){U(a)&&(a=oa(a));c.push(ua(b)+"="+ua(a))}))});return a+ +(-1==a.indexOf("?")?"?":"&")+c.join("&")}var R=c("$http"),N=[];q(g,function(a){N.unshift(H(a)?n.get(a):n.invoke(a))});q(h,function(a,b){var c=H(a)?n.get(a):n.invoke(a);N.splice(b,0,{response:function(a){return c(p.when(a))},responseError:function(a){return c(p.reject(a))}})});r.pendingRequests=[];(function(a){q(arguments,function(a){r[a]=function(b,c){return r(E(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){r[a]=function(b,c,d){return r(E(d||{}, +{method:a,url:b,data:c}))}})})("post","put");r.defaults=e;return r}]}function cd(){this.$get=["$browser","$window","$document",function(a,b,c){return dd(a,ed,a.defer,b.angular.callbacks,c[0],b.location.protocol.replace(":",""))}]}function dd(a,b,c,d,e,g){function h(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;Q?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=d;e.body.appendChild(c);return d} +return function(e,k,l,m,p,n,t,r){function y(){R=-1;u&&u();v&&v.abort()}function x(b,d,e,f){var h=(k.match(bc)||["",g])[1];F&&c.cancel(F);u=v=null;d="file"==h?e?200:404:d;b(1223==d?204:d,e,f);a.$$completeOutstandingRequest(A)}var R;a.$$incOutstandingRequestCount();k=k||a.url();if("jsonp"==J(e)){var s="_"+(d.counter++).toString(36);d[s]=function(a){d[s].data=a};var u=h(k.replace("JSON_CALLBACK","angular.callbacks."+s),function(){d[s].data?x(m,200,d[s].data):x(m,R||-2);delete d[s]})}else{var v=new b; +v.open(e,k,!0);q(p,function(a,b){a&&v.setRequestHeader(b,a)});v.onreadystatechange=function(){if(4==v.readyState){var a=v.getAllResponseHeaders(),b="Cache-Control Content-Language Content-Type Expires Last-Modified Pragma".split(" ");a||(a="",q(b,function(b){var c=v.getResponseHeader(b);c&&(a+=b+": "+c+"\n")}));x(m,R||v.status,v.responseType?v.response:v.responseText,a)}};t&&(v.withCredentials=!0);r&&(v.responseType=r);v.send(l||"")}if(0=a}function g(a){return" "==a||"\r"==a||"\t"==a||"\n"==a||"\v"==a||"\u00a0"==a}function h(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"==a||"$"==a}function f(a){return"-"==a||"+"==a||e(a)}function k(b,c,d){d=d||r;c=z(c)?"s "+c+"-"+r+" ["+a.substring(c,d)+"]":" "+d;throw Ra("lexerr",b,c,a);}function l(){for(var b= +"",c=r;r","<=",">="))a=p(a,b.fn,N());return a}function u(){for(var a=v(),b;b=f("*","/","%");)a=p(a,b.fn,v());return a}function v(){var a;return f("+")?F():(a=f("-"))?p(ba,a.fn,v()):(a=f("!"))?l(a.fn,v()):F()}function F(){var a; +if(f("("))a=L(),k(")");else if(f("["))a=I();else if(f("{"))a=w();else{var b=f();(a=b.fn)||e("not a primary expression",b);b.json&&(a.constant=a.literal=!0)}for(var c;b=f("(","[",".");)"("===b.text?(a=G(a,c),c=null):"["===b.text?(c=a,a=D(a)):"."===b.text?(c=a,a=H(a)):e("IMPOSSIBLE");return a}function I(){var a=[],b=!0;if("]"!=g().text){do{var c=z();a.push(c);c.constant||(b=!1)}while(f(","))}k("]");return E(function(b,c){for(var d=[],e=0;ee?mc(d[0],d[1], +d[2],d[3],d[4],c):function(a,b){var g=0,l;do l=mc(d[g++],d[g++],d[g++],d[g++],d[g++],c)(a,b),b=s,a=l;while(ga)for(b in g++,d)d.hasOwnProperty(b)&&!f.hasOwnProperty(b)&&(m--,delete d[b])}else d!== +f&&(d=f,g++);return g},function(){b(f,d,c)})},$digest:function(){var c,e,g,h,k=this.$$asyncQueue,q=this.$$postDigestQueue,s,N,u=a,v,F=[],I,z;f("$digest");do{N=!1;for(v=this;k.length;)try{v.$eval(k.shift())}catch(ba){d(ba)}do{if(h=v.$$watchers)for(s=h.length;s--;)try{(c=h[s])&&((e=c.get(v))!==(g=c.last)&&!(c.eq?xa(e,g):"number"==typeof e&&"number"==typeof g&&isNaN(e)&&isNaN(g)))&&(N=!0,c.last=c.eq?da(e):e,c.fn(e,g===l?e:g,v),5>u&&(I=4-u,F[I]||(F[I]=[]),z=B(c.exp)?"fn: "+(c.exp.name||c.exp.toString()): +c.exp,z+="; newVal: "+oa(e)+"; oldVal: "+oa(g),F[I].push(z)))}catch(W){d(W)}if(!(h=v.$$childHead||v!==this&&v.$$nextSibling))for(;v!==this&&!(h=v.$$nextSibling);)v=v.$parent}while(v=h);if(N&&!u--)throw m.$$phase=null,b("infdig",a,oa(F));}while(N||k.length);for(m.$$phase=null;q.length;)try{q.shift()()}catch(w){d(w)}},$destroy:function(){if(m!=this&&!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail== +this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null}},$eval:function(a,b){return e(a)(this,b)},$evalAsync:function(a){m.$$phase||m.$$asyncQueue.length||g.defer(function(){m.$$asyncQueue.length&&m.$digest()});this.$$asyncQueue.push(a)},$$postDigest:function(a){this.$$postDigestQueue.push(a)}, +$apply:function(a){try{return f("$apply"),this.$eval(a)}catch(b){d(b)}finally{m.$$phase=null;try{m.$digest()}catch(c){throw d(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);return function(){c[Va(c,b)]=null}},$emit:function(a,b){var c=[],e,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=[h].concat(ta.call(arguments,1)),l,m;do{e=f.$$listeners[a]||c;h.currentScope= +f;l=0;for(m=e.length;lc))throw Ca("iequirks");var e=da(fa);e.isEnabled=function(){return a};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;a||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=wa);e.parseAs=function(a,c){var d=b(c);return d.literal&& +d.constant?d:function(b,c){return e.getTrusted(a,d(b,c))}};var g=e.parseAs,h=e.getTrusted,f=e.trustAs;Ha.forEach(fa,function(a,b){var c=J(b);e[Ja("parse_as_"+c)]=function(b){return g(a,b)};e[Ja("get_trusted_"+c)]=function(b){return h(a,b)};e[Ja("trust_as_"+c)]=function(b){return f(a,b)}});return e}]}function td(){this.$get=["$window","$document",function(a,b){var c={},d=V((/android (\d+)/.exec(J((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h,f=/^(Moz|webkit|O|ms)(?=[A-Z])/, +k=g.body&&g.body.style,l=!1,m=!1;if(k){for(var p in k)if(l=f.exec(p)){h=l[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||h+"Transition"in k);m=!!("animation"in k||h+"Animation"in k);!d||l&&m||(l=H(g.body.style.webkitTransition),m=H(g.body.style.webkitAnimation))}return{history:!(!a.history||!a.history.pushState||4>d||e),hashchange:"onhashchange"in a&&(!g.documentMode||7=Q&&(b.setAttribute("href",g),g=b.href);b.setAttribute("href",g);return c?{href:b.href,protocol:b.protocol,host:b.host}:b.href}var b=T.createElement("a"),c=a(Y.location.href,!0);return{resolve:a,isSameOrigin:function(b){b="string"===typeof b?a(b,!0):b;return b.protocol===c.protocol&&b.host===c.host}}}]}function wd(){this.$get= +$(Y)}function nc(a){function b(b,e){return a.factory(b+c,e)}var c="Filter";this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];b("currency",oc);b("date",pc);b("filter",xd);b("json",yd);b("limitTo",zd);b("lowercase",Ad);b("number",qc);b("orderBy",rc);b("uppercase",Bd)}function xd(){return function(a,b,c){if(!D(a))return a;var d=[];d.check=function(a){for(var b=0;ba;a=Math.abs(a);var h=a+"",f="",k=[],l=!1;if(-1!==h.indexOf("e")){var m=h.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?h="0":(f=h,l=!0)}if(l)0a)&&(f=a.toFixed(e));else{h=(h.split(tc)[1]||"").length;M(e)&&(e=Math.min(Math.max(b.minFrac,h),b.maxFrac)); +h=Math.pow(10,e);a=Math.round(a*h)/h;a=(""+a).split(tc);h=a[0];a=a[1]||"";var l=0,m=b.lgSize,p=b.gSize;if(h.length>=m+p)for(var l=h.length-m,n=0;na&&(d="-",a=-a);for(a=""+a;a.length-c)e+=c;0===e&&-12==c&&(e=12);return Cb(e,b,d)}}function eb(a,b){return function(c,d){var e=c["get"+a](),g=Ba(b?"SHORT"+a:a);return d[g][e]}}function pc(a){function b(a){var b;if(b=a.match(c)){a=new Date(0);var g=0,h=0,f=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=V(b[9]+b[10]),h=V(b[9]+b[11]));f.call(a,V(b[1]),V(b[2])-1,V(b[3]));g=V(b[4]||0)-g;h=V(b[5]||0)-h;f=V(b[6]||0);b=Math.round(1E3* +parseFloat("0."+(b[7]||0)));k.call(a,g,h,f,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",h=[],f,k;e=e||"mediumDate";e=a.DATETIME_FORMATS[e]||e;H(c)&&(c=Cd.test(c)?V(c):b(c));lb(c)&&(c=new Date(c));if(!Ea(c))return c;for(;e;)(k=Dd.exec(e))?(h=h.concat(ta.call(k,1)),e=h.pop()):(h.push(e),e=null);q(h,function(b){f=Ed[b];g+=f?f(c,a.DATETIME_FORMATS):b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}} +function yd(){return function(a){return oa(a,!0)}}function zd(){return function(a,b){if(!D(a)&&!H(a))return a;b=V(b);if(H(a))return b?0<=b?a.slice(0,b):a.slice(b,a.length):"";var c=[],d,e;b>a.length?b=a.length:b<-a.length&&(b=-a.length);0a||37<=a&&40>=a)||k()});b.on("change",h);if(e.hasEvent("paste"))b.on("paste cut",k)}d.$render=function(){b.val(ca(d.$viewValue)?"":d.$viewValue)};var l=c.ngPattern,m=function(a,b){if(ca(b)||a.test(b))return d.$setValidity("pattern", +!0),b;d.$setValidity("pattern",!1);return s};l&&((e=l.match(/^\/(.*)\/([gim]*)$/))?(l=RegExp(e[1],e[2]),e=function(a){return m(l,a)}):e=function(c){var d=a.$eval(l);if(!d||!d.test)throw P("ngPattern")("noregexp",l,d,ia(b));return m(d,c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var p=V(c.ngMinlength);e=function(a){if(!ca(a)&&a.lengthn)return d.$setValidity("maxlength",!1),s;d.$setValidity("maxlength",!0);return a};d.$parsers.push(e);d.$formatters.push(e)}}function Db(a,b){a="ngClass"+a;return function(){return{restrict:"AC",link:function(c,d,e){function g(a){if(!0===b||c.$index%2===b)f&&!xa(a,f)&&e.$removeClass(h(f)),e.$addClass(h(a));f=da(a)}function h(a){if(D(a))return a.join(" ");if(U(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var f=s;c.$watch(e[a], +g,!0);e.$observe("class",function(b){g(c.$eval(e[a]))});"ngClass"!==a&&c.$watch("$index",function(d,f){var g=d&1;g!==f&1&&(g===b?(g=c.$eval(e[a]),e.$addClass(h(g))):(g=c.$eval(e[a]),e.$removeClass(h(g))))})}}}}var J=function(a){return H(a)?a.toLowerCase():a},Ba=function(a){return H(a)?a.toUpperCase():a},Q,w,ya,ta=[].slice,Fd=[].push,Ua=Object.prototype.toString,Wa=P("ng"),Ha=Y.angular||(Y.angular={}),Oa,Aa,ha=["0","0","0"];Q=V((/msie (\d+)/.exec(J(navigator.userAgent))||[])[1]);isNaN(Q)&&(Q=V((/trident\/.*; rv:(\d+)/.exec(J(navigator.userAgent))|| +[])[1]));A.$inject=[];wa.$inject=[];var aa=function(){return String.prototype.trim?function(a){return H(a)?a.trim():a}:function(a){return H(a)?a.replace(/^\s*/,"").replace(/\s*$/,""):a}}();Aa=9>Q?function(a){a=a.nodeName?a:a[0];return a.scopeName&&"HTML"!=a.scopeName?Ba(a.scopeName+":"+a.nodeName):a.nodeName}:function(a){return a.nodeName?a.nodeName:a[0].nodeName};var Ic=/[A-Z]/g,Gd={full:"1.2.0-rc.2",major:1,minor:2,dot:0,codeName:"barehand-atomsplitting"},La=S.cache={},Xa=S.expando="ng-"+(new Date).getTime(), +Mc=1,vc=Y.document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)},wb=Y.document.removeEventListener?function(a,b,c){a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent("on"+b,c)},Kc=/([\:\-\_]+(.))/g,Lc=/^moz([A-Z])/,tb=P("jqLite"),Pa=S.prototype={ready:function(a){function b(){c||(c=!0,a())}var c=!1;"complete"===T.readyState?setTimeout(b):(this.on("DOMContentLoaded",b),S(Y).on("load",b))},toString:function(){var a=[];q(this,function(b){a.push(""+ +b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?w(this[a]):w(this[this.length+a])},length:0,push:Fd,sort:[].sort,splice:[].splice},$a={};q("multiple selected checked disabled readOnly required open".split(" "),function(a){$a[J(a)]=a});var Vb={};q("input select option textarea button form details".split(" "),function(a){Vb[Ba(a)]=!0});q({data:Qb,inheritedData:Za,scope:function(a){return Za(a,"$scope")},controller:Tb,injector:function(a){return Za(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)}, +hasClass:Ya,css:function(a,b,c){b=Ja(b);if(z(c))a.style[b]=c;else{var d;8>=Q&&(d=a.currentStyle&&a.currentStyle[b],""===d&&(d="auto"));d=d||a.style[b];8>=Q&&(d=""===d?s:d);return d}},attr:function(a,b,c){var d=J(b);if($a[d])if(z(c))c?(a[b]=!0,a.setAttribute(b,d)):(a[b]=!1,a.removeAttribute(d));else return a[b]||(a.attributes.getNamedItem(b)||A).specified?d:s;else if(z(c))a.setAttribute(b,c);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?s:a},prop:function(a,b,c){if(z(c))a[b]=c;else return a[b]}, +text:function(){function a(a,d){var e=b[a.nodeType];if(M(d))return e?a[e]:"";a[e]=d}var b=[];9>Q?(b[1]="innerText",b[3]="nodeValue"):b[1]=b[3]="textContent";a.$dv="";return a}(),val:function(a,b){if(M(b)){if("SELECT"===Aa(a)&&a.multiple){var c=[];q(a.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return a.value}a.value=b},html:function(a,b){if(M(b))return a.innerHTML;for(var c=0,d=a.childNodes;c":function(b,c,d,e){return d(b,c)>e(b,c)},"<=":function(b,c,d,e){return d(b,c)<=e(b,c)},">=":function(b,c,d,e){return d(b,c)>=e(b,c)},"&&":function(b,c,d,e){return d(b,c)&&e(b,c)},"||":function(b,c,d,e){return d(b, +c)||e(b,c)},"&":function(b,c,d,e){return d(b,c)&e(b,c)},"|":function(b,c,d,e){return e(b,c)(b,c,d(b,c))},"!":function(b,c,d){return!d(b,c)}},ld={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Bb={},Ca=P("$sce"),fa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"};nc.$inject=["$provide"];oc.$inject=["$locale"];qc.$inject=["$locale"];var tc=".",Ed={yyyy:X("FullYear",4),yy:X("FullYear",2,0,!0),y:X("FullYear",1),MMMM:eb("Month"),MMM:eb("Month",!0),MM:X("Month",2,1),M:X("Month", +1,1),dd:X("Date",2),d:X("Date",1),HH:X("Hours",2),H:X("Hours",1),hh:X("Hours",2,-12),h:X("Hours",1,-12),mm:X("Minutes",2),m:X("Minutes",1),ss:X("Seconds",2),s:X("Seconds",1),sss:X("Milliseconds",3),EEEE:eb("Day"),EEE:eb("Day",!0),a:function(b,c){return 12>b.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(b){b=-1*b.getTimezoneOffset();return b=(0<=b?"+":"")+(Cb(Math[0=Q&&(c.href||c.name||c.$set("href",""),b.append(T.createComment("IE fix")));return function(b,c){c.on("click",function(b){c.attr("href")||b.preventDefault()})}}}),Eb={};q($a,function(b,c){if("multiple"!=b){var d=la("ng-"+c);Eb[d]=function(){return{priority:100,compile:function(){return function(b,g,h){b.$watch(h[d],function(b){h.$set(c,!!b)})}}}}}});q(["src","srcset","href"],function(b){var c= +la("ng-"+b);Eb[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(b,c),Q&&e.prop(b,g[b]))})}}}});var hb={$addControl:A,$removeControl:A,$setValidity:A,$setDirty:A,$setPristine:A};uc.$inject=["$element","$attrs","$scope"];var wc=function(b){return["$timeout",function(c){var d={name:"form",restrict:"E",controller:uc,compile:function(){return{pre:function(b,d,h,f){if(!h.action){var k=function(b){b.preventDefault?b.preventDefault():b.returnValue=!1};vc(d[0],"submit", +k);d.on("$destroy",function(){c(function(){wb(d[0],"submit",k)},0,!1)})}var l=d.parent().controller("form"),m=h.name||h.ngForm;m&&db(b,m,f,m);if(l)d.on("$destroy",function(){l.$removeControl(f);m&&db(b,m,s,m);E(f,hb)})}}}};return b?E(da(d),{restrict:"EAC"}):d}]},Kd=wc(),Ld=wc(!0),Md=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Nd=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/,Od=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,xc={text:jb,number:function(b,c,d,e, +g,h){jb(b,c,d,e,g,h);e.$parsers.push(function(b){var c=ca(b);if(c||Od.test(b))return e.$setValidity("number",!0),""===b?null:c?b:parseFloat(b);e.$setValidity("number",!1);return s});e.$formatters.push(function(b){return ca(b)?"":""+b});if(d.min){var f=parseFloat(d.min);b=function(b){if(!ca(b)&&bk)return e.$setValidity("max",!1), +s;e.$setValidity("max",!0);return b};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(b){if(ca(b)||lb(b))return e.$setValidity("number",!0),b;e.$setValidity("number",!1);return s})},url:function(b,c,d,e,g,h){jb(b,c,d,e,g,h);b=function(b){if(ca(b)||Md.test(b))return e.$setValidity("url",!0),b;e.$setValidity("url",!1);return s};e.$formatters.push(b);e.$parsers.push(b)},email:function(b,c,d,e,g,h){jb(b,c,d,e,g,h);b=function(b){if(ca(b)||Nd.test(b))return e.$setValidity("email",!0), +b;e.$setValidity("email",!1);return s};e.$formatters.push(b);e.$parsers.push(b)},radio:function(b,c,d,e){M(d.name)&&c.attr("name",Ta());c.on("click",function(){c[0].checked&&b.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(b,c,d,e){var g=d.ngTrueValue,h=d.ngFalseValue;H(g)||(g=!0);H(h)||(h=!1);c.on("click",function(){b.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked= +e.$viewValue};e.$formatters.push(function(b){return b===g});e.$parsers.push(function(b){return b?g:h})},hidden:A,button:A,submit:A,reset:A},yc=["$browser","$sniffer",function(b,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,h){h&&(xc[J(g.type)]||xc.text)(d,e,g,h,c,b)}}}],gb="ng-valid",fb="ng-invalid",Da="ng-pristine",ib="ng-dirty",Pd=["$scope","$exceptionHandler","$attrs","$element","$parse",function(b,c,d,e,g){function h(b,c){c=c?"-"+pb(c,"-"):"";e.removeClass((b?fb:gb)+c).addClass((b? +gb:fb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var f=g(d.ngModel),k=f.assign;if(!k)throw P("ngModel")("nonassign",d.ngModel,ia(e));this.$render=A;var l=e.inheritedData("$formController")||hb,m=0,p=this.$error={};e.addClass(Da);h(!0);this.$setValidity=function(b,c){p[b]!==!c&&(c?(p[b]&&m--,m||(h(!0),this.$valid=!0,this.$invalid=!1)):(h(!1),this.$invalid= +!0,this.$valid=!1,m++),p[b]=!c,h(c,b),l.$setValidity(b,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(ib).addClass(Da)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,e.removeClass(Da).addClass(ib),l.$setDirty());q(this.$parsers,function(b){d=b(d)});this.$modelValue!==d&&(this.$modelValue=d,k(b,d),q(this.$viewChangeListeners,function(b){try{b()}catch(d){c(d)}}))};var n=this;b.$watch(function(){var c=f(b);if(n.$modelValue!== +c){var d=n.$formatters,e=d.length;for(n.$modelValue=c;e--;)c=d[e](c);n.$viewValue!==c&&(n.$viewValue=c,n.$render())}})}],Qd=function(){return{require:["ngModel","^?form"],controller:Pd,link:function(b,c,d,e){var g=e[0],h=e[1]||hb;h.$addControl(g);c.on("$destroy",function(){h.$removeControl(g)})}}},Rd=$({require:"ngModel",link:function(b,c,d,e){e.$viewChangeListeners.push(function(){b.$eval(d.ngChange)})}}),zc=function(){return{require:"?ngModel",link:function(b,c,d,e){if(e){d.required=!0;var g=function(b){if(d.required&& +(ca(b)||!1===b))e.$setValidity("required",!1);else return e.$setValidity("required",!0),b};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},Sd=function(){return{require:"ngModel",link:function(b,c,d,e){var g=(b=/\/(.*)\//.exec(d.ngList))&&RegExp(b[1])||d.ngList||",";e.$parsers.push(function(b){var c=[];b&&q(b.split(g),function(b){b&&c.push(aa(b))});return c});e.$formatters.push(function(b){return D(b)?b.join(", "):s})}}},Td=/^(true|false|\d+)$/,Ud= +function(){return{priority:100,compile:function(b,c){return Td.test(c.ngValue)?function(b,c,g){g.$set("value",b.$eval(g.ngValue))}:function(b,c,g){b.$watch(g.ngValue,function(b){g.$set("value",b)})}}}},Vd=sa(function(b,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);b.$watch(d.ngBind,function(b){c.text(b==s?"":b)})}),Wd=["$interpolate",function(b){return function(c,d,e){c=b(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(b){d.text(b)})}}], +Xd=["$sce",function(b){return function(c,d,e){d.addClass("ng-binding").data("$binding",e.ngBindHtml);c.$watch(e.ngBindHtml,function(c){d.html(b.getTrustedHtml(c)||"")})}}],Yd=Db("",!0),Zd=Db("Odd",0),$d=Db("Even",1),ae=sa({compile:function(b,c){c.$set("ngCloak",s);b.removeClass("ng-cloak")}}),be=[function(){return{scope:!0,controller:"@"}}],ce=["$sniffer",function(b){return{priority:1E3,compile:function(){b.csp=!0}}}],Ac={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur".split(" "), +function(b){var c=la("ng-"+b);Ac[c]=["$parse",function(d){return function(e,g,h){var f=d(h[c]);g.on(J(b),function(b){e.$apply(function(){f(e,{$event:b})})})}}]});var de=["$animate",function(b){return{transclude:"element",priority:1E3,terminal:!0,restrict:"A",compile:function(c,d,e){return function(c,d,f){var k,l;c.$watch(f.ngIf,function(f){k&&(b.leave(k),k=s);l&&(l.$destroy(),l=s);Ga(f)&&(l=c.$new(),e(l,function(c){k=c;b.enter(c,d.parent(),d)}))})}}}}],ee=["$http","$templateCache","$anchorScroll", +"$compile","$animate","$sce",function(b,c,d,e,g,h){return{restrict:"ECA",terminal:!0,transclude:"element",compile:function(f,k,l){var m=k.ngInclude||k.src,p=k.onload||"",n=k.autoscroll;return function(f,k){var q=0,s,w,A=function(){s&&(s.$destroy(),s=null);w&&(g.leave(w),w=null)};f.$watch(h.parseAsResourceUrl(m),function(h){var m=++q;h?(b.get(h,{cache:c}).success(function(b){if(m===q){var c=f.$new();l(c,function(h){A();s=c;w=h;w.html(b);g.enter(w,null,k);e(w.contents())(s);!z(n)||n&&!f.$eval(n)||d(); +s.$emit("$includeContentLoaded");f.$eval(p)})}}).error(function(){m===q&&A()}),f.$emit("$includeContentRequested")):A()})}}}}],fe=sa({compile:function(){return{pre:function(b,c,d){b.$eval(d.ngInit)}}}}),ge=sa({terminal:!0,priority:1E3}),he=["$locale","$interpolate",function(b,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,h){var f=h.count,k=h.$attr.when&&g.attr(h.$attr.when),l=h.offset||0,m=e.$eval(k)||{},p={},n=c.startSymbol(),t=c.endSymbol(),r=/^when(Minus)?(.+)$/;q(h,function(b,c){r.test(c)&& +(m[J(c.replace("when","").replace("Minus","-"))]=g.attr(h.$attr[c]))});q(m,function(b,e){p[e]=c(b.replace(d,n+f+"-"+l+t))});e.$watch(function(){var c=parseFloat(e.$eval(f));if(isNaN(c))return"";c in m||(c=b.pluralCat(c-l));return p[c](e,g,!0)},function(b){g.text(b)})}}}],ie=["$parse","$animate",function(b,c){var d=P("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,compile:function(e,g,h){return function(e,g,l){var m=l.ngRepeat,p=m.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/), +n,t,r,s,x,z,A,u={$id:za};if(!p)throw d("iexp",m);l=p[1];x=p[2];(p=p[4])?(n=b(p),t=function(b,c,d){A&&(u[A]=b);u[z]=c;u.$index=d;return n(e,u)}):(r=function(b,c){return za(c)},s=function(b){return b});p=l.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!p)throw d("iidexp",l);z=p[3]||p[1];A=p[2];var v={};e.$watchCollection(x,function(b){var l,n,p=g[0],u,x={},H,G,D,E,L,C,K=[];if(kb(b))L=b,t=t||r;else{t=t||s;L=[];for(D in b)b.hasOwnProperty(D)&&"$"!=D.charAt(0)&&L.push(D);L.sort()}H=L.length; +n=K.length=L.length;for(l=0;lF;)z.pop().element.remove()}for(;A.length>B;)A.pop()[0].element.remove()}var k;if(!(k= +y.match(d)))throw P("ngOptions")("iexp",y,ia(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q=c(k[2]?k[1]:m),t=c(k[7]),v=k[8]?c(k[8]):null,A=[[{element:f,label:""}]];x&&(b(x)(e),x.removeClass("ng-scope"),x.remove());f.html("");f.on("change",function(){e.$apply(function(){var b,c=t(e)||[],d={},h,k,l,p,u,x;if(r)for(k=[],p=0,x=A.length;p@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}'); +/* +//@ sourceMappingURL=angular.min.js.map +*/ diff --git a/app/lib/angular/angular.min.js.map b/app/lib/angular/angular.min.js.map new file mode 100755 index 0000000000..bbddbf0e6b --- /dev/null +++ b/app/lib/angular/angular.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular.min.js", +"lineCount":183, +"mappings":"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", +"sources":["angular.js","MINERR_ASSET"], +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isArray","isFunction","forEach","iterator","context","key","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isString","isNumber","isDate","toString","apply","isRegExp","location","alert","setInterval","isElement","node","nodeName","on","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","substr","equals","o1","o2","t1","t2","keySet","charAt","bind","self","fn","curryArgs","slice","startIndex","concat","toJsonReplacer","val","test","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","html","e","elemHtml","append","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","attr","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","enabled","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","getter","path","bindFnToScope","lastInstance","len","setupModuleLoader","ensure","factory","Object","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","JQLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","jqLiteMinErr","div","createElement","innerHTML","removeChild","firstChild","JQLiteAddNodes","childNodes","fragment","createDocumentFragment","JQLiteClone","cloneNode","JQLiteDealoc","JQLiteRemoveData","JQLiteOff","type","unsupported","events","JQLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","JQLiteData","isSetter","keyDefined","isSimpleGetter","JQLiteHasClass","selector","JQLiteRemoveClass","cssClasses","cssClass","trim","JQLiteAddClass","root","JQLiteController","JQLiteInheritedData","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","$injectorMinErr","providerCache","providerSuffix","factoryFn","loadModules","loadedModules","get","moduleFn","angularModule","_runBlocks","_invokeQueue","ii","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","$AnchorScrollProvider","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","replacedUrl","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$BrowserProvider","$document","$CacheFactoryProvider","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$TemplateCacheProvider","$cacheFactory","$CompileProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","aHrefSanitizationWhitelist","imgSrcSanitizationWhitelist","EVENT_HANDLER_ATTR_REGEXP","directive","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","this.aHrefSanitizationWhitelist","regexp","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$$urlUtils","$animate","$compileNodes","transcludeFn","maxPriority","ignoreDirective","nodeValue","wrap","compositeLinkFn","compileNodes","publicLinkFn","cloneConnectFn","$linkNode","JQLitePrototype","eq","safeAddClass","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","childScope","childTranscludeFn","stableNodeList","linkFns","nodeLinkFn","$new","transclude","cloneFn","transcludeScope","$$transcluded","linkFnFound","attrs","Attributes","collectDirectives","applyDirectivesToNode","terminal","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","j","jj","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","lastIndexOf","getAttribute","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","nodes","depth","hasAttribute","$compileMinErr","nextSibling","groupElementsLinkFnWrapper","linkFn","controllers","compileNode","templateAttrs","jqCollection","originalReplaceDirective","addLinkFns","pre","post","preLinkFns","postLinkFns","getControllers","retrievalMethod","optional","directiveName","linkNode","$$element","newIsolateScopeDirective","LOCAL_REGEXP","parentScope","$parent","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","$$isolateBindings","$observe","$$observers","$$scope","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","terminalPriority","newScopeDirective","templateDirective","$compileNode","$template","transcludeDirective","$$start","$$end","directiveValue","assertNoDuplicate","createComment","replaceWith","replaceDirective","contents","template","denormalizeTemplate","newTemplateAttrs","mergeTemplateAttributes","templateUrl","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","beforeTemplateNodeLinkFn","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","a","b","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","RESOURCE_URL","attrInterpolateLinkFn","$$inter","elementsToRemove","newNode","firstElementToRemove","removeCount","parentNode","j2","replaceChild","appendChild","expando","k","kk","$addClass","classVal","$removeClass","removeClass","writeAttr","tokenDifference","str1","str2","values","tokens1","tokens2","token","current","booleanKey","prop","normalizedVal","resolve","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","$ControllerProvider","CNTRL_REG","register","this.register","expression","identifier","$DocumentProvider","$ExceptionHandlerProvider","exception","cause","parseHeaders","parsed","line","headersGetter","headersObj","transformData","fns","$HttpProvider","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","uppercase","xsrfValue","isSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","resolvePromise","$$phase","deferred","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","$HttpBackendProvider","createHttpBackend","XHR","callbacks","protocol","$browserDefer","locationProtocol","jsonpReq","script","doneWrapper","body","onreadystatechange","script.onreadystatechange","readyState","onload","onerror","timeoutRequest","jsonpDone","xhr","abort","completeRequest","SERVER_MATCH","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","simpleHeaders","getResponseHeader","responseText","send","$InterpolateProvider","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","err","newErr","$interpolate.startSymbol","$interpolate.endSymbol","$LocaleProvider","short","pluralCat","num","encodePath","segments","matchUrl","$$protocol","$$host","$$port","DEFAULT_PORTS","matchAppUrl","PATH_MATCH","$$path","$$search","$$hash","beginsWith","begin","whole","otherwise","stripHash","stripFile","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","search","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","$LocationProvider","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","$LogProvider","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","lex","csp","is","chars","ch","peek","isWhitespace","isIdent","isExpOperator","throwError","start","end","colStr","readNumber","number","peekCh","tokens","readIdent","ident","lastDot","peekIndex","methodName","OPERATORS","getterFn","setter","readString","quote","string","rawString","hex","rep","ESCAPE","lastCh","ch2","ch3","fn2","fn3","parser","$filter","msg","peekToken","e1","e2","e3","e4","t","expect","consume","unaryFn","right","ternaryFn","left","middle","binaryFn","statements","filterChain","statement","argsFn","assignment","fnInvoke","input","ternary","logicalOR","logicalAND","equality","relational","multiplicative","unary","primary","ZERO","arrayDeclaration","object","literal","next","functionCall","objectIndex","fieldAccess","elementFns","allConstant","elementFn","keyValues","_assignment","_functionCall","contextGetter","fnPtr","$$v","_fieldAccess","field","_objectIndex","indexFn","o","_filterChain","setValue","fullExp","propertyObj","cspSafeGetterFn","key0","key1","key2","key3","key4","pathVal","getterFnCache","pathKeys","pathKeysLength","Function","fn.toString","$ParseProvider","$QProvider","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","notify","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","$RootScopeProvider","TTL","$rootScopeMinErr","digestTtl","this.digestTtl","Scope","$id","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","beginPhase","phase","compileToFn","initWatchVal","isolate","child","Child","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","oldValue","newValue","changeDetected","objGetter","internalArray","internalObject","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","$eval","isNaN","expr","$$postDigest","$on","namedListeners","$emit","empty","listenerArgs","array1","currentScope","$SceDelegateProvider","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","$sceMinErr","trustedValueHolderBase","byType","HTML","CSS","URL","JS","trustAs","maybeTrusted","parsedUrl","allowed","matcher","$SceProvider","this.enabled","$sceDelegate","documentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","$SnifferProvider","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","securityPolicy","isActive","$TimeoutProvider","invokeApply","skipApply","deferreds","$$timeoutId","timeout.cancel","$$UrlUtilsProvider","urlParsingNode","setAttribute","host","originUrl","requestUrl","$WindowProvider","$FilterProvider","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comperator","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","predicate","v1","v2","arrayCopy","comparator","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","isEmpty","textInputType","ctrl","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","ngPattern","validate","patternValidator","patternObj","$formatters","$parsers","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","ngClassWatchAction","$index","flattenClasses","classes","old$index","mod","version","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","option","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","replaceNode","insertBefore","prepend","wrapNode","after","newElement","toggleClass","condition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","off","$animateMinErr","$AnimateProvider","$$selectors","$timeout","enter","afterNode","afterNextSibling","leave","move","XMLHttpRequest","ActiveXObject","paramValue","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","htmlAnchorDirective","ngAttributeAliasDirectives","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formDirective","formElement","action","preventDefaultListener","parentFormCtrl","alias","ngFormDirective","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","inputDirective","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ngModelDirective","ctrls","modelCtrl","formCtrl","ngChangeDirective","ngChange","requiredDirective","required","validator","ngListDirective","ngList","viewValue","CONSTANT_VALUE_REGEXP","ngValueDirective","tpl","tplAttr","ngValue","valueWatchAction","ngBindDirective","ngBind","ngBindWatchAction","ngBindTemplateDirective","ngBindTemplate","ngBindHtmlDirective","ngBindHtml","ngBindHtmlWatchAction","getTrustedHtml","ngClassDirective","ngClassOddDirective","ngClassEvenDirective","ngCloakDirective","ngControllerDirective","ngCspDirective","ngEventDirectives","ngIfDirective","childElement","ngIf","ngIfWatchAction","ngIncludeDirective","$anchorScroll","$compile","transclusion","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","thisChangeId","newScope","ngInitDirective","ngInit","ngNonBindableDirective","ngPluralizeDirective","BRACE","numberExp","count","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatDirective","ngRepeatMinErr","linker","ngRepeat","trackByExpGetter","trackByIdFn","trackByIdArrayFn","trackByIdObjFn","rhs","valueIdentifier","keyIdentifier","hashFnLocals","lhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackById","startNode","id","endNode","$first","$last","$middle","$odd","$even","ngShowDirective","ngShow","ngShowWatchAction","ngHideDirective","ngHide","ngHideWatchAction","ngStyleDirective","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchDirective","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhenDirective","ngSwitchWhen","ngSwitchDefaultDirective","ngTranscludeDirective","$transclude","$attrs","scriptDirective","ngOptionsDirective","selectDirective","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","Single","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","Multiple","lastView","items","selectMultipleWatch","Options","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","optionTemplate","optionsExp","track","optionElement","ngOptions","ngRequired","requiredValidator","optionDirective","nullSelectCtrl","selectCtrlName","interpolateWatchAction","styleDirective","publishExternalAPI","ngModule"] +} diff --git a/app/lib/angular/errors.json b/app/lib/angular/errors.json new file mode 100755 index 0000000000..6631f951f4 --- /dev/null +++ b/app/lib/angular/errors.json @@ -0,0 +1 @@ +{"id":"ng","generated":"Wed Sep 04 2013 14:51:13 GMT+0200 (CEST)","errors":{"$cacheFactory":{"iid":"CacheId '{0}' is already taken!"},"ngModel":{"nonassign":"Expression '{0}' is non-assignable. Element: {1}"},"$sce":{"iequirks":"Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks mode. You can fix this by adding the text to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.","insecurl":"Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}","icontext":"Attempted to trust a value in invalid context. Context: {0}; Value: {1}","itype":"Attempted to trust a non-string value in a content requiring a string: Context: {0}","unsafe":"Attempting to use an unsafe value in a safe context."},"$controller":{"noscp":"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`."},"$compile":{"nodomevents":"Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead.","multidir":"Multiple directives [{0}, {1}] asking for {2} on: {3}","nonassign":"Expression '{0}' used with directive '{1}' is non-assignable!","tplrt":"Template for directive '{0}' must have exactly one root element. {1}","selmulti":"Binding to the 'multiple' attribute is not supported. Element: {0}","tpload":"Failed to load template: {0}","iscp":"Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}","ctreq":"Controller '{0}', required by directive '{1}', can't be found!","uterdir":"Unterminated attribute, found '{0}' but no matching '{1}' found."},"$injector":{"modulerr":"Failed to instantiate module {0} due to:\n{1}","unpr":"Unknown provider: {0}","itkn":"Incorrect injection token! Expected service name as string, got {0}","cdep":"Circular dependency found: {0}","nomod":"Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.","pget":"Provider '{0}' must define $get factory method."},"$rootScope":{"inprog":"{0} already in progress","infdig":"{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}"},"ngPattern":{"noregexp":"Expected {0} to be a RegExp but was {1}. Element: {2}"},"$interpolate":{"noconcat":"Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce","interr":"Can't interpolate: {0}\n{1}"},"jqLite":{"offargs":"jqLite#off() does not support the `selector` argument","onargs":"jqLite#on() does not support the `selector` or `eventData` parameters","nosel":"Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element"},"ngOptions":{"iexp":"Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}"},"ngRepeat":{"iidexp":"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.","dupes":"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}","iexp":"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'."},"ng":{"areq":"Argument '{0}' is {1}","cpws":"Can't copy! Making copies of Window or Scope instances is not supported.","btstrpd":"App Already Bootstrapped with this Element '{0}'","cpi":"Can't copy! Source and destination are identical."},"$animate":{"notcsel":"Expecting class selector starting with '.' got '{0}'."},"$parse":{"isecfld":"Referencing \"constructor\" field in Angular expressions is disallowed! Expression: {0}","syntax":"Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].","lexerr":"Lexer Error: {0} at column{1} in expression [{2}].","ueoe":"Unexpected end of expression: {0}","isecfn":"Referencing Function in Angular expressions is disallowed! Expression: {0}"},"$httpBackend":{"noxhr":"This browser does not support XMLHttpRequest."},"$location":{"ipthprfx":"Invalid url \"{0}\", missing path prefix \"{1}\".","isrcharg":"The first argument of the `$location#search()` call must be a string or an object.","ihshprfx":"Invalid url \"{0}\", missing hash prefix \"{1}\"."},"$resource":{"badargs":"Expected up to 4 arguments [params, data, success, error], got {0} arguments","badcfg":"Error in resource configuration. Expected response to contain an {0} but got an {1}"},"$sanitize":{"badparse":"The sanitizer was unable to parse the following block of html: {0}"}}} \ No newline at end of file diff --git a/app/lib/angular/i18n/angular-locale_af-na.js b/app/lib/angular/i18n/angular-locale_af-na.js new file mode 100755 index 0000000000..6b7e2850c4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_af-na.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_af-za.js b/app/lib/angular/i18n/angular-locale_af-za.js new file mode 100755 index 0000000000..a15813d0d0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_af-za.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_af.js b/app/lib/angular/i18n/angular-locale_af.js new file mode 100755 index 0000000000..d8f8450942 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_af.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vm.", + "nm." + ], + "DAY": [ + "Sondag", + "Maandag", + "Dinsdag", + "Woensdag", + "Donderdag", + "Vrydag", + "Saterdag" + ], + "MONTH": [ + "Januarie", + "Februarie", + "Maart", + "April", + "Mei", + "Junie", + "Julie", + "Augustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "So", + "Ma", + "Di", + "Wo", + "Do", + "Vr", + "Sa" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_am-et.js b/app/lib/angular/i18n/angular-locale_am-et.js new file mode 100755 index 0000000000..0640202455 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_am-et.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1321\u12cb\u1275", + "\u12a8\u1233\u12d3\u1275" + ], + "DAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230\u129e", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_am.js b/app/lib/angular/i18n/angular-locale_am.js new file mode 100755 index 0000000000..26c8244ed3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_am.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u1321\u12cb\u1275", + "\u12a8\u1233\u12d3\u1275" + ], + "DAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230\u129e", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "MONTH": [ + "\u1303\u1295\u12e9\u12c8\u122a", + "\u134c\u1265\u1229\u12c8\u122a", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228\u120d", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235\u1275", + "\u1234\u1355\u1274\u121d\u1260\u122d", + "\u12a6\u12ad\u1270\u12cd\u1260\u122d", + "\u1296\u126c\u121d\u1260\u122d", + "\u12f2\u1234\u121d\u1260\u122d" + ], + "SHORTDAY": [ + "\u12a5\u1211\u12f5", + "\u1230\u129e", + "\u121b\u12ad\u1230", + "\u1228\u1261\u12d5", + "\u1210\u1219\u1235", + "\u12d3\u122d\u1265", + "\u1245\u12f3\u121c" + ], + "SHORTMONTH": [ + "\u1303\u1295\u12e9", + "\u134c\u1265\u1229", + "\u121b\u122d\u127d", + "\u12a4\u1355\u1228", + "\u121c\u12ed", + "\u1301\u1295", + "\u1301\u120b\u12ed", + "\u12a6\u1308\u1235", + "\u1234\u1355\u1274", + "\u12a6\u12ad\u1270", + "\u1296\u126c\u121d", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-001.js b/app/lib/angular/i18n/angular-locale_ar-001.js new file mode 100755 index 0000000000..ee6aca0fa2 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-001.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-ae.js b/app/lib/angular/i18n/angular-locale_ar-ae.js new file mode 100755 index 0000000000..6f4f501e6a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-ae.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-bh.js b/app/lib/angular/i18n/angular-locale_ar-bh.js new file mode 100755 index 0000000000..1b32a5bbac --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-bh.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-dz.js b/app/lib/angular/i18n/angular-locale_ar-dz.js new file mode 100755 index 0000000000..b4bdf08e4c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-dz.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-eg.js b/app/lib/angular/i18n/angular-locale_ar-eg.js new file mode 100755 index 0000000000..2e40e63a86 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-eg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-iq.js b/app/lib/angular/i18n/angular-locale_ar-iq.js new file mode 100755 index 0000000000..c8e8af85fb --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-iq.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-jo.js b/app/lib/angular/i18n/angular-locale_ar-jo.js new file mode 100755 index 0000000000..752de35691 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-jo.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-kw.js b/app/lib/angular/i18n/angular-locale_ar-kw.js new file mode 100755 index 0000000000..7e812721aa --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-kw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-lb.js b/app/lib/angular/i18n/angular-locale_ar-lb.js new file mode 100755 index 0000000000..b1f9ce1d90 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-lb.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-ly.js b/app/lib/angular/i18n/angular-locale_ar-ly.js new file mode 100755 index 0000000000..5f09f8a312 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-ly.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-ma.js b/app/lib/angular/i18n/angular-locale_ar-ma.js new file mode 100755 index 0000000000..e08616bef0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-ma.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-om.js b/app/lib/angular/i18n/angular-locale_ar-om.js new file mode 100755 index 0000000000..343ace3c8c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-om.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-qa.js b/app/lib/angular/i18n/angular-locale_ar-qa.js new file mode 100755 index 0000000000..0ecd38ae3f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-qa.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-sa.js b/app/lib/angular/i18n/angular-locale_ar-sa.js new file mode 100755 index 0000000000..1b880d9afc --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-sa.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-sd.js b/app/lib/angular/i18n/angular-locale_ar-sd.js new file mode 100755 index 0000000000..c78fdff2d9 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-sd.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-sy.js b/app/lib/angular/i18n/angular-locale_ar-sy.js new file mode 100755 index 0000000000..41e364a816 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-sy.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\u0634\u0628\u0627\u0637", + "\u0622\u0630\u0627\u0631", + "\u0646\u064a\u0633\u0627\u0646", + "\u0623\u064a\u0627\u0631", + "\u062d\u0632\u064a\u0631\u0627\u0646", + "\u062a\u0645\u0648\u0632", + "\u0622\u0628", + "\u0623\u064a\u0644\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644", + "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-tn.js b/app/lib/angular/i18n/angular-locale_ar-tn.js new file mode 100755 index 0000000000..fc4a8b0e09 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-tn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar-ye.js b/app/lib/angular/i18n/angular-locale_ar-ye.js new file mode 100755 index 0000000000..f5dc74e50a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar-ye.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ar.js b/app/lib/angular/i18n/angular-locale_ar.js new file mode 100755 index 0000000000..300498f0d3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ar.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0635", + "\u0645" + ], + "DAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "MONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\u062f\u064a\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u0644\u0623\u062d\u062f", + "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", + "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", + "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", + "\u0627\u0644\u062e\u0645\u064a\u0633", + "\u0627\u0644\u062c\u0645\u0639\u0629", + "\u0627\u0644\u0633\u0628\u062a" + ], + "SHORTMONTH": [ + "\u064a\u0646\u0627\u064a\u0631", + "\u0641\u0628\u0631\u0627\u064a\u0631", + "\u0645\u0627\u0631\u0633", + "\u0623\u0628\u0631\u064a\u0644", + "\u0645\u0627\u064a\u0648", + "\u064a\u0648\u0646\u064a\u0648", + "\u064a\u0648\u0644\u064a\u0648", + "\u0623\u063a\u0633\u0637\u0633", + "\u0633\u0628\u062a\u0645\u0628\u0631", + "\u0623\u0643\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0641\u0645\u0628\u0631", + "\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": [ + { + "gSize": 0, + "lgSize": 0, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "", + "negSuf": "-", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_bg-bg.js b/app/lib/angular/i18n/angular-locale_bg-bg.js new file mode 100755 index 0000000000..b33dc4712e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_bg-bg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440. \u043e\u0431.", + "\u0441\u043b. \u043e\u0431." + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_bg.js b/app/lib/angular/i18n/angular-locale_bg.js new file mode 100755 index 0000000000..7d8a253b3d --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_bg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440. \u043e\u0431.", + "\u0441\u043b. \u043e\u0431." + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u043b\u044f", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u044f\u0434\u0430", + "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", + "\u043f\u0435\u0442\u044a\u043a", + "\u0441\u044a\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0443\u0430\u0440\u0438", + "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", + "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", + "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", + "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438" + ], + "SHORTDAY": [ + "\u043d\u0434", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440.", + "\u043c\u0430\u0439", + "\u044e\u043d\u0438", + "\u044e\u043b\u0438", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043f\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u0435\u043c.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_bn-bd.js b/app/lib/angular/i18n/angular-locale_bn-bd.js new file mode 100755 index 0000000000..c16bdda2f1 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_bn-bd.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_bn-in.js b/app/lib/angular/i18n/angular-locale_bn-in.js new file mode 100755 index 0000000000..0014314c8c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_bn-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_bn.js b/app/lib/angular/i18n/angular-locale_bn.js new file mode 100755 index 0000000000..82fbe3859d --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_bn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", + "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", + "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", + "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", + "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", + "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", + "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0" + ], + "MONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0" + ], + "SHORTDAY": [ + "\u09b0\u09ac\u09bf", + "\u09b8\u09cb\u09ae", + "\u09ae\u0999\u09cd\u0997\u09b2", + "\u09ac\u09c1\u09a7", + "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", + "\u09b6\u09c1\u0995\u09cd\u09b0", + "\u09b6\u09a8\u09bf" + ], + "SHORTMONTH": [ + "\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", + "\u09ae\u09be\u09b0\u09cd\u099a", + "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", + "\u09ae\u09c7", + "\u099c\u09c1\u09a8", + "\u099c\u09c1\u09b2\u09be\u0987", + "\u0986\u0997\u09b8\u09cd\u099f", + "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0", + "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", + "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ca-ad.js b/app/lib/angular/i18n/angular-locale_ca-ad.js new file mode 100755 index 0000000000..f1cdab2112 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ca-ad.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "MONTH": [ + "de gener", + "de febrer", + "de mar\u00e7", + "d\u2019abril", + "de maig", + "de juny", + "de juliol", + "d\u2019agost", + "de setembre", + "d\u2019octubre", + "de novembre", + "de desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "de gen.", + "de febr.", + "de mar\u00e7", + "d\u2019abr.", + "de maig", + "de juny", + "de jul.", + "d\u2019ag.", + "de set.", + "d\u2019oct.", + "de nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ca-es.js b/app/lib/angular/i18n/angular-locale_ca-es.js new file mode 100755 index 0000000000..90662edd15 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ca-es.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "MONTH": [ + "de gener", + "de febrer", + "de mar\u00e7", + "d\u2019abril", + "de maig", + "de juny", + "de juliol", + "d\u2019agost", + "de setembre", + "d\u2019octubre", + "de novembre", + "de desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "de gen.", + "de febr.", + "de mar\u00e7", + "d\u2019abr.", + "de maig", + "de juny", + "de jul.", + "d\u2019ag.", + "de set.", + "d\u2019oct.", + "de nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ca.js b/app/lib/angular/i18n/angular-locale_ca.js new file mode 100755 index 0000000000..cf881e0c4b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ca.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "diumenge", + "dilluns", + "dimarts", + "dimecres", + "dijous", + "divendres", + "dissabte" + ], + "MONTH": [ + "de gener", + "de febrer", + "de mar\u00e7", + "d\u2019abril", + "de maig", + "de juny", + "de juliol", + "d\u2019agost", + "de setembre", + "d\u2019octubre", + "de novembre", + "de desembre" + ], + "SHORTDAY": [ + "dg.", + "dl.", + "dt.", + "dc.", + "dj.", + "dv.", + "ds." + ], + "SHORTMONTH": [ + "de gen.", + "de febr.", + "de mar\u00e7", + "d\u2019abr.", + "de maig", + "de juny", + "de jul.", + "d\u2019ag.", + "de set.", + "d\u2019oct.", + "de nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_cs-cz.js b/app/lib/angular/i18n/angular-locale_cs-cz.js new file mode 100755 index 0000000000..b0c3dfd900 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_cs-cz.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dop.", + "odp." + ], + "DAY": [ + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota" + ], + "MONTH": [ + "ledna", + "\u00fanora", + "b\u0159ezna", + "dubna", + "kv\u011btna", + "\u010dervna", + "\u010dervence", + "srpna", + "z\u00e1\u0159\u00ed", + "\u0159\u00edjna", + "listopadu", + "prosince" + ], + "SHORTDAY": [ + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so" + ], + "SHORTMONTH": [ + "Led", + "\u00dano", + "B\u0159e", + "Dub", + "Kv\u011b", + "\u010cer", + "\u010cvc", + "Srp", + "Z\u00e1\u0159", + "\u0158\u00edj", + "Lis", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_cs.js b/app/lib/angular/i18n/angular-locale_cs.js new file mode 100755 index 0000000000..fbe92cf1b8 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_cs.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dop.", + "odp." + ], + "DAY": [ + "ned\u011ble", + "pond\u011bl\u00ed", + "\u00fater\u00fd", + "st\u0159eda", + "\u010dtvrtek", + "p\u00e1tek", + "sobota" + ], + "MONTH": [ + "ledna", + "\u00fanora", + "b\u0159ezna", + "dubna", + "kv\u011btna", + "\u010dervna", + "\u010dervence", + "srpna", + "z\u00e1\u0159\u00ed", + "\u0159\u00edjna", + "listopadu", + "prosince" + ], + "SHORTDAY": [ + "ne", + "po", + "\u00fat", + "st", + "\u010dt", + "p\u00e1", + "so" + ], + "SHORTMONTH": [ + "Led", + "\u00dano", + "B\u0159e", + "Dub", + "Kv\u011b", + "\u010cer", + "\u010cvc", + "Srp", + "Z\u00e1\u0159", + "\u0158\u00edj", + "Lis", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_da-dk.js b/app/lib/angular/i18n/angular-locale_da-dk.js new file mode 100755 index 0000000000..3a7afac92f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_da-dk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "f.m.", + "e.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n", + "man", + "tir", + "ons", + "tor", + "fre", + "l\u00f8r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_da.js b/app/lib/angular/i18n/angular-locale_da.js new file mode 100755 index 0000000000..52c97db063 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_da.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "f.m.", + "e.m." + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "MONTH": [ + "januar", + "februar", + "marts", + "april", + "maj", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f8n", + "man", + "tir", + "ons", + "tor", + "fre", + "l\u00f8r" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de-at.js b/app/lib/angular/i18n/angular-locale_de-at.js new file mode 100755 index 0000000000..9c7c455cfc --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de-at.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "J\u00e4nner", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "J\u00e4n", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de-be.js b/app/lib/angular/i18n/angular-locale_de-be.js new file mode 100755 index 0000000000..63b32dc8c5 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de-be.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de-ch.js b/app/lib/angular/i18n/angular-locale_de-ch.js new file mode 100755 index 0000000000..178c463ba3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de-ch.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de-de.js b/app/lib/angular/i18n/angular-locale_de-de.js new file mode 100755 index 0000000000..404715f127 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de-de.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de-li.js b/app/lib/angular/i18n/angular-locale_de-li.js new file mode 100755 index 0000000000..8f3d2d21e0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de-li.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de-lu.js b/app/lib/angular/i18n/angular-locale_de-lu.js new file mode 100755 index 0000000000..70a7582043 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de-lu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_de.js b/app/lib/angular/i18n/angular-locale_de.js new file mode 100755 index 0000000000..ebb2853814 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_de.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nachm." + ], + "DAY": [ + "Sonntag", + "Montag", + "Dienstag", + "Mittwoch", + "Donnerstag", + "Freitag", + "Samstag" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "August", + "September", + "Oktober", + "November", + "Dezember" + ], + "SHORTDAY": [ + "So.", + "Mo.", + "Di.", + "Mi.", + "Do.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_el-cy.js b/app/lib/angular/i18n/angular-locale_el-cy.js new file mode 100755 index 0000000000..1252687014 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_el-cy.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03b9", + "\u03a4\u03b5\u03c4", + "\u03a0\u03b5\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03b1\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u03ca", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_el-gr.js b/app/lib/angular/i18n/angular-locale_el-gr.js new file mode 100755 index 0000000000..a6c045abef --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_el-gr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03b9", + "\u03a4\u03b5\u03c4", + "\u03a0\u03b5\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03b1\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u03ca", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_el.js b/app/lib/angular/i18n/angular-locale_el.js new file mode 100755 index 0000000000..cdecf74297 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_el.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u03c0.\u03bc.", + "\u03bc.\u03bc." + ], + "DAY": [ + "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", + "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", + "\u03a4\u03c1\u03af\u03c4\u03b7", + "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", + "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", + "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", + "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" + ], + "MONTH": [ + "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "\u039c\u03b1\u0390\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5" + ], + "SHORTDAY": [ + "\u039a\u03c5\u03c1", + "\u0394\u03b5\u03c5", + "\u03a4\u03c1\u03b9", + "\u03a4\u03b5\u03c4", + "\u03a0\u03b5\u03bc", + "\u03a0\u03b1\u03c1", + "\u03a3\u03b1\u03b2" + ], + "SHORTMONTH": [ + "\u0399\u03b1\u03bd", + "\u03a6\u03b5\u03b2", + "\u039c\u03b1\u03c1", + "\u0391\u03c0\u03c1", + "\u039c\u03b1\u03ca", + "\u0399\u03bf\u03c5\u03bd", + "\u0399\u03bf\u03c5\u03bb", + "\u0391\u03c5\u03b3", + "\u03a3\u03b5\u03c0", + "\u039f\u03ba\u03c4", + "\u039d\u03bf\u03b5", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-as.js b/app/lib/angular/i18n/angular-locale_en-as.js new file mode 100755 index 0000000000..d1cab80884 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-as.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-au.js b/app/lib/angular/i18n/angular-locale_en-au.js new file mode 100755 index 0000000000..a0de72b9cf --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-au.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-bb.js b/app/lib/angular/i18n/angular-locale_en-bb.js new file mode 100755 index 0000000000..91ee7ff9b7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-bb.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-be.js b/app/lib/angular/i18n/angular-locale_en-be.js new file mode 100755 index 0000000000..7ec6b29d73 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-be.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-bm.js b/app/lib/angular/i18n/angular-locale_en-bm.js new file mode 100755 index 0000000000..49f670e345 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-bm.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-bw.js b/app/lib/angular/i18n/angular-locale_en-bw.js new file mode 100755 index 0000000000..c7d9855fc0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-bw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-bz.js b/app/lib/angular/i18n/angular-locale_en-bz.js new file mode 100755 index 0000000000..e40b2d5118 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-bz.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-ca.js b/app/lib/angular/i18n/angular-locale_en-ca.js new file mode 100755 index 0000000000..cd137fb721 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-ca.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-dsrt-us.js b/app/lib/angular/i18n/angular-locale_en-dsrt-us.js new file mode 100755 index 0000000000..52e9f968bb --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-dsrt-us.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\ud801\udc08\ud801\udc23", + "\ud801\udc11\ud801\udc23" + ], + "DAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29", + "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29" + ], + "MONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d", + "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34", + "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b", + "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49" + ], + "SHORTDAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c", + "\ud801\udc23\ud801\udc32\ud801\udc4c", + "\ud801\udc13\ud801\udc2d\ud801\udc46", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c", + "\ud801\udc1b\ud801\udc32\ud801\udc49", + "\ud801\udc19\ud801\udc49\ud801\udc34", + "\ud801\udc1d\ud801\udc30\ud801\udc3b" + ], + "SHORTMONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c", + "\ud801\udc19\ud801\udc2f\ud801\udc3a", + "\ud801\udc23\ud801\udc2a\ud801\udc49", + "\ud801\udc01\ud801\udc39\ud801\udc49", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a", + "\ud801\udc02\ud801\udc40", + "\ud801\udc1d\ud801\udc2f\ud801\udc39", + "\ud801\udc09\ud801\udc3f\ud801\udc3b", + "\ud801\udc24\ud801\udc2c\ud801\udc42", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-dsrt.js b/app/lib/angular/i18n/angular-locale_en-dsrt.js new file mode 100755 index 0000000000..24618aa545 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-dsrt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\ud801\udc08\ud801\udc23", + "\ud801\udc11\ud801\udc23" + ], + "DAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc23\ud801\udc32\ud801\udc4c\ud801\udc3c\ud801\udc29", + "\ud801\udc13\ud801\udc2d\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc1b\ud801\udc32\ud801\udc49\ud801\udc46\ud801\udc3c\ud801\udc29", + "\ud801\udc19\ud801\udc49\ud801\udc34\ud801\udc3c\ud801\udc29", + "\ud801\udc1d\ud801\udc30\ud801\udc3b\ud801\udc32\ud801\udc49\ud801\udc3c\ud801\udc29" + ], + "MONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c\ud801\udc37\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc19\ud801\udc2f\ud801\udc3a\ud801\udc49\ud801\udc2d\ud801\udc2f\ud801\udc49\ud801\udc28", + "\ud801\udc23\ud801\udc2a\ud801\udc49\ud801\udc3d", + "\ud801\udc01\ud801\udc39\ud801\udc49\ud801\udc2e\ud801\udc4a", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a\ud801\udc34", + "\ud801\udc02\ud801\udc40\ud801\udc32\ud801\udc45\ud801\udc3b", + "\ud801\udc1d\ud801\udc2f\ud801\udc39\ud801\udc3b\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc09\ud801\udc3f\ud801\udc3b\ud801\udc2c\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc24\ud801\udc2c\ud801\udc42\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49", + "\ud801\udc14\ud801\udc28\ud801\udc45\ud801\udc2f\ud801\udc4b\ud801\udc3a\ud801\udc32\ud801\udc49" + ], + "SHORTDAY": [ + "\ud801\udc1d\ud801\udc32\ud801\udc4c", + "\ud801\udc23\ud801\udc32\ud801\udc4c", + "\ud801\udc13\ud801\udc2d\ud801\udc46", + "\ud801\udc0e\ud801\udc2f\ud801\udc4c", + "\ud801\udc1b\ud801\udc32\ud801\udc49", + "\ud801\udc19\ud801\udc49\ud801\udc34", + "\ud801\udc1d\ud801\udc30\ud801\udc3b" + ], + "SHORTMONTH": [ + "\ud801\udc16\ud801\udc30\ud801\udc4c", + "\ud801\udc19\ud801\udc2f\ud801\udc3a", + "\ud801\udc23\ud801\udc2a\ud801\udc49", + "\ud801\udc01\ud801\udc39\ud801\udc49", + "\ud801\udc23\ud801\udc29", + "\ud801\udc16\ud801\udc2d\ud801\udc4c", + "\ud801\udc16\ud801\udc2d\ud801\udc4a", + "\ud801\udc02\ud801\udc40", + "\ud801\udc1d\ud801\udc2f\ud801\udc39", + "\ud801\udc09\ud801\udc3f\ud801\udc3b", + "\ud801\udc24\ud801\udc2c\ud801\udc42", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-fm.js b/app/lib/angular/i18n/angular-locale_en-fm.js new file mode 100755 index 0000000000..565d04cff2 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-fm.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-gb.js b/app/lib/angular/i18n/angular-locale_en-gb.js new file mode 100755 index 0000000000..f97e342a1a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-gb.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-gu.js b/app/lib/angular/i18n/angular-locale_en-gu.js new file mode 100755 index 0000000000..06f5a86f04 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-gu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-gy.js b/app/lib/angular/i18n/angular-locale_en-gy.js new file mode 100755 index 0000000000..b4acc0729b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-gy.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-hk.js b/app/lib/angular/i18n/angular-locale_en-hk.js new file mode 100755 index 0000000000..4c2c8d3360 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-hk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-ie.js b/app/lib/angular/i18n/angular-locale_en-ie.js new file mode 100755 index 0000000000..dc559f7b73 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-ie.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-in.js b/app/lib/angular/i18n/angular-locale_en-in.js new file mode 100755 index 0000000000..6be8b880ae --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-iso.js b/app/lib/angular/i18n/angular-locale_en-iso.js new file mode 100755 index 0000000000..23500ed083 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-iso.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-jm.js b/app/lib/angular/i18n/angular-locale_en-jm.js new file mode 100755 index 0000000000..6845afe991 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-jm.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-mh.js b/app/lib/angular/i18n/angular-locale_en-mh.js new file mode 100755 index 0000000000..91ca264617 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-mh.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-mp.js b/app/lib/angular/i18n/angular-locale_en-mp.js new file mode 100755 index 0000000000..e3d0d0587f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-mp.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-mt.js b/app/lib/angular/i18n/angular-locale_en-mt.js new file mode 100755 index 0000000000..0c87da0fec --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-mt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-mu.js b/app/lib/angular/i18n/angular-locale_en-mu.js new file mode 100755 index 0000000000..50352c6505 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-mu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-na.js b/app/lib/angular/i18n/angular-locale_en-na.js new file mode 100755 index 0000000000..1bf61fef1b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-na.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-nz.js b/app/lib/angular/i18n/angular-locale_en-nz.js new file mode 100755 index 0000000000..50858e0cc7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-nz.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-ph.js b/app/lib/angular/i18n/angular-locale_en-ph.js new file mode 100755 index 0000000000..f1e74111e7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-ph.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-pk.js b/app/lib/angular/i18n/angular-locale_en-pk.js new file mode 100755 index 0000000000..46411ec55a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-pk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-pr.js b/app/lib/angular/i18n/angular-locale_en-pr.js new file mode 100755 index 0000000000..de5ed1f397 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-pr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-pw.js b/app/lib/angular/i18n/angular-locale_en-pw.js new file mode 100755 index 0000000000..4f1e259a2b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-pw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-sg.js b/app/lib/angular/i18n/angular-locale_en-sg.js new file mode 100755 index 0000000000..8e26c89a4a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-sg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-tc.js b/app/lib/angular/i18n/angular-locale_en-tc.js new file mode 100755 index 0000000000..38757ed510 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-tc.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-tt.js b/app/lib/angular/i18n/angular-locale_en-tt.js new file mode 100755 index 0000000000..bdfbc0e455 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-tt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-um.js b/app/lib/angular/i18n/angular-locale_en-um.js new file mode 100755 index 0000000000..295795a258 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-um.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-us.js b/app/lib/angular/i18n/angular-locale_en-us.js new file mode 100755 index 0000000000..e5e8a6d974 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-us.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-vg.js b/app/lib/angular/i18n/angular-locale_en-vg.js new file mode 100755 index 0000000000..8dda34509b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-vg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-vi.js b/app/lib/angular/i18n/angular-locale_en-vi.js new file mode 100755 index 0000000000..d5b778bc49 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-vi.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-za.js b/app/lib/angular/i18n/angular-locale_en-za.js new file mode 100755 index 0000000000..a3db4c3bc1 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-za.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en-zw.js b/app/lib/angular/i18n/angular-locale_en-zw.js new file mode 100755 index 0000000000..4aabe4fadd --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en-zw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_en.js b/app/lib/angular/i18n/angular-locale_en.js new file mode 100755 index 0000000000..60fb427616 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_en.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "MONTH": [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ], + "SHORTDAY": [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-419.js b/app/lib/angular/i18n/angular-locale_es-419.js new file mode 100755 index 0000000000..10d94b3394 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-419.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-ar.js b/app/lib/angular/i18n/angular-locale_es-ar.js new file mode 100755 index 0000000000..7b489a9499 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-ar.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-bo.js b/app/lib/angular/i18n/angular-locale_es-bo.js new file mode 100755 index 0000000000..62af26762b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-bo.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-cl.js b/app/lib/angular/i18n/angular-locale_es-cl.js new file mode 100755 index 0000000000..4521eea80d --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-cl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-co.js b/app/lib/angular/i18n/angular-locale_es-co.js new file mode 100755 index 0000000000..be6f56c139 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-co.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-cr.js b/app/lib/angular/i18n/angular-locale_es-cr.js new file mode 100755 index 0000000000..809701bcd6 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-cr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-do.js b/app/lib/angular/i18n/angular-locale_es-do.js new file mode 100755 index 0000000000..b672a85d25 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-do.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-ea.js b/app/lib/angular/i18n/angular-locale_es-ea.js new file mode 100755 index 0000000000..e2f9da2bf4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-ea.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-ec.js b/app/lib/angular/i18n/angular-locale_es-ec.js new file mode 100755 index 0000000000..ba7a370f89 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-ec.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-es.js b/app/lib/angular/i18n/angular-locale_es-es.js new file mode 100755 index 0000000000..99c972ea7b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-es.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-gq.js b/app/lib/angular/i18n/angular-locale_es-gq.js new file mode 100755 index 0000000000..837379e6a7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-gq.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-gt.js b/app/lib/angular/i18n/angular-locale_es-gt.js new file mode 100755 index 0000000000..f6cc8cf43b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-gt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-hn.js b/app/lib/angular/i18n/angular-locale_es-hn.js new file mode 100755 index 0000000000..d314fcdfac --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-hn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-ic.js b/app/lib/angular/i18n/angular-locale_es-ic.js new file mode 100755 index 0000000000..bf69156259 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-ic.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-mx.js b/app/lib/angular/i18n/angular-locale_es-mx.js new file mode 100755 index 0000000000..6991c5276e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-mx.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-ni.js b/app/lib/angular/i18n/angular-locale_es-ni.js new file mode 100755 index 0000000000..9be77dfaee --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-ni.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-pa.js b/app/lib/angular/i18n/angular-locale_es-pa.js new file mode 100755 index 0000000000..64a4c1760e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-pa.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-pe.js b/app/lib/angular/i18n/angular-locale_es-pe.js new file mode 100755 index 0000000000..174e4212c4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-pe.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-pr.js b/app/lib/angular/i18n/angular-locale_es-pr.js new file mode 100755 index 0000000000..e8762092b7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-pr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-py.js b/app/lib/angular/i18n/angular-locale_es-py.js new file mode 100755 index 0000000000..691099e994 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-py.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-sv.js b/app/lib/angular/i18n/angular-locale_es-sv.js new file mode 100755 index 0000000000..7bbb8a5358 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-sv.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-us.js b/app/lib/angular/i18n/angular-locale_es-us.js new file mode 100755 index 0000000000..3b7fbce038 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-us.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-uy.js b/app/lib/angular/i18n/angular-locale_es-uy.js new file mode 100755 index 0000000000..c304ba838a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-uy.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es-ve.js b/app/lib/angular/i18n/angular-locale_es-ve.js new file mode 100755 index 0000000000..9e46788222 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es-ve.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_es.js b/app/lib/angular/i18n/angular-locale_es.js new file mode 100755 index 0000000000..95914019dc --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_es.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "domingo", + "lunes", + "martes", + "mi\u00e9rcoles", + "jueves", + "viernes", + "s\u00e1bado" + ], + "MONTH": [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mi\u00e9", + "jue", + "vie", + "s\u00e1b" + ], + "SHORTMONTH": [ + "ene", + "feb", + "mar", + "abr", + "may", + "jun", + "jul", + "ago", + "sep", + "oct", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_et-ee.js b/app/lib/angular/i18n/angular-locale_et-ee.js new file mode 100755 index 0000000000..d941b67a2f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_et-ee.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "enne keskp\u00e4eva", + "p\u00e4rast keskp\u00e4eva" + ], + "DAY": [ + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev" + ], + "MONTH": [ + "jaanuar", + "veebruar", + "m\u00e4rts", + "aprill", + "mai", + "juuni", + "juuli", + "august", + "september", + "oktoober", + "november", + "detsember" + ], + "SHORTDAY": [ + "P", + "E", + "T", + "K", + "N", + "R", + "L" + ], + "SHORTMONTH": [ + "jaan", + "veebr", + "m\u00e4rts", + "apr", + "mai", + "juuni", + "juuli", + "aug", + "sept", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_et.js b/app/lib/angular/i18n/angular-locale_et.js new file mode 100755 index 0000000000..79ebb3e16f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_et.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "enne keskp\u00e4eva", + "p\u00e4rast keskp\u00e4eva" + ], + "DAY": [ + "p\u00fchap\u00e4ev", + "esmasp\u00e4ev", + "teisip\u00e4ev", + "kolmap\u00e4ev", + "neljap\u00e4ev", + "reede", + "laup\u00e4ev" + ], + "MONTH": [ + "jaanuar", + "veebruar", + "m\u00e4rts", + "aprill", + "mai", + "juuni", + "juuli", + "august", + "september", + "oktoober", + "november", + "detsember" + ], + "SHORTDAY": [ + "P", + "E", + "T", + "K", + "N", + "R", + "L" + ], + "SHORTMONTH": [ + "jaan", + "veebr", + "m\u00e4rts", + "apr", + "mai", + "juuni", + "juuli", + "aug", + "sept", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_eu-es.js b/app/lib/angular/i18n/angular-locale_eu-es.js new file mode 100755 index 0000000000..0b51823bc4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_eu-es.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "igandea", + "astelehena", + "asteartea", + "asteazkena", + "osteguna", + "ostirala", + "larunbata" + ], + "MONTH": [ + "urtarrila", + "otsaila", + "martxoa", + "apirila", + "maiatza", + "ekaina", + "uztaila", + "abuztua", + "iraila", + "urria", + "azaroa", + "abendua" + ], + "SHORTDAY": [ + "ig", + "al", + "as", + "az", + "og", + "or", + "lr" + ], + "SHORTMONTH": [ + "urt", + "ots", + "mar", + "api", + "mai", + "eka", + "uzt", + "abu", + "ira", + "urr", + "aza", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_eu.js b/app/lib/angular/i18n/angular-locale_eu.js new file mode 100755 index 0000000000..72400107e6 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_eu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "igandea", + "astelehena", + "asteartea", + "asteazkena", + "osteguna", + "ostirala", + "larunbata" + ], + "MONTH": [ + "urtarrila", + "otsaila", + "martxoa", + "apirila", + "maiatza", + "ekaina", + "uztaila", + "abuztua", + "iraila", + "urria", + "azaroa", + "abendua" + ], + "SHORTDAY": [ + "ig", + "al", + "as", + "az", + "og", + "or", + "lr" + ], + "SHORTMONTH": [ + "urt", + "ots", + "mar", + "api", + "mai", + "eka", + "uzt", + "abu", + "ira", + "urr", + "aza", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fa-af.js b/app/lib/angular/i18n/angular-locale_fa-af.js new file mode 100755 index 0000000000..21ec56ee62 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fa-af.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0628\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u06cc\u0644", + "\u0645\u06cc", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u06cc", + "\u0627\u06af\u0633\u062a", + "\u0633\u067e\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0640\u06cc", + "\u0698\u0648\u0626\u0646", + "\u062c\u0648\u0644", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fa-ir.js b/app/lib/angular/i18n/angular-locale_fa-ir.js new file mode 100755 index 0000000000..eaf18ef1dd --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fa-ir.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "MONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fa.js b/app/lib/angular/i18n/angular-locale_fa.js new file mode 100755 index 0000000000..267702763b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fa.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", + "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631" + ], + "DAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "MONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\u062f\u0633\u0627\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u06cc\u06a9\u0634\u0646\u0628\u0647", + "\u062f\u0648\u0634\u0646\u0628\u0647", + "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", + "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", + "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", + "\u062c\u0645\u0639\u0647", + "\u0634\u0646\u0628\u0647" + ], + "SHORTMONTH": [ + "\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", + "\u0641\u0648\u0631\u06cc\u0647\u0654", + "\u0645\u0627\u0631\u0633", + "\u0622\u0648\u0631\u06cc\u0644", + "\u0645\u0647\u0654", + "\u0698\u0648\u0626\u0646", + "\u0698\u0648\u0626\u06cc\u0647\u0654", + "\u0627\u0648\u062a", + "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0628\u0631", + "\u0646\u0648\u0627\u0645\u0628\u0631", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fi-fi.js b/app/lib/angular/i18n/angular-locale_fi-fi.js new file mode 100755 index 0000000000..b33062ff47 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fi-fi.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ap.", + "ip." + ], + "DAY": [ + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina" + ], + "MONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "SHORTDAY": [ + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la" + ], + "SHORTMONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fi.js b/app/lib/angular/i18n/angular-locale_fi.js new file mode 100755 index 0000000000..06a42fdeab --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fi.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "ap.", + "ip." + ], + "DAY": [ + "sunnuntaina", + "maanantaina", + "tiistaina", + "keskiviikkona", + "torstaina", + "perjantaina", + "lauantaina" + ], + "MONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "joulukuuta" + ], + "SHORTDAY": [ + "su", + "ma", + "ti", + "ke", + "to", + "pe", + "la" + ], + "SHORTMONTH": [ + "tammikuuta", + "helmikuuta", + "maaliskuuta", + "huhtikuuta", + "toukokuuta", + "kes\u00e4kuuta", + "hein\u00e4kuuta", + "elokuuta", + "syyskuuta", + "lokakuuta", + "marraskuuta", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fil-ph.js b/app/lib/angular/i18n/angular-locale_fil-ph.js new file mode 100755 index 0000000000..849cedea76 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fil-ph.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Mye", + "Huw", + "Bye", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fil.js b/app/lib/angular/i18n/angular-locale_fil.js new file mode 100755 index 0000000000..c9cb7ca9e9 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fil.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Mye", + "Huw", + "Bye", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-be.js b/app/lib/angular/i18n/angular-locale_fr-be.js new file mode 100755 index 0000000000..ca7d3acc6f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-be.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-bf.js b/app/lib/angular/i18n/angular-locale_fr-bf.js new file mode 100755 index 0000000000..6717958a25 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-bf.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-bi.js b/app/lib/angular/i18n/angular-locale_fr-bi.js new file mode 100755 index 0000000000..dad30c01d0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-bi.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-bj.js b/app/lib/angular/i18n/angular-locale_fr-bj.js new file mode 100755 index 0000000000..b16c69a66f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-bj.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-bl.js b/app/lib/angular/i18n/angular-locale_fr-bl.js new file mode 100755 index 0000000000..a963168018 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-bl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-ca.js b/app/lib/angular/i18n/angular-locale_fr-ca.js new file mode 100755 index 0000000000..ff3ef40382 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-ca.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-cd.js b/app/lib/angular/i18n/angular-locale_fr-cd.js new file mode 100755 index 0000000000..7afc95048c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-cd.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-cf.js b/app/lib/angular/i18n/angular-locale_fr-cf.js new file mode 100755 index 0000000000..fe7f1f9759 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-cf.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-cg.js b/app/lib/angular/i18n/angular-locale_fr-cg.js new file mode 100755 index 0000000000..e5360f51bd --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-cg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-ch.js b/app/lib/angular/i18n/angular-locale_fr-ch.js new file mode 100755 index 0000000000..0257ebd7f2 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-ch.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-ci.js b/app/lib/angular/i18n/angular-locale_fr-ci.js new file mode 100755 index 0000000000..d8d7f9a3c3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-ci.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-cm.js b/app/lib/angular/i18n/angular-locale_fr-cm.js new file mode 100755 index 0000000000..1026a5076c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-cm.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-dj.js b/app/lib/angular/i18n/angular-locale_fr-dj.js new file mode 100755 index 0000000000..2f9cf4c1db --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-dj.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-fr.js b/app/lib/angular/i18n/angular-locale_fr-fr.js new file mode 100755 index 0000000000..6a41fc0ae3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-fr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-ga.js b/app/lib/angular/i18n/angular-locale_fr-ga.js new file mode 100755 index 0000000000..5f444e0eef --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-ga.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-gf.js b/app/lib/angular/i18n/angular-locale_fr-gf.js new file mode 100755 index 0000000000..249ff7c9f4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-gf.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-gn.js b/app/lib/angular/i18n/angular-locale_fr-gn.js new file mode 100755 index 0000000000..44786d72fd --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-gn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-gp.js b/app/lib/angular/i18n/angular-locale_fr-gp.js new file mode 100755 index 0000000000..8c02ea5ed4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-gp.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-gq.js b/app/lib/angular/i18n/angular-locale_fr-gq.js new file mode 100755 index 0000000000..58e6481ee1 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-gq.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-km.js b/app/lib/angular/i18n/angular-locale_fr-km.js new file mode 100755 index 0000000000..03766493e7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-km.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-lu.js b/app/lib/angular/i18n/angular-locale_fr-lu.js new file mode 100755 index 0000000000..e9aec05ec9 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-lu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-mc.js b/app/lib/angular/i18n/angular-locale_fr-mc.js new file mode 100755 index 0000000000..db1150e1d8 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-mc.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-mf.js b/app/lib/angular/i18n/angular-locale_fr-mf.js new file mode 100755 index 0000000000..f6f48c9da7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-mf.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-mg.js b/app/lib/angular/i18n/angular-locale_fr-mg.js new file mode 100755 index 0000000000..5706df2661 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-mg.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-ml.js b/app/lib/angular/i18n/angular-locale_fr-ml.js new file mode 100755 index 0000000000..6a8b568e87 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-ml.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-mq.js b/app/lib/angular/i18n/angular-locale_fr-mq.js new file mode 100755 index 0000000000..d7d41adffb --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-mq.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-ne.js b/app/lib/angular/i18n/angular-locale_fr-ne.js new file mode 100755 index 0000000000..ce20c08643 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-ne.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-re.js b/app/lib/angular/i18n/angular-locale_fr-re.js new file mode 100755 index 0000000000..442f690515 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-re.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr-yt.js b/app/lib/angular/i18n/angular-locale_fr-yt.js new file mode 100755 index 0000000000..22240bb0a0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr-yt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_fr.js b/app/lib/angular/i18n/angular-locale_fr.js new file mode 100755 index 0000000000..6f3a4bcc9b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_fr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "dimanche", + "lundi", + "mardi", + "mercredi", + "jeudi", + "vendredi", + "samedi" + ], + "MONTH": [ + "janvier", + "f\u00e9vrier", + "mars", + "avril", + "mai", + "juin", + "juillet", + "ao\u00fbt", + "septembre", + "octobre", + "novembre", + "d\u00e9cembre" + ], + "SHORTDAY": [ + "dim.", + "lun.", + "mar.", + "mer.", + "jeu.", + "ven.", + "sam." + ], + "SHORTMONTH": [ + "janv.", + "f\u00e9vr.", + "mars", + "avr.", + "mai", + "juin", + "juil.", + "ao\u00fbt", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_gl-es.js b/app/lib/angular/i18n/angular-locale_gl-es.js new file mode 100755 index 0000000000..bf456cea07 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_gl-es.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Luns", + "Martes", + "M\u00e9rcores", + "Xoves", + "Venres", + "S\u00e1bado" + ], + "MONTH": [ + "Xaneiro", + "Febreiro", + "Marzo", + "Abril", + "Maio", + "Xu\u00f1o", + "Xullo", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Decembro" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "M\u00e9r", + "Xov", + "Ven", + "S\u00e1b" + ], + "SHORTMONTH": [ + "Xan", + "Feb", + "Mar", + "Abr", + "Mai", + "Xu\u00f1", + "Xul", + "Ago", + "Set", + "Out", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_gl.js b/app/lib/angular/i18n/angular-locale_gl.js new file mode 100755 index 0000000000..a9535295b7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_gl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Luns", + "Martes", + "M\u00e9rcores", + "Xoves", + "Venres", + "S\u00e1bado" + ], + "MONTH": [ + "Xaneiro", + "Febreiro", + "Marzo", + "Abril", + "Maio", + "Xu\u00f1o", + "Xullo", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Decembro" + ], + "SHORTDAY": [ + "Dom", + "Lun", + "Mar", + "M\u00e9r", + "Xov", + "Ven", + "S\u00e1b" + ], + "SHORTMONTH": [ + "Xan", + "Feb", + "Mar", + "Abr", + "Mai", + "Xu\u00f1", + "Xul", + "Ago", + "Set", + "Out", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_gsw-ch.js b/app/lib/angular/i18n/angular-locale_gsw-ch.js new file mode 100755 index 0000000000..c013912d50 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_gsw-ch.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_gsw.js b/app/lib/angular/i18n/angular-locale_gsw.js new file mode 100755 index 0000000000..553602c904 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_gsw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "vorm.", + "nam." + ], + "DAY": [ + "Sunntig", + "M\u00e4\u00e4ntig", + "Ziischtig", + "Mittwuch", + "Dunschtig", + "Friitig", + "Samschtig" + ], + "MONTH": [ + "Januar", + "Februar", + "M\u00e4rz", + "April", + "Mai", + "Juni", + "Juli", + "Auguscht", + "Sept\u00e4mber", + "Oktoober", + "Nov\u00e4mber", + "Dez\u00e4mber" + ], + "SHORTDAY": [ + "Su.", + "M\u00e4.", + "Zi.", + "Mi.", + "Du.", + "Fr.", + "Sa." + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "M\u00e4r", + "Apr", + "Mai", + "Jun", + "Jul", + "Aug", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_gu-in.js b/app/lib/angular/i18n/angular-locale_gu-in.js new file mode 100755 index 0000000000..a82bfe90e0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_gu-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", + "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", + "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", + "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", + "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", + "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0" + ], + "MONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", + "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0" + ], + "SHORTDAY": [ + "\u0ab0\u0ab5\u0abf", + "\u0ab8\u0acb\u0aae", + "\u0aae\u0a82\u0a97\u0ab3", + "\u0aac\u0ac1\u0aa7", + "\u0a97\u0ac1\u0ab0\u0ac1", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", + "\u0ab6\u0aa8\u0abf" + ], + "SHORTMONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", + "\u0a91\u0a95\u0acd\u0a9f\u0acb", + "\u0aa8\u0ab5\u0ac7", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_gu.js b/app/lib/angular/i18n/angular-locale_gu.js new file mode 100755 index 0000000000..864cc5da87 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_gu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", + "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", + "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", + "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", + "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", + "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0" + ], + "MONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", + "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", + "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0" + ], + "SHORTDAY": [ + "\u0ab0\u0ab5\u0abf", + "\u0ab8\u0acb\u0aae", + "\u0aae\u0a82\u0a97\u0ab3", + "\u0aac\u0ac1\u0aa7", + "\u0a97\u0ac1\u0ab0\u0ac1", + "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", + "\u0ab6\u0aa8\u0abf" + ], + "SHORTMONTH": [ + "\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", + "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", + "\u0aae\u0abe\u0ab0\u0acd\u0a9a", + "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", + "\u0aae\u0ac7", + "\u0a9c\u0ac2\u0aa8", + "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", + "\u0a91\u0a97\u0ab8\u0acd\u0a9f", + "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", + "\u0a91\u0a95\u0acd\u0a9f\u0acb", + "\u0aa8\u0ab5\u0ac7", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_he-il.js b/app/lib/angular/i18n/angular-locale_he-il.js new file mode 100755 index 0000000000..cd59f549ef --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_he-il.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5", + "\u05e4\u05d1\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0", + "\u05d9\u05d5\u05dc", + "\u05d0\u05d5\u05d2", + "\u05e1\u05e4\u05d8", + "\u05d0\u05d5\u05e7", + "\u05e0\u05d5\u05d1", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_he.js b/app/lib/angular/i18n/angular-locale_he.js new file mode 100755 index 0000000000..23d1cbce88 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_he.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5", + "\u05e4\u05d1\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0", + "\u05d9\u05d5\u05dc", + "\u05d0\u05d5\u05d2", + "\u05e1\u05e4\u05d8", + "\u05d0\u05d5\u05e7", + "\u05e0\u05d5\u05d1", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_hi-in.js b/app/lib/angular/i18n/angular-locale_hi-in.js new file mode 100755 index 0000000000..d9b00291e1 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_hi-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f.", + "\u0938\u094b\u092e.", + "\u092e\u0902\u0917\u0932.", + "\u092c\u0941\u0927.", + "\u092c\u0943\u0939.", + "\u0936\u0941\u0915\u094d\u0930.", + "\u0936\u0928\u093f." + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_hi.js b/app/lib/angular/i18n/angular-locale_hi.js new file mode 100755 index 0000000000..c9258b8cb1 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_hi.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\u0926\u093f\u0938\u092e\u094d\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f.", + "\u0938\u094b\u092e.", + "\u092e\u0902\u0917\u0932.", + "\u092c\u0941\u0927.", + "\u092c\u0943\u0939.", + "\u0936\u0941\u0915\u094d\u0930.", + "\u0936\u0928\u093f." + ], + "SHORTMONTH": [ + "\u091c\u0928\u0935\u0930\u0940", + "\u092b\u0930\u0935\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u0905\u092a\u094d\u0930\u0948\u0932", + "\u092e\u0908", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u093e\u0908", + "\u0905\u0917\u0938\u094d\u0924", + "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", + "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", + "\u0928\u0935\u092e\u094d\u092c\u0930", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_hr-hr.js b/app/lib/angular/i18n/angular-locale_hr-hr.js new file mode 100755 index 0000000000..865d756724 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_hr-hr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_hr.js b/app/lib/angular/i18n/angular-locale_hr.js new file mode 100755 index 0000000000..ed4223e40a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_hr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "nedjelja", + "ponedjeljak", + "utorak", + "srijeda", + "\u010detvrtak", + "petak", + "subota" + ], + "MONTH": [ + "sije\u010dnja", + "velja\u010de", + "o\u017eujka", + "travnja", + "svibnja", + "lipnja", + "srpnja", + "kolovoza", + "rujna", + "listopada", + "studenoga", + "prosinca" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sri", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "sij", + "velj", + "o\u017eu", + "tra", + "svi", + "lip", + "srp", + "kol", + "ruj", + "lis", + "stu", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_hu-hu.js b/app/lib/angular/i18n/angular-locale_hu-hu.js new file mode 100755 index 0000000000..ae33eb0ad0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_hu-hu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "de.", + "du." + ], + "DAY": [ + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat" + ], + "MONTH": [ + "janu\u00e1r", + "febru\u00e1r", + "m\u00e1rcius", + "\u00e1prilis", + "m\u00e1jus", + "j\u00fanius", + "j\u00falius", + "augusztus", + "szeptember", + "okt\u00f3ber", + "november", + "december" + ], + "SHORTDAY": [ + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo" + ], + "SHORTMONTH": [ + "jan.", + "febr.", + "m\u00e1rc.", + "\u00e1pr.", + "m\u00e1j.", + "j\u00fan.", + "j\u00fal.", + "aug.", + "szept.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_hu.js b/app/lib/angular/i18n/angular-locale_hu.js new file mode 100755 index 0000000000..beb16198ca --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_hu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "de.", + "du." + ], + "DAY": [ + "vas\u00e1rnap", + "h\u00e9tf\u0151", + "kedd", + "szerda", + "cs\u00fct\u00f6rt\u00f6k", + "p\u00e9ntek", + "szombat" + ], + "MONTH": [ + "janu\u00e1r", + "febru\u00e1r", + "m\u00e1rcius", + "\u00e1prilis", + "m\u00e1jus", + "j\u00fanius", + "j\u00falius", + "augusztus", + "szeptember", + "okt\u00f3ber", + "november", + "december" + ], + "SHORTDAY": [ + "V", + "H", + "K", + "Sze", + "Cs", + "P", + "Szo" + ], + "SHORTMONTH": [ + "jan.", + "febr.", + "m\u00e1rc.", + "\u00e1pr.", + "m\u00e1j.", + "j\u00fan.", + "j\u00fal.", + "aug.", + "szept.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_id-id.js b/app/lib/angular/i18n/angular-locale_id-id.js new file mode 100755 index 0000000000..5d02831128 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_id-id.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_id.js b/app/lib/angular/i18n/angular-locale_id.js new file mode 100755 index 0000000000..a5aa3fcaba --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_id.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_in.js b/app/lib/angular/i18n/angular-locale_in.js new file mode 100755 index 0000000000..5eed1c1d1b --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Minggu", + "Senin", + "Selasa", + "Rabu", + "Kamis", + "Jumat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember" + ], + "SHORTDAY": [ + "Min", + "Sen", + "Sel", + "Rab", + "Kam", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Agt", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_is-is.js b/app/lib/angular/i18n/angular-locale_is-is.js new file mode 100755 index 0000000000..e6f8cbbb26 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_is-is.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "f.h.", + "e.h." + ], + "DAY": [ + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur" + ], + "MONTH": [ + "jan\u00faar", + "febr\u00faar", + "mars", + "apr\u00edl", + "ma\u00ed", + "j\u00fan\u00ed", + "j\u00fal\u00ed", + "\u00e1g\u00fast", + "september", + "okt\u00f3ber", + "n\u00f3vember", + "desember" + ], + "SHORTDAY": [ + "sun", + "m\u00e1n", + "\u00feri", + "mi\u00f0", + "fim", + "f\u00f6s", + "lau" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "ma\u00ed", + "j\u00fan", + "j\u00fal", + "\u00e1g\u00fa", + "sep", + "okt", + "n\u00f3v", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_is.js b/app/lib/angular/i18n/angular-locale_is.js new file mode 100755 index 0000000000..ea64147e40 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_is.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "f.h.", + "e.h." + ], + "DAY": [ + "sunnudagur", + "m\u00e1nudagur", + "\u00feri\u00f0judagur", + "mi\u00f0vikudagur", + "fimmtudagur", + "f\u00f6studagur", + "laugardagur" + ], + "MONTH": [ + "jan\u00faar", + "febr\u00faar", + "mars", + "apr\u00edl", + "ma\u00ed", + "j\u00fan\u00ed", + "j\u00fal\u00ed", + "\u00e1g\u00fast", + "september", + "okt\u00f3ber", + "n\u00f3vember", + "desember" + ], + "SHORTDAY": [ + "sun", + "m\u00e1n", + "\u00feri", + "mi\u00f0", + "fim", + "f\u00f6s", + "lau" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "ma\u00ed", + "j\u00fan", + "j\u00fal", + "\u00e1g\u00fa", + "sep", + "okt", + "n\u00f3v", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_it-it.js b/app/lib/angular/i18n/angular-locale_it-it.js new file mode 100755 index 0000000000..a4997378c6 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_it-it.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "m.", + "p." + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_it-sm.js b/app/lib/angular/i18n/angular-locale_it-sm.js new file mode 100755 index 0000000000..f431a93bfd --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_it-sm.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "m.", + "p." + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_it.js b/app/lib/angular/i18n/angular-locale_it.js new file mode 100755 index 0000000000..99ca2a7fda --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_it.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "m.", + "p." + ], + "DAY": [ + "domenica", + "luned\u00ec", + "marted\u00ec", + "mercoled\u00ec", + "gioved\u00ec", + "venerd\u00ec", + "sabato" + ], + "MONTH": [ + "gennaio", + "febbraio", + "marzo", + "aprile", + "maggio", + "giugno", + "luglio", + "agosto", + "settembre", + "ottobre", + "novembre", + "dicembre" + ], + "SHORTDAY": [ + "dom", + "lun", + "mar", + "mer", + "gio", + "ven", + "sab" + ], + "SHORTMONTH": [ + "gen", + "feb", + "mar", + "apr", + "mag", + "giu", + "lug", + "ago", + "set", + "ott", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_iw.js b/app/lib/angular/i18n/angular-locale_iw.js new file mode 100755 index 0000000000..7f52d3a3ee --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_iw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", + "\u05d0\u05d7\u05d4\u05f4\u05e6" + ], + "DAY": [ + "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", + "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", + "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", + "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea" + ], + "MONTH": [ + "\u05d9\u05e0\u05d5\u05d0\u05e8", + "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8\u05d9\u05dc", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0\u05d9", + "\u05d9\u05d5\u05dc\u05d9", + "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", + "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", + "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", + "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", + "\u05d3\u05e6\u05de\u05d1\u05e8" + ], + "SHORTDAY": [ + "\u05d9\u05d5\u05dd \u05d0\u05f3", + "\u05d9\u05d5\u05dd \u05d1\u05f3", + "\u05d9\u05d5\u05dd \u05d2\u05f3", + "\u05d9\u05d5\u05dd \u05d3\u05f3", + "\u05d9\u05d5\u05dd \u05d4\u05f3", + "\u05d9\u05d5\u05dd \u05d5\u05f3", + "\u05e9\u05d1\u05ea" + ], + "SHORTMONTH": [ + "\u05d9\u05e0\u05d5", + "\u05e4\u05d1\u05e8", + "\u05de\u05e8\u05e5", + "\u05d0\u05e4\u05e8", + "\u05de\u05d0\u05d9", + "\u05d9\u05d5\u05e0", + "\u05d9\u05d5\u05dc", + "\u05d0\u05d5\u05d2", + "\u05e1\u05e4\u05d8", + "\u05d0\u05d5\u05e7", + "\u05e0\u05d5\u05d1", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ja-jp.js b/app/lib/angular/i18n/angular-locale_ja-jp.js new file mode 100755 index 0000000000..2fc7abcdee --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ja-jp.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u5348\u524d", + "\u5348\u5f8c" + ], + "DAY": [ + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ja.js b/app/lib/angular/i18n/angular-locale_ja.js new file mode 100755 index 0000000000..eb39e847cb --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ja.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u5348\u524d", + "\u5348\u5f8c" + ], + "DAY": [ + "\u65e5\u66dc\u65e5", + "\u6708\u66dc\u65e5", + "\u706b\u66dc\u65e5", + "\u6c34\u66dc\u65e5", + "\u6728\u66dc\u65e5", + "\u91d1\u66dc\u65e5", + "\u571f\u66dc\u65e5" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u65e5", + "\u6708", + "\u706b", + "\u6c34", + "\u6728", + "\u91d1", + "\u571f" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_kn-in.js b/app/lib/angular/i18n/angular-locale_kn-in.js new file mode 100755 index 0000000000..6f7ea15c0e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_kn-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0", + "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", + "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", + "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", + "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0" + ], + "MONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], + "SHORTDAY": [ + "\u0cb0.", + "\u0cb8\u0ccb.", + "\u0cae\u0c82.", + "\u0cac\u0cc1.", + "\u0c97\u0cc1.", + "\u0cb6\u0cc1.", + "\u0cb6\u0ca8\u0cbf." + ], + "SHORTMONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_kn.js b/app/lib/angular/i18n/angular-locale_kn.js new file mode 100755 index 0000000000..3020357406 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_kn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0", + "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", + "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", + "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", + "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", + "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0" + ], + "MONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd" + ], + "SHORTDAY": [ + "\u0cb0.", + "\u0cb8\u0ccb.", + "\u0cae\u0c82.", + "\u0cac\u0cc1.", + "\u0c97\u0cc1.", + "\u0cb6\u0cc1.", + "\u0cb6\u0ca8\u0cbf." + ], + "SHORTMONTH": [ + "\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", + "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", + "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", + "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", + "\u0cae\u0cc6", + "\u0c9c\u0cc2\u0ca8\u0ccd", + "\u0c9c\u0cc1\u0cb2\u0cc8", + "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", + "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", + "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ko-kr.js b/app/lib/angular/i18n/angular-locale_ko-kr.js new file mode 100755 index 0000000000..91b39e414f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ko-kr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ko.js b/app/lib/angular/i18n/angular-locale_ko.js new file mode 100755 index 0000000000..b5a4b1bfb4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ko.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\uc624\uc804", + "\uc624\ud6c4" + ], + "DAY": [ + "\uc77c\uc694\uc77c", + "\uc6d4\uc694\uc77c", + "\ud654\uc694\uc77c", + "\uc218\uc694\uc77c", + "\ubaa9\uc694\uc77c", + "\uae08\uc694\uc77c", + "\ud1a0\uc694\uc77c" + ], + "MONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "12\uc6d4" + ], + "SHORTDAY": [ + "\uc77c", + "\uc6d4", + "\ud654", + "\uc218", + "\ubaa9", + "\uae08", + "\ud1a0" + ], + "SHORTMONTH": [ + "1\uc6d4", + "2\uc6d4", + "3\uc6d4", + "4\uc6d4", + "5\uc6d4", + "6\uc6d4", + "7\uc6d4", + "8\uc6d4", + "9\uc6d4", + "10\uc6d4", + "11\uc6d4", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ln-cd.js b/app/lib/angular/i18n/angular-locale_ln-cd.js new file mode 100755 index 0000000000..b3470e0b38 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ln-cd.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ln.js b/app/lib/angular/i18n/angular-locale_ln.js new file mode 100755 index 0000000000..9881dad9e3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ln.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "nt\u0254\u0301ng\u0254\u0301", + "mp\u00f3kwa" + ], + "DAY": [ + "eyenga", + "mok\u0254l\u0254 mwa yambo", + "mok\u0254l\u0254 mwa m\u00edbal\u00e9", + "mok\u0254l\u0254 mwa m\u00eds\u00e1to", + "mok\u0254l\u0254 ya m\u00edn\u00e9i", + "mok\u0254l\u0254 ya m\u00edt\u00e1no", + "mp\u0254\u0301s\u0254" + ], + "MONTH": [ + "s\u00e1nz\u00e1 ya yambo", + "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", + "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", + "s\u00e1nz\u00e1 ya m\u00ednei", + "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", + "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", + "s\u00e1nz\u00e1 ya nsambo", + "s\u00e1nz\u00e1 ya mwambe", + "s\u00e1nz\u00e1 ya libwa", + "s\u00e1nz\u00e1 ya z\u00f3mi", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", + "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9" + ], + "SHORTDAY": [ + "eye", + "ybo", + "mbl", + "mst", + "min", + "mtn", + "mps" + ], + "SHORTMONTH": [ + "yan", + "fbl", + "msi", + "apl", + "mai", + "yun", + "yul", + "agt", + "stb", + "\u0254tb", + "nvb", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_lt-lt.js b/app/lib/angular/i18n/angular-locale_lt-lt.js new file mode 100755 index 0000000000..6a6f81f135 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_lt-lt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prie\u0161piet", + "popiet" + ], + "DAY": [ + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis" + ], + "MONTH": [ + "sausio", + "vasaris", + "kovas", + "balandis", + "gegu\u017e\u0117", + "bir\u017eelis", + "liepa", + "rugpj\u016btis", + "rugs\u0117jis", + "spalis", + "lapkritis", + "gruodis" + ], + "SHORTDAY": [ + "Sk", + "Pr", + "An", + "Tr", + "Kt", + "Pn", + "\u0160t" + ], + "SHORTMONTH": [ + "Saus.", + "Vas", + "Kov.", + "Bal.", + "Geg.", + "Bir.", + "Liep.", + "Rugp.", + "Rugs.", + "Spal.", + "Lapkr.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_lt.js b/app/lib/angular/i18n/angular-locale_lt.js new file mode 100755 index 0000000000..fd752647d5 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_lt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "prie\u0161piet", + "popiet" + ], + "DAY": [ + "sekmadienis", + "pirmadienis", + "antradienis", + "tre\u010diadienis", + "ketvirtadienis", + "penktadienis", + "\u0161e\u0161tadienis" + ], + "MONTH": [ + "sausio", + "vasaris", + "kovas", + "balandis", + "gegu\u017e\u0117", + "bir\u017eelis", + "liepa", + "rugpj\u016btis", + "rugs\u0117jis", + "spalis", + "lapkritis", + "gruodis" + ], + "SHORTDAY": [ + "Sk", + "Pr", + "An", + "Tr", + "Kt", + "Pn", + "\u0160t" + ], + "SHORTMONTH": [ + "Saus.", + "Vas", + "Kov.", + "Bal.", + "Geg.", + "Bir.", + "Liep.", + "Rugp.", + "Rugs.", + "Spal.", + "Lapkr.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_lv-lv.js b/app/lib/angular/i18n/angular-locale_lv-lv.js new file mode 100755 index 0000000000..4808617a68 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_lv-lv.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101" + ], + "DAY": [ + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + "MONTH": [ + "janv\u0101ris", + "febru\u0101ris", + "marts", + "apr\u012blis", + "maijs", + "j\u016bnijs", + "j\u016blijs", + "augusts", + "septembris", + "oktobris", + "novembris", + "decembris" + ], + "SHORTDAY": [ + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se" + ], + "SHORTMONTH": [ + "janv.", + "febr.", + "marts", + "apr.", + "maijs", + "j\u016bn.", + "j\u016bl.", + "aug.", + "sept.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_lv.js b/app/lib/angular/i18n/angular-locale_lv.js new file mode 100755 index 0000000000..45bdcc6d33 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_lv.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "priek\u0161pusdien\u0101", + "p\u0113cpusdien\u0101" + ], + "DAY": [ + "sv\u0113tdiena", + "pirmdiena", + "otrdiena", + "tre\u0161diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + "MONTH": [ + "janv\u0101ris", + "febru\u0101ris", + "marts", + "apr\u012blis", + "maijs", + "j\u016bnijs", + "j\u016blijs", + "augusts", + "septembris", + "oktobris", + "novembris", + "decembris" + ], + "SHORTDAY": [ + "Sv", + "Pr", + "Ot", + "Tr", + "Ce", + "Pk", + "Se" + ], + "SHORTMONTH": [ + "janv.", + "febr.", + "marts", + "apr.", + "maijs", + "j\u016bn.", + "j\u016bl.", + "aug.", + "sept.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ml-in.js b/app/lib/angular/i18n/angular-locale_ml-in.js new file mode 100755 index 0000000000..044005c166 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ml-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a" + ], + "MONTH": [ + "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d4d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d", + "\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d" + ], + "SHORTDAY": [ + "\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", + "\u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", + "\u0d36\u0d28\u0d3f" + ], + "SHORTMONTH": [ + "\u0d1c\u0d28\u0d41", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d13\u0d17", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", + "\u0d28\u0d35\u0d02", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ml.js b/app/lib/angular/i18n/angular-locale_ml.js new file mode 100755 index 0000000000..20074489d4 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ml.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a", + "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a" + ], + "MONTH": [ + "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d4d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d", + "\u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d", + "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d" + ], + "SHORTDAY": [ + "\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d", + "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d", + "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", + "\u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d", + "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", + "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", + "\u0d36\u0d28\u0d3f" + ], + "SHORTMONTH": [ + "\u0d1c\u0d28\u0d41", + "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", + "\u0d2e\u0d3e\u0d30\u0d4d\u200d", + "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", + "\u0d2e\u0d47\u0d2f\u0d4d", + "\u0d1c\u0d42\u0d23\u0d4d\u200d", + "\u0d1c\u0d42\u0d32\u0d48", + "\u0d13\u0d17", + "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", + "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", + "\u0d28\u0d35\u0d02", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_mr-in.js b/app/lib/angular/i18n/angular-locale_mr-in.js new file mode 100755 index 0000000000..f08286e4a7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_mr-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917\u0938\u094d\u091f", + "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947", + "\u092b\u0947\u092c\u094d\u0930\u0941", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_mr.js b/app/lib/angular/i18n/angular-locale_mr.js new file mode 100755 index 0000000000..71d6f792f9 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_mr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0930\u0935\u093f\u0935\u093e\u0930", + "\u0938\u094b\u092e\u0935\u093e\u0930", + "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", + "\u092c\u0941\u0927\u0935\u093e\u0930", + "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", + "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", + "\u0936\u0928\u093f\u0935\u093e\u0930" + ], + "MONTH": [ + "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", + "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f\u0932", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917\u0938\u094d\u091f", + "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", + "\u0921\u093f\u0938\u0947\u0902\u092c\u0930" + ], + "SHORTDAY": [ + "\u0930\u0935\u093f", + "\u0938\u094b\u092e", + "\u092e\u0902\u0917\u0933", + "\u092c\u0941\u0927", + "\u0917\u0941\u0930\u0941", + "\u0936\u0941\u0915\u094d\u0930", + "\u0936\u0928\u093f" + ], + "SHORTMONTH": [ + "\u091c\u093e\u0928\u0947", + "\u092b\u0947\u092c\u094d\u0930\u0941", + "\u092e\u093e\u0930\u094d\u091a", + "\u090f\u092a\u094d\u0930\u093f", + "\u092e\u0947", + "\u091c\u0942\u0928", + "\u091c\u0941\u0932\u0948", + "\u0911\u0917", + "\u0938\u0947\u092a\u094d\u091f\u0947\u0902", + "\u0911\u0915\u094d\u091f\u094b\u092c\u0930", + "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ms-my.js b/app/lib/angular/i18n/angular-locale_ms-my.js new file mode 100755 index 0000000000..ade60360ce --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ms-my.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogos", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ms.js b/app/lib/angular/i18n/angular-locale_ms.js new file mode 100755 index 0000000000..528718403e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ms.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PG", + "PTG" + ], + "DAY": [ + "Ahad", + "Isnin", + "Selasa", + "Rabu", + "Khamis", + "Jumaat", + "Sabtu" + ], + "MONTH": [ + "Januari", + "Februari", + "Mac", + "April", + "Mei", + "Jun", + "Julai", + "Ogos", + "September", + "Oktober", + "November", + "Disember" + ], + "SHORTDAY": [ + "Ahd", + "Isn", + "Sel", + "Rab", + "Kha", + "Jum", + "Sab" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ogos", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_mt-mt.js b/app/lib/angular/i18n/angular-locale_mt-mt.js new file mode 100755 index 0000000000..cc4004828e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_mt-mt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "QN", + "WN" + ], + "DAY": [ + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt" + ], + "MONTH": [ + "Jannar", + "Frar", + "Marzu", + "April", + "Mejju", + "\u0120unju", + "Lulju", + "Awwissu", + "Settembru", + "Ottubru", + "Novembru", + "Di\u010bembru" + ], + "SHORTDAY": [ + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib" + ], + "SHORTMONTH": [ + "Jan", + "Fra", + "Mar", + "Apr", + "Mej", + "\u0120un", + "Lul", + "Aww", + "Set", + "Ott", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_mt.js b/app/lib/angular/i18n/angular-locale_mt.js new file mode 100755 index 0000000000..9ba583ec92 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_mt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "QN", + "WN" + ], + "DAY": [ + "Il-\u0126add", + "It-Tnejn", + "It-Tlieta", + "L-Erbg\u0127a", + "Il-\u0126amis", + "Il-\u0120img\u0127a", + "Is-Sibt" + ], + "MONTH": [ + "Jannar", + "Frar", + "Marzu", + "April", + "Mejju", + "\u0120unju", + "Lulju", + "Awwissu", + "Settembru", + "Ottubru", + "Novembru", + "Di\u010bembru" + ], + "SHORTDAY": [ + "\u0126ad", + "Tne", + "Tli", + "Erb", + "\u0126am", + "\u0120im", + "Sib" + ], + "SHORTMONTH": [ + "Jan", + "Fra", + "Mar", + "Apr", + "Mej", + "\u0120un", + "Lul", + "Aww", + "Set", + "Ott", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_nl-cw.js b/app/lib/angular/i18n/angular-locale_nl-cw.js new file mode 100755 index 0000000000..f98fcf5fde --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_nl-cw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_nl-nl.js b/app/lib/angular/i18n/angular-locale_nl-nl.js new file mode 100755 index 0000000000..f24c149df7 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_nl-nl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_nl-sx.js b/app/lib/angular/i18n/angular-locale_nl-sx.js new file mode 100755 index 0000000000..616653cb2a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_nl-sx.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_nl.js b/app/lib/angular/i18n/angular-locale_nl.js new file mode 100755 index 0000000000..e5cbbd1f1e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_nl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "zondag", + "maandag", + "dinsdag", + "woensdag", + "donderdag", + "vrijdag", + "zaterdag" + ], + "MONTH": [ + "januari", + "februari", + "maart", + "april", + "mei", + "juni", + "juli", + "augustus", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "zo", + "ma", + "di", + "wo", + "do", + "vr", + "za" + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mrt.", + "apr.", + "mei", + "jun.", + "jul.", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_no.js b/app/lib/angular/i18n/angular-locale_no.js new file mode 100755 index 0000000000..07e3a790b0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_no.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "s\u00f8ndag", + "mandag", + "tirsdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f8rdag" + ], + "MONTH": [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + "SHORTDAY": [ + "s\u00f8n.", + "man.", + "tir.", + "ons.", + "tor.", + "fre.", + "l\u00f8r." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mars", + "apr.", + "mai", + "juni", + "juli", + "aug.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_or-in.js b/app/lib/angular/i18n/angular-locale_or-in.js new file mode 100755 index 0000000000..6332a2f5aa --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_or-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", + "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", + "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", + "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", + "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", + "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30" + ], + "MONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "SHORTDAY": [ + "\u0b30\u0b2c\u0b3f", + "\u0b38\u0b4b\u0b2e", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33", + "\u0b2c\u0b41\u0b27", + "\u0b17\u0b41\u0b30\u0b41", + "\u0b36\u0b41\u0b15\u0b4d\u0b30", + "\u0b36\u0b28\u0b3f" + ], + "SHORTMONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_or.js b/app/lib/angular/i18n/angular-locale_or.js new file mode 100755 index 0000000000..aab4988f64 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_or.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", + "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", + "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", + "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", + "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", + "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30" + ], + "MONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30" + ], + "SHORTDAY": [ + "\u0b30\u0b2c\u0b3f", + "\u0b38\u0b4b\u0b2e", + "\u0b2e\u0b19\u0b4d\u0b17\u0b33", + "\u0b2c\u0b41\u0b27", + "\u0b17\u0b41\u0b30\u0b41", + "\u0b36\u0b41\u0b15\u0b4d\u0b30", + "\u0b36\u0b28\u0b3f" + ], + "SHORTMONTH": [ + "\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40", + "\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", + "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", + "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", + "\u0b2e\u0b47", + "\u0b1c\u0b41\u0b28", + "\u0b1c\u0b41\u0b32\u0b3e\u0b07", + "\u0b05\u0b17\u0b37\u0b4d\u0b1f", + "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", + "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_pl-pl.js b/app/lib/angular/i18n/angular-locale_pl-pl.js new file mode 100755 index 0000000000..5b2078aade --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_pl-pl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota" + ], + "MONTH": [ + "stycznia", + "lutego", + "marca", + "kwietnia", + "maja", + "czerwca", + "lipca", + "sierpnia", + "wrze\u015bnia", + "pa\u017adziernika", + "listopada", + "grudnia" + ], + "SHORTDAY": [ + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob." + ], + "SHORTMONTH": [ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "pa\u017a", + "lis", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_pl.js b/app/lib/angular/i18n/angular-locale_pl.js new file mode 100755 index 0000000000..28859eaa13 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_pl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "niedziela", + "poniedzia\u0142ek", + "wtorek", + "\u015broda", + "czwartek", + "pi\u0105tek", + "sobota" + ], + "MONTH": [ + "stycznia", + "lutego", + "marca", + "kwietnia", + "maja", + "czerwca", + "lipca", + "sierpnia", + "wrze\u015bnia", + "pa\u017adziernika", + "listopada", + "grudnia" + ], + "SHORTDAY": [ + "niedz.", + "pon.", + "wt.", + "\u015br.", + "czw.", + "pt.", + "sob." + ], + "SHORTMONTH": [ + "sty", + "lut", + "mar", + "kwi", + "maj", + "cze", + "lip", + "sie", + "wrz", + "pa\u017a", + "lis", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_pt-br.js b/app/lib/angular/i18n/angular-locale_pt-br.js new file mode 100755 index 0000000000..d0e1a9edcd --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_pt-br.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_pt-pt.js b/app/lib/angular/i18n/angular-locale_pt-pt.js new file mode 100755 index 0000000000..a07265301f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_pt-pt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "a.m.", + "p.m." + ], + "DAY": [ + "Domingo", + "Segunda-feira", + "Ter\u00e7a-feira", + "Quarta-feira", + "Quinta-feira", + "Sexta-feira", + "S\u00e1bado" + ], + "MONTH": [ + "Janeiro", + "Fevereiro", + "Mar\u00e7o", + "Abril", + "Maio", + "Junho", + "Julho", + "Agosto", + "Setembro", + "Outubro", + "Novembro", + "Dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "Jan", + "Fev", + "Mar", + "Abr", + "Mai", + "Jun", + "Jul", + "Ago", + "Set", + "Out", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_pt.js b/app/lib/angular/i18n/angular-locale_pt.js new file mode 100755 index 0000000000..5a6bbd5642 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_pt.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "domingo", + "segunda-feira", + "ter\u00e7a-feira", + "quarta-feira", + "quinta-feira", + "sexta-feira", + "s\u00e1bado" + ], + "MONTH": [ + "janeiro", + "fevereiro", + "mar\u00e7o", + "abril", + "maio", + "junho", + "julho", + "agosto", + "setembro", + "outubro", + "novembro", + "dezembro" + ], + "SHORTDAY": [ + "dom", + "seg", + "ter", + "qua", + "qui", + "sex", + "s\u00e1b" + ], + "SHORTMONTH": [ + "jan", + "fev", + "mar", + "abr", + "mai", + "jun", + "jul", + "ago", + "set", + "out", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ro-ro.js b/app/lib/angular/i18n/angular-locale_ro-ro.js new file mode 100755 index 0000000000..807f04fc5d --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ro-ro.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Du", + "Lu", + "Ma", + "Mi", + "Jo", + "Vi", + "S\u00e2" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ro.js b/app/lib/angular/i18n/angular-locale_ro.js new file mode 100755 index 0000000000..2153d67dce --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ro.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "duminic\u0103", + "luni", + "mar\u021bi", + "miercuri", + "joi", + "vineri", + "s\u00e2mb\u0103t\u0103" + ], + "MONTH": [ + "ianuarie", + "februarie", + "martie", + "aprilie", + "mai", + "iunie", + "iulie", + "august", + "septembrie", + "octombrie", + "noiembrie", + "decembrie" + ], + "SHORTDAY": [ + "Du", + "Lu", + "Ma", + "Mi", + "Jo", + "Vi", + "S\u00e2" + ], + "SHORTMONTH": [ + "ian.", + "feb.", + "mar.", + "apr.", + "mai", + "iun.", + "iul.", + "aug.", + "sept.", + "oct.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ru-ru.js b/app/lib/angular/i18n/angular-locale_ru-ru.js new file mode 100755 index 0000000000..3a887f7a36 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ru-ru.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f", + "\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ru.js b/app/lib/angular/i18n/angular-locale_ru.js new file mode 100755 index 0000000000..8f48e2d390 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ru.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f", + "\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f" + ], + "DAY": [ + "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", + "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", + "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", + "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", + "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u044f\u043d\u0432\u0430\u0440\u044f", + "\u0444\u0435\u0432\u0440\u0430\u043b\u044f", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440\u0435\u043b\u044f", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", + "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", + "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", + "\u043d\u043e\u044f\u0431\u0440\u044f", + "\u0434\u0435\u043a\u0430\u0431\u0440\u044f" + ], + "SHORTDAY": [ + "\u0432\u0441", + "\u043f\u043d", + "\u0432\u0442", + "\u0441\u0440", + "\u0447\u0442", + "\u043f\u0442", + "\u0441\u0431" + ], + "SHORTMONTH": [ + "\u044f\u043d\u0432.", + "\u0444\u0435\u0432\u0440.", + "\u043c\u0430\u0440\u0442\u0430", + "\u0430\u043f\u0440.", + "\u043c\u0430\u044f", + "\u0438\u044e\u043d\u044f", + "\u0438\u044e\u043b\u044f", + "\u0430\u0432\u0433.", + "\u0441\u0435\u043d\u0442.", + "\u043e\u043a\u0442.", + "\u043d\u043e\u044f\u0431.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sk-sk.js b/app/lib/angular/i18n/angular-locale_sk-sk.js new file mode 100755 index 0000000000..84cb8eea30 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sk-sk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopoludnia", + "popoludn\u00ed" + ], + "DAY": [ + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota" + ], + "MONTH": [ + "janu\u00e1ra", + "febru\u00e1ra", + "marca", + "apr\u00edla", + "m\u00e1ja", + "j\u00fana", + "j\u00fala", + "augusta", + "septembra", + "okt\u00f3bra", + "novembra", + "decembra" + ], + "SHORTDAY": [ + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "m\u00e1j", + "j\u00fan", + "j\u00fal", + "aug", + "sep", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sk.js b/app/lib/angular/i18n/angular-locale_sk.js new file mode 100755 index 0000000000..53faf80859 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dopoludnia", + "popoludn\u00ed" + ], + "DAY": [ + "nede\u013ea", + "pondelok", + "utorok", + "streda", + "\u0161tvrtok", + "piatok", + "sobota" + ], + "MONTH": [ + "janu\u00e1ra", + "febru\u00e1ra", + "marca", + "apr\u00edla", + "m\u00e1ja", + "j\u00fana", + "j\u00fala", + "augusta", + "septembra", + "okt\u00f3bra", + "novembra", + "decembra" + ], + "SHORTDAY": [ + "ne", + "po", + "ut", + "st", + "\u0161t", + "pi", + "so" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "m\u00e1j", + "j\u00fan", + "j\u00fal", + "aug", + "sep", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sl-si.js b/app/lib/angular/i18n/angular-locale_sl-si.js new file mode 100755 index 0000000000..9cc575554e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sl-si.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dop.", + "pop." + ], + "DAY": [ + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota" + ], + "MONTH": [ + "januar", + "februar", + "marec", + "april", + "maj", + "junij", + "julij", + "avgust", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "avg.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sl.js b/app/lib/angular/i18n/angular-locale_sl.js new file mode 100755 index 0000000000..ebe8df1a07 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "dop.", + "pop." + ], + "DAY": [ + "nedelja", + "ponedeljek", + "torek", + "sreda", + "\u010detrtek", + "petek", + "sobota" + ], + "MONTH": [ + "januar", + "februar", + "marec", + "april", + "maj", + "junij", + "julij", + "avgust", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "ned.", + "pon.", + "tor.", + "sre.", + "\u010det.", + "pet.", + "sob." + ], + "SHORTMONTH": [ + "jan.", + "feb.", + "mar.", + "apr.", + "maj", + "jun.", + "jul.", + "avg.", + "sep.", + "okt.", + "nov.", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sq-al.js b/app/lib/angular/i18n/angular-locale_sq-al.js new file mode 100755 index 0000000000..fad9546c1d --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sq-al.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PD", + "MD" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sq.js b/app/lib/angular/i18n/angular-locale_sq.js new file mode 100755 index 0000000000..1bf529adbf --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sq.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "PD", + "MD" + ], + "DAY": [ + "e diel", + "e h\u00ebn\u00eb", + "e mart\u00eb", + "e m\u00ebrkur\u00eb", + "e enjte", + "e premte", + "e shtun\u00eb" + ], + "MONTH": [ + "janar", + "shkurt", + "mars", + "prill", + "maj", + "qershor", + "korrik", + "gusht", + "shtator", + "tetor", + "n\u00ebntor", + "dhjetor" + ], + "SHORTDAY": [ + "Die", + "H\u00ebn", + "Mar", + "M\u00ebr", + "Enj", + "Pre", + "Sht" + ], + "SHORTMONTH": [ + "Jan", + "Shk", + "Mar", + "Pri", + "Maj", + "Qer", + "Kor", + "Gsh", + "Sht", + "Tet", + "N\u00ebn", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sr-cyrl-rs.js b/app/lib/angular/i18n/angular-locale_sr-cyrl-rs.js new file mode 100755 index 0000000000..5879f7daa0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sr-cyrl-rs.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sr-latn-rs.js b/app/lib/angular/i18n/angular-locale_sr-latn-rs.js new file mode 100755 index 0000000000..af39666ffe --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sr-latn-rs.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "pre podne", + "popodne" + ], + "DAY": [ + "nedelja", + "ponedeljak", + "utorak", + "sreda", + "\u010detvrtak", + "petak", + "subota" + ], + "MONTH": [ + "januar", + "februar", + "mart", + "april", + "maj", + "jun", + "jul", + "avgust", + "septembar", + "oktobar", + "novembar", + "decembar" + ], + "SHORTDAY": [ + "ned", + "pon", + "uto", + "sre", + "\u010det", + "pet", + "sub" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "avg", + "sep", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sr.js b/app/lib/angular/i18n/angular-locale_sr.js new file mode 100755 index 0000000000..7c0b6130bb --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435", + "\u043f\u043e\u043f\u043e\u0434\u043d\u0435" + ], + "DAY": [ + "\u043d\u0435\u0434\u0435\u0459\u0430", + "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", + "\u0443\u0442\u043e\u0440\u0430\u043a", + "\u0441\u0440\u0435\u0434\u0430", + "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", + "\u043f\u0435\u0442\u0430\u043a", + "\u0441\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0458\u0430\u043d\u0443\u0430\u0440", + "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", + "\u043c\u0430\u0440\u0442", + "\u0430\u043f\u0440\u0438\u043b", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433\u0443\u0441\u0442", + "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", + "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", + "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", + "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440" + ], + "SHORTDAY": [ + "\u043d\u0435\u0434", + "\u043f\u043e\u043d", + "\u0443\u0442\u043e", + "\u0441\u0440\u0435", + "\u0447\u0435\u0442", + "\u043f\u0435\u0442", + "\u0441\u0443\u0431" + ], + "SHORTMONTH": [ + "\u0458\u0430\u043d", + "\u0444\u0435\u0431", + "\u043c\u0430\u0440", + "\u0430\u043f\u0440", + "\u043c\u0430\u0458", + "\u0458\u0443\u043d", + "\u0458\u0443\u043b", + "\u0430\u0432\u0433", + "\u0441\u0435\u043f", + "\u043e\u043a\u0442", + "\u043d\u043e\u0432", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sv-se.js b/app/lib/angular/i18n/angular-locale_sv-se.js new file mode 100755 index 0000000000..79f671c410 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sv-se.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sv.js b/app/lib/angular/i18n/angular-locale_sv.js new file mode 100755 index 0000000000..64e590b5f1 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sv.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "fm", + "em" + ], + "DAY": [ + "s\u00f6ndag", + "m\u00e5ndag", + "tisdag", + "onsdag", + "torsdag", + "fredag", + "l\u00f6rdag" + ], + "MONTH": [ + "januari", + "februari", + "mars", + "april", + "maj", + "juni", + "juli", + "augusti", + "september", + "oktober", + "november", + "december" + ], + "SHORTDAY": [ + "s\u00f6n", + "m\u00e5n", + "tis", + "ons", + "tors", + "fre", + "l\u00f6r" + ], + "SHORTMONTH": [ + "jan", + "feb", + "mar", + "apr", + "maj", + "jun", + "jul", + "aug", + "sep", + "okt", + "nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sw-tz.js b/app/lib/angular/i18n/angular-locale_sw-tz.js new file mode 100755 index 0000000000..cd572b6f29 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sw-tz.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "asubuhi", + "alasiri" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "J2", + "J3", + "J4", + "J5", + "Alh", + "Ij", + "J1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_sw.js b/app/lib/angular/i18n/angular-locale_sw.js new file mode 100755 index 0000000000..72c3abf868 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_sw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "asubuhi", + "alasiri" + ], + "DAY": [ + "Jumapili", + "Jumatatu", + "Jumanne", + "Jumatano", + "Alhamisi", + "Ijumaa", + "Jumamosi" + ], + "MONTH": [ + "Januari", + "Februari", + "Machi", + "Aprili", + "Mei", + "Juni", + "Julai", + "Agosti", + "Septemba", + "Oktoba", + "Novemba", + "Desemba" + ], + "SHORTDAY": [ + "J2", + "J3", + "J4", + "J5", + "Alh", + "Ij", + "J1" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mac", + "Apr", + "Mei", + "Jun", + "Jul", + "Ago", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ta-in.js b/app/lib/angular/i18n/angular-locale_ta-in.js new file mode 100755 index 0000000000..01df8c4a7e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ta-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ta.js b/app/lib/angular/i18n/angular-locale_ta.js new file mode 100755 index 0000000000..8a62663f27 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ta.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", + "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", + "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", + "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", + "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", + "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", + "\u0b9a\u0ba9\u0bbf" + ], + "MONTH": [ + "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", + "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", + "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", + "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", + "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd", + "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", + "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd" + ], + "SHORTDAY": [ + "\u0b9e\u0bbe", + "\u0ba4\u0bbf", + "\u0b9a\u0bc6", + "\u0baa\u0bc1", + "\u0bb5\u0bbf", + "\u0bb5\u0bc6", + "\u0b9a" + ], + "SHORTMONTH": [ + "\u0b9c\u0ba9.", + "\u0baa\u0bbf\u0baa\u0bcd.", + "\u0bae\u0bbe\u0bb0\u0bcd.", + "\u0b8f\u0baa\u0bcd.", + "\u0bae\u0bc7", + "\u0b9c\u0bc2\u0ba9\u0bcd", + "\u0b9c\u0bc2\u0bb2\u0bc8", + "\u0b86\u0b95.", + "\u0b9a\u0bc6\u0baa\u0bcd.", + "\u0b85\u0b95\u0bcd.", + "\u0ba8\u0bb5.", + "\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": [ + { + "gSize": 2, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_te-in.js b/app/lib/angular/i18n/angular-locale_te-in.js new file mode 100755 index 0000000000..ac797b0259 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_te-in.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02" + ], + "MONTH": [ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], + "SHORTDAY": [ + "\u0c06\u0c26\u0c3f", + "\u0c38\u0c4b\u0c2e", + "\u0c2e\u0c02\u0c17\u0c33", + "\u0c2c\u0c41\u0c27", + "\u0c17\u0c41\u0c30\u0c41", + "\u0c36\u0c41\u0c15\u0c4d\u0c30", + "\u0c36\u0c28\u0c3f" + ], + "SHORTMONTH": [ + "\u0c1c\u0c28", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_te.js b/app/lib/angular/i18n/angular-locale_te.js new file mode 100755 index 0000000000..eaf45c458a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_te.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "am", + "pm" + ], + "DAY": [ + "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", + "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", + "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", + "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", + "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", + "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02" + ], + "MONTH": [ + "\u0c1c\u0c28\u0c35\u0c30\u0c3f", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d" + ], + "SHORTDAY": [ + "\u0c06\u0c26\u0c3f", + "\u0c38\u0c4b\u0c2e", + "\u0c2e\u0c02\u0c17\u0c33", + "\u0c2c\u0c41\u0c27", + "\u0c17\u0c41\u0c30\u0c41", + "\u0c36\u0c41\u0c15\u0c4d\u0c30", + "\u0c36\u0c28\u0c3f" + ], + "SHORTMONTH": [ + "\u0c1c\u0c28", + "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", + "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", + "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", + "\u0c2e\u0c47", + "\u0c1c\u0c42\u0c28\u0c4d", + "\u0c1c\u0c42\u0c32\u0c48", + "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", + "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", + "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", + "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_th-th.js b/app/lib/angular/i18n/angular-locale_th-th.js new file mode 100755 index 0000000000..ddf5525f2a --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_th-th.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ], + "DAY": [ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" + ], + "MONTH": [ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21" + ], + "SHORTDAY": [ + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a." + ], + "SHORTMONTH": [ + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_th.js b/app/lib/angular/i18n/angular-locale_th.js new file mode 100755 index 0000000000..0d2505478e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_th.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", + "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" + ], + "DAY": [ + "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", + "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", + "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", + "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", + "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", + "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" + ], + "MONTH": [ + "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", + "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", + "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", + "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", + "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", + "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", + "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", + "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", + "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", + "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", + "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", + "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21" + ], + "SHORTDAY": [ + "\u0e2d\u0e32.", + "\u0e08.", + "\u0e2d.", + "\u0e1e.", + "\u0e1e\u0e24.", + "\u0e28.", + "\u0e2a." + ], + "SHORTMONTH": [ + "\u0e21.\u0e04.", + "\u0e01.\u0e1e.", + "\u0e21\u0e35.\u0e04.", + "\u0e40\u0e21.\u0e22.", + "\u0e1e.\u0e04.", + "\u0e21\u0e34.\u0e22.", + "\u0e01.\u0e04.", + "\u0e2a.\u0e04.", + "\u0e01.\u0e22.", + "\u0e15.\u0e04.", + "\u0e1e.\u0e22.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_tl.js b/app/lib/angular/i18n/angular-locale_tl.js new file mode 100755 index 0000000000..512b34947e --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_tl.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Linggo", + "Lunes", + "Martes", + "Miyerkules", + "Huwebes", + "Biyernes", + "Sabado" + ], + "MONTH": [ + "Enero", + "Pebrero", + "Marso", + "Abril", + "Mayo", + "Hunyo", + "Hulyo", + "Agosto", + "Setyembre", + "Oktubre", + "Nobyembre", + "Disyembre" + ], + "SHORTDAY": [ + "Lin", + "Lun", + "Mar", + "Mye", + "Huw", + "Bye", + "Sab" + ], + "SHORTMONTH": [ + "Ene", + "Peb", + "Mar", + "Abr", + "May", + "Hun", + "Hul", + "Ago", + "Set", + "Okt", + "Nob", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_tr-tr.js b/app/lib/angular/i18n/angular-locale_tr-tr.js new file mode 100755 index 0000000000..5999d61226 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_tr-tr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_tr.js b/app/lib/angular/i18n/angular-locale_tr.js new file mode 100755 index 0000000000..e0e6bad84c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_tr.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Pazar", + "Pazartesi", + "Sal\u0131", + "\u00c7ar\u015famba", + "Per\u015fembe", + "Cuma", + "Cumartesi" + ], + "MONTH": [ + "Ocak", + "\u015eubat", + "Mart", + "Nisan", + "May\u0131s", + "Haziran", + "Temmuz", + "A\u011fustos", + "Eyl\u00fcl", + "Ekim", + "Kas\u0131m", + "Aral\u0131k" + ], + "SHORTDAY": [ + "Paz", + "Pzt", + "Sal", + "\u00c7ar", + "Per", + "Cum", + "Cmt" + ], + "SHORTMONTH": [ + "Oca", + "\u015eub", + "Mar", + "Nis", + "May", + "Haz", + "Tem", + "A\u011fu", + "Eyl", + "Eki", + "Kas", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_uk-ua.js b/app/lib/angular/i18n/angular-locale_uk-ua.js new file mode 100755 index 0000000000..b90d5f4ced --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_uk-ua.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u043f", + "\u043f\u043f" + ], + "DAY": [ + "\u041d\u0435\u0434\u0456\u043b\u044f", + "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0421\u0435\u0440\u0435\u0434\u0430", + "\u0427\u0435\u0442\u0432\u0435\u0440", + "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0421\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0441\u0456\u0447\u043d\u044f", + "\u043b\u044e\u0442\u043e\u0433\u043e", + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", + "\u043a\u0432\u0456\u0442\u043d\u044f", + "\u0442\u0440\u0430\u0432\u043d\u044f", + "\u0447\u0435\u0440\u0432\u043d\u044f", + "\u043b\u0438\u043f\u043d\u044f", + "\u0441\u0435\u0440\u043f\u043d\u044f", + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", + "\u0436\u043e\u0432\u0442\u043d\u044f", + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", + "\u0433\u0440\u0443\u0434\u043d\u044f" + ], + "SHORTDAY": [ + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0456\u0447.", + "\u043b\u044e\u0442.", + "\u0431\u0435\u0440.", + "\u043a\u0432\u0456\u0442.", + "\u0442\u0440\u0430\u0432.", + "\u0447\u0435\u0440\u0432.", + "\u043b\u0438\u043f.", + "\u0441\u0435\u0440\u043f.", + "\u0432\u0435\u0440.", + "\u0436\u043e\u0432\u0442.", + "\u043b\u0438\u0441\u0442.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_uk.js b/app/lib/angular/i18n/angular-locale_uk.js new file mode 100755 index 0000000000..f1f6b6e0af --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_uk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u0434\u043f", + "\u043f\u043f" + ], + "DAY": [ + "\u041d\u0435\u0434\u0456\u043b\u044f", + "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", + "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a", + "\u0421\u0435\u0440\u0435\u0434\u0430", + "\u0427\u0435\u0442\u0432\u0435\u0440", + "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", + "\u0421\u0443\u0431\u043e\u0442\u0430" + ], + "MONTH": [ + "\u0441\u0456\u0447\u043d\u044f", + "\u043b\u044e\u0442\u043e\u0433\u043e", + "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", + "\u043a\u0432\u0456\u0442\u043d\u044f", + "\u0442\u0440\u0430\u0432\u043d\u044f", + "\u0447\u0435\u0440\u0432\u043d\u044f", + "\u043b\u0438\u043f\u043d\u044f", + "\u0441\u0435\u0440\u043f\u043d\u044f", + "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", + "\u0436\u043e\u0432\u0442\u043d\u044f", + "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", + "\u0433\u0440\u0443\u0434\u043d\u044f" + ], + "SHORTDAY": [ + "\u041d\u0434", + "\u041f\u043d", + "\u0412\u0442", + "\u0421\u0440", + "\u0427\u0442", + "\u041f\u0442", + "\u0421\u0431" + ], + "SHORTMONTH": [ + "\u0441\u0456\u0447.", + "\u043b\u044e\u0442.", + "\u0431\u0435\u0440.", + "\u043a\u0432\u0456\u0442.", + "\u0442\u0440\u0430\u0432.", + "\u0447\u0435\u0440\u0432.", + "\u043b\u0438\u043f.", + "\u0441\u0435\u0440\u043f.", + "\u0432\u0435\u0440.", + "\u0436\u043e\u0432\u0442.", + "\u043b\u0438\u0441\u0442.", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ur-pk.js b/app/lib/angular/i18n/angular-locale_ur-pk.js new file mode 100755 index 0000000000..956534bde0 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ur-pk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u062f\u0646", + "\u0631\u0627\u062a" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_ur.js b/app/lib/angular/i18n/angular-locale_ur.js new file mode 100755 index 0000000000..6728dc1672 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_ur.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u062f\u0646", + "\u0631\u0627\u062a" + ], + "DAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "MONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\u062f\u0633\u0645\u0628\u0631" + ], + "SHORTDAY": [ + "\u0627\u062a\u0648\u0627\u0631", + "\u067e\u064a\u0631", + "\u0645\u0646\u06af\u0644", + "\u0628\u062f\u0647", + "\u062c\u0645\u0639\u0631\u0627\u062a", + "\u062c\u0645\u0639\u06c1", + "\u06c1\u0641\u062a\u06c1" + ], + "SHORTMONTH": [ + "\u062c\u0646\u0648\u0631\u06cc", + "\u0641\u0631\u0648\u0631\u06cc", + "\u0645\u0627\u0631\u0686", + "\u0627\u067e\u0631\u064a\u0644", + "\u0645\u0626", + "\u062c\u0648\u0646", + "\u062c\u0648\u0644\u0627\u0626", + "\u0627\u06af\u0633\u062a", + "\u0633\u062a\u0645\u0628\u0631", + "\u0627\u06a9\u062a\u0648\u0628\u0631", + "\u0646\u0648\u0645\u0628\u0631", + "\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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_vi-vn.js b/app/lib/angular/i18n/angular-locale_vi-vn.js new file mode 100755 index 0000000000..b03ab4a24c --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_vi-vn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "SA", + "CH" + ], + "DAY": [ + "Ch\u1ee7 nh\u1eadt", + "Th\u1ee9 hai", + "Th\u1ee9 ba", + "Th\u1ee9 t\u01b0", + "Th\u1ee9 n\u0103m", + "Th\u1ee9 s\u00e1u", + "Th\u1ee9 b\u1ea3y" + ], + "MONTH": [ + "th\u00e1ng m\u1ed9t", + "th\u00e1ng hai", + "th\u00e1ng ba", + "th\u00e1ng t\u01b0", + "th\u00e1ng n\u0103m", + "th\u00e1ng s\u00e1u", + "th\u00e1ng b\u1ea3y", + "th\u00e1ng t\u00e1m", + "th\u00e1ng ch\u00edn", + "th\u00e1ng m\u01b0\u1eddi", + "th\u00e1ng m\u01b0\u1eddi m\u1ed9t", + "th\u00e1ng m\u01b0\u1eddi hai" + ], + "SHORTDAY": [ + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7" + ], + "SHORTMONTH": [ + "thg 1", + "thg 2", + "thg 3", + "thg 4", + "thg 5", + "thg 6", + "thg 7", + "thg 8", + "thg 9", + "thg 10", + "thg 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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_vi.js b/app/lib/angular/i18n/angular-locale_vi.js new file mode 100755 index 0000000000..4e1108a2aa --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_vi.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "SA", + "CH" + ], + "DAY": [ + "Ch\u1ee7 nh\u1eadt", + "Th\u1ee9 hai", + "Th\u1ee9 ba", + "Th\u1ee9 t\u01b0", + "Th\u1ee9 n\u0103m", + "Th\u1ee9 s\u00e1u", + "Th\u1ee9 b\u1ea3y" + ], + "MONTH": [ + "th\u00e1ng m\u1ed9t", + "th\u00e1ng hai", + "th\u00e1ng ba", + "th\u00e1ng t\u01b0", + "th\u00e1ng n\u0103m", + "th\u00e1ng s\u00e1u", + "th\u00e1ng b\u1ea3y", + "th\u00e1ng t\u00e1m", + "th\u00e1ng ch\u00edn", + "th\u00e1ng m\u01b0\u1eddi", + "th\u00e1ng m\u01b0\u1eddi m\u1ed9t", + "th\u00e1ng m\u01b0\u1eddi hai" + ], + "SHORTDAY": [ + "CN", + "Th 2", + "Th 3", + "Th 4", + "Th 5", + "Th 6", + "Th 7" + ], + "SHORTMONTH": [ + "thg 1", + "thg 2", + "thg 3", + "thg 4", + "thg 5", + "thg 6", + "thg 7", + "thg 8", + "thg 9", + "thg 10", + "thg 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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zh-cn.js b/app/lib/angular/i18n/angular-locale_zh-cn.js new file mode 100755 index 0000000000..8ec6b39c90 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zh-cn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zh-hans-cn.js b/app/lib/angular/i18n/angular-locale_zh-hans-cn.js new file mode 100755 index 0000000000..094b44a069 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zh-hans-cn.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zh-hk.js b/app/lib/angular/i18n/angular-locale_zh-hk.js new file mode 100755 index 0000000000..b9e97735b2 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zh-hk.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zh-tw.js b/app/lib/angular/i18n/angular-locale_zh-tw.js new file mode 100755 index 0000000000..44f5a8240f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zh-tw.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u9031\u65e5", + "\u9031\u4e00", + "\u9031\u4e8c", + "\u9031\u4e09", + "\u9031\u56db", + "\u9031\u4e94", + "\u9031\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zh.js b/app/lib/angular/i18n/angular-locale_zh.js new file mode 100755 index 0000000000..779f208e32 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zh.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "\u4e0a\u5348", + "\u4e0b\u5348" + ], + "DAY": [ + "\u661f\u671f\u65e5", + "\u661f\u671f\u4e00", + "\u661f\u671f\u4e8c", + "\u661f\u671f\u4e09", + "\u661f\u671f\u56db", + "\u661f\u671f\u4e94", + "\u661f\u671f\u516d" + ], + "MONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "12\u6708" + ], + "SHORTDAY": [ + "\u5468\u65e5", + "\u5468\u4e00", + "\u5468\u4e8c", + "\u5468\u4e09", + "\u5468\u56db", + "\u5468\u4e94", + "\u5468\u516d" + ], + "SHORTMONTH": [ + "1\u6708", + "2\u6708", + "3\u6708", + "4\u6708", + "5\u6708", + "6\u6708", + "7\u6708", + "8\u6708", + "9\u6708", + "10\u6708", + "11\u6708", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zu-za.js b/app/lib/angular/i18n/angular-locale_zu-za.js new file mode 100755 index 0000000000..49201c804f --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zu-za.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Msombuluko", + "Lwesibili", + "Lwesithathu", + "uLwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "MONTH": [ + "Januwari", + "Februwari", + "Mashi", + "Apreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septhemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mas", + "Apr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/i18n/angular-locale_zu.js b/app/lib/angular/i18n/angular-locale_zu.js new file mode 100755 index 0000000000..a657987ba3 --- /dev/null +++ b/app/lib/angular/i18n/angular-locale_zu.js @@ -0,0 +1,98 @@ +angular.module("ngLocale", [], ["$provide", function($provide) { +var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"}; +$provide.value("$locale", { + "DATETIME_FORMATS": { + "AMPMS": [ + "AM", + "PM" + ], + "DAY": [ + "Sonto", + "Msombuluko", + "Lwesibili", + "Lwesithathu", + "uLwesine", + "Lwesihlanu", + "Mgqibelo" + ], + "MONTH": [ + "Januwari", + "Februwari", + "Mashi", + "Apreli", + "Meyi", + "Juni", + "Julayi", + "Agasti", + "Septhemba", + "Okthoba", + "Novemba", + "Disemba" + ], + "SHORTDAY": [ + "Son", + "Mso", + "Bil", + "Tha", + "Sin", + "Hla", + "Mgq" + ], + "SHORTMONTH": [ + "Jan", + "Feb", + "Mas", + "Apr", + "Mey", + "Jun", + "Jul", + "Aga", + "Sep", + "Okt", + "Nov", + "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": [ + { + "gSize": 3, + "lgSize": 3, + "macFrac": 0, + "maxFrac": 3, + "minFrac": 0, + "minInt": 1, + "negPre": "-", + "negSuf": "", + "posPre": "", + "posSuf": "" + }, + { + "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 diff --git a/app/lib/angular/version.json b/app/lib/angular/version.json new file mode 100755 index 0000000000..01d2505868 --- /dev/null +++ b/app/lib/angular/version.json @@ -0,0 +1 @@ +{"full":"1.2.0-rc.2","major":"1","minor":"2","dot":"0","codename":"barehand-atomsplitting","cdn":"1.2.0rc1"} \ No newline at end of file diff --git a/app/lib/angular/version.txt b/app/lib/angular/version.txt old mode 100644 new mode 100755 index 238d6e882a..e11954015f --- a/app/lib/angular/version.txt +++ b/app/lib/angular/version.txt @@ -1 +1 @@ -1.0.7 +1.2.0-rc.2 \ No newline at end of file diff --git a/test/lib/angular/angular-mocks.js b/test/lib/angular/angular-mocks.js old mode 100644 new mode 100755 index 41217c7fd9..993912e166 --- a/test/lib/angular/angular-mocks.js +++ b/test/lib/angular/angular-mocks.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.0.7 + * @license AngularJS v1.2.0-rc.2 * (c) 2010-2012 Google, Inc. http://angularjs.org * License: MIT * @@ -29,7 +29,7 @@ angular.mock = {}; * that there are several helper methods available which can be used in tests. */ angular.mock.$BrowserProvider = function() { - this.$get = function(){ + this.$get = function() { return new angular.mock.$Browser(); }; }; @@ -118,6 +118,22 @@ angular.mock.$Browser = function() { self.deferredFns.shift().fn(); } }; + + /** + * @name ngMock.$browser#defer.flushNext + * @methodOf ngMock.$browser + * + * @description + * Flushes next pending request and compares it to the provided delay + * + * @param {number=} expectedDelay the delay value that will be asserted against the delay of the next timeout function + */ + self.defer.flushNext = function(expectedDelay) { + var tick = self.deferredFns.shift(); + expect(tick.time).toEqual(expectedDelay); + tick.fn(); + }; + /** * @name ngMock.$browser#defer.now * @propertyOf ngMock.$browser @@ -293,18 +309,32 @@ angular.mock.$ExceptionHandlerProvider = function() { * */ angular.mock.$LogProvider = function() { + var debug = true; function concat(array1, array2, index) { return array1.concat(Array.prototype.slice.call(array2, index)); } + this.debugEnabled = function(flag) { + if (angular.isDefined(flag)) { + debug = flag; + return this; + } else { + return debug; + } + }; this.$get = function () { var $log = { log: function() { $log.log.logs.push(concat([], arguments, 0)); }, warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, info: function() { $log.info.logs.push(concat([], arguments, 0)); }, - error: function() { $log.error.logs.push(concat([], arguments, 0)); } + error: function() { $log.error.logs.push(concat([], arguments, 0)); }, + debug: function() { + if (debug) { + $log.debug.logs.push(concat([], arguments, 0)); + } + } }; /** @@ -333,34 +363,34 @@ angular.mock.$LogProvider = function() { $log.log.logs = []; /** * @ngdoc property - * @name ngMock.$log#warn.logs + * @name ngMock.$log#info.logs * @propertyOf ngMock.$log * * @description - * Array of messages logged using {@link ngMock.$log#warn}. + * Array of messages logged using {@link ngMock.$log#info}. * * @example *
-       * $log.warn('Some Warning');
-       * var first = $log.warn.logs.unshift();
+       * $log.info('Some Info');
+       * var first = $log.info.logs.unshift();
        * 
*/ - $log.warn.logs = []; + $log.info.logs = []; /** * @ngdoc property - * @name ngMock.$log#info.logs + * @name ngMock.$log#warn.logs * @propertyOf ngMock.$log * * @description - * Array of messages logged using {@link ngMock.$log#info}. + * Array of messages logged using {@link ngMock.$log#warn}. * * @example *
-       * $log.info('Some Info');
-       * var first = $log.info.logs.unshift();
+       * $log.warn('Some Warning');
+       * var first = $log.warn.logs.unshift();
        * 
*/ - $log.info.logs = []; + $log.warn.logs = []; /** * @ngdoc property * @name ngMock.$log#error.logs @@ -376,6 +406,21 @@ angular.mock.$LogProvider = function() { * */ $log.error.logs = []; + /** + * @ngdoc property + * @name ngMock.$log#debug.logs + * @propertyOf ngMock.$log + * + * @description + * Array of messages logged using {@link ngMock.$log#debug}. + * + * @example + *
+       * $log.debug('Some Error');
+       * var first = $log.debug.logs.unshift();
+       * 
+ */ + $log.debug.logs = [] }; /** @@ -388,7 +433,7 @@ angular.mock.$LogProvider = function() { */ $log.assertEmpty = function() { var errors = []; - angular.forEach(['error', 'warn', 'info', 'log'], function(logLevel) { + angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { angular.forEach($log[logLevel].logs, function(log) { angular.forEach(log, function (logItem) { errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + (logItem.stack || '')); @@ -412,7 +457,7 @@ angular.mock.$LogProvider = function() { (function() { var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; - function jsonStringToDate(string){ + function jsonStringToDate(string) { var match; if (match = string.match(R_ISO8061_STR)) { var date = new Date(0), @@ -480,6 +525,7 @@ angular.mock.$LogProvider = function() { * newYearInBratislava.getDate() => 1; * newYearInBratislava.getHours() => 0; * newYearInBratislava.getMinutes() => 0; + * newYearInBratislava.getSeconds() => 0; * * */ @@ -536,6 +582,10 @@ angular.mock.$LogProvider = function() { return self.date.getSeconds(); }; + self.getMilliseconds = function() { + return self.date.getMilliseconds(); + }; + self.getTimezoneOffset = function() { return offset * 60; }; @@ -586,7 +636,7 @@ angular.mock.$LogProvider = function() { } //hide all methods not implemented in this mock that the Date prototype exposes - var unimplementedMethods = ['getMilliseconds', 'getUTCDay', + var unimplementedMethods = ['getUTCDay', 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', @@ -606,6 +656,43 @@ angular.mock.$LogProvider = function() { angular.mock.TzDate.prototype = Date.prototype; })(); +angular.mock.animate = angular.module('mock.animate', ['ng']) + + .config(['$provide', function($provide) { + + $provide.decorator('$animate', function($delegate) { + var animate = { + queue : [], + enabled : $delegate.enabled, + flushNext : function(name) { + var tick = animate.queue.shift(); + expect(tick.method).toBe(name); + tick.fn(); + return tick; + } + }; + + forEach(['enter','leave','move','addClass','removeClass'], function(method) { + animate[method] = function() { + var params = arguments; + animate.queue.push({ + method : method, + params : params, + element : angular.isElement(params[0]) && params[0], + parent : angular.isElement(params[1]) && params[1], + after : angular.isElement(params[2]) && params[2], + fn : function() { + $delegate[method].apply($delegate, params); + } + }); + }; + }); + + return animate; + }); + + }]); + /** * @ngdoc function @@ -646,6 +733,7 @@ angular.mock.dump = function(object) { } else if (object instanceof Error) { out = object.stack || ('' + object.name + ': ' + object.message); } else { + // TODO(i): this prevents methods to be logged, we should have a better way to serialize objects out = angular.toJson(object, true); } } else { @@ -773,79 +861,104 @@ angular.mock.dump = function(object) { * * * # Unit testing with mock $httpBackend + * The following code shows how to setup and use the mock backend in unit testing a controller. + * First we create the controller under test * - *
-   // controller
-   function MyController($scope, $http) {
-     $http.get('/auth.py').success(function(data) {
-       $scope.user = data;
-     });
-
-     this.saveMessage = function(message) {
-       $scope.status = 'Saving...';
-       $http.post('/add-msg.py', message).success(function(response) {
-         $scope.status = '';
-       }).error(function() {
-         $scope.status = 'ERROR!';
-       });
-     };
-   }
+  
+  // The controller code
+  function MyController($scope, $http) {
+    var authToken;
+
+    $http.get('/auth.py').success(function(data, status, headers) {
+      authToken = headers('A-Token');
+      $scope.user = data;
+    });
+
+    $scope.saveMessage = function(message) {
+      var headers = { 'Authorization': authToken };
+      $scope.status = 'Saving...';
+
+      $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
+        $scope.status = '';
+      }).error(function() {
+        $scope.status = 'ERROR!';
+      });
+    };
+  }
+  
+ * + * Now we setup the mock backend and create the test specs. + * +
+    // testing controller
+    describe('MyController', function() {
+       var $httpBackend, $rootScope, createController;
+
+       beforeEach(inject(function($injector) {
+         // Set up the mock http service responses
+         $httpBackend = $injector.get('$httpBackend');
+         // backend definition common for all tests
+         $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'});
 
-   // testing controller
-   var $httpBackend;
+         // Get hold of a scope (i.e. the root scope)
+         $rootScope = $injector.get('$rootScope');
+         // The $controller service is used to create instances of controllers
+         var $controller = $injector.get('$controller');
 
-   beforeEach(inject(function($injector) {
-     $httpBackend = $injector.get('$httpBackend');
+         createController = function() {
+           return $controller('MyController', {'$scope' : $rootScope });
+         };
+       }));
 
-     // backend definition common for all tests
-     $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'});
-   }));
 
+       afterEach(function() {
+         $httpBackend.verifyNoOutstandingExpectation();
+         $httpBackend.verifyNoOutstandingRequest();
+       });
 
-   afterEach(function() {
-     $httpBackend.verifyNoOutstandingExpectation();
-     $httpBackend.verifyNoOutstandingRequest();
-   });
 
+       it('should fetch authentication token', function() {
+         $httpBackend.expectGET('/auth.py');
+         var controller = createController();
+         $httpBackend.flush();
+       });
 
-   it('should fetch authentication token', function() {
-     $httpBackend.expectGET('/auth.py');
-     var controller = scope.$new(MyController);
-     $httpBackend.flush();
-   });
 
+       it('should send msg to server', function() {
+         var controller = createController();
+         $httpBackend.flush();
 
-   it('should send msg to server', function() {
-     // now you don’t care about the authentication, but
-     // the controller will still send the request and
-     // $httpBackend will respond without you having to
-     // specify the expectation and response for this request
-     $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
+         // now you don’t care about the authentication, but
+         // the controller will still send the request and
+         // $httpBackend will respond without you having to
+         // specify the expectation and response for this request
 
-     var controller = scope.$new(MyController);
-     $httpBackend.flush();
-     controller.saveMessage('message content');
-     expect(controller.status).toBe('Saving...');
-     $httpBackend.flush();
-     expect(controller.status).toBe('');
-   });
+         $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
+         $rootScope.saveMessage('message content');
+         expect($rootScope.status).toBe('Saving...');
+         $httpBackend.flush();
+         expect($rootScope.status).toBe('');
+       });
 
 
-   it('should send auth header', function() {
-     $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
-       // check if the header was send, if it wasn't the expectation won't
-       // match the request and the test will fail
-       return headers['Authorization'] == 'xxx';
-     }).respond(201, '');
+       it('should send auth header', function() {
+         var controller = createController();
+         $httpBackend.flush();
 
-     var controller = scope.$new(MyController);
-     controller.saveMessage('whatever');
-     $httpBackend.flush();
-   });
+         $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
+           // check if the header was send, if it wasn't the expectation won't
+           // match the request and the test will fail
+           return headers['Authorization'] == 'xxx';
+         }).respond(201, '');
+
+         $rootScope.saveMessage('whatever');
+         $httpBackend.flush();
+       });
+    });
    
*/ angular.mock.$HttpBackendProvider = function() { - this.$get = [createHttpBackendMock]; + this.$get = ['$rootScope', createHttpBackendMock]; }; /** @@ -862,7 +975,7 @@ angular.mock.$HttpBackendProvider = function() { * @param {Object=} $browser Auto-flushing enabled if specified * @return {Object} Instance of $httpBackend mock */ -function createHttpBackendMock($delegate, $browser) { +function createHttpBackendMock($rootScope, $delegate, $browser) { var definitions = [], expectations = [], responses = [], @@ -879,7 +992,7 @@ function createHttpBackendMock($delegate, $browser) { } // TODO(vojta): change params to: method, url, data, headers, callback - function $httpBackend(method, url, data, callback, headers) { + function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { var xhr = new MockXhr(), expectation = expectations[0], wasExpected = false; @@ -890,24 +1003,41 @@ function createHttpBackendMock($delegate, $browser) { : angular.toJson(data); } + function wrapResponse(wrapped) { + if (!$browser && timeout && timeout.then) timeout.then(handleTimeout); + + return handleResponse; + + function handleResponse() { + var response = wrapped.response(method, url, data, headers); + xhr.$$respHeaders = response[2]; + callback(response[0], response[1], xhr.getAllResponseHeaders()); + } + + function handleTimeout() { + for (var i = 0, ii = responses.length; i < ii; i++) { + if (responses[i] === handleResponse) { + responses.splice(i, 1); + callback(-1, undefined, ''); + break; + } + } + } + } + if (expectation && expectation.match(method, url)) { if (!expectation.matchData(data)) - throw Error('Expected ' + expectation + ' with different data\n' + + throw new Error('Expected ' + expectation + ' with different data\n' + 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); if (!expectation.matchHeaders(headers)) - throw Error('Expected ' + expectation + ' with different headers\n' + - 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + - prettyPrint(headers)); + throw new Error('Expected ' + expectation + ' with different headers\n' + + 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + prettyPrint(headers)); expectations.shift(); if (expectation.response) { - responses.push(function() { - var response = expectation.response(method, url, data, headers); - xhr.$$respHeaders = response[2]; - callback(response[0], response[1], xhr.getAllResponseHeaders()); - }); + responses.push(wrapResponse(expectation)); return; } wasExpected = true; @@ -918,21 +1048,17 @@ function createHttpBackendMock($delegate, $browser) { if (definition.match(method, url, data, headers || {})) { if (definition.response) { // if $browser specified, we do auto flush all requests - ($browser ? $browser.defer : responsesPush)(function() { - var response = definition.response(method, url, data, headers); - xhr.$$respHeaders = response[2]; - callback(response[0], response[1], xhr.getAllResponseHeaders()); - }); + ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); } else if (definition.passThrough) { - $delegate(method, url, data, callback, headers); + $delegate(method, url, data, callback, headers, timeout, withCredentials); } else throw Error('No response defined !'); return; } } throw wasExpected ? - Error('No response defined !') : - Error('Unexpected request: ' + method + ' ' + url + '\n' + - (expectation ? 'Expected ' + expectation : 'No more request expected')); + new Error('No response defined !') : + new Error('Unexpected request: ' + method + ' ' + url + '\n' + + (expectation ? 'Expected ' + expectation : 'No more request expected')); } /** @@ -944,7 +1070,8 @@ function createHttpBackendMock($delegate, $browser) { * * @param {string} method HTTP method. * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header * object and returns true if the headers match the current definition. * @returns {requestHandler} Returns an object with `respond` method that control how a matched @@ -1020,7 +1147,8 @@ function createHttpBackendMock($delegate, $browser) { * Creates a new backend definition for POST requests. For more info see `when()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1034,7 +1162,8 @@ function createHttpBackendMock($delegate, $browser) { * Creates a new backend definition for PUT requests. For more info see `when()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1063,7 +1192,9 @@ function createHttpBackendMock($delegate, $browser) { * * @param {string} method HTTP method. * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header * object and returns true if the headers match the current expectation. * @returns {requestHandler} Returns an object with `respond` method that control how a matched @@ -1132,7 +1263,9 @@ function createHttpBackendMock($delegate, $browser) { * Creates a new request expectation for POST requests. For more info see `expect()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. * @param {Object=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1146,7 +1279,9 @@ function createHttpBackendMock($delegate, $browser) { * Creates a new request expectation for PUT requests. For more info see `expect()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. * @param {Object=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1160,7 +1295,9 @@ function createHttpBackendMock($delegate, $browser) { * Creates a new request expectation for PATCH requests. For more info see `expect()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. * @param {Object=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1192,6 +1329,7 @@ function createHttpBackendMock($delegate, $browser) { * is called an exception is thrown (as this typically a sign of programming error). */ $httpBackend.flush = function(count) { + $rootScope.$digest(); if (!responses.length) throw Error('No pending request to flush !'); if (angular.isDefined(count)) { @@ -1220,12 +1358,13 @@ function createHttpBackendMock($delegate, $browser) { * "afterEach" clause. * *
-   *   afterEach($httpBackend.verifyExpectations);
+   *   afterEach($httpBackend.verifyNoOutstandingExpectation);
    * 
*/ $httpBackend.verifyNoOutstandingExpectation = function() { + $rootScope.$digest(); if (expectations.length) { - throw Error('Unsatisfied requests: ' + expectations.join(', ')); + throw new Error('Unsatisfied requests: ' + expectations.join(', ')); } }; @@ -1311,6 +1450,7 @@ function MockHttpExpectation(method, url, data, headers) { this.matchData = function(d) { if (angular.isUndefined(data)) return true; if (data && angular.isFunction(data.test)) return data.test(d); + if (data && angular.isFunction(data)) return data(d); if (data && !angular.isString(data)) return angular.toJson(data) == d; return data == d; }; @@ -1376,17 +1516,65 @@ function MockXhr() { * @description * * This service is just a simple decorator for {@link ng.$timeout $timeout} service - * that adds a "flush" method. + * that adds a "flush" and "verifyNoPendingTasks" methods. */ -/** - * @ngdoc method - * @name ngMock.$timeout#flush - * @methodOf ngMock.$timeout - * @description - * - * Flushes the queue of pending tasks. - */ +angular.mock.$TimeoutDecorator = function($delegate, $browser) { + + /** + * @ngdoc method + * @name ngMock.$timeout#flush + * @methodOf ngMock.$timeout + * @description + * + * Flushes the queue of pending tasks. + * + * @param {number=} delay maximum timeout amount to flush up until + */ + $delegate.flush = function(delay) { + $browser.defer.flush(delay); + }; + + /** + * @ngdoc method + * @name ngMock.$timeout#flushNext + * @methodOf ngMock.$timeout + * @description + * + * Flushes the next timeout in the queue and compares it to the provided delay + * + * @param {number=} expectedDelay the delay value that will be asserted against the delay of the next timeout function + */ + $delegate.flushNext = function(expectedDelay) { + $browser.defer.flushNext(expectedDelay); + }; + + /** + * @ngdoc method + * @name ngMock.$timeout#verifyNoPendingTasks + * @methodOf ngMock.$timeout + * @description + * + * Verifies that there are no pending tasks that need to be flushed. + */ + $delegate.verifyNoPendingTasks = function() { + if ($browser.deferredFns.length) { + throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + + formatPendingTasksAsString($browser.deferredFns)); + } + }; + + function formatPendingTasksAsString(tasks) { + var result = []; + angular.forEach(tasks, function(task) { + result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); + }); + + return result.join(', '); + } + + return $delegate; +}; /** * @@ -1412,15 +1600,9 @@ angular.module('ngMock', ['ng']).provider({ $httpBackend: angular.mock.$HttpBackendProvider, $rootElement: angular.mock.$RootElementProvider }).config(function($provide) { - $provide.decorator('$timeout', function($delegate, $browser) { - $delegate.flush = function() { - $browser.defer.flush(); - }; - return $delegate; - }); + $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); }); - /** * @ngdoc overview * @name ngMockE2E @@ -1472,7 +1654,7 @@ angular.module('ngMockE2E', ['ng']).config(function($provide) { * * // adds a new phone to the phones array * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { - * phones.push(angular.fromJSON(data)); + * phones.push(angular.fromJson(data)); * }); * $httpBackend.whenGET(/^\/templates\//).passThrough(); * //... @@ -1599,7 +1781,7 @@ angular.module('ngMockE2E', ['ng']).config(function($provide) { * control how a matched request is handled. */ angular.mock.e2e = {}; -angular.mock.e2e.$httpBackendDecorator = ['$delegate', '$browser', createHttpBackendMock]; +angular.mock.e2e.$httpBackendDecorator = ['$rootScope', '$delegate', '$browser', createHttpBackendMock]; angular.mock.clearDataCache = function() { @@ -1610,41 +1792,31 @@ angular.mock.clearDataCache = function() { if (cache.hasOwnProperty(key)) { var handle = cache[key].handle; - handle && angular.element(handle.elem).unbind(); + handle && angular.element(handle.elem).off(); delete cache[key]; } } }; -window.jstestdriver && (function(window) { - /** - * Global method to output any number of objects into JSTD console. Useful for debugging. - */ - window.dump = function() { - var args = []; - angular.forEach(arguments, function(arg) { - args.push(angular.mock.dump(arg)); - }); - jstestdriver.console.log.apply(jstestdriver.console, args); - if (window.console) { - window.console.log.apply(window.console, args); - } - }; -})(window); +(window.jasmine || window.mocha) && (function(window) { + + var currentSpec = null; -window.jasmine && (function(window) { + beforeEach(function() { + currentSpec = this; + }); afterEach(function() { - var spec = getCurrentSpec(); - var injector = spec.$injector; + var injector = currentSpec.$injector; - spec.$injector = null; - spec.$modules = null; + currentSpec.$injector = null; + currentSpec.$modules = null; + currentSpec = null; if (injector) { - injector.get('$rootElement').unbind(); + injector.get('$rootElement').off(); injector.get('$browser').pollFns.length = 0; } @@ -1663,13 +1835,8 @@ window.jasmine && (function(window) { angular.callbacks.counter = 0; }); - function getCurrentSpec() { - return jasmine.getEnv().currentSpec; - } - function isSpecRunning() { - var spec = getCurrentSpec(); - return spec && spec.queue.running; + return currentSpec && (window.mocha || currentSpec.queue.running); } /** @@ -1678,29 +1845,37 @@ window.jasmine && (function(window) { * @description * * *NOTE*: This function is also published on window for easy access.
- * *NOTE*: Only available with {@link http://pivotal.github.com/jasmine/ jasmine}. * * This function registers a module configuration code. It collects the configuration information * which will be used when the injector is created by {@link angular.mock.inject inject}. * * See {@link angular.mock.inject inject} for usage example * - * @param {...(string|Function)} fns any number of modules which are represented as string + * @param {...(string|Function|Object)} fns any number of modules which are represented as string * aliases or as anonymous module initialization functions. The modules are used to - * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. + * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an + * object literal is passed they will be register as values in the module, the key being + * the module name and the value being what is returned. */ window.module = angular.mock.module = function() { var moduleFns = Array.prototype.slice.call(arguments, 0); return isSpecRunning() ? workFn() : workFn; ///////////////////// function workFn() { - var spec = getCurrentSpec(); - if (spec.$injector) { + if (currentSpec.$injector) { throw Error('Injector already created, can not register a module!'); } else { - var modules = spec.$modules || (spec.$modules = []); + var modules = currentSpec.$modules || (currentSpec.$modules = []); angular.forEach(moduleFns, function(module) { - modules.push(module); + if (angular.isObject(module) && !angular.isArray(module)) { + modules.push(function($provide) { + angular.forEach(module, function(value, key) { + $provide.value(key, value); + }); + }); + } else { + modules.push(module); + } }); } } @@ -1712,7 +1887,6 @@ window.jasmine && (function(window) { * @description * * *NOTE*: This function is also published on window for easy access.
- * *NOTE*: Only available with {@link http://pivotal.github.com/jasmine/ jasmine}. * * The inject function wraps a function into an injectable function. The inject() creates new * instance of {@link AUTO.$injector $injector} per test, which is then used for @@ -1765,13 +1939,13 @@ window.jasmine && (function(window) { return isSpecRunning() ? workFn() : workFn; ///////////////////// function workFn() { - var spec = getCurrentSpec(); - var modules = spec.$modules || []; + var modules = currentSpec.$modules || []; + modules.unshift('ngMock'); modules.unshift('ng'); - var injector = spec.$injector; + var injector = currentSpec.$injector; if (!injector) { - injector = spec.$injector = angular.injector(modules); + injector = currentSpec.$injector = angular.injector(modules); } for(var i = 0, ii = blockFns.length; i < ii; i++) { try { diff --git a/test/lib/angular/angular-scenario.js b/test/lib/angular/angular-scenario.js old mode 100644 new mode 100755 index f0e5c7d510..5d53ace036 --- a/test/lib/angular/angular-scenario.js +++ b/test/lib/angular/angular-scenario.js @@ -1,18840 +1,20858 @@ /*! - * jQuery JavaScript Library v1.7.2 + * jQuery JavaScript Library v1.8.3 * http://jquery.com/ * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * * Includes Sizzle.js * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. * - * Date: Wed Mar 21 12:46:34 2012 -0700 + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) */ -(function( window, undefined ) { -'use strict'; +(function( window, undefined ) {'use strict'; +var + // A central reference to the root jQuery(document) + rootjQuery, + + // The deferred used on DOM ready + readyList, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.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 ); + }, -// Use the correct document accordingly with window argument (sandbox) -var document = window.document, - navigator = window.navigator, - location = window.location; -var jQuery = (function() { + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, + // 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, - // Map over the $ in case of overwrite - _$ = window.$, + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, - // A central reference to the root jQuery(document) - rootjQuery, + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - // A simple way to check for HTML strings or ID strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + // [[Class]] -> type pairs + class2type = {}; - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; - // Matches dashed string for camelizing - rdashAlpha = /-([a-z]|[0-9])/ig, - rmsPrefix = /^-ms-/, + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return ( letter + "" ).toUpperCase(); - }, + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, + // 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; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } + + return jQuery.merge( this, selector ); + + // 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: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } - // For matching the engine and version of the browser - browserMatch, + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } - // The deferred used on DOM ready - readyList, + return jQuery.makeArray( selector, this ); + }, - // The ready event handler - DOMContentLoaded, + // Start with an empty selector + selector: "", - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, + // The current version of jQuery being used + jquery: "1.8.3", - // [[Class]] -> type pairs - class2type = {}; + // The default length of a jQuery object is 0 + length: 0, -jQuery.fn = jQuery.prototype = { - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - 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 = quickExpr.exec( selector ); - } - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - doc = ( context ? context.ownerDocument || context : document ); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; - } - - return jQuery.merge( this, selector ); - - // 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: $(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 current version of jQuery being used - jquery: "1.7.2", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // 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, name, selector ) { - // Build a new jQuery matched element set - var ret = this.constructor(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // 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 ) { - // Attach the listeners - jQuery.bindReady(); - - // Add the callback - readyList.add( fn ); - - return this; - }, - - eq: function( i ) { - i = +i; - return i === -1 ? - this.slice( i ) : - this.slice( i, i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - 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: push, - sort: [].sort, - splice: [].splice -}; + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; + toArray: function() { + return core_slice.call( this ); + }, -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, 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; -}; + // 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 ? -jQuery.extend({ - 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 ) { - // Either a released hold or an DOMready/load event and not yet ready - if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // 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.fireWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger( "ready" ).off( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyList ) { - return; - } - - readyList = jQuery.Callbacks( "once memory" ); - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", DOMContentLoaded ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // 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 ) { - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // 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 && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( 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 ) { - if ( typeof data !== "string" || !data ) { - return null; - } - var xml, tmp; - 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-global-context - globalEval: function( data ) { - if ( data && rnotwhite.test( 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.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction( object ); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { - break; - } - } - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type( array ); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array, i ) { - var len; - - if ( array ) { - if ( indexOf ) { - return indexOf.call( array, elem, i ); - } - - len = array.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in array && array[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, - j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; 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 ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; 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, key, ret = [], - i = 0, - length = elems.length, - // jquery objects are treated as arrays - isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; - - // 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 ( key in elems ) { - value = callback( elems[ key ], key, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return ret.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 ) { - if ( typeof context === "string" ) { - var 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 - var args = slice.call( arguments, 2 ), - proxy = function() { - return fn.apply( context, args.concat( 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 || proxy.guid || jQuery.guid++; - - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, pass ) { - var exec, - bulk = key == null, - i = 0, - length = elems.length; - - // Sets many values - if ( key && typeof key === "object" ) { - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); - } - chainable = 1; - - // Sets one value - } else if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = pass === undefined && jQuery.isFunction( value ); - - if ( bulk ) { - // Bulk operations only iterate when executing function values - if ( exec ) { - exec = fn; - fn = function( elem, key, value ) { - return exec.call( jQuery( elem ), value ); - }; - - // Otherwise they run against the entire set - } else { - fn.call( elems, value ); - fn = null; - } - } - - if ( fn ) { - for (; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - } - - chainable = 1; - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - sub: function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } - - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - return jQuerySub; - }, - - browser: {} -}); + // Return a 'clean' array + this.toArray() : -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); -// IE doesn't match non-breaking spaces with \s -if ( rnotwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} + // Add the old object onto the stack (as a reference) + ret.prevObject = this; -// All jQuery objects should point back to these -rootjQuery = jQuery(document); + ret.context = this.context; -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} + // Return the newly-formed element set + return ret; + }, -return jQuery; + // 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; + }, -// String to Object flags format cache -var flagsCache = {}; + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, -// Convert String-formatted flags into Object-formatted ones and store in cache -function createFlags( flags ) { - var object = flagsCache[ flags ] = {}, - i, length; - flags = flags.split( /\s+/ ); - for ( i = 0, length = flags.length; i < length; i++ ) { - object[ flags[i] ] = true; - } - return object; -} + first: function() { + return this.eq( 0 ); + }, -/* - * Create a callback list using the following parameters: - * - * flags: an optional list of space-separated flags that will change how - * the callback list behaves - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible flags: - * - * 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( flags ) { - - // Convert flags from String-formatted to Object-formatted - // (we check in cache first) - flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; - - var // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = [], - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Add one or several callbacks to the list - add = function( args ) { - var i, - length, - elem, - type, - actual; - for ( i = 0, length = args.length; i < length; i++ ) { - elem = args[ i ]; - type = jQuery.type( elem ); - if ( type === "array" ) { - // Inspect recursively - add( elem ); - } else if ( type === "function" ) { - // Add if not in unique mode and callback is not in - if ( !flags.unique || !self.has( elem ) ) { - list.push( elem ); - } - } - } - }, - // Fire callbacks - fire = function( context, args ) { - args = args || []; - memory = !flags.memory || [ context, args ]; - fired = true; - firing = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { - memory = true; // Mark as halted - break; - } - } - firing = false; - if ( list ) { - if ( !flags.once ) { - if ( stack && stack.length ) { - memory = stack.shift(); - self.fireWith( memory[ 0 ], memory[ 1 ] ); - } - } else if ( memory === true ) { - self.disable(); - } else { - list = []; - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - var length = list.length; - add( 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, unless previous - // firing was halted (stopOnFalse) - } else if ( memory && memory !== true ) { - firingStart = length; - fire( memory[ 0 ], memory[ 1 ] ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - var args = arguments, - argIndex = 0, - argLength = args.length; - for ( ; argIndex < argLength ; argIndex++ ) { - for ( var i = 0; i < list.length; i++ ) { - if ( args[ argIndex ] === list[ i ] ) { - // Handle firingIndex and firingLength - if ( firing ) { - if ( i <= firingLength ) { - firingLength--; - if ( i <= firingIndex ) { - firingIndex--; - } - } - } - // Remove the element - list.splice( i--, 1 ); - // If we have some unicity property then - // we only need to do this once - if ( flags.unique ) { - break; - } - } - } - } - } - return this; - }, - // Control if a given callback is in the list - has: function( fn ) { - if ( list ) { - var i = 0, - length = list.length; - for ( ; i < length; i++ ) { - if ( fn === list[ i ] ) { - return true; - } - } - } - return false; - }, - // Remove all callbacks from the list - empty: function() { - list = []; - 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 || memory === true ) { - 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 ( stack ) { - if ( firing ) { - if ( !flags.once ) { - stack.push( [ context, args ] ); - } - } else if ( !( flags.once && memory ) ) { - fire( context, 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; + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, + + 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 options, name, src, copy, copyIsArray, 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; + } + } + } + } -var // Static reference to slice - sliceDeferred = [].slice; + // Return the modified object + return target; +}; jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } - Deferred: function( func ) { - var doneList = jQuery.Callbacks( "once memory" ), - failList = jQuery.Callbacks( "once memory" ), - progressList = jQuery.Callbacks( "memory" ), - state = "pending", - lists = { - resolve: doneList, - reject: failList, - notify: progressList - }, - promise = { - done: doneList.add, - fail: failList.add, - progress: progressList.add, - - state: function() { - return state; - }, - - // Deprecated - isResolved: doneList.fired, - isRejected: failList.fired, - - then: function( doneCallbacks, failCallbacks, progressCallbacks ) { - deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); - return this; - }, - always: function() { - deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); - return this; - }, - pipe: function( fnDone, fnFail, fnProgress ) { - return jQuery.Deferred(function( newDefer ) { - jQuery.each( { - done: [ fnDone, "resolve" ], - fail: [ fnFail, "reject" ], - progress: [ fnProgress, "notify" ] - }, function( handler, data ) { - var fn = data[ 0 ], - action = data[ 1 ], - returned; - if ( jQuery.isFunction( fn ) ) { - deferred[ handler ](function() { - returned = fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); - } - }); - } else { - deferred[ handler ]( newDefer[ action ] ); - } - }); - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - if ( obj == null ) { - obj = promise; - } else { - for ( var key in promise ) { - obj[ key ] = promise[ key ]; - } - } - return obj; - } - }, - deferred = promise.promise({}), - key; - - for ( key in lists ) { - deferred[ key ] = lists[ key ].fire; - deferred[ key + "With" ] = lists[ key ].fireWith; - } - - // Handle state - deferred.done( function() { - state = "resolved"; - }, failList.disable, progressList.lock ).fail( function() { - state = "rejected"; - }, doneList.disable, progressList.lock ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( firstParam ) { - var args = sliceDeferred.call( arguments, 0 ), - i = 0, - length = args.length, - pValues = new Array( length ), - count = length, - pCount = length, - deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? - firstParam : - jQuery.Deferred(), - promise = deferred.promise(); - function resolveFunc( i ) { - return function( value ) { - args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - if ( !( --count ) ) { - deferred.resolveWith( deferred, args ); - } - }; - } - function progressFunc( i ) { - return function( value ) { - pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - deferred.notifyWith( promise, pValues ); - }; - } - if ( length > 1 ) { - for ( ; i < length; i++ ) { - if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { - args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); - } else { - --count; - } - } - if ( !count ) { - deferred.resolveWith( deferred, args ); - } - } else if ( deferred !== firstParam ) { - deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); - } - return promise; - } -}); + 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, -jQuery.support = (function() { + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, - var support, - all, - a, - select, - opt, - input, - fragment, - tds, - events, - eventName, - i, - isSupported, - div = document.createElement( "div" ), - documentElement = document.documentElement; - - // Preliminary tests - div.setAttribute("className", "t"); - div.innerHTML = "
NamePhone
{{friend.name}} {{friend.phone}}
a"; - - all = div.getElementsByTagName( "*" ); - a = div.getElementsByTagName( "a" )[ 0 ]; - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return {}; - } - - // First batch of supports tests - select = document.createElement( "select" ); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName( "input" )[ 0 ]; - - support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: ( div.firstChild.nodeType === 3 ), - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - 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 - opacity: /^0.55/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: ( input.value === "on" ), - - // 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) - optSelected: opt.selected, - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // Tests for enctype support on a form(#6743) - enctype: !!document.createElement("form").enctype, - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", - - // Will be defined later - submitBubbles: true, - changeBubbles: true, - focusinBubbles: false, - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true, - pixelMargin: true - }; - - // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead - jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); - - // 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; - - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent( "onclick", function() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - support.noCloneEvent = false; - }); - div.cloneNode( true ).fireEvent( "onclick" ); - } - - // Check if a radio maintains its value - // after being appended to the DOM - input = document.createElement("input"); - input.value = "t"; - input.setAttribute("type", "radio"); - support.radioValue = input.value === "t"; - - input.setAttribute("checked", "checked"); - - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - fragment = document.createDocumentFragment(); - fragment.appendChild( div.lastChild ); - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - fragment.removeChild( input ); - fragment.appendChild( div ); - - // Technique from Juriy Zaytsev - // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( div.attachEvent ) { - for ( i in { - submit: 1, - change: 1, - focusin: 1 - }) { - eventName = "on" + i; - isSupported = ( eventName in div ); - if ( !isSupported ) { - div.setAttribute( eventName, "return;" ); - isSupported = ( typeof div[ eventName ] === "function" ); - } - support[ i + "Bubbles" ] = isSupported; - } - } - - fragment.removeChild( div ); - - // Null elements to avoid leaks in IE - fragment = select = opt = div = input = null; - - // Run tests that need a body at doc ready - jQuery(function() { - var container, outer, inner, table, td, offsetSupport, - marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, - paddingMarginBorderVisibility, paddingMarginBorder, - body = document.getElementsByTagName("body")[0]; - - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } - - conMarginTop = 1; - paddingMarginBorder = "padding:0;margin:0;border:"; - positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; - paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; - style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; - html = "
" + - "" + - "
"; - - container = document.createElement("div"); - container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; - body.insertBefore( container, body.firstChild ); - - // Construct the test element - div = document.createElement("div"); - container.appendChild( div ); - - // 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). - // (only IE 8 fails this test) - div.innerHTML = "
t
"; - tds = div.getElementsByTagName( "td" ); - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE <= 8 fail this test) - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( window.getComputedStyle ) { - div.innerHTML = ""; - marginDiv = document.createElement( "div" ); - marginDiv.style.width = "0"; - marginDiv.style.marginRight = "0"; - div.style.width = "2px"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; - } - - if ( typeof div.style.zoom !== "undefined" ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.innerHTML = ""; - div.style.width = div.style.padding = "1px"; - div.style.border = 0; - div.style.overflow = "hidden"; - div.style.display = "inline"; - div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = "block"; - div.style.overflow = "visible"; - div.innerHTML = "
"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - } - - div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; - div.innerHTML = html; - - outer = div.firstChild; - inner = outer.firstChild; - td = outer.nextSibling.firstChild.firstChild; - - offsetSupport = { - doesNotAddBorder: ( inner.offsetTop !== 5 ), - doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) - }; - - inner.style.position = "fixed"; - inner.style.top = "20px"; - - // safari subtracts parent border width here which is 5px - offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); - inner.style.position = inner.style.top = ""; - - outer.style.overflow = "hidden"; - outer.style.position = "relative"; - - offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); - offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); - - if ( window.getComputedStyle ) { - div.style.marginTop = "1%"; - support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; - } - - if ( typeof container.style.zoom !== "undefined" ) { - container.style.zoom = 1; - } - - body.removeChild( container ); - marginDiv = div = container = null; - - jQuery.extend( support, offsetSupport ); - }); - - return support; -})(); + // 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, 1 ); + } + // Remember that the DOM is ready + jQuery.isReady = true; -var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([A-Z])/g; + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var privateCache, thisCache, ret, - internalKey = jQuery.expando, - getByName = typeof name === "string", - - // 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, - isEvents = name === "events"; - - // 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] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { - 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 ) { - elem[ internalKey ] = id = ++jQuery.uuid; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // Avoids exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - if ( !isNode ) { - cache[ id ].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 ); - } - } - - privateCache = 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; - } - - // Users should not attempt to inspect the internal events object using jQuery.data, - // it is undocumented and subject to change. But does anyone listen? No. - if ( isEvents && !thisCache[ name ] ) { - return privateCache.events; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( getByName ) { - - // 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; - }, - - removeData: function( elem, name, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, i, l, - - // Reference to internal data cache key - internalKey = jQuery.expando, - - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - - // See jQuery.data for more information - id = isNode ? elem[ internalKey ] : internalKey; - - // 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( " " ); - } - } - } - - for ( i = 0, l = name.length; i < l; 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 : 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; - } - } - - // Browsers that fail expando deletion also refuse to delete expandos on - // the window, but it will allow it on all other JS objects; other browsers - // don't care - // Ensure that `cache` is not a window object #10080 - if ( jQuery.support.deleteExpando || !cache.setInterval ) { - delete cache[ id ]; - } else { - cache[ id ] = null; - } - - // We destroyed the cache and need to eliminate the expando on the node to avoid - // false lookups in the cache for entries that no longer exist - if ( isNode ) { - // 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 ( jQuery.support.deleteExpando ) { - delete elem[ internalKey ]; - } else if ( elem.removeAttribute ) { - elem.removeAttribute( internalKey ); - } else { - elem[ internalKey ] = null; - } - } - }, - - // For internal use only. - _data: function( elem, name, data ) { - return jQuery.data( elem, name, data, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); -jQuery.fn.extend({ - data: function( key, value ) { - var parts, part, attr, name, l, - elem = this[0], - i = 0, - data = null; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attr = elem.attributes; - for ( l = attr.length; i < l; i++ ) { - name = attr[i].name; - - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.substring(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 ); - }); - } - - parts = key.split( ".", 2 ); - parts[1] = parts[1] ? "." + parts[1] : ""; - part = parts[1] + "!"; - - return jQuery.access( this, function( value ) { - - if ( value === undefined ) { - data = this.triggerHandler( "getData" + part, [ parts[0] ] ); - - // Try to fetch any internally stored data first - if ( data === undefined && elem ) { - data = jQuery.data( elem, key ); - data = dataAttr( elem, key, data ); - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } - - parts[1] = value; - this.each(function() { - var self = jQuery( this ); - - self.triggerHandler( "setData" + part, parts ); - jQuery.data( this, key, value ); - self.triggerHandler( "changeData" + part, parts ); - }); - }, null, value, arguments.length > 1, null, false ); - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, -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 ) { + // 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"; + }, - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, - data = elem.getAttribute( name ); + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - jQuery.isNumeric( data ) ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, - } else { - data = undefined; - } - } + isPlainObject: function( obj ) { + // 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; + } - return data; -} + 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; + } -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - for ( var 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; -} + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + var key; + 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; + }, -function handleQueueMarkDefer( elem, type, src ) { - var deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - defer = jQuery._data( elem, deferDataKey ); - if ( defer && - ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && - ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { - // Give room for hard-coded callbacks to fire first - // and eventually mark/queue something else on the element - setTimeout( function() { - if ( !jQuery._data( elem, queueDataKey ) && - !jQuery._data( elem, markDataKey ) ) { - jQuery.removeData( elem, deferDataKey, true ); - defer.fire(); - } - }, 0 ); - } -} + error: function( msg ) { + throw new Error( msg ); + }, -jQuery.extend({ + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; - _mark: function( elem, type ) { - if ( elem ) { - type = ( type || "fx" ) + "mark"; - jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); - } - }, - - _unmark: function( force, elem, type ) { - if ( force !== true ) { - type = elem; - elem = force; - force = false; - } - if ( elem ) { - type = type || "fx"; - var key = type + "mark", - count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); - if ( count ) { - jQuery._data( elem, key, count ); - } else { - jQuery.removeData( elem, key, true ); - handleQueueMarkDefer( elem, type, "mark" ); - } - } - }, - - queue: function( elem, type, data ) { - var q; - if ( elem ) { - type = ( type || "fx" ) + "queue"; - q = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !q || jQuery.isArray(data) ) { - q = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - q.push( data ); - } - } - return q || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - fn = queue.shift(), - hooks = {}; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - jQuery._data( elem, type + ".run", hooks ); - fn.call( elem, function() { - jQuery.dequeue( elem, type ); - }, hooks ); - } - - if ( !queue.length ) { - jQuery.removeData( elem, type + "queue " + type + ".run", true ); - handleQueueMarkDefer( elem, type, "queue" ); - } - } -}); + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } -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 ); - - 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, object ) { - if ( typeof type !== "string" ) { - object = type; - type = undefined; - } - type = type || "fx"; - var defer = jQuery.Deferred(), - elements = this, - i = elements.length, - count = 1, - deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - tmp; - function resolve() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - } - while( i-- ) { - if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || - ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || - jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && - jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { - count++; - tmp.add( resolve ); - } - } - resolve(); - return defer.promise( object ); - } -}); + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } -var rclass = /[\n\t\r]/g, - rspace = /\s+/, - rreturn = /\r/g, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - nodeHook, boolHook, fixSpecified; + // 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, "")) ) { -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 classNames, i, l, elem, - setClass, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call(this, j, this.className) ); - }); - } - - if ( value && typeof value === "string" ) { - classNames = value.split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className && classNames.length === 1 ) { - elem.className = value; - - } else { - setClass = " " + elem.className + " "; - - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { - setClass += classNames[ c ] + " "; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classNames, i, l, elem, className, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call(this, j, this.className) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - classNames = ( value || "" ).split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - className = (" " + elem.className + " ").replace( rclass, " " ); - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[ c ] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - 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.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // toggle whole className - 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 ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var hooks, ret, 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 self = jQuery(this), val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.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; - } - }); - } -}); + return ( new Function( "return " + data ) )(); -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, i, max, option, - index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - i = one ? index : 0; - max = one ? index + 1 : options.length; - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (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 ); - } - } - - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery( elem )[ name ]( value ); - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( notxml ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - - } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, "" + value ); - return value; - } - - } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - ret = elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return ret === null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var propName, attrNames, name, l, isBool, - i = 0; - - if ( value && elem.nodeType === 1 ) { - attrNames = value.toLowerCase().split( rspace ); - l = attrNames.length; - - for ( ; i < l; i++ ) { - name = attrNames[ i ]; - - if ( name ) { - propName = jQuery.propFix[ name ] || name; - isBool = rboolean.test( name ); - - // See #9699 for explanation of this approach (setting first, then removal) - // Do not do this for boolean attributes (see #10870) - if ( !isBool ) { - jQuery.attr( elem, name, "" ); - } - elem.removeAttribute( getSetAttribute ? name : propName ); - - // Set corresponding property to false for boolean attributes - if ( isBool && propName in elem ) { - elem[ propName ] = false; - } - } - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } else 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 it's default in case type is set after value - // This is for element creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - }, - // Use the value property for back compat - // Use the nodeHook for button elements in IE6/7 (#1954) - value: { - get: function( elem, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.get( elem, name ); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.set( elem, value, name ); - } - // Does not return so that setAttribute is also used - elem.value = value; - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - 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 ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return ( elem[ name ] = value ); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - return 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-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabindex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - } - } -}); + } + jQuery.error( "Invalid JSON: " + data ); + }, -// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) -jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + // 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; + }, -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - // Fall back to attribute presence where some booleans are not supported - var attrNode, - property = jQuery.prop( elem, name ); - return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } - - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } -}; + 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-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( 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 ); + } + }, -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { + // 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 ); + }, - fixSpecified = { - name: true, - id: true, - coords: true - }; - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret; - ret = elem.getAttributeNode( name ); - return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? - ret.nodeValue : - undefined; - }, - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - ret = document.createAttribute( name ); - elem.setAttributeNode( ret ); - } - return ( ret.nodeValue = value + "" ); - } - }; - - // Apply the nodeHook to tabindex - jQuery.attrHooks.tabindex.set = nodeHook.set; - - // 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 ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - get: nodeHook.get, - set: function( elem, value, name ) { - if ( value === "" ) { - value = "false"; - } - nodeHook.set( elem, value, name ); - } - }; -} + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } -// Some attributes require a special call on IE -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret === null ? undefined : ret; - } - }); - }); -} + return obj; + }, -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Normalize to lowercase since IE uppercases css property names - return elem.style.cssText.toLowerCase() || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = "" + value ); - } - }; -} + // 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 type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } -// 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 = jQuery.extend( 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; - } - }); -} + return ret; + }, -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} + inArray: function( elem, arr, i ) { + var len; -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }); -}); + 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; + }, -var rformElems = /^(?:textarea|input|select)$/i, - rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, - rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, - quickParse = function( selector ) { - var quick = rquickIs.exec( selector ); - if ( quick ) { - // 0 1 2 3 - // [ _, tag, id, class ] - quick[1] = ( quick[1] || "" ).toLowerCase(); - quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); - } - return quick; - }, - quickIs = function( elem, m ) { - var attrs = elem.attributes || {}; - return ( - (!m[1] || elem.nodeName.toLowerCase() === m[1]) && - (!m[2] || (attrs.id || {}).value === m[2]) && - (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) - ); - }, - hoverHack = function( events ) { - return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); - }; + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } - add: function( elem, types, handler, data, selector ) { - - var elemData, eventHandle, events, - t, tns, type, namespaces, handleObj, - handleObjIn, quick, handlers, special; - - // Don't attach events to noData or text/comment nodes (allow plain objects tho) - if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { - 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 - events = elemData.events; - if ( !events ) { - elemData.events = events = {}; - } - eventHandle = elemData.handle; - if ( !eventHandle ) { - elemData.handle = eventHandle = 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 !== "undefined" && (!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 - // jQuery(...).bind("mouseover mouseout", fn); - types = jQuery.trim( hoverHack(types) ).split( " " ); - for ( t = 0; t < types.length; t++ ) { - - tns = rtypenamespace.exec( types[t] ) || []; - type = tns[1]; - namespaces = ( tns[2] || "" ).split( "." ).sort(); - - // 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: tns[1], - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - quick: selector && quickParse( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - handlers = events[ type ]; - if ( !handlers ) { - 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; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), - t, tns, type, origType, namespaces, origCount, - j, events, special, handle, eventType, handleObj; - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = jQuery.trim( hoverHack( types || "" ) ).split(" "); - for ( t = 0; t < types.length; t++ ) { - tns = rtypenamespace.exec( types[t] ) || []; - type = origType = tns[1]; - namespaces = tns[2]; - - // 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; - eventType = events[ type ] || []; - origCount = eventType.length; - namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; - - // Remove matching events - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !namespaces || namespaces.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - eventType.splice( j--, 1 ); - - if ( handleObj.selector ) { - eventType.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 ( eventType.length === 0 && origCount !== eventType.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery.removeData( elem, [ "events", "handle" ], true ); - } - }, - - // Events that are safe to short-circuit if no handlers are attached. - // Native DOM events should not be added, they may have inline handlers. - customEvent: { - "getData": true, - "setData": true, - "changeData": true - }, - - trigger: function( event, data, elem, onlyHandlers ) { - // Don't do events on text and comment nodes - if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { - return; - } - - // Event object or event type - var type = event.type || event, - namespaces = [], - cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; - - // 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 ) { - // Exclusive events trigger only for the exact event (no namespaces) - type = type.slice(0, -1); - exclusive = true; - } - - if ( type.indexOf( "." ) >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - - if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { - // No jQuery handlers for this event type, and it can't have inline handlers - return; - } - - // Caller can pass in an Event, Object, or just an event type string - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - new jQuery.Event( type, event ) : - // Just the event type (string) - new jQuery.Event( type ); - - event.type = type; - event.isTrigger = true; - event.exclusive = exclusive; - event.namespace = namespaces.join( "." ); - event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; - ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; - - // Handle a global trigger - if ( !elem ) { - - // TODO: Stop taunting the data cache; remove global events and always attach to document - cache = jQuery.cache; - for ( i in cache ) { - if ( cache[ i ].events && cache[ i ].events[ type ] ) { - jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); - } - } - return; - } - - // 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 ? jQuery.makeArray( data ) : []; - data.unshift( event ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( 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) - eventPath = [[ elem, special.bindType || type ]]; - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; - old = null; - for ( ; cur; cur = cur.parentNode ) { - eventPath.push([ cur, bubbleType ]); - old = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( old && old === elem.ownerDocument ) { - eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); - } - } - - // Fire handlers on the event path - for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { - - cur = eventPath[i][0]; - event.type = eventPath[i][1]; - - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - // Note that this is a bare JS function and not a jQuery handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && 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( elem.ownerDocument, data ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && 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) - // IE<9 dies on focus/blur to hidden element (#1486) - if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( old ) { - elem[ ontype ] = old; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event || window.event ); - - var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), - delegateCount = handlers.delegateCount, - args = [].slice.call( arguments, 0 ), - run_all = !event.exclusive && !event.namespace, - special = jQuery.event.special[ event.type ] || {}, - handlerQueue = [], - i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; - - // 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 that should run if there are delegated events - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && !(event.button && event.type === "click") ) { - - // Pregenerate a single jQuery object for reuse with .is() - jqcur = jQuery(this); - jqcur.context = this.ownerDocument || this; - - for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { - - // Don't process events on disabled elements (#6911, #8165) - if ( cur.disabled !== true ) { - selMatch = {}; - matches = []; - jqcur[0] = cur; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - sel = handleObj.selector; - - if ( selMatch[ sel ] === undefined ) { - selMatch[ sel ] = ( - handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) - ); - } - if ( selMatch[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, matches: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( handlers.length > delegateCount ) { - handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); - } - - // Run delegates first; they may want to stop propagation beneath us - for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { - matched = handlerQueue[ i ]; - event.currentTarget = matched.elem; - - for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { - handleObj = matched.matches[ j ]; - - // Triggered event must either 1) be non-exclusive and have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { - - event.data = handleObj.data; - event.handleObj = handleObj; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( 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; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** - props: "attrChange attrName relatedNode srcElement 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 eventDoc, doc, body, - 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; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, - originalEvent = event, - fixHook = jQuery.event.fixHooks[ event.type ] || {}, - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = jQuery.Event( originalEvent ); - - for ( i = copy.length; i; ) { - prop = copy[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Target should not be a text node (#504, Safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) - if ( event.metaKey === undefined ) { - event.metaKey = event.ctrlKey; - } - - return fixHook.filter? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady - }, - - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - - focus: { - delegateType: "focusin" - }, - blur: { - delegateType: "focusout" - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - }, - - 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(); - } - } -}; + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } -// Some plugins are using, but it's undocumented/deprecated and will be removed. -// The 1.7 special event interface should provide all the hooks needed now. -jQuery.event.handle = jQuery.event.dispatch; + first.length = i; -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; + return first; + }, -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; -}; + 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 ] ); + } + } -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} + return ret; + }, -// 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-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // 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 ( key in elems ) { + value = callback( elems[ key ], key, arg ); -// 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 target = this, - related = event.relatedTarget, - handleObj = event.handleObj, - selector = handleObj.selector, - ret; - - // 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; - } - }; -}); + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, - 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 && !form._submit_attached ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - form._submit_attached = 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" ); - } - }; -} + // A global GUID counter for objects + guid: 1, -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; - 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; - 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 ) && !elem._change_attached ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - elem._change_attached = 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 ); - } - }; -} + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } -// 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 ); - } - } - }; - }); -} + // 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; + } -jQuery.fn.extend({ + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { // && selector != null - // ( 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 ) { - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - var 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 ( var 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 ); - }); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - live: function( types, data, fn ) { - jQuery( this.context ).on( types, this.selector, data, fn ); - return this; - }, - die: function( types, fn ) { - jQuery( this.context ).off( types, this.selector || "**", fn ); - return this; - }, - - 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 ); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - if ( this[0] ) { - return jQuery.event.trigger( type, data, this[0], true ); - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); + // 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++; -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 ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } - - if ( rkeyEvent.test( name ) ) { - jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; - } - - if ( rmouseEvent.test( name ) ) { - jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; - } -}); + 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, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + return chainable ? + elems : + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - expando = "sizcache" + (Math.random() + '').replace('.', ''), - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true, - rBackslash = /\\/g, - rReturn = /\r\n/g, - rNonWord = /\W/; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function() { - baseHasDuplicate = false; - return 0; + now: function() { + return ( new Date() ).getTime(); + } }); -var Sizzle = function( selector, context, results, seed ) { - results = results || []; - context = context || document; +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { - var origContext = context; + readyList = jQuery.Deferred(); - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } + // 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, 1 ); - if ( !selector || typeof selector !== "string" ) { - return results; - } + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - var m, set, checkSet, extra, ret, cur, pop, i, - prune = true, - contextXML = Sizzle.isXML( context ), - parts = [], - soFar = selector; + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec( "" ); - m = chunker.exec( soFar ); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context, seed ); - - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set, seed ); - } - } - - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? - Sizzle.filter( ret.expr, ret.set )[0] : - ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - - set = ret.expr ? - Sizzle.filter( ret.expr, ret.set ) : - ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray( set ); - - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // 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 ); + } + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); }; -Sizzle.uniqueSort = function( results ) { - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } - } - - return results; -}; +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); -Sizzle.matches = function( expr, set ) { - return Sizzle( expr, null, null, set ); -}; +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// 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.split( core_rspace ), 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 // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // 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; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + 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; + } + }; -Sizzle.matchesSelector = function( node, expr ) { - return Sizzle( expr, null, null, [node] ).length > 0; + return self; }; +jQuery.extend({ -Sizzle.find = function( expr, context, isXML ) { - var set, i, len, match, type, left; + 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 = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = 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 === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + 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 ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); - if ( !expr ) { - return []; - } + // Make the deferred a promise + promise.promise( deferred ); - for ( i = 0, len = Expr.order.length; i < len; i++ ) { - type = Expr.order[i]; + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - left = match[1]; - match.splice( 1, 1 ); + // All done! + return deferred; + }, - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace( rBackslash, "" ); - set = Expr.find[ type ]( match, context, isXML ); + // 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 ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } - if ( !set ) { - set = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( "*" ) : - []; - } + return deferred.promise(); + } +}); +jQuery.support = (function() { - return { set: set, expr: expr }; -}; + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } -Sizzle.filter = function( expr, set, inplace, not ) { - var match, anyFound, - type, found, item, filter, left, - i, pass, - old = expr, - result = [], - curLoop = set, - isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); - - while ( expr && set.length ) { - for ( type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - filter = Expr.filter[ type ]; - left = match[1]; - - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - pass = not ^ found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - - } else { - curLoop[i] = false; - } - - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; + // 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"; + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + 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 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // 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) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; -/** - * Utility function for retreiving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -var getText = Sizzle.getText = function( elem ) { - var i, node, - nodeType = elem.nodeType, - ret = ""; - - if ( nodeType ) { - if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent || innerText for elements - if ( typeof elem.textContent === 'string' ) { - return elem.textContent; - } else if ( typeof elem.innerText === 'string' ) { - // Replace IE's carriage returns - return elem.innerText.replace( rReturn, '' ); - } else { - // Traverse it's children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - } else { - - // If no nodeType, this is expected to be an array - for ( i = 0; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - if ( node.nodeType !== 8 ) { - ret += getText( node ); - } - } - } - return ret; -}; + // 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; -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - - leftMatch: {}, - - attrMap: { - "class": "className", - "for": "htmlFor" - }, - - attrHandle: { - href: function( elem ) { - return elem.getAttribute( "href" ); - }, - type: function( elem ) { - return elem.getAttribute( "type" ); - } - }, - - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !rNonWord.test( part ), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - - ">": function( checkSet, part ) { - var elem, - isPartStr = typeof part === "string", - i = 0, - l = checkSet.length; - - if ( isPartStr && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - - "": function(checkSet, part, isXML){ - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); - }, - - "~": function( checkSet, part, isXML ) { - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); - } - }, - - find: { - ID: function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - - NAME: function( match, context ) { - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], - results = context.getElementsByName( match[1] ); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - - TAG: function( match, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( match[1] ); - } - } - }, - preFilter: { - CLASS: function( match, curLoop, inplace, result, not, isXML ) { - match = " " + match[1].replace( rBackslash, "" ) + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - - ID: function( match ) { - return match[1].replace( rBackslash, "" ); - }, - - TAG: function( match, curLoop ) { - return match[1].replace( rBackslash, "" ).toLowerCase(); - }, - - CHILD: function( match ) { - if ( match[1] === "nth" ) { - if ( !match[2] ) { - Sizzle.error( match[0] ); - } - - match[2] = match[2].replace(/^\+|\s*/g, ''); - - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - else if ( match[2] ) { - Sizzle.error( match[0] ); - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - - ATTR: function( match, curLoop, inplace, result, not, isXML ) { - var name = match[1] = match[1].replace( rBackslash, "" ); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - // Handle if an un-quoted value was used - match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - - PSEUDO: function( match, curLoop, inplace, result, not ) { - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - - if ( !inplace ) { - result.push.apply( result, ret ); - } - - return false; - } - - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - - POS: function( match ) { - match.unshift( true ); - - return match; - } - }, - - filters: { - enabled: function( elem ) { - return elem.disabled === false && elem.type !== "hidden"; - }, - - disabled: function( elem ) { - return elem.disabled === true; - }, - - checked: function( elem ) { - return elem.checked === true; - }, - - 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; - }, - - parent: function( elem ) { - return !!elem.firstChild; - }, - - empty: function( elem ) { - return !elem.firstChild; - }, - - has: function( elem, i, match ) { - return !!Sizzle( match[3], elem ).length; - }, - - header: function( elem ) { - return (/h\d/i).test( elem.nodeName ); - }, - - text: function( elem ) { - var attr = elem.getAttribute( "type" ), type = elem.type; - // 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" && "text" === type && ( attr === type || attr === null ); - }, - - radio: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; - }, - - checkbox: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; - }, - - file: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; - }, - - password: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; - }, - - submit: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "submit" === elem.type; - }, - - image: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; - }, - - reset: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "reset" === elem.type; - }, - - button: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && "button" === elem.type || name === "button"; - }, - - input: function( elem ) { - return (/input|select|textarea|button/i).test( elem.nodeName ); - }, - - focus: function( elem ) { - return elem === elem.ownerDocument.activeElement; - } - }, - setFilters: { - first: function( elem, i ) { - return i === 0; - }, - - last: function( elem, i, match, array ) { - return i === array.length - 1; - }, - - even: function( elem, i ) { - return i % 2 === 0; - }, - - odd: function( elem, i ) { - return i % 2 === 1; - }, - - lt: function( elem, i, match ) { - return i < match[3] - 0; - }, - - gt: function( elem, i, match ) { - return i > match[3] - 0; - }, - - nth: function( elem, i, match ) { - return match[3] - 0 === i; - }, - - eq: function( elem, i, match ) { - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function( elem, match, i, array ) { - var name = match[1], - filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; - - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - - } else { - Sizzle.error( name ); - } - }, - - CHILD: function( elem, match ) { - var first, last, - doneName, parent, cache, - count, diff, - type = match[1], - node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - /* falls through */ - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - - case "nth": - first = match[2]; - last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - doneName = match[0]; - parent = elem.parentNode; - - if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { - count = 0; - - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - - parent[ expando ] = doneName; - } - - diff = elem.nodeIndex - last; - - if ( first === 0 ) { - return diff === 0; - - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - - ID: function( elem, match ) { - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - - TAG: function( elem, match ) { - return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; - }, - - CLASS: function( elem, match ) { - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - - ATTR: function( elem, match ) { - var name = match[1], - result = Sizzle.attr ? - Sizzle.attr( elem, name ) : - Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - !type && Sizzle.attr ? - result != null : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - - POS: function( elem, match, i, array ) { - var name = match[2], - filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} -// Expose origPOS -// "global" as in regardless of relation to brackets/parens -Expr.match.globalPOS = origPOS; + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + input.setAttribute( "checked", "checked" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } -var makeArray = function( array, results ) { - array = Array.prototype.slice.call( array, 0 ); + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; - if ( results ) { - results.push.apply( results, array ); - return results; - } + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } - return array; -}; + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // 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). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + 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"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + 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%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // NOTE: To any future maintainer, we've 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. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + container.style.zoom = 1; + } -// Provide a fallback method if it does not work -} catch( e ) { - makeArray = function( array, results ) { - var i = 0, - ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); -var sortOrder, siblingCheck; + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } + return support; +})(); +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } +jQuery.extend({ + cache: {}, - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; + deletedIds: [], -} else { - sortOrder = function( a, b ) { - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Fallback to using sourceIndex (in IE) if it's available on both nodes - } else if ( a.sourceIndex && b.sourceIndex ) { - return a.sourceIndex - b.sourceIndex; - } - - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; - - // If the nodes are siblings (or identical) we can do a quick check - if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} + // Remove at next major release (1.9/2.0) + uuid: 0, -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(), - root = document.documentElement; - - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - - return m ? - m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? - [m] : - undefined : - []; - } - }; - - Expr.filter.ID = function( elem, match ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - - // release memory in IE - root = form = null; -})(); + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function( match, context ) { - var results = context.getElementsByTagName( match[1] ); + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } + // 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, - results = tmp; - } + // 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, - return results; - }; - } + // 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; - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; + // 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)) && getByName && data === undefined ) { + return; + } - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } - Expr.attrHandle.href = function( elem ) { - return elem.getAttribute( "href", 2 ); - }; - } + if ( !cache[ id ] ) { + cache[ id ] = {}; - // release memory in IE - div = null; -})(); + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, - div = document.createElement("div"), - id = "__sizzle__"; - - div.innerHTML = "

"; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function( query, context, extra, seed ) { - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - // See if we find a selector to speed up - var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - - if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { - // Speed-up: Sizzle("TAG") - if ( match[1] ) { - return makeArray( context.getElementsByTagName( query ), extra ); - - // Speed-up: Sizzle(".CLASS") - } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { - return makeArray( context.getElementsByClassName( match[2] ), extra ); - } - } - - if ( context.nodeType === 9 ) { - // Speed-up: Sizzle("body") - // The body element only exists once, optimize finding it - if ( query === "body" && context.body ) { - return makeArray( [ context.body ], extra ); - - // Speed-up: Sizzle("#ID") - } else if ( match && match[3] ) { - var elem = context.getElementById( match[3] ); - - // 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[3] ) { - return makeArray( [ elem ], extra ); - } - - } else { - return makeArray( [], extra ); - } - } - - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // 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 - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var oldContext = context, - old = context.getAttribute( "id" ), - nid = old || id, - hasParent = context.parentNode, - relativeHierarchySelector = /^\s*[+~]/.test( query ); - - if ( !old ) { - context.setAttribute( "id", nid ); - } else { - nid = nid.replace( /'/g, "\\$&" ); - } - if ( relativeHierarchySelector && hasParent ) { - context = context.parentNode; - } - - try { - if ( !relativeHierarchySelector || hasParent ) { - return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); - } - - } catch(pseudoError) { - } finally { - if ( !old ) { - oldContext.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - // release memory in IE - div = null; - })(); -} + // 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 ); + } + } -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; - - if ( matches ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9 fails this) - var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, "[test!='']:sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - Sizzle.matchesSelector = function( node, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - if ( !Sizzle.isXML( node ) ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { - var ret = matches.call( node, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || !disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9, so check for that - node.document && node.document.nodeType !== 11 ) { - return ret; - } - } - } catch(e) {} - } - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); + thisCache = cache[ id ]; -(function(){ - var div = document.createElement("div"); + // 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 = {}; + } - div.innerHTML = "
"; + thisCache = thisCache.data; + } - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } + // First Try to find as-is property data + ret = thisCache[ name ]; - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function( match, context, isXML ) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; + // Test for null|undefined property data + if ( ret == null ) { - // release memory in IE - div = null; -})(); + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; + return ret; + }, - if ( elem ) { - var match = false; + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } - elem = elem[dir]; + var thisCache, i, l, - while ( elem ) { - if ( elem[ expando ] === doneName ) { - match = checkSet[elem.sizset]; - break; - } + isNode = elem.nodeType, - if ( elem.nodeType === 1 && !isXML ){ - elem[ expando ] = doneName; - elem.sizset = i; - } + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } - elem = elem[dir]; - } + if ( name ) { - checkSet[i] = match; - } - } -} + thisCache = pvt ? cache[ id ] : cache[ id ].data; -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem[ expando ] === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem[ expando ] = doneName; - elem.sizset = i; - } - - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} + if ( thisCache ) { -if ( document.documentElement.contains ) { - Sizzle.contains = function( a, b ) { - return a !== b && (a.contains ? a.contains(b) : true); - }; + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { -} else if ( document.documentElement.compareDocumentPosition ) { - Sizzle.contains = function( a, b ) { - return !!(a.compareDocumentPosition(b) & 16); - }; + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { -} else { - Sizzle.contains = function() { - return false; - }; -} + // 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(" "); + } + } + } -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 : 0).documentElement; + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } -var posProcess = function( selector, context, seed ) { - var match, - tmpSet = [], - later = "", - root = context.nodeType ? [context] : context; + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } - selector = Expr.relative[selector] ? selector + "*" : selector; + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet, seed ); - } + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; - return Sizzle.filter( later, tmpSet ); -}; + // When all else fails, null + } else { + cache[ id ] = null; + } + }, -// EXPOSE -// Override sizzle attribute retrieval -Sizzle.attr = jQuery.attr; -Sizzle.selectors.attrMap = {}; -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + 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 parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.globalPOS, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } -jQuery.fn.extend({ - find: function( selector ) { - var self = this, - i, l; - - if ( typeof selector !== "string" ) { - return jQuery( selector ).filter(function() { - for ( i = 0, l = self.length; i < l; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }); - } - - var ret = this.pushStack( "", "find", selector ), - length, n, r; - - for ( i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( n = length; n < ret.length; n++ ) { - for ( r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && ( - typeof selector === "string" ? - // If this is a positional selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - POS.test( selector ) ? - jQuery( selector, this.context ).index( this[0] ) >= 0 : - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - // Array (deprecated as of jQuery 1.7) - if ( jQuery.isArray( selectors ) ) { - var level = 1; - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( i = 0; i < selectors.length; i++ ) { - - if ( jQuery( cur ).is( selectors[ i ] ) ) { - ret.push({ selector: selectors[ i ], elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - - return ret; - } - - // String - var pos = POS.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique( ret ) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // 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.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( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} + return jQuery.access( this, function( value ) { -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 jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "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.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); - if ( !runtil.test( name ) ) { - selector = until; - } + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + parts[1] = value; + this.each(function() { + var self = jQuery( this ); - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, - return this.pushStack( ret, name, slice.call( arguments ).join(",") ); - }; + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } }); -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - 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; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); +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 ) { -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return ( elem === qualifier ) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; - }); -} + 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; + } + } -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; + return data; } -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+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /]", "i"), - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /\/(java|ecma)script/i, - rcleanScript = /^\s*", "" ], - legend: [ 1, "
", "
" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - col: [ 2, "", "
" ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }, - safeFragment = createSafeFragment( document ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and -
-
-
-
-
-
- - it('should auto compile', function() { - expect(element('div[compile]').text()).toBe('Hello Angular'); - input('html').enter('{{name}}!'); - expect(element('div[compile]').text()).toBe('Angular!'); - }); - -
+ // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope[, cloneAttachFn]} transclude function available to directives. - * @param {number} maxPriority only apply directives lower then given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope[, cloneAttachFn])} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as:
`cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * Calling the linking function returns the element of the template. It is either the original element - * passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - *
- *     var element = $compile('

{{total}}

')(scope); - *
- * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - *
- *     var templateHTML = angular.element('

{{total}}

'), - * scope = ....; - * - * var clonedElement = $compile(templateHTML)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clone` - *
- * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ + // 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 ); + } -/** - * @ngdoc service - * @name ng.$compileProvider - * @function - * - * @description - */ -$CompileProvider.$inject = ['$provide']; -function $CompileProvider($provide) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/, - MULTI_ROOT_TEMPLATE_ERROR = 'Template must have exactly one root element. was: ', - urlSanitizationWhitelist = /^\s*(https?|ftp|mailto|file):/; + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + responseContainer = overwritten = undefined; + }); - /** - * @ngdoc function - * @name ng.$compileProvider#directive - * @methodOf ng.$compileProvider - * @function - * - * @description - * Register a new directives with the compiler. - * - * @param {string} name Name of the directive in camel-case. (ie ngBind which will match as - * ng-bind). - * @param {function} directiveFactory An injectable directive factroy function. See {@link guide/directive} for more - * info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - if (isString(name)) { - assertArg(directiveFactory, 'directive'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); + // Delegate to script + return "script"; + } +}); +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; } - directive.priority = directive.priority || 0; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'A'; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; + } +}); +// 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; + } +}); - /** - * @ngdoc function - * @name ng.$compileProvider#urlSanitizationWhitelist - * @methodOf ng.$compileProvider - * @function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into an - * absolute url. Afterwards the url is matched against the `urlSanitizationWhitelist` regular - * expression. If a match is found the original url is written into the dom. Otherwise the - * absolute url is prefixed with `'unsafe:'` string and only then it is written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.urlSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - urlSanitizationWhitelist = regexp; - return this; - } - return urlSanitizationWhitelist; - }; +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + // This transport only deals with cross domain requests + if ( s.crossDomain ) { - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse', - '$controller', '$rootScope', '$document', - function($injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, - $controller, $rootScope, $document) { + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; - var Attributes = function(element, attr) { - this.$$element = element; - this.$attr = attr || {}; - }; + return { - Attributes.prototype = { - $normalize: directiveNormalize, + send: function( _, callback ) { + script = document.createElement( "script" ); - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - var booleanKey = getBooleanAttrName(this.$$element[0], key), - $$observers = this.$$observers, - normalizedVal; + script.async = "async"; - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } - this[key] = value; + script.src = s.url; - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { - // sanitize a[href] values - if (nodeName_(this.$$element[0]) === 'A' && key === 'href') { - urlSanitizationNode.setAttribute('href', value); + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; - // href property always returns normalized absolute url, so we can match against that - normalizedVal = urlSanitizationNode.href; - if (!normalizedVal.match(urlSanitizationWhitelist)) { - this[key] = value = 'unsafe:' + normalizedVal; - } - } + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + // Dereference the script + script = undefined; - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; } +}); +var xhrCallbacks, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; - // fire observers - $$observers && forEach($$observers[key], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} - /** - * Observe an interpolated attribute. - * The observer will never be called, if given attribute is not interpolated. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(*)} fn Function that will be called whenever the attribute value changes. - * @returns {function(*)} the `fn` Function passed in. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = {})), - listeners = ($$observers[key] || ($$observers[key] = [])); +// 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; - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) }); - return fn; - } - }; +})( jQuery.ajaxSettings.xhr() ); - var urlSanitizationNode = $document[0].createElement('a'), - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }; +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + 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( _ ) {} + + // 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, + statusText, + responseHeaders, + responses, + xml; + + // 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:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + 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 { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( e ) { + } + + // 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, 0 ); + } 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(0,1); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 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 ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; - return compile; +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); +} - //================================ +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} - function compile($compileNodes, transcludeFn, maxPriority) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in - forEach($compileNodes, function(node, index){ - if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = jqLite(node).wrap('').parent()[0]; +function Animation( elem, properties, options ) { + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + 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, easing ) { + 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; + + 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; + } } - }); - var compositeLinkFn = compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority); - return function publicLinkFn(scope, cloneConnectFn){ - assertArg(scope, 'scope'); - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - var $linkNode = cloneConnectFn - ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!! - : $compileNodes; - // Attach scope only to non-text nodes. - for(var i = 0, ii = $linkNode.length; i