You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by jo...@apache.org on 2015/09/06 18:15:40 UTC
[17/17] struts git commit: WW-4522 Support latest stable AngularJS
version in maven angularjs archetype
WW-4522 Support latest stable AngularJS version in maven angularjs archetype
- Upgrade to latest stable angular js version 1.4.5
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/4286d6a9
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/4286d6a9
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/4286d6a9
Branch: refs/heads/master
Commit: 4286d6a9dcf2fdf91924b817b60e7f00823b0ee2
Parents: 215a4f9
Author: Johannes Geppert <jo...@apache.org>
Authored: Sun Sep 6 18:15:13 2015 +0200
Committer: Johannes Geppert <jo...@apache.org>
Committed: Sun Sep 6 18:15:15 2015 +0200
----------------------------------------------------------------------
.../webapp/js/lib/angular/angular-animate.js | 773 ++++++++-----
.../js/lib/angular/angular-animate.min.js | 98 +-
.../js/lib/angular/angular-animate.min.js.map | 6 +-
.../main/webapp/js/lib/angular/angular-aria.js | 2 +-
.../webapp/js/lib/angular/angular-aria.min.js | 2 +-
.../webapp/js/lib/angular/angular-cookies.js | 4 +-
.../js/lib/angular/angular-cookies.min.js | 2 +-
.../webapp/js/lib/angular/angular-loader.js | 9 +-
.../webapp/js/lib/angular/angular-loader.min.js | 9 +-
.../js/lib/angular/angular-loader.min.js.map | 6 +-
.../js/lib/angular/angular-message-format.js | 2 +-
.../lib/angular/angular-message-format.min.js | 2 +-
.../webapp/js/lib/angular/angular-messages.js | 2 +-
.../js/lib/angular/angular-messages.min.js | 2 +-
.../main/webapp/js/lib/angular/angular-mocks.js | 104 +-
.../webapp/js/lib/angular/angular-resource.js | 12 +-
.../js/lib/angular/angular-resource.min.js | 16 +-
.../js/lib/angular/angular-resource.min.js.map | 4 +-
.../main/webapp/js/lib/angular/angular-route.js | 7 +-
.../webapp/js/lib/angular/angular-route.min.js | 2 +-
.../js/lib/angular/angular-route.min.js.map | 2 +-
.../webapp/js/lib/angular/angular-sanitize.js | 4 +-
.../js/lib/angular/angular-sanitize.min.js | 2 +-
.../webapp/js/lib/angular/angular-scenario.js | 1068 +++++++++++------
.../main/webapp/js/lib/angular/angular-touch.js | 2 +-
.../webapp/js/lib/angular/angular-touch.min.js | 2 +-
.../src/main/webapp/js/lib/angular/angular.js | 1070 ++++++++++++------
.../main/webapp/js/lib/angular/angular.min.js | 559 ++++-----
.../webapp/js/lib/angular/angular.min.js.map | 6 +-
.../src/main/webapp/js/lib/angular/errors.json | 2 +-
.../js/lib/angular/i18n/angular-locale_af-na.js | 4 +-
.../js/lib/angular/i18n/angular-locale_af-za.js | 2 +-
.../js/lib/angular/i18n/angular-locale_af.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ak-gh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ak.js | 2 +-
.../js/lib/angular/i18n/angular-locale_am-et.js | 2 +-
.../js/lib/angular/i18n/angular-locale_am.js | 2 +-
.../lib/angular/i18n/angular-locale_ar-001.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-ae.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-bh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-dj.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-dz.js | 10 +-
.../js/lib/angular/i18n/angular-locale_ar-eg.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-eh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-er.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-il.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-iq.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-jo.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-km.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-kw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-lb.js | 6 +-
.../js/lib/angular/i18n/angular-locale_ar-ly.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-ma.js | 10 +-
.../js/lib/angular/i18n/angular-locale_ar-mr.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-om.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-ps.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-qa.js | 8 +-
.../js/lib/angular/i18n/angular-locale_ar-sa.js | 8 +-
.../js/lib/angular/i18n/angular-locale_ar-sd.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-so.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-ss.js | 4 +-
.../js/lib/angular/i18n/angular-locale_ar-sy.js | 8 +-
.../js/lib/angular/i18n/angular-locale_ar-td.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ar-tn.js | 16 +-
.../js/lib/angular/i18n/angular-locale_ar-ye.js | 8 +-
.../js/lib/angular/i18n/angular-locale_ar.js | 2 +-
.../js/lib/angular/i18n/angular-locale_as-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_as.js | 2 +-
.../angular/i18n/angular-locale_az-cyrl-az.js | 2 +-
.../lib/angular/i18n/angular-locale_az-cyrl.js | 4 +-
.../angular/i18n/angular-locale_az-latn-az.js | 2 +-
.../lib/angular/i18n/angular-locale_az-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_az.js | 2 +-
.../js/lib/angular/i18n/angular-locale_be-by.js | 22 +-
.../js/lib/angular/i18n/angular-locale_be.js | 22 +-
.../lib/angular/i18n/angular-locale_bem-zm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_bem.js | 2 +-
.../angular/i18n/angular-locale_bm-latn-ml.js | 2 +-
.../lib/angular/i18n/angular-locale_bm-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_bm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_bo-cn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_bo-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_bo.js | 2 +-
.../lib/angular/i18n/angular-locale_brx-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_brx.js | 2 +-
.../angular/i18n/angular-locale_bs-cyrl-ba.js | 2 +-
.../lib/angular/i18n/angular-locale_bs-cyrl.js | 4 +-
.../angular/i18n/angular-locale_bs-latn-ba.js | 2 +-
.../lib/angular/i18n/angular-locale_bs-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_bs.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ca-ad.js | 24 +-
.../i18n/angular-locale_ca-es-valencia.js | 24 +-
.../js/lib/angular/i18n/angular-locale_ca-es.js | 24 +-
.../js/lib/angular/i18n/angular-locale_ca-fr.js | 24 +-
.../js/lib/angular/i18n/angular-locale_ca-it.js | 24 +-
.../js/lib/angular/i18n/angular-locale_ca.js | 24 +-
.../lib/angular/i18n/angular-locale_cgg-ug.js | 2 +-
.../js/lib/angular/i18n/angular-locale_cgg.js | 2 +-
.../lib/angular/i18n/angular-locale_chr-us.js | 2 +-
.../js/lib/angular/i18n/angular-locale_chr.js | 2 +-
.../angular/i18n/angular-locale_ckb-arab-iq.js | 2 +-
.../angular/i18n/angular-locale_ckb-arab-ir.js | 2 +-
.../lib/angular/i18n/angular-locale_ckb-arab.js | 4 +-
.../lib/angular/i18n/angular-locale_ckb-iq.js | 2 +-
.../lib/angular/i18n/angular-locale_ckb-ir.js | 2 +-
.../angular/i18n/angular-locale_ckb-latn-iq.js | 2 +-
.../lib/angular/i18n/angular-locale_ckb-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_ckb.js | 2 +-
.../js/lib/angular/i18n/angular-locale_cs-cz.js | 4 +-
.../js/lib/angular/i18n/angular-locale_cs.js | 4 +-
.../js/lib/angular/i18n/angular-locale_cy-gb.js | 2 +-
.../js/lib/angular/i18n/angular-locale_cy.js | 2 +-
.../js/lib/angular/i18n/angular-locale_da-dk.js | 8 +-
.../js/lib/angular/i18n/angular-locale_da-gl.js | 8 +-
.../js/lib/angular/i18n/angular-locale_da.js | 8 +-
.../lib/angular/i18n/angular-locale_dav-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_dav.js | 2 +-
.../js/lib/angular/i18n/angular-locale_de-at.js | 10 +-
.../js/lib/angular/i18n/angular-locale_de-li.js | 2 +-
.../js/lib/angular/i18n/angular-locale_dz-bt.js | 2 +-
.../js/lib/angular/i18n/angular-locale_dz.js | 2 +-
.../lib/angular/i18n/angular-locale_ebu-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ebu.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ee-gh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ee-tg.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ee.js | 2 +-
.../js/lib/angular/i18n/angular-locale_el-cy.js | 8 +-
.../lib/angular/i18n/angular-locale_en-001.js | 14 +-
.../lib/angular/i18n/angular-locale_en-150.js | 16 +-
.../js/lib/angular/i18n/angular-locale_en-ag.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ai.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-as.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-au.js | 6 +-
.../js/lib/angular/i18n/angular-locale_en-bb.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-be.js | 16 +-
.../js/lib/angular/i18n/angular-locale_en-bm.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-bs.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-bw.js | 4 +-
.../js/lib/angular/i18n/angular-locale_en-bz.js | 4 +-
.../js/lib/angular/i18n/angular-locale_en-ca.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-cc.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ck.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-cm.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-cx.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-dg.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-dm.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-er.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-fj.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-fk.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-fm.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-gb.js | 6 +-
.../js/lib/angular/i18n/angular-locale_en-gd.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-gg.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-gh.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-gi.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-gm.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-gu.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-gy.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-hk.js | 6 +-
.../js/lib/angular/i18n/angular-locale_en-ie.js | 10 +-
.../js/lib/angular/i18n/angular-locale_en-im.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-in.js | 6 +-
.../js/lib/angular/i18n/angular-locale_en-io.js | 14 +-
.../lib/angular/i18n/angular-locale_en-iso.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-je.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-jm.js | 10 +-
.../js/lib/angular/i18n/angular-locale_en-ke.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ki.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-kn.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ky.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-lc.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-lr.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ls.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-mg.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-mh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-mo.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-mp.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-ms.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-mt.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-mu.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-mw.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-my.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-na.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-nf.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ng.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-nr.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-nu.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-nz.js | 6 +-
.../js/lib/angular/i18n/angular-locale_en-pg.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ph.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-pk.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-pn.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-pr.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-pw.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-rw.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-sb.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-sc.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-sd.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-sg.js | 6 +-
.../js/lib/angular/i18n/angular-locale_en-sh.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-sl.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ss.js | 16 +-
.../js/lib/angular/i18n/angular-locale_en-sx.js | 16 +-
.../js/lib/angular/i18n/angular-locale_en-sz.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-tc.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-tk.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-to.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-tt.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-tv.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-tz.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ug.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-um.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-us.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-vc.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-vg.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-vi.js | 2 +-
.../js/lib/angular/i18n/angular-locale_en-vu.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-ws.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-za.js | 4 +-
.../js/lib/angular/i18n/angular-locale_en-zm.js | 14 +-
.../js/lib/angular/i18n/angular-locale_en-zw.js | 4 +-
.../js/lib/angular/i18n/angular-locale_en.js | 2 +-
.../lib/angular/i18n/angular-locale_eo-001.js | 2 +-
.../js/lib/angular/i18n/angular-locale_eo.js | 2 +-
.../lib/angular/i18n/angular-locale_es-419.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-ar.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-bo.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-cl.js | 8 +-
.../js/lib/angular/i18n/angular-locale_es-co.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-cr.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-cu.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-do.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-ea.js | 6 +-
.../js/lib/angular/i18n/angular-locale_es-ec.js | 12 +-
.../js/lib/angular/i18n/angular-locale_es-es.js | 6 +-
.../js/lib/angular/i18n/angular-locale_es-gq.js | 8 +-
.../js/lib/angular/i18n/angular-locale_es-gt.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-hn.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-ic.js | 6 +-
.../js/lib/angular/i18n/angular-locale_es-mx.js | 30 +-
.../js/lib/angular/i18n/angular-locale_es-ni.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-pa.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-pe.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-ph.js | 6 +-
.../js/lib/angular/i18n/angular-locale_es-pr.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-py.js | 12 +-
.../js/lib/angular/i18n/angular-locale_es-sv.js | 14 +-
.../js/lib/angular/i18n/angular-locale_es-us.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-uy.js | 10 +-
.../js/lib/angular/i18n/angular-locale_es-ve.js | 12 +-
.../js/lib/angular/i18n/angular-locale_es.js | 6 +-
.../js/lib/angular/i18n/angular-locale_fa-af.js | 2 +-
.../js/lib/angular/i18n/angular-locale_fa-ir.js | 2 +-
.../js/lib/angular/i18n/angular-locale_fa.js | 2 +-
.../lib/angular/i18n/angular-locale_fil-ph.js | 2 +-
.../js/lib/angular/i18n/angular-locale_fil.js | 2 +-
.../js/lib/angular/i18n/angular-locale_fr-ca.js | 4 +-
.../lib/angular/i18n/angular-locale_fur-it.js | 2 +-
.../js/lib/angular/i18n/angular-locale_fur.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ga-ie.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ga.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gd-gb.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gd.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gl-es.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gl.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gu-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gu.js | 2 +-
.../lib/angular/i18n/angular-locale_guz-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_guz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gv-im.js | 2 +-
.../js/lib/angular/i18n/angular-locale_gv.js | 2 +-
.../angular/i18n/angular-locale_ha-latn-gh.js | 2 +-
.../angular/i18n/angular-locale_ha-latn-ne.js | 2 +-
.../angular/i18n/angular-locale_ha-latn-ng.js | 2 +-
.../lib/angular/i18n/angular-locale_ha-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_ha.js | 2 +-
.../lib/angular/i18n/angular-locale_haw-us.js | 2 +-
.../js/lib/angular/i18n/angular-locale_haw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_he-il.js | 8 +-
.../js/lib/angular/i18n/angular-locale_he.js | 8 +-
.../js/lib/angular/i18n/angular-locale_hi-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_hi.js | 2 +-
.../js/lib/angular/i18n/angular-locale_id-id.js | 2 +-
.../js/lib/angular/i18n/angular-locale_id.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ig-ng.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ig.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ii-cn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ii.js | 2 +-
.../js/lib/angular/i18n/angular-locale_in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_iw.js | 8 +-
.../js/lib/angular/i18n/angular-locale_ja-jp.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ja.js | 2 +-
.../lib/angular/i18n/angular-locale_jgo-cm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_jgo.js | 2 +-
.../lib/angular/i18n/angular-locale_jmc-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_jmc.js | 2 +-
.../lib/angular/i18n/angular-locale_kam-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kam.js | 2 +-
.../lib/angular/i18n/angular-locale_kde-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kde.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ki-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ki.js | 2 +-
.../lib/angular/i18n/angular-locale_kk-cyrl.js | 2 +-
.../lib/angular/i18n/angular-locale_kkj-cm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kkj.js | 2 +-
.../lib/angular/i18n/angular-locale_kln-ke.js | 72 +-
.../js/lib/angular/i18n/angular-locale_kln.js | 72 +-
.../js/lib/angular/i18n/angular-locale_km-kh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_km.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kn-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ko-kp.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ko-kr.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ko.js | 2 +-
.../lib/angular/i18n/angular-locale_kok-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kok.js | 2 +-
.../angular/i18n/angular-locale_ks-arab-in.js | 2 +-
.../lib/angular/i18n/angular-locale_ks-arab.js | 4 +-
.../js/lib/angular/i18n/angular-locale_ks.js | 2 +-
.../js/lib/angular/i18n/angular-locale_kw-gb.js | 46 +-
.../js/lib/angular/i18n/angular-locale_kw.js | 46 +-
.../lib/angular/i18n/angular-locale_ky-cyrl.js | 2 +-
.../lib/angular/i18n/angular-locale_lag-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_lag.js | 2 +-
.../lib/angular/i18n/angular-locale_lkt-us.js | 2 +-
.../js/lib/angular/i18n/angular-locale_lkt.js | 2 +-
.../js/lib/angular/i18n/angular-locale_lv-lv.js | 2 +-
.../js/lib/angular/i18n/angular-locale_lv.js | 2 +-
.../lib/angular/i18n/angular-locale_mas-ke.js | 2 +-
.../lib/angular/i18n/angular-locale_mas-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mas.js | 2 +-
.../lib/angular/i18n/angular-locale_mer-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mer.js | 2 +-
.../lib/angular/i18n/angular-locale_mfe-mu.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mfe.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mg-mg.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mg.js | 2 +-
.../lib/angular/i18n/angular-locale_mgh-mz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mgh.js | 2 +-
.../lib/angular/i18n/angular-locale_mgo-cm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mgo.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mk-mk.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mk.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ml-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ml.js | 2 +-
.../angular/i18n/angular-locale_mn-cyrl-mn.js | 2 +-
.../lib/angular/i18n/angular-locale_mn-cyrl.js | 4 +-
.../js/lib/angular/i18n/angular-locale_mn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mr-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mr.js | 2 +-
.../angular/i18n/angular-locale_ms-latn-bn.js | 2 +-
.../angular/i18n/angular-locale_ms-latn-my.js | 2 +-
.../angular/i18n/angular-locale_ms-latn-sg.js | 2 +-
.../lib/angular/i18n/angular-locale_ms-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_ms.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mt-mt.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mt.js | 2 +-
.../lib/angular/i18n/angular-locale_mua-cm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_mua.js | 2 +-
.../js/lib/angular/i18n/angular-locale_my-mm.js | 4 +-
.../js/lib/angular/i18n/angular-locale_my.js | 4 +-
.../lib/angular/i18n/angular-locale_naq-na.js | 2 +-
.../js/lib/angular/i18n/angular-locale_naq.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nb-no.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nb-sj.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nb.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nd-zw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nd.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ne-in.js | 24 +-
.../js/lib/angular/i18n/angular-locale_ne-np.js | 10 +-
.../js/lib/angular/i18n/angular-locale_ne.js | 10 +-
.../js/lib/angular/i18n/angular-locale_nl-aw.js | 4 +-
.../js/lib/angular/i18n/angular-locale_nl-be.js | 4 +-
.../js/lib/angular/i18n/angular-locale_nl-bq.js | 4 +-
.../js/lib/angular/i18n/angular-locale_nl-cw.js | 6 +-
.../js/lib/angular/i18n/angular-locale_nl-nl.js | 4 +-
.../js/lib/angular/i18n/angular-locale_nl-sr.js | 4 +-
.../js/lib/angular/i18n/angular-locale_nl-sx.js | 6 +-
.../js/lib/angular/i18n/angular-locale_nl.js | 4 +-
.../lib/angular/i18n/angular-locale_nnh-cm.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nnh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_no-no.js | 2 +-
.../js/lib/angular/i18n/angular-locale_no.js | 2 +-
.../lib/angular/i18n/angular-locale_nus-sd.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nus.js | 2 +-
.../lib/angular/i18n/angular-locale_nyn-ug.js | 2 +-
.../js/lib/angular/i18n/angular-locale_nyn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_om-et.js | 2 +-
.../js/lib/angular/i18n/angular-locale_om-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_om.js | 2 +-
.../js/lib/angular/i18n/angular-locale_or-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_or.js | 2 +-
.../js/lib/angular/i18n/angular-locale_os-ge.js | 2 +-
.../js/lib/angular/i18n/angular-locale_os-ru.js | 2 +-
.../js/lib/angular/i18n/angular-locale_os.js | 2 +-
.../angular/i18n/angular-locale_pa-arab-pk.js | 2 +-
.../lib/angular/i18n/angular-locale_pa-arab.js | 2 +-
.../angular/i18n/angular-locale_pa-guru-in.js | 2 +-
.../lib/angular/i18n/angular-locale_pa-guru.js | 4 +-
.../js/lib/angular/i18n/angular-locale_pa.js | 2 +-
.../js/lib/angular/i18n/angular-locale_pl-pl.js | 4 +-
.../js/lib/angular/i18n/angular-locale_pl.js | 4 +-
.../js/lib/angular/i18n/angular-locale_pt-br.js | 2 +-
.../js/lib/angular/i18n/angular-locale_pt.js | 2 +-
.../js/lib/angular/i18n/angular-locale_qu-bo.js | 2 +-
.../js/lib/angular/i18n/angular-locale_qu-ec.js | 2 +-
.../js/lib/angular/i18n/angular-locale_qu-pe.js | 2 +-
.../js/lib/angular/i18n/angular-locale_qu.js | 2 +-
.../lib/angular/i18n/angular-locale_rof-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_rof.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ru-ua.js | 6 +-
.../js/lib/angular/i18n/angular-locale_rw-rw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_rw.js | 2 +-
.../lib/angular/i18n/angular-locale_sah-ru.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sah.js | 2 +-
.../lib/angular/i18n/angular-locale_saq-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_saq.js | 2 +-
.../lib/angular/i18n/angular-locale_shi-latn.js | 2 +-
.../lib/angular/i18n/angular-locale_shi-tfng.js | 2 +-
.../js/lib/angular/i18n/angular-locale_si-lk.js | 2 +-
.../js/lib/angular/i18n/angular-locale_si.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sl-si.js | 8 +-
.../js/lib/angular/i18n/angular-locale_sl.js | 8 +-
.../lib/angular/i18n/angular-locale_smn-fi.js | 2 +-
.../js/lib/angular/i18n/angular-locale_smn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sn-zw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sn.js | 2 +-
.../js/lib/angular/i18n/angular-locale_so-dj.js | 2 +-
.../js/lib/angular/i18n/angular-locale_so-et.js | 2 +-
.../js/lib/angular/i18n/angular-locale_so-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_so-so.js | 2 +-
.../js/lib/angular/i18n/angular-locale_so.js | 2 +-
.../angular/i18n/angular-locale_sr-cyrl-ba.js | 16 +-
.../lib/angular/i18n/angular-locale_sr-cyrl.js | 2 +-
.../angular/i18n/angular-locale_sr-latn-ba.js | 16 +-
.../js/lib/angular/i18n/angular-locale_sv-fi.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sw-cd.js | 128 +++
.../js/lib/angular/i18n/angular-locale_sw-ke.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sw-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sw-ug.js | 2 +-
.../js/lib/angular/i18n/angular-locale_sw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ta-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ta-lk.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ta-my.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ta-sg.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ta.js | 2 +-
.../js/lib/angular/i18n/angular-locale_te-in.js | 2 +-
.../js/lib/angular/i18n/angular-locale_te.js | 2 +-
.../lib/angular/i18n/angular-locale_teo-ke.js | 2 +-
.../lib/angular/i18n/angular-locale_teo-ug.js | 2 +-
.../js/lib/angular/i18n/angular-locale_teo.js | 2 +-
.../js/lib/angular/i18n/angular-locale_th-th.js | 2 +-
.../js/lib/angular/i18n/angular-locale_th.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ti-er.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ti-et.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ti.js | 2 +-
.../js/lib/angular/i18n/angular-locale_tl.js | 2 +-
.../js/lib/angular/i18n/angular-locale_to-to.js | 2 +-
.../js/lib/angular/i18n/angular-locale_to.js | 2 +-
.../lib/angular/i18n/angular-locale_tzm-latn.js | 2 +-
.../angular/i18n/angular-locale_ug-arab-cn.js | 2 +-
.../lib/angular/i18n/angular-locale_ug-arab.js | 4 +-
.../js/lib/angular/i18n/angular-locale_ug.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ur-in.js | 8 +-
.../js/lib/angular/i18n/angular-locale_ur-pk.js | 2 +-
.../js/lib/angular/i18n/angular-locale_ur.js | 2 +-
.../angular/i18n/angular-locale_uz-cyrl-uz.js | 2 +-
.../lib/angular/i18n/angular-locale_uz-cyrl.js | 4 +-
.../angular/i18n/angular-locale_uz-latn-uz.js | 2 +-
.../lib/angular/i18n/angular-locale_uz-latn.js | 4 +-
.../js/lib/angular/i18n/angular-locale_uz.js | 2 +-
.../angular/i18n/angular-locale_vai-latn-lr.js | 2 +-
.../lib/angular/i18n/angular-locale_vai-latn.js | 4 +-
.../angular/i18n/angular-locale_vai-vaii-lr.js | 2 +-
.../lib/angular/i18n/angular-locale_vai-vaii.js | 4 +-
.../js/lib/angular/i18n/angular-locale_vai.js | 2 +-
.../lib/angular/i18n/angular-locale_vun-tz.js | 2 +-
.../js/lib/angular/i18n/angular-locale_vun.js | 2 +-
.../lib/angular/i18n/angular-locale_wae-ch.js | 2 +-
.../js/lib/angular/i18n/angular-locale_wae.js | 2 +-
.../lib/angular/i18n/angular-locale_yi-001.js | 2 +-
.../js/lib/angular/i18n/angular-locale_yi.js | 2 +-
.../js/lib/angular/i18n/angular-locale_yo-bj.js | 2 +-
.../js/lib/angular/i18n/angular-locale_yo-ng.js | 2 +-
.../js/lib/angular/i18n/angular-locale_yo.js | 2 +-
.../js/lib/angular/i18n/angular-locale_zh-cn.js | 2 +-
.../angular/i18n/angular-locale_zh-hans-cn.js | 2 +-
.../angular/i18n/angular-locale_zh-hans-hk.js | 2 +-
.../angular/i18n/angular-locale_zh-hans-mo.js | 2 +-
.../angular/i18n/angular-locale_zh-hans-sg.js | 6 +-
.../lib/angular/i18n/angular-locale_zh-hans.js | 4 +-
.../angular/i18n/angular-locale_zh-hant-hk.js | 2 +-
.../angular/i18n/angular-locale_zh-hant-mo.js | 10 +-
.../angular/i18n/angular-locale_zh-hant-tw.js | 2 +-
.../lib/angular/i18n/angular-locale_zh-hant.js | 2 +-
.../js/lib/angular/i18n/angular-locale_zh-hk.js | 2 +-
.../js/lib/angular/i18n/angular-locale_zh-tw.js | 2 +-
.../js/lib/angular/i18n/angular-locale_zh.js | 2 +-
.../js/lib/angular/i18n/angular-locale_zu-za.js | 2 +-
.../js/lib/angular/i18n/angular-locale_zu.js | 2 +-
.../src/main/webapp/js/lib/angular/version.json | 2 +-
.../src/main/webapp/js/lib/angular/version.txt | 2 +-
502 files changed, 3815 insertions(+), 2892 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/4286d6a9/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
----------------------------------------------------------------------
diff --git a/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js b/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
index 5b49083..b19f02d 100644
--- a/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
+++ b/archetypes/struts2-archetype-angularjs/src/main/resources/archetype-resources/src/main/webapp/js/lib/angular/angular-animate.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.2
+ * @license AngularJS v1.4.5
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
@@ -21,12 +21,60 @@ var isElement = angular.isElement;
var ELEMENT_NODE = 1;
var COMMENT_NODE = 8;
+var ADD_CLASS_SUFFIX = '-add';
+var REMOVE_CLASS_SUFFIX = '-remove';
+var EVENT_CLASS_PREFIX = 'ng-';
+var ACTIVE_CLASS_SUFFIX = '-active';
+
var NG_ANIMATE_CLASSNAME = 'ng-animate';
var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';
+// Detect proper transitionend/animationend event names.
+var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;
+
+// If unprefixed events are not supported but webkit-prefixed are, use the latter.
+// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.
+// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`
+// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.
+// Register both events in case `window.onanimationend` is not supported because of that,
+// do the same for `transitionend` as Safari is likely to exhibit similar behavior.
+// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
+// therefore there is no reason to test anymore for other vendor prefixes:
+// http://caniuse.com/#search=transition
+if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
+ CSS_PREFIX = '-webkit-';
+ TRANSITION_PROP = 'WebkitTransition';
+ TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
+} else {
+ TRANSITION_PROP = 'transition';
+ TRANSITIONEND_EVENT = 'transitionend';
+}
+
+if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {
+ CSS_PREFIX = '-webkit-';
+ ANIMATION_PROP = 'WebkitAnimation';
+ ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
+} else {
+ ANIMATION_PROP = 'animation';
+ ANIMATIONEND_EVENT = 'animationend';
+}
+
+var DURATION_KEY = 'Duration';
+var PROPERTY_KEY = 'Property';
+var DELAY_KEY = 'Delay';
+var TIMING_KEY = 'TimingFunction';
+var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
+var ANIMATION_PLAYSTATE_KEY = 'PlayState';
+var SAFE_FAST_FORWARD_DURATION_VALUE = 9999;
+
+var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;
+var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;
+var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;
+var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;
+
var isPromiseLike = function(p) {
return p && p.then ? true : false;
-}
+};
function assertArg(arg, name, reason) {
if (!arg) {
@@ -177,8 +225,21 @@ function mergeAnimationOptions(element, target, newOptions) {
var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');
var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);
+ if (newOptions.preparationClasses) {
+ target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);
+ delete newOptions.preparationClasses;
+ }
+
+ // noop is basically when there is no callback; otherwise something has been set
+ var realDomOperation = target.domOperation !== noop ? target.domOperation : null;
+
extend(target, newOptions);
+ // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.
+ if (realDomOperation) {
+ target.domOperation = realDomOperation;
+ }
+
if (classes.addClass) {
target.addClass = classes.addClass;
} else {
@@ -256,18 +317,81 @@ function getDomNode(element) {
return (element instanceof angular.element) ? element[0] : element;
}
+function applyGeneratedPreparationClasses(element, event, options) {
+ var classes = '';
+ if (event) {
+ classes = pendClasses(event, EVENT_CLASS_PREFIX, true);
+ }
+ if (options.addClass) {
+ classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));
+ }
+ if (options.removeClass) {
+ classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));
+ }
+ if (classes.length) {
+ options.preparationClasses = classes;
+ element.addClass(classes);
+ }
+}
+
+function clearGeneratedClasses(element, options) {
+ if (options.preparationClasses) {
+ element.removeClass(options.preparationClasses);
+ options.preparationClasses = null;
+ }
+ if (options.activeClasses) {
+ element.removeClass(options.activeClasses);
+ options.activeClasses = null;
+ }
+}
+
+function blockTransitions(node, duration) {
+ // we use a negative delay value since it performs blocking
+ // yet it doesn't kill any existing transitions running on the
+ // same element which makes this safe for class-based animations
+ var value = duration ? '-' + duration + 's' : '';
+ applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);
+ return [TRANSITION_DELAY_PROP, value];
+}
+
+function blockKeyframeAnimations(node, applyBlock) {
+ var value = applyBlock ? 'paused' : '';
+ var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;
+ applyInlineStyle(node, [key, value]);
+ return [key, value];
+}
+
+function applyInlineStyle(node, styleTuple) {
+ var prop = styleTuple[0];
+ var value = styleTuple[1];
+ node.style[prop] = value;
+}
+
+function concatWithSpace(a,b) {
+ if (!a) return b;
+ if (!b) return a;
+ return a + ' ' + b;
+}
+
+function $$BodyProvider() {
+ this.$get = ['$document', function($document) {
+ return jqLite($document[0].body);
+ }];
+}
+
var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
- var tickQueue = [];
- var cancelFn;
+ var queue, cancelFn;
function scheduler(tasks) {
// we make a copy since RAFScheduler mutates the state
// of the passed in array variable and this would be difficult
// to track down on the outside code
- tickQueue.push([].concat(tasks));
+ queue = queue.concat(tasks);
nextTick();
}
+ queue = scheduler.queue = [];
+
/* waitUntilQuiet does two things:
* 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through
* 2. It will delay the next wave of tasks from running until the quiet `fn` has run.
@@ -289,17 +413,12 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
return scheduler;
function nextTick() {
- if (!tickQueue.length) return;
+ if (!queue.length) return;
- var updatedQueue = [];
- for (var i = 0; i < tickQueue.length; i++) {
- var innerQueue = tickQueue[i];
- runNextTask(innerQueue);
- if (innerQueue.length) {
- updatedQueue.push(innerQueue);
- }
+ var items = queue.shift();
+ for (var i = 0; i < items.length; i++) {
+ items[i]();
}
- tickQueue = updatedQueue;
if (!cancelFn) {
$$rAF(function() {
@@ -307,11 +426,6 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
});
}
}
-
- function runNextTask(tasks) {
- var nextTask = tasks.shift();
- nextTask();
- }
}];
var $$AnimateChildrenDirective = [function() {
@@ -328,6 +442,8 @@ var $$AnimateChildrenDirective = [function() {
};
}];
+var ANIMATE_TIMER_KEY = '$$animateCss';
+
/**
* @ngdoc service
* @name $animateCss
@@ -514,7 +630,7 @@ var $$AnimateChildrenDirective = [function() {
* to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)
* * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).
* * `transition` - The raw CSS transition style that will be used (e.g. `1s linear all`).
- * * `keyframe` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).
+ * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).
* * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.
* * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.
* * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.
@@ -528,63 +644,19 @@ var $$AnimateChildrenDirective = [function() {
* * `stagger` - A numeric time value representing the delay between successively animated elements
* ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})
* * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a
- * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
- * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.)
+ * * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
+ * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.)
*
* @return {object} an object with start and end methods and details about the animation.
*
* * `start` - The method to start the animation. This will return a `Promise` when called.
* * `end` - This method will cancel the animation and remove all applied CSS classes and styles.
*/
-
-// Detect proper transitionend/animationend event names.
-var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;
-
-// If unprefixed events are not supported but webkit-prefixed are, use the latter.
-// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.
-// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`
-// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.
-// Register both events in case `window.onanimationend` is not supported because of that,
-// do the same for `transitionend` as Safari is likely to exhibit similar behavior.
-// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
-// therefore there is no reason to test anymore for other vendor prefixes:
-// http://caniuse.com/#search=transition
-if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
- CSS_PREFIX = '-webkit-';
- TRANSITION_PROP = 'WebkitTransition';
- TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
-} else {
- TRANSITION_PROP = 'transition';
- TRANSITIONEND_EVENT = 'transitionend';
-}
-
-if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {
- CSS_PREFIX = '-webkit-';
- ANIMATION_PROP = 'WebkitAnimation';
- ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
-} else {
- ANIMATION_PROP = 'animation';
- ANIMATIONEND_EVENT = 'animationend';
-}
-
-var DURATION_KEY = 'Duration';
-var PROPERTY_KEY = 'Property';
-var DELAY_KEY = 'Delay';
-var TIMING_KEY = 'TimingFunction';
-var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
-var ANIMATION_PLAYSTATE_KEY = 'PlayState';
-var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
-var CLOSING_TIME_BUFFER = 1.5;
var ONE_SECOND = 1000;
var BASE_TEN = 10;
-var SAFE_FAST_FORWARD_DURATION_VALUE = 9999;
-
-var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;
-var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;
-
-var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;
-var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;
+var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
+var CLOSING_TIME_BUFFER = 1.5;
var DETECT_CSS_PROPERTIES = {
transitionDuration: TRANSITION_DURATION_PROP,
@@ -602,6 +674,15 @@ var DETECT_STAGGER_CSS_PROPERTIES = {
animationDelay: ANIMATION_DELAY_PROP
};
+function getCssKeyframeDurationStyle(duration) {
+ return [ANIMATION_DURATION_PROP, duration + 's'];
+}
+
+function getCssDelayStyle(delay, isKeyframeAnimation) {
+ var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;
+ return [prop, delay + 's'];
+}
+
function computeCssStyles($window, element, properties) {
var styles = Object.create(null);
var detectedStyles = $window.getComputedStyle(element) || {};
@@ -658,37 +739,6 @@ function getCssTransitionDurationStyle(duration, applyOnlyDuration) {
return [style, value];
}
-function getCssKeyframeDurationStyle(duration) {
- return [ANIMATION_DURATION_PROP, duration + 's'];
-}
-
-function getCssDelayStyle(delay, isKeyframeAnimation) {
- var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;
- return [prop, delay + 's'];
-}
-
-function blockTransitions(node, duration) {
- // we use a negative delay value since it performs blocking
- // yet it doesn't kill any existing transitions running on the
- // same element which makes this safe for class-based animations
- var value = duration ? '-' + duration + 's' : '';
- applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);
- return [TRANSITION_DELAY_PROP, value];
-}
-
-function blockKeyframeAnimations(node, applyBlock) {
- var value = applyBlock ? 'paused' : '';
- var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;
- applyInlineStyle(node, [key, value]);
- return [key, value];
-}
-
-function applyInlineStyle(node, styleTuple) {
- var prop = styleTuple[0];
- var value = styleTuple[1];
- node.style[prop] = value;
-}
-
function createLocalCacheLookup() {
var cache = Object.create(null);
return {
@@ -721,9 +771,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
var gcsStaggerLookup = createLocalCacheLookup();
this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',
- '$document', '$sniffer', '$$rAFScheduler',
+ '$$forceReflow', '$sniffer', '$$rAFScheduler', '$animate',
function($window, $$jqLite, $$AnimateRunner, $timeout,
- $document, $sniffer, $$rAFScheduler) {
+ $$forceReflow, $sniffer, $$rAFScheduler, $animate) {
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
@@ -780,7 +830,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
return stagger || {};
}
- var bod = getDomNode($document).body;
+ var cancelLastRAFRequest;
var rafWaitQueue = [];
function waitUntilQuiet(callback) {
rafWaitQueue.push(callback);
@@ -788,27 +838,19 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
gcsLookup.flush();
gcsStaggerLookup.flush();
- //the line below will force the browser to perform a repaint so
- //that all the animated elements within the animation frame will
- //be properly updated and drawn on screen. This is required to
- //ensure that the preparation animation is properly flushed so that
- //the active state picks up from there. DO NOT REMOVE THIS LINE.
- //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH
- //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND
- //WILL TAKE YEARS AWAY FROM YOUR LIFE.
- var width = bod.offsetWidth + 1;
+ // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.
+ // PLEASE EXAMINE THE `$$forceReflow` service to understand why.
+ var pageWidth = $$forceReflow();
// we use a for loop to ensure that if the queue is changed
// during this looping then it will consider new requests
for (var i = 0; i < rafWaitQueue.length; i++) {
- rafWaitQueue[i](width);
+ rafWaitQueue[i](pageWidth);
}
rafWaitQueue.length = 0;
});
}
- return init;
-
function computeTimings(node, className, cacheKey) {
var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);
var aD = timings.animationDelay;
@@ -823,8 +865,14 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
return timings;
}
- function init(element, options) {
+ return function init(element, options) {
var node = getDomNode(element);
+ if (!node
+ || !node.parentNode
+ || !$animate.enabled()) {
+ return closeAndReturnNoopAnimator();
+ }
+
options = prepareAnimationOptions(options);
var temporaryStyles = [];
@@ -853,20 +901,20 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
var addRemoveClassName = '';
if (isStructural) {
- structuralClassName = pendClasses(method, 'ng-', true);
+ structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);
} else if (method) {
structuralClassName = method;
}
if (options.addClass) {
- addRemoveClassName += pendClasses(options.addClass, '-add');
+ addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);
}
if (options.removeClass) {
if (addRemoveClassName.length) {
addRemoveClassName += ' ';
}
- addRemoveClassName += pendClasses(options.removeClass, '-remove');
+ addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);
}
// there may be a situation where a structural animation is combined together
@@ -877,17 +925,20 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
// there actually is a detected transition or keyframe animation
if (options.applyClassesEarly && addRemoveClassName.length) {
applyAnimationClasses(element, options);
- addRemoveClassName = '';
}
- var setupClasses = [structuralClassName, addRemoveClassName].join(' ').trim();
- var fullClassName = classes + ' ' + setupClasses;
- var activeClasses = pendClasses(setupClasses, '-active');
+ var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();
+ var fullClassName = classes + ' ' + preparationClasses;
+ var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);
var hasToStyles = styles.to && Object.keys(styles.to).length > 0;
-
- // there is no way we can trigger an animation since no styles and
- // no classes are being applied which would then trigger a transition
- if (!hasToStyles && !setupClasses) {
+ var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;
+
+ // there is no way we can trigger an animation if no styles and
+ // no classes are being applied which would then trigger a transition,
+ // unless there a is raw keyframe value that is applied to the element.
+ if (!containsKeyframeAnimation
+ && !hasToStyles
+ && !preparationClasses) {
return closeAndReturnNoopAnimator();
}
@@ -902,10 +953,12 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
};
} else {
cacheKey = gcsHashFn(node, fullClassName);
- stagger = computeCachedCssStaggerStyles(node, setupClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);
+ stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);
}
- $$jqLite.addClass(element, setupClasses);
+ if (!options.$$skipPreparationClasses) {
+ $$jqLite.addClass(element, preparationClasses);
+ }
var applyOnlyDuration;
@@ -944,7 +997,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
// transition delay to allow for the transition to naturally do it's thing. The beauty here is
// that if there is no transition defined then nothing will happen and this will also allow
// other transitions to be stacked on top of each other without any chopping them out.
- if (isFirst) {
+ if (isFirst && !options.skipBlocking) {
blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);
}
@@ -986,6 +1039,18 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
return closeAndReturnNoopAnimator();
}
+ if (options.delay != null) {
+ var delayStyle = parseFloat(options.delay);
+
+ if (flags.applyTransitionDelay) {
+ temporaryStyles.push(getCssDelayStyle(delayStyle));
+ }
+
+ if (flags.applyAnimationDelay) {
+ temporaryStyles.push(getCssDelayStyle(delayStyle, true));
+ }
+ }
+
// we need to recalculate the delay value since we used a pre-emptive negative
// delay value and the delay value is required for the final event checking. This
// property will ensure that this will happen after the RAF phase has passed.
@@ -1003,12 +1068,13 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}
applyAnimationFromStyles(element, options);
- if (!flags.blockTransition) {
+
+ if (flags.blockTransition || flags.blockKeyframeAnimation) {
+ applyBlocking(maxDuration);
+ } else if (!options.skipBlocking) {
blockTransitions(node, false);
}
- applyBlocking(maxDuration);
-
// TODO(matsko): for 1.5 change this code to have an animator object for better debugging
return {
$$willAnimate: true,
@@ -1050,7 +1116,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
animationClosed = true;
animationPaused = false;
- $$jqLite.removeClass(element, setupClasses);
+ if (!options.$$skipPreparationClasses) {
+ $$jqLite.removeClass(element, preparationClasses);
+ }
$$jqLite.removeClass(element, activeClasses);
blockKeyframeAnimations(node, false);
@@ -1097,6 +1165,8 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
cancel: cancelFn
});
+ // should flush the cache animation
+ waitUntilQuiet(noop);
close();
return {
@@ -1110,6 +1180,10 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
function start() {
if (animationClosed) return;
+ if (!node.parentNode) {
+ close();
+ return;
+ }
var startTime, events = [];
@@ -1173,7 +1247,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
$$jqLite.addClass(element, activeClasses);
if (flags.recalculateTimingStyles) {
- fullClassName = node.className + ' ' + setupClasses;
+ fullClassName = node.className + ' ' + preparationClasses;
cacheKey = gcsHashFn(node, fullClassName);
timings = computeTimings(node, fullClassName, cacheKey);
@@ -1190,27 +1264,16 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
flags.hasAnimations = timings.animationDuration > 0;
}
- if (flags.applyTransitionDelay || flags.applyAnimationDelay) {
+ if (flags.applyAnimationDelay) {
relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay)
? parseFloat(options.delay)
: relativeDelay;
maxDelay = Math.max(relativeDelay, 0);
-
- var delayStyle;
- if (flags.applyTransitionDelay) {
- timings.transitionDelay = relativeDelay;
- delayStyle = getCssDelayStyle(relativeDelay);
- temporaryStyles.push(delayStyle);
- node.style[delayStyle[0]] = delayStyle[1];
- }
-
- if (flags.applyAnimationDelay) {
- timings.animationDelay = relativeDelay;
- delayStyle = getCssDelayStyle(relativeDelay, true);
- temporaryStyles.push(delayStyle);
- node.style[delayStyle[0]] = delayStyle[1];
- }
+ timings.animationDelay = relativeDelay;
+ delayStyle = getCssDelayStyle(relativeDelay, true);
+ temporaryStyles.push(delayStyle);
+ node.style[delayStyle[0]] = delayStyle[1];
}
maxDelayTime = maxDelay * ONE_SECOND;
@@ -1239,17 +1302,47 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}
startTime = Date.now();
- element.on(events.join(' '), onAnimationProgress);
- $timeout(onAnimationExpired, maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime);
+ var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;
+ var endTime = startTime + timerTime;
+
+ var animationsData = element.data(ANIMATE_TIMER_KEY) || [];
+ var setupFallbackTimer = true;
+ if (animationsData.length) {
+ var currentTimerData = animationsData[0];
+ setupFallbackTimer = endTime > currentTimerData.expectedEndTime;
+ if (setupFallbackTimer) {
+ $timeout.cancel(currentTimerData.timer);
+ } else {
+ animationsData.push(close);
+ }
+ }
+
+ if (setupFallbackTimer) {
+ var timer = $timeout(onAnimationExpired, timerTime, false);
+ animationsData[0] = {
+ timer: timer,
+ expectedEndTime: endTime
+ };
+ animationsData.push(close);
+ element.data(ANIMATE_TIMER_KEY, animationsData);
+ }
+ element.on(events.join(' '), onAnimationProgress);
applyAnimationToStyles(element, options);
}
function onAnimationExpired() {
- // although an expired animation is a failed animation, getting to
- // this outcome is very easy if the CSS code screws up. Therefore we
- // should still continue normally as if the animation completed correctly.
- close();
+ var animationsData = element.data(ANIMATE_TIMER_KEY);
+
+ // this will be false in the event that the element was
+ // removed from the DOM (via a leave animation or something
+ // similar)
+ if (animationsData) {
+ for (var i = 1; i < animationsData.length; i++) {
+ animationsData[i]();
+ }
+ element.removeData(ANIMATE_TIMER_KEY);
+ }
}
function onAnimationProgress(event) {
@@ -1276,7 +1369,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}
}
}
- }
+ };
}];
}];
@@ -1289,17 +1382,19 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';
var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';
- this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$document', '$sniffer',
- function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $document, $sniffer) {
+ this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$$body', '$sniffer', '$$jqLite',
+ function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $$body, $sniffer, $$jqLite) {
// only browsers that support these properties can render animations
if (!$sniffer.animations && !$sniffer.transitions) return noop;
- var bodyNode = getDomNode($document).body;
+ var bodyNode = getDomNode($$body);
var rootNode = getDomNode($rootElement);
var rootBodyElement = jqLite(bodyNode.parentNode === rootNode ? bodyNode : rootNode);
+ var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
return function initDriverFn(animationDetails) {
return animationDetails.from && animationDetails.to
? prepareFromToAnchorAnimation(animationDetails.from,
@@ -1450,8 +1545,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
}
function prepareFromToAnchorAnimation(from, to, classes, anchors) {
- var fromAnimation = prepareRegularAnimation(from);
- var toAnimation = prepareRegularAnimation(to);
+ var fromAnimation = prepareRegularAnimation(from, noop);
+ var toAnimation = prepareRegularAnimation(to, noop);
var anchorAnimations = [];
forEach(anchors, function(anchor) {
@@ -1507,19 +1602,23 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
var options = animationDetails.options || {};
if (animationDetails.structural) {
- // structural animations ensure that the CSS classes are always applied
- // before the detection starts.
- options.structural = options.applyClassesEarly = true;
+ options.event = animationDetails.event;
+ options.structural = true;
+ options.applyClassesEarly = true;
// we special case the leave animation since we want to ensure that
// the element is removed as soon as the animation is over. Otherwise
// a flicker might appear or the element may not be removed at all
- options.event = animationDetails.event;
- if (options.event === 'leave') {
+ if (animationDetails.event === 'leave') {
options.onDone = options.domOperation;
}
- } else {
- options.event = null;
+ }
+
+ // We assign the preparationClasses as the actual animation event since
+ // the internals of $animateCss will just suffix the event token values
+ // with `-active` to trigger the animation.
+ if (options.preparationClasses) {
+ options.event = concatWithSpace(options.event, options.preparationClasses);
}
var animator = $animateCss(element, options);
@@ -1538,8 +1637,8 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
// by the time...
var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
- this.$get = ['$injector', '$$AnimateRunner', '$$rAFMutex', '$$jqLite',
- function($injector, $$AnimateRunner, $$rAFMutex, $$jqLite) {
+ this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',
+ function($injector, $$AnimateRunner, $$jqLite) {
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
// $animateJs(element, 'enter');
@@ -1896,8 +1995,8 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
});
rules.skip.push(function(element, newAnimation, currentAnimation) {
- // if there is a current animation then skip the class-based animation
- return currentAnimation.structural && !newAnimation.structural;
+ // if there is an ongoing current animation then don't even bother running the class-based animation
+ return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;
});
rules.cancel.push(function(element, newAnimation, currentAnimation) {
@@ -1919,14 +2018,13 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return (nO.addClass && nO.addClass === cO.removeClass) || (nO.removeClass && nO.removeClass === cO.addClass);
});
- this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',
- '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite',
- function($$rAF, $rootScope, $rootElement, $document, $$HashMap,
- $$animation, $$AnimateRunner, $templateRequest, $$jqLite) {
+ this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$body', '$$HashMap',
+ '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',
+ function($$rAF, $rootScope, $rootElement, $document, $$body, $$HashMap,
+ $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) {
var activeAnimationsLookup = new $$HashMap();
var disabledElementsLookup = new $$HashMap();
-
var animationsEnabled = null;
// Wait until all directive and route-related templates are downloaded and
@@ -1958,8 +2056,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
);
- var bodyElement = jqLite($document[0].body);
-
var callbackRegistry = {};
// remember that the classNameFilter is set during the provider/config
@@ -2095,22 +2191,22 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
// These methods will become available after the digest has passed
var runner = new $$AnimateRunner();
- // there are situations where a directive issues an animation for
- // a jqLite wrapper that contains only comment nodes... If this
- // happens then there is no way we can perform an animation
- if (!node) {
- close();
- return runner;
- }
-
if (isArray(options.addClass)) {
options.addClass = options.addClass.join(' ');
}
+ if (options.addClass && !isString(options.addClass)) {
+ options.addClass = null;
+ }
+
if (isArray(options.removeClass)) {
options.removeClass = options.removeClass.join(' ');
}
+ if (options.removeClass && !isString(options.removeClass)) {
+ options.removeClass = null;
+ }
+
if (options.from && !isObject(options.from)) {
options.from = null;
}
@@ -2119,6 +2215,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
options.to = null;
}
+ // there are situations where a directive issues an animation for
+ // a jqLite wrapper that contains only comment nodes... If this
+ // happens then there is no way we can perform an animation
+ if (!node) {
+ close();
+ return runner;
+ }
+
var className = [node.className, options.addClass, options.removeClass].join(' ');
if (!isAnimatableClassName(className)) {
close();
@@ -2183,8 +2287,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
// method which will call the runner methods in async.
existingAnimation.close();
} else {
- // this will merge the existing animation options into this new follow-up animation
- mergeAnimationOptions(element, newAnimation.options, existingAnimation.options);
+ // this will merge the new animation options into existing animation options
+ mergeAnimationOptions(element, existingAnimation.options, newAnimation.options);
+ return existingAnimation.runner;
}
} else {
// a joined animation means that this animation will take over the existing one
@@ -2195,9 +2300,14 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
if (existingAnimation.state === RUNNING_STATE) {
normalizeAnimationOptions(element, options);
} else {
+ applyGeneratedPreparationClasses(element, isStructural ? event : null, options);
+
event = newAnimation.event = existingAnimation.event;
options = mergeAnimationOptions(element, existingAnimation.options, newAnimation.options);
- return runner;
+
+ //we return the same runner since only the option values of this animation will
+ //be fed into the `existingAnimation`.
+ return existingAnimation.runner;
}
}
}
@@ -2223,10 +2333,6 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return runner;
}
- if (isStructural) {
- closeParentClassBasedAnimations(parent);
- }
-
// the counter keeps track of cancelled animations
var counter = (existingAnimation.counter || 0) + 1;
newAnimation.counter = counter;
@@ -2284,12 +2390,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
? 'setClass'
: animationDetails.event;
- if (animationDetails.structural) {
- closeParentClassBasedAnimations(parentElement);
- }
-
markElementAnimationState(element, RUNNING_STATE);
var realRunner = $$animation(element, event, animationDetails.options);
+
realRunner.done(function(status) {
close(!status);
var animationDetails = activeAnimationsLookup.get(node);
@@ -2313,6 +2416,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
function close(reject) { // jshint ignore:line
+ clearGeneratedClasses(element, options);
applyAnimationClasses(element, options);
applyAnimationStyles(element, options);
options.domOperation();
@@ -2349,36 +2453,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB);
}
- function closeParentClassBasedAnimations(startingElement) {
- var parentNode = getDomNode(startingElement);
- do {
- if (!parentNode || parentNode.nodeType !== ELEMENT_NODE) break;
-
- var animationDetails = activeAnimationsLookup.get(parentNode);
- if (animationDetails) {
- examineParentAnimation(parentNode, animationDetails);
- }
-
- parentNode = parentNode.parentNode;
- } while (true);
-
- // since animations are detected from CSS classes, we need to flush all parent
- // class-based animations so that the parent classes are all present for child
- // animations to properly function (otherwise any CSS selectors may not work)
- function examineParentAnimation(node, animationDetails) {
- // enter/leave/move always have priority
- if (animationDetails.structural || !hasAnimationClasses(animationDetails.options)) return;
-
- if (animationDetails.state === RUNNING_STATE) {
- animationDetails.runner.end();
- }
- clearElementAnimationState(node);
- }
- }
-
function areAnimationsAllowed(element, parentElement, event) {
- var bodyElementDetected = false;
- var rootElementDetected = false;
+ var bodyElementDetected = isMatchingElement(element, $$body) || element[0].nodeName === 'HTML';
+ var rootElementDetected = isMatchingElement(element, $rootElement);
var parentAnimationDetected = false;
var animateChildren;
@@ -2433,7 +2510,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
if (!bodyElementDetected) {
// we also need to ensure that the element is or will be apart of the body element
// otherwise it is pointless to even issue an animation to be rendered
- bodyElementDetected = isMatchingElement(parentElement, bodyElement);
+ bodyElementDetected = isMatchingElement(parentElement, $$body);
}
parentElement = parentElement.parent();
@@ -2459,19 +2536,34 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}];
}];
-var $$rAFMutexFactory = ['$$rAF', function($$rAF) {
+var $$AnimateAsyncRunFactory = ['$$rAF', function($$rAF) {
+ var waitQueue = [];
+
+ function waitForTick(fn) {
+ waitQueue.push(fn);
+ if (waitQueue.length > 1) return;
+ $$rAF(function() {
+ for (var i = 0; i < waitQueue.length; i++) {
+ waitQueue[i]();
+ }
+ waitQueue = [];
+ });
+ }
+
return function() {
var passed = false;
- $$rAF(function() {
+ waitForTick(function() {
passed = true;
});
- return function(fn) {
- passed ? fn() : $$rAF(fn);
+ return function(callback) {
+ passed ? callback() : waitForTick(callback);
};
};
}];
-var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) {
+var $$AnimateRunnerFactory = ['$q', '$sniffer', '$$animateAsyncRun',
+ function($q, $sniffer, $$animateAsyncRun) {
+
var INITIAL_STATE = 0;
var DONE_PENDING_STATE = 1;
var DONE_COMPLETE_STATE = 2;
@@ -2516,7 +2608,7 @@ var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) {
this.setHost(host);
this._doneCallbacks = [];
- this._runInAnimationFrame = $$rAFMutex();
+ this._runInAnimationFrame = $$animateAsyncRun();
this._state = 0;
}
@@ -2628,15 +2720,93 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
return element.data(RUNNER_STORAGE_KEY);
}
- this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$rAFScheduler',
- function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$rAFScheduler) {
+ this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler',
+ function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) {
var animationQueue = [];
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
- var totalPendingClassBasedAnimations = 0;
- var totalActiveClassBasedAnimations = 0;
- var classBasedAnimationsQueue = [];
+ function sortAnimations(animations) {
+ var tree = { children: [] };
+ var i, lookup = new $$HashMap();
+
+ // this is done first beforehand so that the hashmap
+ // is filled with a list of the elements that will be animated
+ for (i = 0; i < animations.length; i++) {
+ var animation = animations[i];
+ lookup.put(animation.domNode, animations[i] = {
+ domNode: animation.domNode,
+ fn: animation.fn,
+ children: []
+ });
+ }
+
+ for (i = 0; i < animations.length; i++) {
+ processNode(animations[i]);
+ }
+
+ return flatten(tree);
+
+ function processNode(entry) {
+ if (entry.processed) return entry;
+ entry.processed = true;
+
+ var elementNode = entry.domNode;
+ var parentNode = elementNode.parentNode;
+ lookup.put(elementNode, entry);
+
+ var parentEntry;
+ while (parentNode) {
+ parentEntry = lookup.get(parentNode);
+ if (parentEntry) {
+ if (!parentEntry.processed) {
+ parentEntry = processNode(parentEntry);
+ }
+ break;
+ }
+ parentNode = parentNode.parentNode;
+ }
+
+ (parentEntry || tree).children.push(entry);
+ return entry;
+ }
+
+ function flatten(tree) {
+ var result = [];
+ var queue = [];
+ var i;
+
+ for (i = 0; i < tree.children.length; i++) {
+ queue.push(tree.children[i]);
+ }
+
+ var remainingLevelEntries = queue.length;
+ var nextLevelEntries = 0;
+ var row = [];
+
+ for (i = 0; i < queue.length; i++) {
+ var entry = queue[i];
+ if (remainingLevelEntries <= 0) {
+ remainingLevelEntries = nextLevelEntries;
+ nextLevelEntries = 0;
+ result.push(row);
+ row = [];
+ }
+ row.push(entry.fn);
+ entry.children.forEach(function(childEntry) {
+ nextLevelEntries++;
+ queue.push(childEntry);
+ });
+ remainingLevelEntries--;
+ }
+
+ if (row.length) {
+ result.push(row);
+ }
+
+ return result;
+ }
+ }
// TODO(matsko): document the signature in a better way
return function(element, event, options) {
@@ -2666,19 +2836,12 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
options.tempClasses = null;
}
- var classBasedIndex;
- if (!isStructural) {
- classBasedIndex = totalPendingClassBasedAnimations;
- totalPendingClassBasedAnimations += 1;
- }
-
animationQueue.push({
// this data is used by the postDigest code and passed into
// the driver step function
element: element,
classes: classes,
event: event,
- classBasedIndex: classBasedIndex,
structural: isStructural,
options: options,
beforeStart: beforeStart,
@@ -2693,10 +2856,6 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
if (animationQueue.length > 1) return runner;
$rootScope.$$postDigest(function() {
- totalActiveClassBasedAnimations = totalPendingClassBasedAnimations;
- totalPendingClassBasedAnimations = 0;
- classBasedAnimationsQueue.length = 0;
-
var animations = [];
forEach(animationQueue, function(entry) {
// the element was destroyed early on which removed the runner
@@ -2704,67 +2863,58 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
// at all and it already has been closed due to destruction.
if (getRunner(entry.element)) {
animations.push(entry);
+ } else {
+ entry.close();
}
});
// now any future animations will be in another postDigest
animationQueue.length = 0;
- forEach(groupAnimations(animations), function(animationEntry) {
- if (animationEntry.structural) {
- triggerAnimationStart();
- } else {
- classBasedAnimationsQueue.push({
- node: getDomNode(animationEntry.element),
- fn: triggerAnimationStart
- });
-
- if (animationEntry.classBasedIndex === totalActiveClassBasedAnimations - 1) {
- // we need to sort each of the animations in order of parent to child
- // relationships. This ensures that the child classes are applied at the
- // right time.
- classBasedAnimationsQueue = classBasedAnimationsQueue.sort(function(a,b) {
- return b.node.contains(a.node);
- }).map(function(entry) {
- return entry.fn;
- });
-
- $$rAFScheduler(classBasedAnimationsQueue);
- }
- }
-
- function triggerAnimationStart() {
- // it's important that we apply the `ng-animate` CSS class and the
- // temporary classes before we do any driver invoking since these
- // CSS classes may be required for proper CSS detection.
- animationEntry.beforeStart();
-
- var startAnimationFn, closeFn = animationEntry.close;
-
- // in the event that the element was removed before the digest runs or
- // during the RAF sequencing then we should not trigger the animation.
- var targetElement = animationEntry.anchors
- ? (animationEntry.from.element || animationEntry.to.element)
- : animationEntry.element;
-
- if (getRunner(targetElement)) {
- var operation = invokeFirstDriver(animationEntry);
- if (operation) {
- startAnimationFn = operation.start;
+ var groupedAnimations = groupAnimations(animations);
+ var toBeSortedAnimations = [];
+
+ forEach(groupedAnimations, function(animationEntry) {
+ toBeSortedAnimations.push({
+ domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element),
+ fn: function triggerAnimationStart() {
+ // it's important that we apply the `ng-animate` CSS class and the
+ // temporary classes before we do any driver invoking since these
+ // CSS classes may be required for proper CSS detection.
+ animationEntry.beforeStart();
+
+ var startAnimationFn, closeFn = animationEntry.close;
+
+ // in the event that the element was removed before the digest runs or
+ // during the RAF sequencing then we should not trigger the animation.
+ var targetElement = animationEntry.anchors
+ ? (animationEntry.from.element || animationEntry.to.element)
+ : animationEntry.element;
+
+ if (getRunner(targetElement)) {
+ var operation = invokeFirstDriver(animationEntry);
+ if (operation) {
+ startAnimationFn = operation.start;
+ }
}
- }
- if (!startAnimationFn) {
- closeFn();
- } else {
- var animationRunner = startAnimationFn();
- animationRunner.done(function(status) {
- closeFn(!status);
- });
- updateAnimationRunners(animationEntry, animationRunner);
+ if (!startAnimationFn) {
+ closeFn();
+ } else {
+ var animationRunner = startAnimationFn();
+ animationRunner.done(function(status) {
+ closeFn(!status);
+ });
+ updateAnimationRunners(animationEntry, animationRunner);
+ }
}
- }
+ });
});
+
+ // we need to sort each of the animations in order of parent to child
+ // relationships. This ensures that the child classes are applied at the
+ // right time.
+ $$rAFScheduler(sortAnimations(toBeSortedAnimations));
});
return runner;
@@ -2951,7 +3101,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
/* global angularAnimateModule: true,
- $$rAFMutexFactory,
+ $$BodyProvider,
+ $$AnimateAsyncRunFactory,
$$rAFSchedulerFactory,
$$AnimateChildrenDirective,
$$AnimateRunnerFactory,
@@ -2969,7 +3120,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* @description
*
* The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via
- * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` then the animation hooks are enabled for an Angular app.
+ * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app.
*
* <div doc-module-components="ngAnimate"></div>
*
@@ -3002,7 +3153,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML
* and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.
*
- * The example below shows how an `enter` animation can be made possible on a element using `ng-if`:
+ * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:
*
* ```html
* <div ng-if="bool" class="fade">
@@ -3137,8 +3288,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* /* this will have a 100ms delay between each successive leave animation */
* transition-delay: 0.1s;
*
- * /* in case the stagger doesn't work then the duration value
- * must be set to 0 to avoid an accidental CSS inheritance */
+ * /* As of 1.4.4, this must always be set: it signals ngAnimate
+ * to not accidentally inherit a delay property from another CSS class */
* transition-duration: 0s;
* }
* .my-animation.ng-enter.ng-enter-active {
@@ -3336,6 +3487,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* enter: function(element, doneFn) {
* var runner = $animateCss(element, {
* event: 'enter',
+ * structural: true,
* addClass: 'maroon-setting',
* from: { height:0 },
* to: { height: 200 }
@@ -3686,15 +3838,16 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* @description
* The ngAnimate `$animate` service documentation is the same for the core `$animate` service.
*
- * Click here {@link ng.$animate $animate to learn more about animations with `$animate`}.
+ * Click here {@link ng.$animate to learn more about animations with `$animate`}.
*/
angular.module('ngAnimate', [])
- .directive('ngAnimateChildren', $$AnimateChildrenDirective)
+ .provider('$$body', $$BodyProvider)
- .factory('$$rAFMutex', $$rAFMutexFactory)
+ .directive('ngAnimateChildren', $$AnimateChildrenDirective)
.factory('$$rAFScheduler', $$rAFSchedulerFactory)
.factory('$$AnimateRunner', $$AnimateRunnerFactory)
+ .factory('$$animateAsyncRun', $$AnimateAsyncRunFactory)
.provider('$$animateQueue', $$AnimateQueueProvider)
.provider('$$animation', $$AnimationProvider)