angularjs-rails 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +2 -2
- data/lib/angularjs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-bootstrap-prettify.js +14 -4
- data/vendor/assets/javascripts/angular-bootstrap.js +1 -1
- data/vendor/assets/javascripts/angular-cookies.js +12 -1
- data/vendor/assets/javascripts/angular-loader.js +3 -3
- data/vendor/assets/javascripts/angular-mocks.js +99 -82
- data/vendor/assets/javascripts/angular-resource.js +1 -1
- data/vendor/assets/javascripts/angular-sanitize.js +24 -5
- data/vendor/assets/javascripts/angular-scenario.js +484 -173
- data/vendor/assets/javascripts/angular.js +484 -173
- data/vendor/assets/javascripts/i18n/angular-locale_af-na.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_af-za.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_af.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_am-et.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_am.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-001.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-ae.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-bh.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-dz.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-eg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-iq.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-jo.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-kw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-lb.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-ly.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-ma.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-om.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-qa.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-sa.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-sd.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-sy.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-tn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar-ye.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ar.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bg-bg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bn-bd.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bn-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_bn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ca-ad.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ca-es.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ca.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_chr.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_cs-cz.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_cs.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_cy.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_da-dk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_da.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-at.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-be.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-ch.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-de.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-li.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de-lu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_de.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el-cy.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el-gr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el-polyton.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_el.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-as.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-au.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-bb.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-be.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-bm.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-bw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-bz.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-ca.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt-us.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-dsrt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-fm.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-gb.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-gu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-gy.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-hk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-ie.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-iso.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-jm.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-mh.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-mp.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-mt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-mu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-na.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-nz.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-ph.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-pk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-pr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-pw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-sg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-tc.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-tt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-um.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-us.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-vg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-vi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-za.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-zw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en-zz.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_en.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-419.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-ar.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-bo.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-cl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-co.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-cr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-do.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-ea.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-ec.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-es.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-gq.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-gt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-hn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-ic.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-mx.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-ni.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-pa.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-pe.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-pr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-py.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-sv.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-us.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-uy.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es-ve.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_es.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_et-ee.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_et.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_eu-es.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_eu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fa-af.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fa-ir.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fa.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fi-fi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fil-ph.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fil.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-be.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-bf.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-bi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-bj.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-bl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ca.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-cd.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-cf.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-cg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ch.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ci.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-cm.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-dj.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-fr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ga.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-gf.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-gn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-gp.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-gq.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-km.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-lu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mc.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mf.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ml.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-mq.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-ne.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-re.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-rw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-sn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-td.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-tg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr-yt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_fr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gl-es.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gsw-ch.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gsw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gu-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_gu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_haw.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_he-il.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_he.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hi-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hr-hr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hu-hu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_hu.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_id-id.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_id.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_is-is.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_is.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_it-ch.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_it-it.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_it-sm.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_it.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_iw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ja-jp.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ja.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_kn-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_kn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ko-kr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ko.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ln-cd.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ln-cg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ln.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lt-lt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lv-lv.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_lv.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ml-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ml.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mo.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mr-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ms-bn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ms-my.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ms.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mt-mt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_mt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl-aw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl-be.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl-cw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl-nl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl-sx.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_nl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_no.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_or-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_or.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pl-pl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-ao.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-br.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-gw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-mz.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-pt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt-st.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_pt.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ro-md.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ro-ro.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ro.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ru-md.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ru-ru.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ru-ua.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ru.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sk-sk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sl-si.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sq-al.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sq.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-ba.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-me.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl-rs.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-cyrl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-ba.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-me.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-latn-rs.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-latn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr-rs.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sv-fi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sv-se.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sv.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sw-ke.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sw-tz.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_sw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ta-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ta-lk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ta.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_te-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_te.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_th-th.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_th.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tl-ph.js +4 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tl.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tr-tr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_tr.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_uk-ua.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_uk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ur-in.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ur-pk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_ur.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_vi-vn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_vi.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-cn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-cn.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-hk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-mo.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans-sg.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hans.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hant-hk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hant-mo.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hant-tw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hant.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-hk.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh-tw.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zh.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zu-za.js +98 -0
- data/vendor/assets/javascripts/i18n/angular-locale_zu.js +98 -0
- metadata +294 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license AngularJS v1.0.
|
|
2
|
+
* @license AngularJS v1.0.8
|
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -282,7 +282,7 @@ noop.$inject = [];
|
|
|
282
282
|
*
|
|
283
283
|
<pre>
|
|
284
284
|
function transformer(transformationFn, value) {
|
|
285
|
-
return (transformationFn || identity)(value);
|
|
285
|
+
return (transformationFn || angular.identity)(value);
|
|
286
286
|
};
|
|
287
287
|
</pre>
|
|
288
288
|
*/
|
|
@@ -409,6 +409,18 @@ function isArray(value) {
|
|
|
409
409
|
function isFunction(value){return typeof value == 'function';}
|
|
410
410
|
|
|
411
411
|
|
|
412
|
+
/**
|
|
413
|
+
* Determines if a value is a regular expression object.
|
|
414
|
+
*
|
|
415
|
+
* @private
|
|
416
|
+
* @param {*} value Reference to check.
|
|
417
|
+
* @returns {boolean} True if `value` is a `RegExp`.
|
|
418
|
+
*/
|
|
419
|
+
function isRegExp(value) {
|
|
420
|
+
return toString.apply(value) == '[object RegExp]';
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
|
|
412
424
|
/**
|
|
413
425
|
* Checks if `obj` is a window object.
|
|
414
426
|
*
|
|
@@ -436,9 +448,20 @@ function isBoolean(value) {
|
|
|
436
448
|
}
|
|
437
449
|
|
|
438
450
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
451
|
+
var trim = (function() {
|
|
452
|
+
// native trim is way faster: http://jsperf.com/angular-trim-test
|
|
453
|
+
// but IE doesn't have it... :-(
|
|
454
|
+
// TODO: we should move this into IE/ES5 polyfill
|
|
455
|
+
if (!String.prototype.trim) {
|
|
456
|
+
return function(value) {
|
|
457
|
+
return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value;
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
return function(value) {
|
|
461
|
+
return isString(value) ? value.trim() : value;
|
|
462
|
+
};
|
|
463
|
+
})();
|
|
464
|
+
|
|
442
465
|
|
|
443
466
|
/**
|
|
444
467
|
* @ngdoc function
|
|
@@ -581,6 +604,8 @@ function copy(source, destination){
|
|
|
581
604
|
destination = copy(source, []);
|
|
582
605
|
} else if (isDate(source)) {
|
|
583
606
|
destination = new Date(source.getTime());
|
|
607
|
+
} else if (isRegExp(source)) {
|
|
608
|
+
destination = new RegExp(source.source);
|
|
584
609
|
} else if (isObject(source)) {
|
|
585
610
|
destination = copy(source, {});
|
|
586
611
|
}
|
|
@@ -628,7 +653,7 @@ function shallowCopy(src, dst) {
|
|
|
628
653
|
* @function
|
|
629
654
|
*
|
|
630
655
|
* @description
|
|
631
|
-
* Determines if two objects or two values are equivalent. Supports value types, arrays and
|
|
656
|
+
* Determines if two objects or two values are equivalent. Supports value types, regular expressions, arrays and
|
|
632
657
|
* objects.
|
|
633
658
|
*
|
|
634
659
|
* Two objects or values are considered equivalent if at least one of the following is true:
|
|
@@ -636,6 +661,9 @@ function shallowCopy(src, dst) {
|
|
|
636
661
|
* * Both objects or values pass `===` comparison.
|
|
637
662
|
* * Both objects or values are of the same type and all of their properties pass `===` comparison.
|
|
638
663
|
* * Both values are NaN. (In JavasScript, NaN == NaN => false. But we consider two NaN as equal)
|
|
664
|
+
* * Both values represent the same regular expression (In JavasScript,
|
|
665
|
+
* /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
|
|
666
|
+
* representation matches).
|
|
639
667
|
*
|
|
640
668
|
* During a property comparision, properties of `function` type and properties with names
|
|
641
669
|
* that begin with `$` are ignored.
|
|
@@ -654,6 +682,7 @@ function equals(o1, o2) {
|
|
|
654
682
|
if (t1 == t2) {
|
|
655
683
|
if (t1 == 'object') {
|
|
656
684
|
if (isArray(o1)) {
|
|
685
|
+
if (!isArray(o2)) return false;
|
|
657
686
|
if ((length = o1.length) == o2.length) {
|
|
658
687
|
for(key=0; key<length; key++) {
|
|
659
688
|
if (!equals(o1[key], o2[key])) return false;
|
|
@@ -662,8 +691,10 @@ function equals(o1, o2) {
|
|
|
662
691
|
}
|
|
663
692
|
} else if (isDate(o1)) {
|
|
664
693
|
return isDate(o2) && o1.getTime() == o2.getTime();
|
|
694
|
+
} else if (isRegExp(o1) && isRegExp(o2)) {
|
|
695
|
+
return o1.toString() == o2.toString();
|
|
665
696
|
} else {
|
|
666
|
-
if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2)) return false;
|
|
697
|
+
if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
|
|
667
698
|
keySet = {};
|
|
668
699
|
for(key in o1) {
|
|
669
700
|
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
|
|
@@ -752,13 +783,15 @@ function toJsonReplacer(key, value) {
|
|
|
752
783
|
* @function
|
|
753
784
|
*
|
|
754
785
|
* @description
|
|
755
|
-
* Serializes input into a JSON-formatted string.
|
|
786
|
+
* Serializes input into a JSON-formatted string. Properties with leading $ characters will be
|
|
787
|
+
* stripped since angular uses this notation internally.
|
|
756
788
|
*
|
|
757
789
|
* @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
|
|
758
790
|
* @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
|
|
759
|
-
* @returns {string} Jsonified string representing `obj`.
|
|
791
|
+
* @returns {string|undefined} Jsonified string representing `obj`.
|
|
760
792
|
*/
|
|
761
793
|
function toJson(obj, pretty) {
|
|
794
|
+
if (typeof obj === 'undefined') return undefined;
|
|
762
795
|
return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null);
|
|
763
796
|
}
|
|
764
797
|
|
|
@@ -818,6 +851,23 @@ function startingTag(element) {
|
|
|
818
851
|
|
|
819
852
|
/////////////////////////////////////////////////
|
|
820
853
|
|
|
854
|
+
/**
|
|
855
|
+
* Tries to decode the URI component without throwing an exception.
|
|
856
|
+
*
|
|
857
|
+
* @private
|
|
858
|
+
* @param str value potential URI component to check.
|
|
859
|
+
* @returns {boolean} True if `value` can be decoded
|
|
860
|
+
* with the decodeURIComponent function.
|
|
861
|
+
*/
|
|
862
|
+
function tryDecodeURIComponent(value) {
|
|
863
|
+
try {
|
|
864
|
+
return decodeURIComponent(value);
|
|
865
|
+
} catch(e) {
|
|
866
|
+
// Ignore any invalid uri component
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
|
|
821
871
|
/**
|
|
822
872
|
* Parses an escaped url query string into key-value pairs.
|
|
823
873
|
* @returns Object.<(string|boolean)>
|
|
@@ -825,10 +875,12 @@ function startingTag(element) {
|
|
|
825
875
|
function parseKeyValue(/**string*/keyValue) {
|
|
826
876
|
var obj = {}, key_value, key;
|
|
827
877
|
forEach((keyValue || "").split('&'), function(keyValue){
|
|
828
|
-
if (keyValue) {
|
|
878
|
+
if ( keyValue ) {
|
|
829
879
|
key_value = keyValue.split('=');
|
|
830
|
-
key =
|
|
831
|
-
|
|
880
|
+
key = tryDecodeURIComponent(key_value[0]);
|
|
881
|
+
if ( isDefined(key) ) {
|
|
882
|
+
obj[key] = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
|
|
883
|
+
}
|
|
832
884
|
}
|
|
833
885
|
});
|
|
834
886
|
return obj;
|
|
@@ -894,10 +946,14 @@ function encodeUriQuery(val, pctEncodeSpaces) {
|
|
|
894
946
|
* @description
|
|
895
947
|
*
|
|
896
948
|
* Use this directive to auto-bootstrap an application. Only
|
|
897
|
-
* one directive can be used per HTML document. The directive
|
|
949
|
+
* one ngApp directive can be used per HTML document. The directive
|
|
898
950
|
* designates the root of the application and is typically placed
|
|
899
951
|
* at the root of the page.
|
|
900
952
|
*
|
|
953
|
+
* The first ngApp found in the document will be auto-bootstrapped. To use multiple applications in an
|
|
954
|
+
* HTML document you must manually bootstrap them using {@link angular.bootstrap}.
|
|
955
|
+
* Applications cannot be nested.
|
|
956
|
+
*
|
|
901
957
|
* In the example below if the `ngApp` directive would not be placed
|
|
902
958
|
* on the `html` element then the document would not be compiled
|
|
903
959
|
* and the `{{ 1+2 }}` would not be resolved to `3`.
|
|
@@ -963,12 +1019,15 @@ function angularInit(element, bootstrap) {
|
|
|
963
1019
|
*
|
|
964
1020
|
* See: {@link guide/bootstrap Bootstrap}
|
|
965
1021
|
*
|
|
1022
|
+
* Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually.
|
|
1023
|
+
* They must use {@link api/ng.directive:ngApp ngApp}.
|
|
1024
|
+
*
|
|
966
1025
|
* @param {Element} element DOM element which is the root of angular application.
|
|
967
1026
|
* @param {Array<String|Function>=} modules an array of module declarations. See: {@link angular.module modules}
|
|
968
1027
|
* @returns {AUTO.$injector} Returns the newly created injector for this app.
|
|
969
1028
|
*/
|
|
970
1029
|
function bootstrap(element, modules) {
|
|
971
|
-
var
|
|
1030
|
+
var doBootstrap = function() {
|
|
972
1031
|
element = jqLite(element);
|
|
973
1032
|
modules = modules || [];
|
|
974
1033
|
modules.unshift(['$provide', function($provide) {
|
|
@@ -990,7 +1049,7 @@ function bootstrap(element, modules) {
|
|
|
990
1049
|
var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
|
|
991
1050
|
|
|
992
1051
|
if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
|
|
993
|
-
return
|
|
1052
|
+
return doBootstrap();
|
|
994
1053
|
}
|
|
995
1054
|
|
|
996
1055
|
window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
|
|
@@ -998,7 +1057,7 @@ function bootstrap(element, modules) {
|
|
|
998
1057
|
forEach(extraModules, function(module) {
|
|
999
1058
|
modules.push(module);
|
|
1000
1059
|
});
|
|
1001
|
-
|
|
1060
|
+
doBootstrap();
|
|
1002
1061
|
};
|
|
1003
1062
|
}
|
|
1004
1063
|
|
|
@@ -1022,9 +1081,10 @@ function bindJQuery() {
|
|
|
1022
1081
|
injector: JQLitePrototype.injector,
|
|
1023
1082
|
inheritedData: JQLitePrototype.inheritedData
|
|
1024
1083
|
});
|
|
1025
|
-
JQLitePatchJQueryRemove(
|
|
1026
|
-
JQLitePatchJQueryRemove('
|
|
1027
|
-
JQLitePatchJQueryRemove('
|
|
1084
|
+
// Method signature: JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments)
|
|
1085
|
+
JQLitePatchJQueryRemove('remove', true, true, false);
|
|
1086
|
+
JQLitePatchJQueryRemove('empty', false, false, false);
|
|
1087
|
+
JQLitePatchJQueryRemove('html', false, false, true);
|
|
1028
1088
|
} else {
|
|
1029
1089
|
jqLite = JQLite;
|
|
1030
1090
|
}
|
|
@@ -1051,6 +1111,33 @@ function assertArgFn(arg, name, acceptArrayAnnotation) {
|
|
|
1051
1111
|
return arg;
|
|
1052
1112
|
}
|
|
1053
1113
|
|
|
1114
|
+
/**
|
|
1115
|
+
* Return the value accessible from the object by path. Any undefined traversals are ignored
|
|
1116
|
+
* @param {Object} obj starting object
|
|
1117
|
+
* @param {string} path path to traverse
|
|
1118
|
+
* @param {boolean=true} bindFnToScope
|
|
1119
|
+
* @returns value as accessible by path
|
|
1120
|
+
*/
|
|
1121
|
+
//TODO(misko): this function needs to be removed
|
|
1122
|
+
function getter(obj, path, bindFnToScope) {
|
|
1123
|
+
if (!path) return obj;
|
|
1124
|
+
var keys = path.split('.');
|
|
1125
|
+
var key;
|
|
1126
|
+
var lastInstance = obj;
|
|
1127
|
+
var len = keys.length;
|
|
1128
|
+
|
|
1129
|
+
for (var i = 0; i < len; i++) {
|
|
1130
|
+
key = keys[i];
|
|
1131
|
+
if (obj) {
|
|
1132
|
+
obj = (lastInstance = obj)[key];
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
if (!bindFnToScope && isFunction(obj)) {
|
|
1136
|
+
return bind(lastInstance, obj);
|
|
1137
|
+
}
|
|
1138
|
+
return obj;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1054
1141
|
/**
|
|
1055
1142
|
* @ngdoc interface
|
|
1056
1143
|
* @name angular.Module
|
|
@@ -1081,8 +1168,8 @@ function setupModuleLoader(window) {
|
|
|
1081
1168
|
*
|
|
1082
1169
|
* # Module
|
|
1083
1170
|
*
|
|
1084
|
-
* A module is a
|
|
1085
|
-
* is used to configure the {@link AUTO.$injector $injector}.
|
|
1171
|
+
* A module is a collection of services, directives, filters, and configuration information.
|
|
1172
|
+
* `angular.module` is used to configure the {@link AUTO.$injector $injector}.
|
|
1086
1173
|
*
|
|
1087
1174
|
* <pre>
|
|
1088
1175
|
* // Create a new module
|
|
@@ -1313,11 +1400,11 @@ function setupModuleLoader(window) {
|
|
|
1313
1400
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
|
1314
1401
|
*/
|
|
1315
1402
|
var version = {
|
|
1316
|
-
full: '1.0.
|
|
1403
|
+
full: '1.0.8', // all of these placeholder strings will be replaced by grunt's
|
|
1317
1404
|
major: 1, // package task
|
|
1318
1405
|
minor: 0,
|
|
1319
|
-
dot:
|
|
1320
|
-
codeName: '
|
|
1406
|
+
dot: 8,
|
|
1407
|
+
codeName: 'bubble-burst'
|
|
1321
1408
|
};
|
|
1322
1409
|
|
|
1323
1410
|
|
|
@@ -1386,7 +1473,6 @@ function publishExternalAPI(angular){
|
|
|
1386
1473
|
ngPluralize: ngPluralizeDirective,
|
|
1387
1474
|
ngRepeat: ngRepeatDirective,
|
|
1388
1475
|
ngShow: ngShowDirective,
|
|
1389
|
-
ngSubmit: ngSubmitDirective,
|
|
1390
1476
|
ngStyle: ngStyleDirective,
|
|
1391
1477
|
ngSwitch: ngSwitchDirective,
|
|
1392
1478
|
ngSwitchWhen: ngSwitchWhenDirective,
|
|
@@ -1456,7 +1542,8 @@ function publishExternalAPI(angular){
|
|
|
1456
1542
|
* Note: All element references in Angular are always wrapped with jQuery or jqLite; they are never
|
|
1457
1543
|
* raw DOM references.
|
|
1458
1544
|
*
|
|
1459
|
-
* ## Angular's
|
|
1545
|
+
* ## Angular's jqLite
|
|
1546
|
+
* Angular's lite version of jQuery provides only the following jQuery methods:
|
|
1460
1547
|
*
|
|
1461
1548
|
* - [addClass()](http://api.jquery.com/addClass/)
|
|
1462
1549
|
* - [after()](http://api.jquery.com/after/)
|
|
@@ -1489,8 +1576,14 @@ function publishExternalAPI(angular){
|
|
|
1489
1576
|
* - [val()](http://api.jquery.com/val/)
|
|
1490
1577
|
* - [wrap()](http://api.jquery.com/wrap/)
|
|
1491
1578
|
*
|
|
1492
|
-
* ##
|
|
1579
|
+
* ## jQuery/jqLite Extras
|
|
1580
|
+
* Angular also provides the following additional methods and events to both jQuery and jqLite:
|
|
1493
1581
|
*
|
|
1582
|
+
* ### Events
|
|
1583
|
+
* - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
|
|
1584
|
+
* on all DOM nodes being removed. This can be used to clean up and 3rd party bindings to the DOM
|
|
1585
|
+
* element before it is removed.
|
|
1586
|
+
* ### Methods
|
|
1494
1587
|
* - `controller(name)` - retrieves the controller of the current element or its parent. By default
|
|
1495
1588
|
* retrieves controller associated with the `ngController` directive. If `name` is provided as
|
|
1496
1589
|
* camelCase directive name, then the controller for this directive will be retrieved (e.g.
|
|
@@ -1537,37 +1630,38 @@ function camelCase(name) {
|
|
|
1537
1630
|
/////////////////////////////////////////////
|
|
1538
1631
|
// jQuery mutation patch
|
|
1539
1632
|
//
|
|
1540
|
-
//
|
|
1633
|
+
// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a
|
|
1541
1634
|
// $destroy event on all DOM nodes being removed.
|
|
1542
1635
|
//
|
|
1543
1636
|
/////////////////////////////////////////////
|
|
1544
1637
|
|
|
1545
|
-
function JQLitePatchJQueryRemove(name, dispatchThis) {
|
|
1638
|
+
function JQLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) {
|
|
1546
1639
|
var originalJqFn = jQuery.fn[name];
|
|
1547
1640
|
originalJqFn = originalJqFn.$original || originalJqFn;
|
|
1548
1641
|
removePatch.$original = originalJqFn;
|
|
1549
1642
|
jQuery.fn[name] = removePatch;
|
|
1550
1643
|
|
|
1551
|
-
function removePatch() {
|
|
1552
|
-
var list = [this],
|
|
1644
|
+
function removePatch(param) {
|
|
1645
|
+
var list = filterElems && param ? [this.filter(param)] : [this],
|
|
1553
1646
|
fireEvent = dispatchThis,
|
|
1554
1647
|
set, setIndex, setLength,
|
|
1555
|
-
element, childIndex, childLength, children
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1648
|
+
element, childIndex, childLength, children;
|
|
1649
|
+
|
|
1650
|
+
if (!getterIfNoArguments || param != null) {
|
|
1651
|
+
while(list.length) {
|
|
1652
|
+
set = list.shift();
|
|
1653
|
+
for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {
|
|
1654
|
+
element = jqLite(set[setIndex]);
|
|
1655
|
+
if (fireEvent) {
|
|
1656
|
+
element.triggerHandler('$destroy');
|
|
1657
|
+
} else {
|
|
1658
|
+
fireEvent = !fireEvent;
|
|
1659
|
+
}
|
|
1660
|
+
for(childIndex = 0, childLength = (children = element.children()).length;
|
|
1661
|
+
childIndex < childLength;
|
|
1662
|
+
childIndex++) {
|
|
1663
|
+
list.push(jQuery(children[childIndex]));
|
|
1664
|
+
}
|
|
1571
1665
|
}
|
|
1572
1666
|
}
|
|
1573
1667
|
}
|
|
@@ -1627,7 +1721,7 @@ function JQLiteUnbind(element, type, fn) {
|
|
|
1627
1721
|
removeEventListenerFn(element, type, events[type]);
|
|
1628
1722
|
delete events[type];
|
|
1629
1723
|
} else {
|
|
1630
|
-
arrayRemove(events[type], fn);
|
|
1724
|
+
arrayRemove(events[type] || [], fn);
|
|
1631
1725
|
}
|
|
1632
1726
|
}
|
|
1633
1727
|
}
|
|
@@ -1901,6 +1995,15 @@ forEach({
|
|
|
1901
1995
|
|
|
1902
1996
|
val: function(element, value) {
|
|
1903
1997
|
if (isUndefined(value)) {
|
|
1998
|
+
if (nodeName_(element) === 'SELECT' && element.multiple) {
|
|
1999
|
+
var result = [];
|
|
2000
|
+
forEach(element.options, function (option) {
|
|
2001
|
+
if (option.selected) {
|
|
2002
|
+
result.push(option.value || option.text);
|
|
2003
|
+
}
|
|
2004
|
+
});
|
|
2005
|
+
return result.length === 0 ? null : result;
|
|
2006
|
+
}
|
|
1904
2007
|
return element.value;
|
|
1905
2008
|
}
|
|
1906
2009
|
element.value = value;
|
|
@@ -2118,12 +2221,7 @@ forEach({
|
|
|
2118
2221
|
if (element.nodeType === 1) {
|
|
2119
2222
|
var index = element.firstChild;
|
|
2120
2223
|
forEach(new JQLite(node), function(child){
|
|
2121
|
-
|
|
2122
|
-
element.insertBefore(child, index);
|
|
2123
|
-
} else {
|
|
2124
|
-
element.appendChild(child);
|
|
2125
|
-
index = child;
|
|
2126
|
-
}
|
|
2224
|
+
element.insertBefore(child, index);
|
|
2127
2225
|
});
|
|
2128
2226
|
}
|
|
2129
2227
|
},
|
|
@@ -3116,7 +3214,8 @@ function Browser(window, document, $log, $sniffer) {
|
|
|
3116
3214
|
//////////////////////////////////////////////////////////////
|
|
3117
3215
|
|
|
3118
3216
|
var lastBrowserUrl = location.href,
|
|
3119
|
-
baseElement = document.find('base')
|
|
3217
|
+
baseElement = document.find('base'),
|
|
3218
|
+
replacedUrl = null;
|
|
3120
3219
|
|
|
3121
3220
|
/**
|
|
3122
3221
|
* @name ng.$browser#url
|
|
@@ -3151,14 +3250,21 @@ function Browser(window, document, $log, $sniffer) {
|
|
|
3151
3250
|
baseElement.attr('href', baseElement.attr('href'));
|
|
3152
3251
|
}
|
|
3153
3252
|
} else {
|
|
3154
|
-
if (replace)
|
|
3155
|
-
|
|
3253
|
+
if (replace) {
|
|
3254
|
+
location.replace(url);
|
|
3255
|
+
replacedUrl = url;
|
|
3256
|
+
} else {
|
|
3257
|
+
location.href = url;
|
|
3258
|
+
replacedUrl = null;
|
|
3259
|
+
}
|
|
3156
3260
|
}
|
|
3157
3261
|
return self;
|
|
3158
3262
|
// getter
|
|
3159
3263
|
} else {
|
|
3160
|
-
// the
|
|
3161
|
-
|
|
3264
|
+
// - the replacedUrl is a workaround for an IE8-9 issue with location.replace method that doesn't update
|
|
3265
|
+
// location.href synchronously
|
|
3266
|
+
// - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
|
|
3267
|
+
return replacedUrl || location.href.replace(/%27/g,"'");
|
|
3162
3268
|
}
|
|
3163
3269
|
};
|
|
3164
3270
|
|
|
@@ -3365,7 +3471,20 @@ function $BrowserProvider(){
|
|
|
3365
3471
|
* @name ng.$cacheFactory
|
|
3366
3472
|
*
|
|
3367
3473
|
* @description
|
|
3368
|
-
* Factory that constructs cache objects.
|
|
3474
|
+
* Factory that constructs cache objects and gives access to them.
|
|
3475
|
+
*
|
|
3476
|
+
* <pre>
|
|
3477
|
+
*
|
|
3478
|
+
* var cache = $cacheFactory('cacheId');
|
|
3479
|
+
* expect($cacheFactory.get('cacheId')).toBe(cache);
|
|
3480
|
+
* expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
|
|
3481
|
+
*
|
|
3482
|
+
* cache.put("key", "value");
|
|
3483
|
+
* cache.put("another key", "another value");
|
|
3484
|
+
*
|
|
3485
|
+
* expect(cache.info()).toEqual({id: 'cacheId', size: 2}); // Since we've specified no options on creation
|
|
3486
|
+
*
|
|
3487
|
+
* </pre>
|
|
3369
3488
|
*
|
|
3370
3489
|
*
|
|
3371
3490
|
* @param {string} cacheId Name or id of the newly created cache.
|
|
@@ -3497,6 +3616,16 @@ function $CacheFactoryProvider() {
|
|
|
3497
3616
|
}
|
|
3498
3617
|
|
|
3499
3618
|
|
|
3619
|
+
/**
|
|
3620
|
+
* @ngdoc method
|
|
3621
|
+
* @name ng.$cacheFactory#info
|
|
3622
|
+
* @methodOf ng.$cacheFactory
|
|
3623
|
+
*
|
|
3624
|
+
* @description
|
|
3625
|
+
* Get information about all the of the caches that have been created
|
|
3626
|
+
*
|
|
3627
|
+
* @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
|
|
3628
|
+
*/
|
|
3500
3629
|
cacheFactory.info = function() {
|
|
3501
3630
|
var info = {};
|
|
3502
3631
|
forEach(caches, function(cache, cacheId) {
|
|
@@ -3506,6 +3635,17 @@ function $CacheFactoryProvider() {
|
|
|
3506
3635
|
};
|
|
3507
3636
|
|
|
3508
3637
|
|
|
3638
|
+
/**
|
|
3639
|
+
* @ngdoc method
|
|
3640
|
+
* @name ng.$cacheFactory#get
|
|
3641
|
+
* @methodOf ng.$cacheFactory
|
|
3642
|
+
*
|
|
3643
|
+
* @description
|
|
3644
|
+
* Get access to a cache object by the `cacheId` used when it was created.
|
|
3645
|
+
*
|
|
3646
|
+
* @param {string} cacheId Name or id of a cache to access.
|
|
3647
|
+
* @returns {object} Cache object identified by the cacheId or undefined if no such cache.
|
|
3648
|
+
*/
|
|
3509
3649
|
cacheFactory.get = function(cacheId) {
|
|
3510
3650
|
return caches[cacheId];
|
|
3511
3651
|
};
|
|
@@ -3520,8 +3660,44 @@ function $CacheFactoryProvider() {
|
|
|
3520
3660
|
* @name ng.$templateCache
|
|
3521
3661
|
*
|
|
3522
3662
|
* @description
|
|
3523
|
-
*
|
|
3524
|
-
*
|
|
3663
|
+
* The first time a template is used, it is loaded in the template cache for quick retrieval. You can
|
|
3664
|
+
* load templates directly into the cache in a `script` tag, or by consuming the `$templateCache`
|
|
3665
|
+
* service directly.
|
|
3666
|
+
*
|
|
3667
|
+
* Adding via the `script` tag:
|
|
3668
|
+
* <pre>
|
|
3669
|
+
* <html ng-app>
|
|
3670
|
+
* <head>
|
|
3671
|
+
* <script type="text/ng-template" id="templateId.html">
|
|
3672
|
+
* This is the content of the template
|
|
3673
|
+
* </script>
|
|
3674
|
+
* </head>
|
|
3675
|
+
* ...
|
|
3676
|
+
* </html>
|
|
3677
|
+
* </pre>
|
|
3678
|
+
*
|
|
3679
|
+
* **Note:** the `script` tag containing the template does not need to be included in the `head` of the document, but
|
|
3680
|
+
* it must be below the `ng-app` definition.
|
|
3681
|
+
*
|
|
3682
|
+
* Adding via the $templateCache service:
|
|
3683
|
+
*
|
|
3684
|
+
* <pre>
|
|
3685
|
+
* var myApp = angular.module('myApp', []);
|
|
3686
|
+
* myApp.run(function($templateCache) {
|
|
3687
|
+
* $templateCache.put('templateId.html', 'This is the content of the template');
|
|
3688
|
+
* });
|
|
3689
|
+
* </pre>
|
|
3690
|
+
*
|
|
3691
|
+
* To retrieve the template later, simply use it in your HTML:
|
|
3692
|
+
* <pre>
|
|
3693
|
+
* <div ng-include=" 'templateId.html' "></div>
|
|
3694
|
+
* </pre>
|
|
3695
|
+
*
|
|
3696
|
+
* or get it via Javascript:
|
|
3697
|
+
* <pre>
|
|
3698
|
+
* $templateCache.get('templateId.html')
|
|
3699
|
+
* </pre>
|
|
3700
|
+
*
|
|
3525
3701
|
* See {@link ng.$cacheFactory $cacheFactory}.
|
|
3526
3702
|
*
|
|
3527
3703
|
*/
|
|
@@ -3697,11 +3873,11 @@ function $CompileProvider($provide) {
|
|
|
3697
3873
|
* @function
|
|
3698
3874
|
*
|
|
3699
3875
|
* @description
|
|
3700
|
-
* Register a new
|
|
3876
|
+
* Register a new directive with the compiler.
|
|
3701
3877
|
*
|
|
3702
3878
|
* @param {string} name Name of the directive in camel-case. (ie <code>ngBind</code> which will match as
|
|
3703
3879
|
* <code>ng-bind</code>).
|
|
3704
|
-
* @param {function} directiveFactory An injectable directive
|
|
3880
|
+
* @param {function|Array} directiveFactory An injectable directive factory function. See {@link guide/directive} for more
|
|
3705
3881
|
* info.
|
|
3706
3882
|
* @returns {ng.$compileProvider} Self for chaining.
|
|
3707
3883
|
*/
|
|
@@ -3824,7 +4000,7 @@ function $CompileProvider($provide) {
|
|
|
3824
4000
|
|
|
3825
4001
|
// href property always returns normalized absolute url, so we can match against that
|
|
3826
4002
|
normalizedVal = urlSanitizationNode.href;
|
|
3827
|
-
if (!normalizedVal.match(urlSanitizationWhitelist)) {
|
|
4003
|
+
if (normalizedVal !== '' && !normalizedVal.match(urlSanitizationWhitelist)) {
|
|
3828
4004
|
this[key] = value = 'unsafe:' + normalizedVal;
|
|
3829
4005
|
}
|
|
3830
4006
|
}
|
|
@@ -4048,7 +4224,7 @@ function $CompileProvider($provide) {
|
|
|
4048
4224
|
for (var attr, name, nName, value, nAttrs = node.attributes,
|
|
4049
4225
|
j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
|
|
4050
4226
|
attr = nAttrs[j];
|
|
4051
|
-
if (attr.specified) {
|
|
4227
|
+
if (!msie || msie >= 8 || attr.specified) {
|
|
4052
4228
|
name = attr.name;
|
|
4053
4229
|
nName = directiveNormalize(name.toLowerCase());
|
|
4054
4230
|
attrsMap[nName] = name;
|
|
@@ -6427,33 +6603,6 @@ function setter(obj, path, setValue) {
|
|
|
6427
6603
|
return setValue;
|
|
6428
6604
|
}
|
|
6429
6605
|
|
|
6430
|
-
/**
|
|
6431
|
-
* Return the value accesible from the object by path. Any undefined traversals are ignored
|
|
6432
|
-
* @param {Object} obj starting object
|
|
6433
|
-
* @param {string} path path to traverse
|
|
6434
|
-
* @param {boolean=true} bindFnToScope
|
|
6435
|
-
* @returns value as accesbile by path
|
|
6436
|
-
*/
|
|
6437
|
-
//TODO(misko): this function needs to be removed
|
|
6438
|
-
function getter(obj, path, bindFnToScope) {
|
|
6439
|
-
if (!path) return obj;
|
|
6440
|
-
var keys = path.split('.');
|
|
6441
|
-
var key;
|
|
6442
|
-
var lastInstance = obj;
|
|
6443
|
-
var len = keys.length;
|
|
6444
|
-
|
|
6445
|
-
for (var i = 0; i < len; i++) {
|
|
6446
|
-
key = keys[i];
|
|
6447
|
-
if (obj) {
|
|
6448
|
-
obj = (lastInstance = obj)[key];
|
|
6449
|
-
}
|
|
6450
|
-
}
|
|
6451
|
-
if (!bindFnToScope && isFunction(obj)) {
|
|
6452
|
-
return bind(lastInstance, obj);
|
|
6453
|
-
}
|
|
6454
|
-
return obj;
|
|
6455
|
-
}
|
|
6456
|
-
|
|
6457
6606
|
var getterFnCache = {};
|
|
6458
6607
|
|
|
6459
6608
|
/**
|
|
@@ -6715,8 +6864,8 @@ function $ParseProvider() {
|
|
|
6715
6864
|
* **Methods**
|
|
6716
6865
|
*
|
|
6717
6866
|
* - `then(successCallback, errorCallback)` – regardless of when the promise was or will be resolved
|
|
6718
|
-
* or rejected calls one of the success or error callbacks asynchronously as soon as the result
|
|
6719
|
-
* is available. The callbacks are called with a single argument the result or rejection reason.
|
|
6867
|
+
* or rejected, `then` calls one of the success or error callbacks asynchronously as soon as the result
|
|
6868
|
+
* is available. The callbacks are called with a single argument: the result or rejection reason.
|
|
6720
6869
|
*
|
|
6721
6870
|
* This method *returns a new promise* which is resolved or rejected via the return value of the
|
|
6722
6871
|
* `successCallback` or `errorCallback`.
|
|
@@ -6724,7 +6873,7 @@ function $ParseProvider() {
|
|
|
6724
6873
|
*
|
|
6725
6874
|
* # Chaining promises
|
|
6726
6875
|
*
|
|
6727
|
-
* Because calling `then`
|
|
6876
|
+
* Because calling the `then` method of a promise returns a new derived promise, it is easily possible
|
|
6728
6877
|
* to create a chain of promises:
|
|
6729
6878
|
*
|
|
6730
6879
|
* <pre>
|
|
@@ -6732,13 +6881,13 @@ function $ParseProvider() {
|
|
|
6732
6881
|
* return result + 1;
|
|
6733
6882
|
* });
|
|
6734
6883
|
*
|
|
6735
|
-
* // promiseB will be resolved immediately after promiseA is resolved and its value
|
|
6736
|
-
* // the result of promiseA incremented by 1
|
|
6884
|
+
* // promiseB will be resolved immediately after promiseA is resolved and its value
|
|
6885
|
+
* // will be the result of promiseA incremented by 1
|
|
6737
6886
|
* </pre>
|
|
6738
6887
|
*
|
|
6739
6888
|
* It is possible to create chains of any length and since a promise can be resolved with another
|
|
6740
6889
|
* promise (which will defer its resolution further), it is possible to pause/defer resolution of
|
|
6741
|
-
* the promises at any point in the chain. This makes it possible to implement powerful
|
|
6890
|
+
* the promises at any point in the chain. This makes it possible to implement powerful APIs like
|
|
6742
6891
|
* $http's response interceptors.
|
|
6743
6892
|
*
|
|
6744
6893
|
*
|
|
@@ -6845,8 +6994,8 @@ function qFactory(nextTick, exceptionHandler) {
|
|
|
6845
6994
|
try {
|
|
6846
6995
|
result.resolve((callback || defaultCallback)(value));
|
|
6847
6996
|
} catch(e) {
|
|
6848
|
-
exceptionHandler(e);
|
|
6849
6997
|
result.reject(e);
|
|
6998
|
+
exceptionHandler(e);
|
|
6850
6999
|
}
|
|
6851
7000
|
};
|
|
6852
7001
|
|
|
@@ -6854,8 +7003,8 @@ function qFactory(nextTick, exceptionHandler) {
|
|
|
6854
7003
|
try {
|
|
6855
7004
|
result.resolve((errback || defaultErrback)(reason));
|
|
6856
7005
|
} catch(e) {
|
|
6857
|
-
exceptionHandler(e);
|
|
6858
7006
|
result.reject(e);
|
|
7007
|
+
exceptionHandler(e);
|
|
6859
7008
|
}
|
|
6860
7009
|
};
|
|
6861
7010
|
|
|
@@ -7064,8 +7213,8 @@ function $RouteProvider(){
|
|
|
7064
7213
|
* route definition.
|
|
7065
7214
|
*
|
|
7066
7215
|
* `path` can contain named groups starting with a colon (`:name`). All characters up to the
|
|
7067
|
-
* next slash are matched and stored in `$routeParams` under the given `name`
|
|
7068
|
-
*
|
|
7216
|
+
* next slash are matched and stored in `$routeParams` under the given `name` after the route
|
|
7217
|
+
* is resolved.
|
|
7069
7218
|
*
|
|
7070
7219
|
* @param {Object} route Mapping information to be assigned to `$route.current` on route
|
|
7071
7220
|
* match.
|
|
@@ -7090,7 +7239,9 @@ function $RouteProvider(){
|
|
|
7090
7239
|
* - `factory` - `{string|function}`: If `string` then it is an alias for a service.
|
|
7091
7240
|
* Otherwise if function, then it is {@link api/AUTO.$injector#invoke injected}
|
|
7092
7241
|
* and the return value is treated as the dependency. If the result is a promise, it is resolved
|
|
7093
|
-
* before its value is injected into the controller.
|
|
7242
|
+
* before its value is injected into the controller. Be aware that `ngRoute.$routeParams` will
|
|
7243
|
+
* still refer to the previous route within these resolve functions. Use `$route.current.params`
|
|
7244
|
+
* to access the new route parameters, instead.
|
|
7094
7245
|
*
|
|
7095
7246
|
* - `redirectTo` – {(string|function())=} – value to update
|
|
7096
7247
|
* {@link ng.$location $location} path with and trigger route redirection.
|
|
@@ -7525,6 +7676,10 @@ function $RouteProvider(){
|
|
|
7525
7676
|
* The service guarantees that the identity of the `$routeParams` object will remain unchanged
|
|
7526
7677
|
* (but its properties will likely change) even when a route change occurs.
|
|
7527
7678
|
*
|
|
7679
|
+
* Note that the `$routeParams` are only updated *after* a route change completes successfully.
|
|
7680
|
+
* This means that you cannot rely on `$routeParams` being correct in route resolve functions.
|
|
7681
|
+
* Instead you can use `$route.current.params` to access the new route's parameters.
|
|
7682
|
+
*
|
|
7528
7683
|
* @example
|
|
7529
7684
|
* <pre>
|
|
7530
7685
|
* // Given:
|
|
@@ -7932,7 +8087,7 @@ function $RootScopeProvider(){
|
|
|
7932
8087
|
watch = watchers[length];
|
|
7933
8088
|
// Most common watches are on primitives, in which case we can short
|
|
7934
8089
|
// circuit it with === operator, only when === fails do we use .equals
|
|
7935
|
-
if ((value = watch.get(current)) !== (last = watch.last) &&
|
|
8090
|
+
if (watch && (value = watch.get(current)) !== (last = watch.last) &&
|
|
7936
8091
|
!(watch.eq
|
|
7937
8092
|
? equals(value, last)
|
|
7938
8093
|
: (typeof value == 'number' && typeof last == 'number'
|
|
@@ -7985,6 +8140,9 @@ function $RootScopeProvider(){
|
|
|
7985
8140
|
*
|
|
7986
8141
|
* @description
|
|
7987
8142
|
* Broadcasted when a scope and its children are being destroyed.
|
|
8143
|
+
*
|
|
8144
|
+
* Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
|
|
8145
|
+
* clean up DOM bindings before an element is removed from the DOM.
|
|
7988
8146
|
*/
|
|
7989
8147
|
|
|
7990
8148
|
/**
|
|
@@ -8006,6 +8164,9 @@ function $RootScopeProvider(){
|
|
|
8006
8164
|
* Just before a scope is destroyed a `$destroy` event is broadcasted on this scope.
|
|
8007
8165
|
* Application code can register a `$destroy` event handler that will give it chance to
|
|
8008
8166
|
* perform any necessary cleanup.
|
|
8167
|
+
*
|
|
8168
|
+
* Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
|
|
8169
|
+
* clean up DOM bindings before an element is removed from the DOM.
|
|
8009
8170
|
*/
|
|
8010
8171
|
$destroy: function() {
|
|
8011
8172
|
// we can't destroy the root scope or a scope that has been already destroyed
|
|
@@ -8410,8 +8571,10 @@ function $SnifferProvider() {
|
|
|
8410
8571
|
* it is a global variable. In angular we always refer to it through the
|
|
8411
8572
|
* `$window` service, so it may be overriden, removed or mocked for testing.
|
|
8412
8573
|
*
|
|
8413
|
-
*
|
|
8414
|
-
*
|
|
8574
|
+
* Expressions, like the one defined for the `ngClick` directive in the example
|
|
8575
|
+
* below, are evaluated with respect to the current scope. Therefore, there is
|
|
8576
|
+
* no risk of inadvertently coding in a dependency on a global value in such an
|
|
8577
|
+
* expression.
|
|
8415
8578
|
*
|
|
8416
8579
|
* @example
|
|
8417
8580
|
<doc:example>
|
|
@@ -8731,6 +8894,7 @@ function $HttpProvider() {
|
|
|
8731
8894
|
* return function(promise) {
|
|
8732
8895
|
* return promise.then(function(response) {
|
|
8733
8896
|
* // do something on success
|
|
8897
|
+
* return response;
|
|
8734
8898
|
* }, function(response) {
|
|
8735
8899
|
* // do something on error
|
|
8736
8900
|
* if (canRecover(response)) {
|
|
@@ -8922,17 +9086,40 @@ function $HttpProvider() {
|
|
|
8922
9086
|
|
|
8923
9087
|
var reqTransformFn = config.transformRequest || $config.transformRequest,
|
|
8924
9088
|
respTransformFn = config.transformResponse || $config.transformResponse,
|
|
8925
|
-
|
|
8926
|
-
|
|
8927
|
-
|
|
8928
|
-
|
|
9089
|
+
reqHeaders = extend({}, config.headers),
|
|
9090
|
+
defHeaders = extend(
|
|
9091
|
+
{'X-XSRF-TOKEN': $browser.cookies()['XSRF-TOKEN']},
|
|
9092
|
+
$config.headers.common,
|
|
9093
|
+
$config.headers[lowercase(config.method)]
|
|
9094
|
+
),
|
|
9095
|
+
reqData,
|
|
9096
|
+
defHeaderName, lowercaseDefHeaderName, headerName,
|
|
8929
9097
|
promise;
|
|
8930
9098
|
|
|
9099
|
+
// using for-in instead of forEach to avoid unecessary iteration after header has been found
|
|
9100
|
+
defaultHeadersIteration:
|
|
9101
|
+
for(defHeaderName in defHeaders) {
|
|
9102
|
+
lowercaseDefHeaderName = lowercase(defHeaderName);
|
|
9103
|
+
for(headerName in config.headers) {
|
|
9104
|
+
if (lowercase(headerName) === lowercaseDefHeaderName) {
|
|
9105
|
+
continue defaultHeadersIteration;
|
|
9106
|
+
}
|
|
9107
|
+
}
|
|
9108
|
+
reqHeaders[defHeaderName] = defHeaders[defHeaderName];
|
|
9109
|
+
}
|
|
9110
|
+
|
|
8931
9111
|
// strip content-type if data is undefined
|
|
8932
9112
|
if (isUndefined(config.data)) {
|
|
8933
|
-
|
|
9113
|
+
for(var header in reqHeaders) {
|
|
9114
|
+
if (lowercase(header) === 'content-type') {
|
|
9115
|
+
delete reqHeaders[header];
|
|
9116
|
+
break;
|
|
9117
|
+
}
|
|
9118
|
+
}
|
|
8934
9119
|
}
|
|
8935
9120
|
|
|
9121
|
+
reqData = transformData(config.data, headersGetter(reqHeaders), reqTransformFn);
|
|
9122
|
+
|
|
8936
9123
|
// send request
|
|
8937
9124
|
promise = sendReq(config, reqData, reqHeaders);
|
|
8938
9125
|
|
|
@@ -9475,17 +9662,15 @@ function $TimeoutProvider() {
|
|
|
9475
9662
|
deferred.reject(e);
|
|
9476
9663
|
$exceptionHandler(e);
|
|
9477
9664
|
}
|
|
9665
|
+
finally {
|
|
9666
|
+
delete deferreds[promise.$$timeoutId];
|
|
9667
|
+
}
|
|
9478
9668
|
|
|
9479
9669
|
if (!skipApply) $rootScope.$apply();
|
|
9480
9670
|
}, delay);
|
|
9481
9671
|
|
|
9482
|
-
cleanup = function() {
|
|
9483
|
-
delete deferreds[promise.$$timeoutId];
|
|
9484
|
-
};
|
|
9485
|
-
|
|
9486
9672
|
promise.$$timeoutId = timeoutId;
|
|
9487
9673
|
deferreds[timeoutId] = deferred;
|
|
9488
|
-
promise.then(cleanup, cleanup);
|
|
9489
9674
|
|
|
9490
9675
|
return promise;
|
|
9491
9676
|
}
|
|
@@ -9507,6 +9692,7 @@ function $TimeoutProvider() {
|
|
|
9507
9692
|
timeout.cancel = function(promise) {
|
|
9508
9693
|
if (promise && promise.$$timeoutId in deferreds) {
|
|
9509
9694
|
deferreds[promise.$$timeoutId].reject('canceled');
|
|
9695
|
+
delete deferreds[promise.$$timeoutId];
|
|
9510
9696
|
return $browser.defer.cancel(promise.$$timeoutId);
|
|
9511
9697
|
}
|
|
9512
9698
|
return false;
|
|
@@ -9843,7 +10029,9 @@ function currencyFilter($locale) {
|
|
|
9843
10029
|
* If the input is not a number an empty string is returned.
|
|
9844
10030
|
*
|
|
9845
10031
|
* @param {number|string} number Number to format.
|
|
9846
|
-
* @param {(number|string)=}
|
|
10032
|
+
* @param {(number|string)=} fractionSize Number of decimal places to round the number to.
|
|
10033
|
+
* If this is not provided then the fraction size is computed from the current locale's number
|
|
10034
|
+
* formatting pattern. In the case of the default locale, it will be 3.
|
|
9847
10035
|
* @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
|
|
9848
10036
|
*
|
|
9849
10037
|
* @example
|
|
@@ -9950,6 +10138,11 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
|
|
|
9950
10138
|
}
|
|
9951
10139
|
|
|
9952
10140
|
if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
|
|
10141
|
+
} else {
|
|
10142
|
+
|
|
10143
|
+
if (fractionSize > 0 && number > -1 && number < 1) {
|
|
10144
|
+
formatedText = number.toFixed(fractionSize);
|
|
10145
|
+
}
|
|
9953
10146
|
}
|
|
9954
10147
|
|
|
9955
10148
|
parts.push(isNegative ? pattern.negPre : pattern.posPre);
|
|
@@ -10073,7 +10266,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
|
|
|
10073
10266
|
* * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm)
|
|
10074
10267
|
* * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale
|
|
10075
10268
|
* (e.g. Friday, September 3, 2010)
|
|
10076
|
-
* * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010
|
|
10269
|
+
* * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)
|
|
10077
10270
|
* * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)
|
|
10078
10271
|
* * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
|
|
10079
10272
|
* * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)
|
|
@@ -10081,7 +10274,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
|
|
|
10081
10274
|
*
|
|
10082
10275
|
* `format` string can contain literal values. These need to be quoted with single quotes (e.g.
|
|
10083
10276
|
* `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence
|
|
10084
|
-
* (e.g. `"h o''clock"`).
|
|
10277
|
+
* (e.g. `"h 'o''clock'"`).
|
|
10085
10278
|
*
|
|
10086
10279
|
* @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
|
|
10087
10280
|
* number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its
|
|
@@ -10448,8 +10641,10 @@ function orderByFilter($parse){
|
|
|
10448
10641
|
var t1 = typeof v1;
|
|
10449
10642
|
var t2 = typeof v2;
|
|
10450
10643
|
if (t1 == t2) {
|
|
10451
|
-
if (t1 == "string")
|
|
10452
|
-
|
|
10644
|
+
if (t1 == "string") {
|
|
10645
|
+
v1 = v1.toLowerCase();
|
|
10646
|
+
v2 = v2.toLowerCase();
|
|
10647
|
+
}
|
|
10453
10648
|
if (v1 === v2) return 0;
|
|
10454
10649
|
return v1 < v2 ? -1 : 1;
|
|
10455
10650
|
} else {
|
|
@@ -10869,7 +11064,7 @@ function FormController(element, attrs) {
|
|
|
10869
11064
|
errors = form.$error = {};
|
|
10870
11065
|
|
|
10871
11066
|
// init state
|
|
10872
|
-
form.$name = attrs.name;
|
|
11067
|
+
form.$name = attrs.name || attrs.ngForm;
|
|
10873
11068
|
form.$dirty = false;
|
|
10874
11069
|
form.$pristine = true;
|
|
10875
11070
|
form.$valid = true;
|
|
@@ -10889,12 +11084,32 @@ function FormController(element, attrs) {
|
|
|
10889
11084
|
addClass((isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);
|
|
10890
11085
|
}
|
|
10891
11086
|
|
|
11087
|
+
/**
|
|
11088
|
+
* @ngdoc function
|
|
11089
|
+
* @name ng.directive:form.FormController#$addControl
|
|
11090
|
+
* @methodOf ng.directive:form.FormController
|
|
11091
|
+
*
|
|
11092
|
+
* @description
|
|
11093
|
+
* Register a control with the form.
|
|
11094
|
+
*
|
|
11095
|
+
* Input elements using ngModelController do this automatically when they are linked.
|
|
11096
|
+
*/
|
|
10892
11097
|
form.$addControl = function(control) {
|
|
10893
11098
|
if (control.$name && !form.hasOwnProperty(control.$name)) {
|
|
10894
11099
|
form[control.$name] = control;
|
|
10895
11100
|
}
|
|
10896
11101
|
};
|
|
10897
11102
|
|
|
11103
|
+
/**
|
|
11104
|
+
* @ngdoc function
|
|
11105
|
+
* @name ng.directive:form.FormController#$removeControl
|
|
11106
|
+
* @methodOf ng.directive:form.FormController
|
|
11107
|
+
*
|
|
11108
|
+
* @description
|
|
11109
|
+
* Deregister a control from the form.
|
|
11110
|
+
*
|
|
11111
|
+
* Input elements using ngModelController do this automatically when they are destroyed.
|
|
11112
|
+
*/
|
|
10898
11113
|
form.$removeControl = function(control) {
|
|
10899
11114
|
if (control.$name && form[control.$name] === control) {
|
|
10900
11115
|
delete form[control.$name];
|
|
@@ -10904,6 +11119,16 @@ function FormController(element, attrs) {
|
|
|
10904
11119
|
});
|
|
10905
11120
|
};
|
|
10906
11121
|
|
|
11122
|
+
/**
|
|
11123
|
+
* @ngdoc function
|
|
11124
|
+
* @name ng.directive:form.FormController#$setValidity
|
|
11125
|
+
* @methodOf ng.directive:form.FormController
|
|
11126
|
+
*
|
|
11127
|
+
* @description
|
|
11128
|
+
* Sets the validity of a form control.
|
|
11129
|
+
*
|
|
11130
|
+
* This method will also propagate to parent forms.
|
|
11131
|
+
*/
|
|
10907
11132
|
form.$setValidity = function(validationToken, isValid, control) {
|
|
10908
11133
|
var queue = errors[validationToken];
|
|
10909
11134
|
|
|
@@ -10942,6 +11167,17 @@ function FormController(element, attrs) {
|
|
|
10942
11167
|
}
|
|
10943
11168
|
};
|
|
10944
11169
|
|
|
11170
|
+
/**
|
|
11171
|
+
* @ngdoc function
|
|
11172
|
+
* @name ng.directive:form.FormController#$setDirty
|
|
11173
|
+
* @methodOf ng.directive:form.FormController
|
|
11174
|
+
*
|
|
11175
|
+
* @description
|
|
11176
|
+
* Sets the form to a dirty state.
|
|
11177
|
+
*
|
|
11178
|
+
* This method can be called to add the 'ng-dirty' class and set the form to a dirty
|
|
11179
|
+
* state (ng-dirty class). This method will also propagate to parent forms.
|
|
11180
|
+
*/
|
|
10945
11181
|
form.$setDirty = function() {
|
|
10946
11182
|
element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS);
|
|
10947
11183
|
form.$dirty = true;
|
|
@@ -11118,7 +11354,7 @@ var formDirective = formDirectiveFactory();
|
|
|
11118
11354
|
var ngFormDirective = formDirectiveFactory(true);
|
|
11119
11355
|
|
|
11120
11356
|
var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
|
|
11121
|
-
var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,
|
|
11357
|
+
var EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/;
|
|
11122
11358
|
var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
|
|
11123
11359
|
|
|
11124
11360
|
var inputType = {
|
|
@@ -11229,9 +11465,9 @@ var inputType = {
|
|
|
11229
11465
|
<form name="myForm" ng-controller="Ctrl">
|
|
11230
11466
|
Number: <input type="number" name="input" ng-model="value"
|
|
11231
11467
|
min="0" max="99" required>
|
|
11232
|
-
<span class="error" ng-show="myForm.
|
|
11468
|
+
<span class="error" ng-show="myForm.input.$error.required">
|
|
11233
11469
|
Required!</span>
|
|
11234
|
-
<span class="error" ng-show="myForm.
|
|
11470
|
+
<span class="error" ng-show="myForm.input.$error.number">
|
|
11235
11471
|
Not valid number!</span>
|
|
11236
11472
|
<tt>value = {{value}}</tt><br/>
|
|
11237
11473
|
<tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
|
|
@@ -11352,6 +11588,8 @@ var inputType = {
|
|
|
11352
11588
|
* @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
|
|
11353
11589
|
* RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
|
|
11354
11590
|
* patterns defined as scope expressions.
|
|
11591
|
+
* @param {string=} ngChange Angular expression to be executed when input changes due to user
|
|
11592
|
+
* interaction with the input element.
|
|
11355
11593
|
*
|
|
11356
11594
|
* @example
|
|
11357
11595
|
<doc:example>
|
|
@@ -11910,12 +12148,25 @@ var VALID_CLASS = 'ng-valid',
|
|
|
11910
12148
|
*
|
|
11911
12149
|
* @property {string} $viewValue Actual string value in the view.
|
|
11912
12150
|
* @property {*} $modelValue The value in the model, that the control is bound to.
|
|
11913
|
-
* @property {Array.<Function>} $parsers
|
|
11914
|
-
|
|
11915
|
-
|
|
11916
|
-
|
|
11917
|
-
|
|
11918
|
-
|
|
12151
|
+
* @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
|
|
12152
|
+
the control reads value from the DOM. Each function is called, in turn, passing the value
|
|
12153
|
+
through to the next. Used to sanitize / convert the value as well as validation.
|
|
12154
|
+
|
|
12155
|
+
For validation, the parsers should update the validity state using
|
|
12156
|
+
{@link ng.directive:ngModel.NgModelController#$setValidity $setValidity()},
|
|
12157
|
+
and return `undefined` for invalid values.
|
|
12158
|
+
*
|
|
12159
|
+
* @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
|
|
12160
|
+
* the model value changes. Each function is called, in turn, passing the value through to the
|
|
12161
|
+
* next. Used to format / convert values for display in the control and validation.
|
|
12162
|
+
* <pre>
|
|
12163
|
+
* function formatter(value) {
|
|
12164
|
+
* if (value) {
|
|
12165
|
+
* return value.toUpperCase();
|
|
12166
|
+
* }
|
|
12167
|
+
* }
|
|
12168
|
+
* ngModel.$formatters.push(formatter);
|
|
12169
|
+
* </pre>
|
|
11919
12170
|
* @property {Object} $error An bject hash with all errors as keys.
|
|
11920
12171
|
*
|
|
11921
12172
|
* @property {boolean} $pristine True if user has not interacted with the control yet.
|
|
@@ -11930,6 +12181,10 @@ var VALID_CLASS = 'ng-valid',
|
|
|
11930
12181
|
* specifically does not contain any logic which deals with DOM rendering or listening to
|
|
11931
12182
|
* DOM events. The `NgModelController` is meant to be extended by other directives where, the
|
|
11932
12183
|
* directive provides DOM manipulation and the `NgModelController` provides the data-binding.
|
|
12184
|
+
* Note that you cannot use `NgModelController` in a directive with an isolated scope,
|
|
12185
|
+
* as, in that case, the `ng-model` value gets put into the isolated scope and does not get
|
|
12186
|
+
* propogated to the parent scope.
|
|
12187
|
+
*
|
|
11933
12188
|
*
|
|
11934
12189
|
* This example shows how to use `NgModelController` with a custom control to achieve
|
|
11935
12190
|
* data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
|
|
@@ -11970,7 +12225,13 @@ var VALID_CLASS = 'ng-valid',
|
|
|
11970
12225
|
|
|
11971
12226
|
// Write data to the model
|
|
11972
12227
|
function read() {
|
|
11973
|
-
|
|
12228
|
+
var html = element.html();
|
|
12229
|
+
// When we clear the content editable the browser leaves a <br> behind
|
|
12230
|
+
// If strip-br attribute is provided then we strip this out
|
|
12231
|
+
if( attrs.stripBr && html == '<br>' ) {
|
|
12232
|
+
html = '';
|
|
12233
|
+
}
|
|
12234
|
+
ngModel.$setViewValue(html);
|
|
11974
12235
|
}
|
|
11975
12236
|
}
|
|
11976
12237
|
};
|
|
@@ -11980,6 +12241,7 @@ var VALID_CLASS = 'ng-valid',
|
|
|
11980
12241
|
<form name="myForm">
|
|
11981
12242
|
<div contenteditable
|
|
11982
12243
|
name="myWidget" ng-model="userContent"
|
|
12244
|
+
strip-br="true"
|
|
11983
12245
|
required>Change me!</div>
|
|
11984
12246
|
<span ng-show="myForm.myWidget.$error.required">Required!</span>
|
|
11985
12247
|
<hr>
|
|
@@ -12102,8 +12364,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
|
12102
12364
|
* For example {@link ng.directive:input input} or
|
|
12103
12365
|
* {@link ng.directive:select select} directives call it.
|
|
12104
12366
|
*
|
|
12105
|
-
* It internally calls all
|
|
12106
|
-
* calls all registered change listeners.
|
|
12367
|
+
* It internally calls all `$parsers` (including validators) and updates the `$modelValue` and the actual model path.
|
|
12368
|
+
* Lastly it calls all registered change listeners.
|
|
12107
12369
|
*
|
|
12108
12370
|
* @param {string} value Value from the view.
|
|
12109
12371
|
*/
|
|
@@ -12168,7 +12430,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
|
12168
12430
|
* @element input
|
|
12169
12431
|
*
|
|
12170
12432
|
* @description
|
|
12171
|
-
* Is directive that tells Angular to do two-way data binding. It works together with `input`,
|
|
12433
|
+
* Is a directive that tells Angular to do two-way data binding. It works together with `input`,
|
|
12172
12434
|
* `select`, `textarea`. You can easily write your own directives to use `ngModel` as well.
|
|
12173
12435
|
*
|
|
12174
12436
|
* `ngModel` is responsible for:
|
|
@@ -12180,6 +12442,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
|
12180
12442
|
* - setting related css class onto the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`),
|
|
12181
12443
|
* - register the control with parent {@link ng.directive:form form}.
|
|
12182
12444
|
*
|
|
12445
|
+
* Note: `ngModel` will try to bind to the property given by evaluating the expression on the
|
|
12446
|
+
* current scope. If the property doesn't already exist on this scope, it will be created
|
|
12447
|
+
* implicitly and added to the scope.
|
|
12448
|
+
*
|
|
12183
12449
|
* For basic examples, how to use `ngModel`, see:
|
|
12184
12450
|
*
|
|
12185
12451
|
* - {@link ng.directive:input input}
|
|
@@ -12320,8 +12586,9 @@ var requiredDirective = function() {
|
|
|
12320
12586
|
</script>
|
|
12321
12587
|
<form name="myForm" ng-controller="Ctrl">
|
|
12322
12588
|
List: <input name="namesInput" ng-model="names" ng-list required>
|
|
12323
|
-
<span class="error" ng-show="myForm.
|
|
12589
|
+
<span class="error" ng-show="myForm.namesInput.$error.required">
|
|
12324
12590
|
Required!</span>
|
|
12591
|
+
<br>
|
|
12325
12592
|
<tt>names = {{names}}</tt><br/>
|
|
12326
12593
|
<tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
|
|
12327
12594
|
<tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
|
|
@@ -12333,12 +12600,14 @@ var requiredDirective = function() {
|
|
|
12333
12600
|
it('should initialize to model', function() {
|
|
12334
12601
|
expect(binding('names')).toEqual('["igor","misko","vojta"]');
|
|
12335
12602
|
expect(binding('myForm.namesInput.$valid')).toEqual('true');
|
|
12603
|
+
expect(element('span.error').css('display')).toBe('none');
|
|
12336
12604
|
});
|
|
12337
12605
|
|
|
12338
12606
|
it('should be invalid if empty', function() {
|
|
12339
12607
|
input('names').enter('');
|
|
12340
12608
|
expect(binding('names')).toEqual('[]');
|
|
12341
12609
|
expect(binding('myForm.namesInput.$valid')).toEqual('false');
|
|
12610
|
+
expect(element('span.error').css('display')).not().toBe('none');
|
|
12342
12611
|
});
|
|
12343
12612
|
</doc:scenario>
|
|
12344
12613
|
</doc:example>
|
|
@@ -12388,7 +12657,7 @@ var ngValueDirective = function() {
|
|
|
12388
12657
|
} else {
|
|
12389
12658
|
return function(scope, elm, attr) {
|
|
12390
12659
|
scope.$watch(attr.ngValue, function valueWatchAction(value) {
|
|
12391
|
-
attr.$set('value', value
|
|
12660
|
+
attr.$set('value', value);
|
|
12392
12661
|
});
|
|
12393
12662
|
};
|
|
12394
12663
|
}
|
|
@@ -12408,10 +12677,9 @@ var ngValueDirective = function() {
|
|
|
12408
12677
|
* Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
|
|
12409
12678
|
* `{{ expression }}` which is similar but less verbose.
|
|
12410
12679
|
*
|
|
12411
|
-
*
|
|
12412
|
-
*
|
|
12413
|
-
*
|
|
12414
|
-
* bindings invisible to the user while the page is loading.
|
|
12680
|
+
* It is preferrable to use `ngBind` instead of `{{ expression }}` when a template is momentarily
|
|
12681
|
+
* displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
|
|
12682
|
+
* element attribute, it makes the bindings invisible to the user while the page is loading.
|
|
12415
12683
|
*
|
|
12416
12684
|
* An alternative solution to this problem would be using the
|
|
12417
12685
|
* {@link ng.directive:ngCloak ngCloak} directive.
|
|
@@ -12457,10 +12725,11 @@ var ngBindDirective = ngDirective(function(scope, element, attr) {
|
|
|
12457
12725
|
*
|
|
12458
12726
|
* @description
|
|
12459
12727
|
* The `ngBindTemplate` directive specifies that the element
|
|
12460
|
-
* text should be replaced with the
|
|
12461
|
-
*
|
|
12462
|
-
*
|
|
12463
|
-
*
|
|
12728
|
+
* text content should be replaced with the interpolation of the template
|
|
12729
|
+
* in the `ngBindTemplate` attribute.
|
|
12730
|
+
* Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
|
|
12731
|
+
* expressions. This directive is needed since some HTML elements
|
|
12732
|
+
* (such as TITLE and OPTION) cannot contain SPAN elements.
|
|
12464
12733
|
*
|
|
12465
12734
|
* @element ANY
|
|
12466
12735
|
* @param {string} ngBindTemplate template of form
|
|
@@ -12596,8 +12865,8 @@ function classDirective(name, selector) {
|
|
|
12596
12865
|
* @name ng.directive:ngClass
|
|
12597
12866
|
*
|
|
12598
12867
|
* @description
|
|
12599
|
-
* The `ngClass` allows you to set CSS
|
|
12600
|
-
* expression that represents all classes to be added.
|
|
12868
|
+
* The `ngClass` allows you to set CSS classes on HTML an element, dynamically, by databinding
|
|
12869
|
+
* an expression that represents all classes to be added.
|
|
12601
12870
|
*
|
|
12602
12871
|
* The directive won't add duplicate classes if a particular class was already set.
|
|
12603
12872
|
*
|
|
@@ -12607,7 +12876,9 @@ function classDirective(name, selector) {
|
|
|
12607
12876
|
* @element ANY
|
|
12608
12877
|
* @param {expression} ngClass {@link guide/expression Expression} to eval. The result
|
|
12609
12878
|
* of the evaluation can be a string representing space delimited class
|
|
12610
|
-
* names, an array, or a map of class names to boolean values.
|
|
12879
|
+
* names, an array, or a map of class names to boolean values. In the case of a map, the
|
|
12880
|
+
* names of the properties whose values are truthy will be added as css classes to the
|
|
12881
|
+
* element.
|
|
12611
12882
|
*
|
|
12612
12883
|
* @example
|
|
12613
12884
|
<example>
|
|
@@ -12753,7 +13024,7 @@ var ngClassEvenDirective = classDirective('Even', 1);
|
|
|
12753
13024
|
*
|
|
12754
13025
|
* <pre>
|
|
12755
13026
|
* [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
|
|
12756
|
-
* display: none;
|
|
13027
|
+
* display: none !important;
|
|
12757
13028
|
* }
|
|
12758
13029
|
* </pre>
|
|
12759
13030
|
*
|
|
@@ -12821,11 +13092,9 @@ var ngCloakDirective = ngDirective({
|
|
|
12821
13092
|
*
|
|
12822
13093
|
* @example
|
|
12823
13094
|
* Here is a simple form for editing user contact information. Adding, removing, clearing, and
|
|
12824
|
-
* greeting are methods declared on the controller (see source tab). These methods can
|
|
12825
|
-
* easily be called from the angular markup. Notice that
|
|
12826
|
-
*
|
|
12827
|
-
* notice that any changes to the data are automatically reflected in the View without the need
|
|
12828
|
-
* for a manual update.
|
|
13095
|
+
* greeting are methods declared on the $scope by the controller (see source tab). These methods can
|
|
13096
|
+
* easily be called from the angular markup. Notice that any changes to the data are automatically
|
|
13097
|
+
* reflected in the View without the need for a manual update.
|
|
12829
13098
|
<doc:example>
|
|
12830
13099
|
<doc:source>
|
|
12831
13100
|
<script>
|
|
@@ -12976,7 +13245,7 @@ var ngCspDirective = ['$sniffer', function($sniffer) {
|
|
|
12976
13245
|
*/
|
|
12977
13246
|
var ngEventDirectives = {};
|
|
12978
13247
|
forEach(
|
|
12979
|
-
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' '),
|
|
13248
|
+
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave submit'.split(' '),
|
|
12980
13249
|
function(name) {
|
|
12981
13250
|
var directiveName = directiveNormalize('ng-' + name);
|
|
12982
13251
|
ngEventDirectives[directiveName] = ['$parse', function($parse) {
|
|
@@ -13103,6 +13372,54 @@ forEach(
|
|
|
13103
13372
|
*/
|
|
13104
13373
|
|
|
13105
13374
|
|
|
13375
|
+
/**
|
|
13376
|
+
* @ngdoc directive
|
|
13377
|
+
* @name ng.directive:ngKeydown
|
|
13378
|
+
*
|
|
13379
|
+
* @description
|
|
13380
|
+
* Specify custom behavior on keydown event.
|
|
13381
|
+
*
|
|
13382
|
+
* @element ANY
|
|
13383
|
+
* @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
|
|
13384
|
+
* keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
|
|
13385
|
+
*
|
|
13386
|
+
* @example
|
|
13387
|
+
* See {@link ng.directive:ngClick ngClick}
|
|
13388
|
+
*/
|
|
13389
|
+
|
|
13390
|
+
|
|
13391
|
+
/**
|
|
13392
|
+
* @ngdoc directive
|
|
13393
|
+
* @name ng.directive:ngKeyup
|
|
13394
|
+
*
|
|
13395
|
+
* @description
|
|
13396
|
+
* Specify custom behavior on keyup event.
|
|
13397
|
+
*
|
|
13398
|
+
* @element ANY
|
|
13399
|
+
* @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
|
|
13400
|
+
* keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
|
|
13401
|
+
*
|
|
13402
|
+
* @example
|
|
13403
|
+
* See {@link ng.directive:ngClick ngClick}
|
|
13404
|
+
*/
|
|
13405
|
+
|
|
13406
|
+
|
|
13407
|
+
/**
|
|
13408
|
+
* @ngdoc directive
|
|
13409
|
+
* @name ng.directive:ngKeypress
|
|
13410
|
+
*
|
|
13411
|
+
* @description
|
|
13412
|
+
* Specify custom behavior on keypress event.
|
|
13413
|
+
*
|
|
13414
|
+
* @element ANY
|
|
13415
|
+
* @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
|
|
13416
|
+
* keypress. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
|
|
13417
|
+
*
|
|
13418
|
+
* @example
|
|
13419
|
+
* See {@link ng.directive:ngClick ngClick}
|
|
13420
|
+
*/
|
|
13421
|
+
|
|
13422
|
+
|
|
13106
13423
|
/**
|
|
13107
13424
|
* @ngdoc directive
|
|
13108
13425
|
* @name ng.directive:ngSubmit
|
|
@@ -13111,10 +13428,11 @@ forEach(
|
|
|
13111
13428
|
* Enables binding angular expressions to onsubmit events.
|
|
13112
13429
|
*
|
|
13113
13430
|
* Additionally it prevents the default action (which for form means sending the request to the
|
|
13114
|
-
* server and reloading the current page)
|
|
13431
|
+
* server and reloading the current page) **but only if the form does not contain an `action`
|
|
13432
|
+
* attribute**.
|
|
13115
13433
|
*
|
|
13116
13434
|
* @element form
|
|
13117
|
-
* @param {expression} ngSubmit {@link guide/expression Expression} to eval.
|
|
13435
|
+
* @param {expression} ngSubmit {@link guide/expression Expression} to eval. (Event object is available as `$event`)
|
|
13118
13436
|
*
|
|
13119
13437
|
* @example
|
|
13120
13438
|
<doc:example>
|
|
@@ -13154,11 +13472,6 @@ forEach(
|
|
|
13154
13472
|
</doc:scenario>
|
|
13155
13473
|
</doc:example>
|
|
13156
13474
|
*/
|
|
13157
|
-
var ngSubmitDirective = ngDirective(function(scope, element, attrs) {
|
|
13158
|
-
element.bind('submit', function() {
|
|
13159
|
-
scope.$apply(attrs.ngSubmit);
|
|
13160
|
-
});
|
|
13161
|
-
});
|
|
13162
13475
|
|
|
13163
13476
|
/**
|
|
13164
13477
|
* @ngdoc directive
|
|
@@ -13366,7 +13679,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
|
|
|
13366
13679
|
* @description
|
|
13367
13680
|
* # Overview
|
|
13368
13681
|
* `ngPluralize` is a directive that displays messages according to en-US localization rules.
|
|
13369
|
-
* These rules are bundled with angular.js
|
|
13682
|
+
* These rules are bundled with angular.js, but can be overridden
|
|
13370
13683
|
* (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
|
|
13371
13684
|
* by specifying the mappings between
|
|
13372
13685
|
* {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
|
|
@@ -13379,8 +13692,8 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
|
|
|
13379
13692
|
*
|
|
13380
13693
|
* While a pural category may match many numbers (for example, in en-US locale, "other" can match
|
|
13381
13694
|
* any number that is not 1), an explicit number rule can only match one number. For example, the
|
|
13382
|
-
* explicit number rule for "3" matches the number 3.
|
|
13383
|
-
* and explicit number rules throughout
|
|
13695
|
+
* explicit number rule for "3" matches the number 3. There are examples of plural categories
|
|
13696
|
+
* and explicit number rules throughout the rest of this documentation.
|
|
13384
13697
|
*
|
|
13385
13698
|
* # Configuring ngPluralize
|
|
13386
13699
|
* You configure ngPluralize by providing 2 attributes: `count` and `when`.
|
|
@@ -13390,8 +13703,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
|
|
|
13390
13703
|
* Angular expression}; these are evaluated on the current scope for its bound value.
|
|
13391
13704
|
*
|
|
13392
13705
|
* The `when` attribute specifies the mappings between plural categories and the actual
|
|
13393
|
-
* string to be displayed. The value of the attribute should be a JSON object
|
|
13394
|
-
* can interpret it correctly.
|
|
13706
|
+
* string to be displayed. The value of the attribute should be a JSON object.
|
|
13395
13707
|
*
|
|
13396
13708
|
* The following example shows how to configure ngPluralize:
|
|
13397
13709
|
*
|
|
@@ -14015,8 +14327,7 @@ var ngSwitchDefaultDirective = ngDirective({
|
|
|
14015
14327
|
return {
|
|
14016
14328
|
restrict: 'E',
|
|
14017
14329
|
transclude: true,
|
|
14018
|
-
scope: '
|
|
14019
|
-
locals: { title:'bind' },
|
|
14330
|
+
scope: { title:'@' },
|
|
14020
14331
|
template: '<div style="border: 1px solid black;">' +
|
|
14021
14332
|
'<div style="background-color: gray">{{title}}</div>' +
|
|
14022
14333
|
'<div ng-transclude></div>' +
|
|
@@ -14271,8 +14582,8 @@ var scriptDirective = ['$templateCache', function($templateCache) {
|
|
|
14271
14582
|
* Optionally `ngOptions` attribute can be used to dynamically generate a list of `<option>`
|
|
14272
14583
|
* elements for a `<select>` element using an array or an object obtained by evaluating the
|
|
14273
14584
|
* `ngOptions` expression.
|
|
14274
|
-
|
|
14275
|
-
* When an item in the select menu is
|
|
14585
|
+
*
|
|
14586
|
+
* When an item in the `<select>` menu is selected, the value of array element or object property
|
|
14276
14587
|
* represented by the selected option will be bound to the model identified by the `ngModel`
|
|
14277
14588
|
* directive of the parent select element.
|
|
14278
14589
|
*
|
|
@@ -14844,4 +15155,4 @@ var styleDirective = valueFn({
|
|
|
14844
15155
|
});
|
|
14845
15156
|
|
|
14846
15157
|
})(window, document);
|
|
14847
|
-
angular.element(document).find('head').append('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\\:form{display:block;}</style>');
|
|
15158
|
+
angular.element(document).find('head').append('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none !important;}ng\\:form{display:block;}</style>');
|