From 382c506e61f11d9ebf41d2c90fc7794a3bb71900 Mon Sep 17 00:00:00 2001 From: jz385p Date: Tue, 21 Jul 2020 13:57:46 +0530 Subject: [PATCH] removed AngularJS project from Portal SDK removed AngularJS code base from the project Issue-ID: PORTAL-950 Change-Id: I098126e93fd7e6ada8a0babae58524f9d2ac76be Signed-off-by: jz385p --- .../main/webapp/app/fusion/external/d3/js/intro.js | 1 - .../external/b2b/css/b2b-angular/font_icons.css | 1 - .../ds2/css/digital-ng-library/ecomp-ionicons.css | 193 - .../ds2/css/digital-ng-library/ionicons.css | 1480 - .../app/fusion/external/ds2/css/fonts/ionicons.eot | Bin 120724 -> 0 bytes .../app/fusion/external/ds2/css/fonts/ionicons.svg | 2230 - .../app/fusion/external/ds2/css/fonts/ionicons.ttf | Bin 188508 -> 0 bytes .../fusion/external/ds2/css/fonts/ionicons.woff | Bin 67904 -> 0 bytes .../DS2-controllers/ds-profile/post-controller.js | 3 - .../scripts/DS2-controllers/samplePage-route.js | 19 - .../app/fusion/scripts/DS2-services/postSearch.js | 5 - .../scripts/DS2-view-models/ds2-profile/post.html | 3 - .../ds2-profile/profile_searchDS2.html | 60 - .../DS2-view-models/ds2-profile/self_profile.html | 190 - .../ds2-samplePages/ngsamplePage.html | 70 - .../ds2-samplePages/samplePage.html | 64 - .../app/fusion/scripts/DS2-view-models/footer.html | 13 - .../scripts/DS2-view-models/header-logo.html | 2 - .../app/fusion/scripts/view-models/footer.html | 17 - .../css/att_angular_gridster/sandbox-gridster.css | 173 - .../css/att_angular_gridster/ui-gridster.css | 116 - .../main/webapp/static/fusion/css/fusion-sunny.css | 362 - .../fusion/images/att_angular_gridster/grips.png | Bin 951 -> 0 bytes .../static/fusion/images/ecomp-login-550x360.jpg | Bin 62502 -> 0 bytes .../webapp/static/fusion/images/ecomp-login.jpg | Bin 21266 -> 0 bytes .../src/main/webapp/static/fusion/images/ecomp.png | Bin 107597 -> 0 bytes .../webapp/static/fusion/images/ecomp_trans.png | Bin 109926 -> 0 bytes .../js/att_angular_gridster/angular-gridster.js | 2244 - .../js/att_angular_gridster/ui-gridster-tpls.js | 168 - .../static/fusion/sample/css/images/blank.gif | Bin 49 -> 0 bytes .../webapp/static/fusion/sample/css/scribble.css | 40 - .../webapp/static/fusion/sample/css/slider.css | 142 - .../static/fusion/sample/css/spacegallery.css | 18 - .../webapp/static/fusion/sample/css/welcome.css | 173 - .../static/fusion/sample/html/area_chart.html | 49 - .../static/fusion/sample/html/bar_chart.html | 95 - .../static/fusion/sample/html/d3_gauges_demo.html | 39 - .../fusion/sample/html/data/speedometer2.csv | 16 - .../fusion/sample/html/data/speedometer3.csv | 2 - .../static/fusion/sample/html/data/worddata.csv | 127 - .../webapp/static/fusion/sample/html/donut_d3.html | 43 - .../static/fusion/sample/html/js/area_chart.min.js | 1 - .../static/fusion/sample/html/js/donut.min.js | 1 - .../static/fusion/sample/html/js/gauges.min.js | 1 - .../static/fusion/sample/html/js/line_chart.min.js | 1 - .../static/fusion/sample/html/js/pie_chart.min.js | 1 - .../static/fusion/sample/html/js/worddata.min.js | 1 - .../static/fusion/sample/html/line_chart.html | 49 - .../static/fusion/sample/html/pie_chart.html | 38 - .../static/fusion/sample/html/wordcloud.html | 36 - .../images/carousel/slide_b_drive_test_map.png | Bin 202465 -> 0 bytes .../sample/images/carousel/slide_b_eppt_county.png | Bin 21222 -> 0 bytes .../images/carousel/slide_b_eppt_regression.png | Bin 11536 -> 0 bytes .../images/carousel/slide_b_ios_throughput.png | Bin 26131 -> 0 bytes .../sample/images/carousel/slide_b_lata_map.png | Bin 192031 -> 0 bytes .../images/carousel/slide_b_lata_map_legend.png | Bin 3021 -> 0 bytes .../images/carousel/slide_b_nova_sdn_map.png | Bin 179361 -> 0 bytes .../static/fusion/sample/images/tunnels/1_mon.png | Bin 22762 -> 0 bytes .../static/fusion/sample/images/tunnels/2_tue.png | Bin 22772 -> 0 bytes .../static/fusion/sample/images/tunnels/3_wed.png | Bin 24012 -> 0 bytes .../static/fusion/sample/images/tunnels/4_thu.png | Bin 23902 -> 0 bytes .../static/fusion/sample/images/tunnels/5_fri.png | Bin 22349 -> 0 bytes .../static/fusion/sample/images/tunnels/6_sat.png | Bin 23674 -> 0 bytes .../static/fusion/sample/images/tunnels/7_sun.png | Bin 22845 -> 0 bytes .../fusion/sample/images/tunnels/BH_DLSTX_IN.png | Bin 10575 -> 0 bytes .../fusion/sample/images/tunnels/BH_DLSTX_OUT.png | Bin 10460 -> 0 bytes .../static/fusion/sample/images/tunnels/BH_Nat.png | Bin 10420 -> 0 bytes .../fusion/sample/images/tunnels/BH_Nat_Def.png | Bin 8941 -> 0 bytes .../sample/images/tunnels/BH_Nat_Priority.png | Bin 10590 -> 0 bytes .../webapp/static/fusion/sample/js/FusionCharts.js | 361 - .../main/webapp/static/fusion/sample/js/charts.js | 132 - .../webapp/static/fusion/sample/js/scribble.js | 19 - .../fusion/sample/org_chart/css/bootstrap.min.css | 351 - .../static/fusion/sample/org_chart/css/custom.css | 97 - .../fusion/sample/org_chart/css/prettify.css | 1 - .../static/fusion/sample/org_chart/prettify.js | 28 - .../external/angular-1.4.13/angular-animate.js | 4018 -- .../external/angular-1.4.13/angular-animate.min.js | 55 - .../angular-1.4.13/angular-animate.min.js.map | 8 - .../fusion/external/angular-1.4.13/angular-aria.js | 398 - .../external/angular-1.4.13/angular-aria.min.js | 14 - .../angular-1.4.13/angular-aria.min.js.map | 8 - .../external/angular-1.4.13/angular-cookies.js | 322 - .../external/angular-1.4.13/angular-cookies.min.js | 9 - .../angular-1.4.13/angular-cookies.min.js.map | 8 - .../fusion/external/angular-1.4.13/angular-csp.css | 21 - .../external/angular-1.4.13/angular-loader.js | 471 - .../external/angular-1.4.13/angular-loader.min.js | 10 - .../angular-1.4.13/angular-loader.min.js.map | 8 - .../angular-1.4.13/angular-message-format.js | 980 - .../angular-1.4.13/angular-message-format.min.js | 26 - .../angular-message-format.min.js.map | 8 - .../external/angular-1.4.13/angular-messages.js | 717 - .../angular-1.4.13/angular-messages.min.js | 12 - .../angular-1.4.13/angular-messages.min.js.map | 8 - .../external/angular-1.4.13/angular-mocks.js | 2556 -- .../external/angular-1.4.13/angular-resource.js | 694 - .../angular-1.4.13/angular-resource.min.js | 14 - .../angular-1.4.13/angular-resource.min.js.map | 8 - .../external/angular-1.4.13/angular-route.js | 999 - .../external/angular-1.4.13/angular-route.min.js | 15 - .../angular-1.4.13/angular-route.min.js.map | 8 - .../external/angular-1.4.13/angular-sanitize.js | 683 - .../angular-1.4.13/angular-sanitize.min.js | 16 - .../angular-1.4.13/angular-sanitize.min.js.map | 8 - .../external/angular-1.4.13/angular-scenario.js | 41266 ------------------- .../external/angular-1.4.13/angular-touch.js | 627 - .../external/angular-1.4.13/angular-touch.min.js | 13 - .../angular-1.4.13/angular-touch.min.js.map | 8 - .../app/fusion/external/angular-1.4.13/angular.js | 29845 -------------- .../fusion/external/angular-1.4.13/angular.min.js | 301 - .../external/angular-1.4.13/angular.min.js.map | 8 - .../app/fusion/external/angular-1.4.13/errors.json | 1 - .../angular-1.4.13/i18n/angular-locale_aa-dj.js | 128 - .../angular-1.4.13/i18n/angular-locale_aa-er.js | 128 - .../angular-1.4.13/i18n/angular-locale_aa-et.js | 128 - .../angular-1.4.13/i18n/angular-locale_aa.js | 128 - .../angular-1.4.13/i18n/angular-locale_af-na.js | 125 - .../angular-1.4.13/i18n/angular-locale_af-za.js | 125 - .../angular-1.4.13/i18n/angular-locale_af.js | 125 - .../angular-1.4.13/i18n/angular-locale_agq-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_agq.js | 143 - .../angular-1.4.13/i18n/angular-locale_ak-gh.js | 143 - .../angular-1.4.13/i18n/angular-locale_ak.js | 143 - .../angular-1.4.13/i18n/angular-locale_am-et.js | 125 - .../angular-1.4.13/i18n/angular-locale_am.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-001.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-ae.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-bh.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-dj.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-dz.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-eg.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-eh.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-er.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-il.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-iq.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-jo.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-km.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-kw.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-lb.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-ly.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-ma.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-mr.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-om.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-ps.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-qa.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-sa.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-sd.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-so.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-ss.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-sy.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-td.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-tn.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar-ye.js | 125 - .../angular-1.4.13/i18n/angular-locale_ar.js | 125 - .../angular-1.4.13/i18n/angular-locale_as-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_as.js | 143 - .../angular-1.4.13/i18n/angular-locale_asa-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_asa.js | 143 - .../angular-1.4.13/i18n/angular-locale_ast-es.js | 143 - .../angular-1.4.13/i18n/angular-locale_ast.js | 143 - .../i18n/angular-locale_az-cyrl-az.js | 125 - .../angular-1.4.13/i18n/angular-locale_az-cyrl.js | 125 - .../i18n/angular-locale_az-latn-az.js | 125 - .../angular-1.4.13/i18n/angular-locale_az-latn.js | 125 - .../angular-1.4.13/i18n/angular-locale_az.js | 125 - .../angular-1.4.13/i18n/angular-locale_bas-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_bas.js | 143 - .../angular-1.4.13/i18n/angular-locale_be-by.js | 125 - .../angular-1.4.13/i18n/angular-locale_be.js | 125 - .../angular-1.4.13/i18n/angular-locale_bem-zm.js | 143 - .../angular-1.4.13/i18n/angular-locale_bem.js | 143 - .../angular-1.4.13/i18n/angular-locale_bez-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_bez.js | 143 - .../angular-1.4.13/i18n/angular-locale_bg-bg.js | 125 - .../angular-1.4.13/i18n/angular-locale_bg.js | 125 - .../i18n/angular-locale_bm-latn-ml.js | 143 - .../angular-1.4.13/i18n/angular-locale_bm-latn.js | 143 - .../angular-1.4.13/i18n/angular-locale_bm-ml.js | 115 - .../angular-1.4.13/i18n/angular-locale_bm.js | 143 - .../angular-1.4.13/i18n/angular-locale_bn-bd.js | 125 - .../angular-1.4.13/i18n/angular-locale_bn-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_bn.js | 125 - .../angular-1.4.13/i18n/angular-locale_bo-cn.js | 143 - .../angular-1.4.13/i18n/angular-locale_bo-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_bo.js | 143 - .../angular-1.4.13/i18n/angular-locale_br-fr.js | 125 - .../angular-1.4.13/i18n/angular-locale_br.js | 125 - .../angular-1.4.13/i18n/angular-locale_brx-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_brx.js | 143 - .../i18n/angular-locale_bs-cyrl-ba.js | 143 - .../angular-1.4.13/i18n/angular-locale_bs-cyrl.js | 143 - .../i18n/angular-locale_bs-latn-ba.js | 143 - .../angular-1.4.13/i18n/angular-locale_bs-latn.js | 143 - .../angular-1.4.13/i18n/angular-locale_bs.js | 143 - .../angular-1.4.13/i18n/angular-locale_byn-er.js | 115 - .../angular-1.4.13/i18n/angular-locale_byn.js | 115 - .../angular-1.4.13/i18n/angular-locale_ca-ad.js | 143 - .../i18n/angular-locale_ca-es-valencia.js | 143 - .../angular-1.4.13/i18n/angular-locale_ca-es.js | 143 - .../angular-1.4.13/i18n/angular-locale_ca-fr.js | 143 - .../angular-1.4.13/i18n/angular-locale_ca-it.js | 143 - .../angular-1.4.13/i18n/angular-locale_ca.js | 143 - .../angular-1.4.13/i18n/angular-locale_cgg-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_cgg.js | 143 - .../angular-1.4.13/i18n/angular-locale_chr-us.js | 125 - .../angular-1.4.13/i18n/angular-locale_chr.js | 125 - .../i18n/angular-locale_ckb-arab-iq.js | 143 - .../i18n/angular-locale_ckb-arab-ir.js | 143 - .../angular-1.4.13/i18n/angular-locale_ckb-arab.js | 143 - .../angular-1.4.13/i18n/angular-locale_ckb-iq.js | 143 - .../angular-1.4.13/i18n/angular-locale_ckb-ir.js | 143 - .../i18n/angular-locale_ckb-latn-iq.js | 143 - .../angular-1.4.13/i18n/angular-locale_ckb-latn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ckb.js | 143 - .../angular-1.4.13/i18n/angular-locale_cs-cz.js | 143 - .../angular-1.4.13/i18n/angular-locale_cs.js | 143 - .../angular-1.4.13/i18n/angular-locale_cy-gb.js | 125 - .../angular-1.4.13/i18n/angular-locale_cy.js | 125 - .../angular-1.4.13/i18n/angular-locale_da-dk.js | 156 - .../angular-1.4.13/i18n/angular-locale_da-gl.js | 156 - .../angular-1.4.13/i18n/angular-locale_da.js | 156 - .../angular-1.4.13/i18n/angular-locale_dav-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_dav.js | 143 - .../angular-1.4.13/i18n/angular-locale_de-at.js | 143 - .../angular-1.4.13/i18n/angular-locale_de-be.js | 143 - .../angular-1.4.13/i18n/angular-locale_de-ch.js | 143 - .../angular-1.4.13/i18n/angular-locale_de-de.js | 143 - .../angular-1.4.13/i18n/angular-locale_de-li.js | 143 - .../angular-1.4.13/i18n/angular-locale_de-lu.js | 143 - .../angular-1.4.13/i18n/angular-locale_de.js | 143 - .../angular-1.4.13/i18n/angular-locale_dje-ne.js | 143 - .../angular-1.4.13/i18n/angular-locale_dje.js | 143 - .../angular-1.4.13/i18n/angular-locale_dsb-de.js | 143 - .../angular-1.4.13/i18n/angular-locale_dsb.js | 143 - .../angular-1.4.13/i18n/angular-locale_dua-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_dua.js | 143 - .../angular-1.4.13/i18n/angular-locale_dyo-sn.js | 143 - .../angular-1.4.13/i18n/angular-locale_dyo.js | 143 - .../angular-1.4.13/i18n/angular-locale_dz-bt.js | 143 - .../angular-1.4.13/i18n/angular-locale_dz.js | 143 - .../angular-1.4.13/i18n/angular-locale_ebu-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_ebu.js | 143 - .../angular-1.4.13/i18n/angular-locale_ee-gh.js | 143 - .../angular-1.4.13/i18n/angular-locale_ee-tg.js | 143 - .../angular-1.4.13/i18n/angular-locale_ee.js | 143 - .../angular-1.4.13/i18n/angular-locale_el-cy.js | 125 - .../angular-1.4.13/i18n/angular-locale_el-gr.js | 125 - .../angular-1.4.13/i18n/angular-locale_el.js | 125 - .../angular-1.4.13/i18n/angular-locale_en-001.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-150.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ag.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ai.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-as.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-au.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-bb.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-be.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-bm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-bs.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-bw.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-bz.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ca.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-cc.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ck.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-cx.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-dg.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-dm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-er.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-fj.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-fk.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-fm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gb.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gd.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gg.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gh.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gi.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gu.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-gy.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-hk.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ie.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-im.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-io.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-iso.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-je.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-jm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ki.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-kn.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ky.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-lc.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-lr.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ls.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mg.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mh.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mo.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mp.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ms.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mt.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mu.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-mw.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-my.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-na.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-nf.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ng.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-nr.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-nu.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-nz.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-pg.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ph.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-pk.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-pn.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-pr.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-pw.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-rw.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sb.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sc.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sd.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sg.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sh.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sl.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ss.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sx.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-sz.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-tc.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-tk.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-to.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-tt.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-tv.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-um.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-us.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-vc.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-vg.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-vi.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-vu.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-ws.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-za.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-zm.js | 143 - .../angular-1.4.13/i18n/angular-locale_en-zw.js | 143 - .../angular-1.4.13/i18n/angular-locale_en.js | 143 - .../angular-1.4.13/i18n/angular-locale_eo-001.js | 143 - .../angular-1.4.13/i18n/angular-locale_eo.js | 143 - .../angular-1.4.13/i18n/angular-locale_es-419.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ar.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-bo.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-cl.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-co.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-cr.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-cu.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-do.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ea.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ec.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-es.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-gq.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-gt.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-hn.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ic.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-mx.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ni.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-pa.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-pe.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ph.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-pr.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-py.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-sv.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-us.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-uy.js | 125 - .../angular-1.4.13/i18n/angular-locale_es-ve.js | 125 - .../angular-1.4.13/i18n/angular-locale_es.js | 125 - .../angular-1.4.13/i18n/angular-locale_et-ee.js | 143 - .../angular-1.4.13/i18n/angular-locale_et.js | 143 - .../angular-1.4.13/i18n/angular-locale_eu-es.js | 125 - .../angular-1.4.13/i18n/angular-locale_eu.js | 125 - .../angular-1.4.13/i18n/angular-locale_ewo-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_ewo.js | 143 - .../angular-1.4.13/i18n/angular-locale_fa-af.js | 125 - .../angular-1.4.13/i18n/angular-locale_fa-ir.js | 125 - .../angular-1.4.13/i18n/angular-locale_fa.js | 125 - .../angular-1.4.13/i18n/angular-locale_ff-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_ff-gn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ff-mr.js | 143 - .../angular-1.4.13/i18n/angular-locale_ff-sn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ff.js | 143 - .../angular-1.4.13/i18n/angular-locale_fi-fi.js | 143 - .../angular-1.4.13/i18n/angular-locale_fi.js | 143 - .../angular-1.4.13/i18n/angular-locale_fil-ph.js | 143 - .../angular-1.4.13/i18n/angular-locale_fil.js | 143 - .../angular-1.4.13/i18n/angular-locale_fo-fo.js | 143 - .../angular-1.4.13/i18n/angular-locale_fo.js | 143 - .../angular-1.4.13/i18n/angular-locale_fr-be.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-bf.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-bi.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-bj.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-bl.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ca.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-cd.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-cf.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-cg.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ch.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ci.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-cm.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-dj.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-dz.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-fr.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ga.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-gf.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-gn.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-gp.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-gq.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ht.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-km.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-lu.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ma.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-mc.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-mf.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-mg.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ml.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-mq.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-mr.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-mu.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-nc.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-ne.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-pf.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-pm.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-re.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-rw.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-sc.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-sn.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-sy.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-td.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-tg.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-tn.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-vu.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-wf.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr-yt.js | 125 - .../angular-1.4.13/i18n/angular-locale_fr.js | 125 - .../angular-1.4.13/i18n/angular-locale_fur-it.js | 143 - .../angular-1.4.13/i18n/angular-locale_fur.js | 143 - .../angular-1.4.13/i18n/angular-locale_fy-nl.js | 143 - .../angular-1.4.13/i18n/angular-locale_fy.js | 143 - .../angular-1.4.13/i18n/angular-locale_ga-ie.js | 125 - .../angular-1.4.13/i18n/angular-locale_ga.js | 125 - .../angular-1.4.13/i18n/angular-locale_gd-gb.js | 143 - .../angular-1.4.13/i18n/angular-locale_gd.js | 143 - .../angular-1.4.13/i18n/angular-locale_gl-es.js | 143 - .../angular-1.4.13/i18n/angular-locale_gl.js | 143 - .../angular-1.4.13/i18n/angular-locale_gsw-ch.js | 125 - .../angular-1.4.13/i18n/angular-locale_gsw-fr.js | 125 - .../angular-1.4.13/i18n/angular-locale_gsw-li.js | 125 - .../angular-1.4.13/i18n/angular-locale_gsw.js | 125 - .../angular-1.4.13/i18n/angular-locale_gu-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_gu.js | 125 - .../angular-1.4.13/i18n/angular-locale_guz-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_guz.js | 143 - .../angular-1.4.13/i18n/angular-locale_gv-im.js | 143 - .../angular-1.4.13/i18n/angular-locale_gv.js | 143 - .../i18n/angular-locale_ha-latn-gh.js | 143 - .../i18n/angular-locale_ha-latn-ne.js | 143 - .../i18n/angular-locale_ha-latn-ng.js | 143 - .../angular-1.4.13/i18n/angular-locale_ha-latn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ha.js | 143 - .../angular-1.4.13/i18n/angular-locale_haw-us.js | 125 - .../angular-1.4.13/i18n/angular-locale_haw.js | 125 - .../angular-1.4.13/i18n/angular-locale_he-il.js | 143 - .../angular-1.4.13/i18n/angular-locale_he.js | 143 - .../angular-1.4.13/i18n/angular-locale_hi-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_hi.js | 125 - .../angular-1.4.13/i18n/angular-locale_hr-ba.js | 143 - .../angular-1.4.13/i18n/angular-locale_hr-hr.js | 143 - .../angular-1.4.13/i18n/angular-locale_hr.js | 143 - .../angular-1.4.13/i18n/angular-locale_hsb-de.js | 143 - .../angular-1.4.13/i18n/angular-locale_hsb.js | 143 - .../angular-1.4.13/i18n/angular-locale_hu-hu.js | 125 - .../angular-1.4.13/i18n/angular-locale_hu.js | 125 - .../angular-1.4.13/i18n/angular-locale_hy-am.js | 125 - .../angular-1.4.13/i18n/angular-locale_hy.js | 125 - .../angular-1.4.13/i18n/angular-locale_ia-fr.js | 128 - .../angular-1.4.13/i18n/angular-locale_ia.js | 128 - .../angular-1.4.13/i18n/angular-locale_id-id.js | 125 - .../angular-1.4.13/i18n/angular-locale_id.js | 125 - .../angular-1.4.13/i18n/angular-locale_ig-ng.js | 143 - .../angular-1.4.13/i18n/angular-locale_ig.js | 143 - .../angular-1.4.13/i18n/angular-locale_ii-cn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ii.js | 143 - .../angular-1.4.13/i18n/angular-locale_in.js | 125 - .../angular-1.4.13/i18n/angular-locale_is-is.js | 156 - .../angular-1.4.13/i18n/angular-locale_is.js | 156 - .../angular-1.4.13/i18n/angular-locale_it-ch.js | 143 - .../angular-1.4.13/i18n/angular-locale_it-it.js | 143 - .../angular-1.4.13/i18n/angular-locale_it-sm.js | 143 - .../angular-1.4.13/i18n/angular-locale_it.js | 143 - .../angular-1.4.13/i18n/angular-locale_iw.js | 143 - .../angular-1.4.13/i18n/angular-locale_ja-jp.js | 125 - .../angular-1.4.13/i18n/angular-locale_ja.js | 125 - .../angular-1.4.13/i18n/angular-locale_jgo-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_jgo.js | 143 - .../angular-1.4.13/i18n/angular-locale_jmc-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_jmc.js | 143 - .../angular-1.4.13/i18n/angular-locale_ka-ge.js | 125 - .../angular-1.4.13/i18n/angular-locale_ka.js | 125 - .../angular-1.4.13/i18n/angular-locale_kab-dz.js | 143 - .../angular-1.4.13/i18n/angular-locale_kab.js | 143 - .../angular-1.4.13/i18n/angular-locale_kam-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_kam.js | 143 - .../angular-1.4.13/i18n/angular-locale_kde-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_kde.js | 143 - .../angular-1.4.13/i18n/angular-locale_kea-cv.js | 143 - .../angular-1.4.13/i18n/angular-locale_kea.js | 143 - .../angular-1.4.13/i18n/angular-locale_khq-ml.js | 143 - .../angular-1.4.13/i18n/angular-locale_khq.js | 143 - .../angular-1.4.13/i18n/angular-locale_ki-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_ki.js | 143 - .../i18n/angular-locale_kk-cyrl-kz.js | 125 - .../angular-1.4.13/i18n/angular-locale_kk-cyrl.js | 125 - .../angular-1.4.13/i18n/angular-locale_kk.js | 125 - .../angular-1.4.13/i18n/angular-locale_kkj-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_kkj.js | 143 - .../angular-1.4.13/i18n/angular-locale_kl-gl.js | 143 - .../angular-1.4.13/i18n/angular-locale_kl.js | 143 - .../angular-1.4.13/i18n/angular-locale_kln-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_kln.js | 143 - .../angular-1.4.13/i18n/angular-locale_km-kh.js | 125 - .../angular-1.4.13/i18n/angular-locale_km.js | 125 - .../angular-1.4.13/i18n/angular-locale_kn-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_kn.js | 125 - .../angular-1.4.13/i18n/angular-locale_ko-kp.js | 125 - .../angular-1.4.13/i18n/angular-locale_ko-kr.js | 125 - .../angular-1.4.13/i18n/angular-locale_ko.js | 125 - .../angular-1.4.13/i18n/angular-locale_kok-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_kok.js | 143 - .../i18n/angular-locale_ks-arab-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_ks-arab.js | 143 - .../angular-1.4.13/i18n/angular-locale_ks.js | 143 - .../angular-1.4.13/i18n/angular-locale_ksb-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_ksb.js | 143 - .../angular-1.4.13/i18n/angular-locale_ksf-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_ksf.js | 143 - .../angular-1.4.13/i18n/angular-locale_ksh-de.js | 143 - .../angular-1.4.13/i18n/angular-locale_ksh.js | 143 - .../angular-1.4.13/i18n/angular-locale_kw-gb.js | 143 - .../angular-1.4.13/i18n/angular-locale_kw.js | 143 - .../i18n/angular-locale_ky-cyrl-kg.js | 125 - .../angular-1.4.13/i18n/angular-locale_ky-cyrl.js | 125 - .../angular-1.4.13/i18n/angular-locale_ky.js | 125 - .../angular-1.4.13/i18n/angular-locale_lag-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_lag.js | 143 - .../angular-1.4.13/i18n/angular-locale_lb-lu.js | 143 - .../angular-1.4.13/i18n/angular-locale_lb.js | 143 - .../angular-1.4.13/i18n/angular-locale_lg-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_lg.js | 143 - .../angular-1.4.13/i18n/angular-locale_lkt-us.js | 143 - .../angular-1.4.13/i18n/angular-locale_lkt.js | 143 - .../angular-1.4.13/i18n/angular-locale_ln-ao.js | 125 - .../angular-1.4.13/i18n/angular-locale_ln-cd.js | 125 - .../angular-1.4.13/i18n/angular-locale_ln-cf.js | 125 - .../angular-1.4.13/i18n/angular-locale_ln-cg.js | 125 - .../angular-1.4.13/i18n/angular-locale_ln.js | 125 - .../angular-1.4.13/i18n/angular-locale_lo-la.js | 125 - .../angular-1.4.13/i18n/angular-locale_lo.js | 125 - .../angular-1.4.13/i18n/angular-locale_lt-lt.js | 143 - .../angular-1.4.13/i18n/angular-locale_lt.js | 143 - .../angular-1.4.13/i18n/angular-locale_lu-cd.js | 143 - .../angular-1.4.13/i18n/angular-locale_lu.js | 143 - .../angular-1.4.13/i18n/angular-locale_luo-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_luo.js | 143 - .../angular-1.4.13/i18n/angular-locale_luy-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_luy.js | 143 - .../angular-1.4.13/i18n/angular-locale_lv-lv.js | 143 - .../angular-1.4.13/i18n/angular-locale_lv.js | 143 - .../angular-1.4.13/i18n/angular-locale_mas-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_mas-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_mas.js | 143 - .../angular-1.4.13/i18n/angular-locale_mer-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_mer.js | 143 - .../angular-1.4.13/i18n/angular-locale_mfe-mu.js | 143 - .../angular-1.4.13/i18n/angular-locale_mfe.js | 143 - .../angular-1.4.13/i18n/angular-locale_mg-mg.js | 143 - .../angular-1.4.13/i18n/angular-locale_mg.js | 143 - .../angular-1.4.13/i18n/angular-locale_mgh-mz.js | 143 - .../angular-1.4.13/i18n/angular-locale_mgh.js | 143 - .../angular-1.4.13/i18n/angular-locale_mgo-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_mgo.js | 143 - .../angular-1.4.13/i18n/angular-locale_mk-mk.js | 143 - .../angular-1.4.13/i18n/angular-locale_mk.js | 143 - .../angular-1.4.13/i18n/angular-locale_ml-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_ml.js | 125 - .../i18n/angular-locale_mn-cyrl-mn.js | 125 - .../angular-1.4.13/i18n/angular-locale_mn-cyrl.js | 125 - .../angular-1.4.13/i18n/angular-locale_mn.js | 125 - .../angular-1.4.13/i18n/angular-locale_mr-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_mr.js | 125 - .../i18n/angular-locale_ms-latn-bn.js | 125 - .../i18n/angular-locale_ms-latn-my.js | 125 - .../i18n/angular-locale_ms-latn-sg.js | 125 - .../angular-1.4.13/i18n/angular-locale_ms-latn.js | 125 - .../angular-1.4.13/i18n/angular-locale_ms.js | 125 - .../angular-1.4.13/i18n/angular-locale_mt-mt.js | 125 - .../angular-1.4.13/i18n/angular-locale_mt.js | 125 - .../angular-1.4.13/i18n/angular-locale_mua-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_mua.js | 143 - .../angular-1.4.13/i18n/angular-locale_my-mm.js | 125 - .../angular-1.4.13/i18n/angular-locale_my.js | 125 - .../angular-1.4.13/i18n/angular-locale_naq-na.js | 143 - .../angular-1.4.13/i18n/angular-locale_naq.js | 143 - .../angular-1.4.13/i18n/angular-locale_nb-no.js | 125 - .../angular-1.4.13/i18n/angular-locale_nb-sj.js | 125 - .../angular-1.4.13/i18n/angular-locale_nb.js | 125 - .../angular-1.4.13/i18n/angular-locale_nd-zw.js | 143 - .../angular-1.4.13/i18n/angular-locale_nd.js | 143 - .../angular-1.4.13/i18n/angular-locale_ne-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_ne-np.js | 125 - .../angular-1.4.13/i18n/angular-locale_ne.js | 125 - .../angular-1.4.13/i18n/angular-locale_nl-aw.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl-be.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl-bq.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl-cw.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl-nl.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl-sr.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl-sx.js | 143 - .../angular-1.4.13/i18n/angular-locale_nl.js | 143 - .../angular-1.4.13/i18n/angular-locale_nmg-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_nmg.js | 143 - .../angular-1.4.13/i18n/angular-locale_nn-no.js | 143 - .../angular-1.4.13/i18n/angular-locale_nn.js | 143 - .../angular-1.4.13/i18n/angular-locale_nnh-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_nnh.js | 143 - .../angular-1.4.13/i18n/angular-locale_no-no.js | 125 - .../angular-1.4.13/i18n/angular-locale_no.js | 125 - .../angular-1.4.13/i18n/angular-locale_nr-za.js | 128 - .../angular-1.4.13/i18n/angular-locale_nr.js | 128 - .../angular-1.4.13/i18n/angular-locale_nso-za.js | 128 - .../angular-1.4.13/i18n/angular-locale_nso.js | 128 - .../angular-1.4.13/i18n/angular-locale_nus-sd.js | 143 - .../angular-1.4.13/i18n/angular-locale_nus.js | 143 - .../angular-1.4.13/i18n/angular-locale_nyn-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_nyn.js | 143 - .../angular-1.4.13/i18n/angular-locale_om-et.js | 143 - .../angular-1.4.13/i18n/angular-locale_om-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_om.js | 143 - .../angular-1.4.13/i18n/angular-locale_or-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_or.js | 125 - .../angular-1.4.13/i18n/angular-locale_os-ge.js | 143 - .../angular-1.4.13/i18n/angular-locale_os-ru.js | 143 - .../angular-1.4.13/i18n/angular-locale_os.js | 143 - .../i18n/angular-locale_pa-arab-pk.js | 125 - .../angular-1.4.13/i18n/angular-locale_pa-arab.js | 125 - .../i18n/angular-locale_pa-guru-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_pa-guru.js | 125 - .../angular-1.4.13/i18n/angular-locale_pa.js | 125 - .../angular-1.4.13/i18n/angular-locale_pl-pl.js | 143 - .../angular-1.4.13/i18n/angular-locale_pl.js | 143 - .../angular-1.4.13/i18n/angular-locale_ps-af.js | 143 - .../angular-1.4.13/i18n/angular-locale_ps.js | 143 - .../angular-1.4.13/i18n/angular-locale_pt-ao.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-br.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-cv.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-gw.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-mo.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-mz.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-pt.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-st.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt-tl.js | 125 - .../angular-1.4.13/i18n/angular-locale_pt.js | 125 - .../angular-1.4.13/i18n/angular-locale_qu-bo.js | 143 - .../angular-1.4.13/i18n/angular-locale_qu-ec.js | 143 - .../angular-1.4.13/i18n/angular-locale_qu-pe.js | 143 - .../angular-1.4.13/i18n/angular-locale_qu.js | 143 - .../angular-1.4.13/i18n/angular-locale_rm-ch.js | 143 - .../angular-1.4.13/i18n/angular-locale_rm.js | 143 - .../angular-1.4.13/i18n/angular-locale_rn-bi.js | 143 - .../angular-1.4.13/i18n/angular-locale_rn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ro-md.js | 143 - .../angular-1.4.13/i18n/angular-locale_ro-ro.js | 143 - .../angular-1.4.13/i18n/angular-locale_ro.js | 143 - .../angular-1.4.13/i18n/angular-locale_rof-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_rof.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru-by.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru-kg.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru-kz.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru-md.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru-ru.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru-ua.js | 143 - .../angular-1.4.13/i18n/angular-locale_ru.js | 143 - .../angular-1.4.13/i18n/angular-locale_rw-rw.js | 143 - .../angular-1.4.13/i18n/angular-locale_rw.js | 143 - .../angular-1.4.13/i18n/angular-locale_rwk-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_rwk.js | 143 - .../angular-1.4.13/i18n/angular-locale_sah-ru.js | 143 - .../angular-1.4.13/i18n/angular-locale_sah.js | 143 - .../angular-1.4.13/i18n/angular-locale_saq-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_saq.js | 143 - .../angular-1.4.13/i18n/angular-locale_sbp-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_sbp.js | 143 - .../angular-1.4.13/i18n/angular-locale_se-fi.js | 143 - .../angular-1.4.13/i18n/angular-locale_se-no.js | 143 - .../angular-1.4.13/i18n/angular-locale_se-se.js | 143 - .../angular-1.4.13/i18n/angular-locale_se.js | 143 - .../angular-1.4.13/i18n/angular-locale_seh-mz.js | 143 - .../angular-1.4.13/i18n/angular-locale_seh.js | 143 - .../angular-1.4.13/i18n/angular-locale_ses-ml.js | 143 - .../angular-1.4.13/i18n/angular-locale_ses.js | 143 - .../angular-1.4.13/i18n/angular-locale_sg-cf.js | 143 - .../angular-1.4.13/i18n/angular-locale_sg.js | 143 - .../i18n/angular-locale_shi-latn-ma.js | 143 - .../angular-1.4.13/i18n/angular-locale_shi-latn.js | 143 - .../i18n/angular-locale_shi-tfng-ma.js | 143 - .../angular-1.4.13/i18n/angular-locale_shi-tfng.js | 143 - .../angular-1.4.13/i18n/angular-locale_shi.js | 143 - .../angular-1.4.13/i18n/angular-locale_si-lk.js | 143 - .../angular-1.4.13/i18n/angular-locale_si.js | 143 - .../angular-1.4.13/i18n/angular-locale_sk-sk.js | 143 - .../angular-1.4.13/i18n/angular-locale_sk.js | 143 - .../angular-1.4.13/i18n/angular-locale_sl-si.js | 143 - .../angular-1.4.13/i18n/angular-locale_sl.js | 143 - .../angular-1.4.13/i18n/angular-locale_smn-fi.js | 143 - .../angular-1.4.13/i18n/angular-locale_smn.js | 143 - .../angular-1.4.13/i18n/angular-locale_sn-zw.js | 143 - .../angular-1.4.13/i18n/angular-locale_sn.js | 143 - .../angular-1.4.13/i18n/angular-locale_so-dj.js | 143 - .../angular-1.4.13/i18n/angular-locale_so-et.js | 143 - .../angular-1.4.13/i18n/angular-locale_so-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_so-so.js | 143 - .../angular-1.4.13/i18n/angular-locale_so.js | 143 - .../angular-1.4.13/i18n/angular-locale_sq-al.js | 125 - .../angular-1.4.13/i18n/angular-locale_sq-mk.js | 125 - .../angular-1.4.13/i18n/angular-locale_sq-xk.js | 125 - .../angular-1.4.13/i18n/angular-locale_sq.js | 125 - .../i18n/angular-locale_sr-cyrl-ba.js | 143 - .../i18n/angular-locale_sr-cyrl-me.js | 143 - .../i18n/angular-locale_sr-cyrl-rs.js | 143 - .../i18n/angular-locale_sr-cyrl-xk.js | 143 - .../angular-1.4.13/i18n/angular-locale_sr-cyrl.js | 143 - .../i18n/angular-locale_sr-latn-ba.js | 143 - .../i18n/angular-locale_sr-latn-me.js | 143 - .../i18n/angular-locale_sr-latn-rs.js | 143 - .../i18n/angular-locale_sr-latn-xk.js | 143 - .../angular-1.4.13/i18n/angular-locale_sr-latn.js | 143 - .../angular-1.4.13/i18n/angular-locale_sr.js | 143 - .../angular-1.4.13/i18n/angular-locale_ss-sz.js | 128 - .../angular-1.4.13/i18n/angular-locale_ss-za.js | 128 - .../angular-1.4.13/i18n/angular-locale_ss.js | 128 - .../angular-1.4.13/i18n/angular-locale_ssy-er.js | 128 - .../angular-1.4.13/i18n/angular-locale_ssy.js | 128 - .../angular-1.4.13/i18n/angular-locale_st-ls.js | 115 - .../angular-1.4.13/i18n/angular-locale_st-za.js | 115 - .../angular-1.4.13/i18n/angular-locale_st.js | 115 - .../angular-1.4.13/i18n/angular-locale_sv-ax.js | 143 - .../angular-1.4.13/i18n/angular-locale_sv-fi.js | 143 - .../angular-1.4.13/i18n/angular-locale_sv-se.js | 143 - .../angular-1.4.13/i18n/angular-locale_sv.js | 143 - .../angular-1.4.13/i18n/angular-locale_sw-cd.js | 143 - .../angular-1.4.13/i18n/angular-locale_sw-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_sw-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_sw-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_sw.js | 143 - .../angular-1.4.13/i18n/angular-locale_swc-cd.js | 128 - .../angular-1.4.13/i18n/angular-locale_swc.js | 128 - .../angular-1.4.13/i18n/angular-locale_ta-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_ta-lk.js | 125 - .../angular-1.4.13/i18n/angular-locale_ta-my.js | 125 - .../angular-1.4.13/i18n/angular-locale_ta-sg.js | 125 - .../angular-1.4.13/i18n/angular-locale_ta.js | 125 - .../angular-1.4.13/i18n/angular-locale_te-in.js | 125 - .../angular-1.4.13/i18n/angular-locale_te.js | 125 - .../angular-1.4.13/i18n/angular-locale_teo-ke.js | 143 - .../angular-1.4.13/i18n/angular-locale_teo-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_teo.js | 143 - .../i18n/angular-locale_tg-cyrl-tj.js | 115 - .../angular-1.4.13/i18n/angular-locale_tg-cyrl.js | 115 - .../angular-1.4.13/i18n/angular-locale_tg.js | 115 - .../angular-1.4.13/i18n/angular-locale_th-th.js | 125 - .../angular-1.4.13/i18n/angular-locale_th.js | 125 - .../angular-1.4.13/i18n/angular-locale_ti-er.js | 143 - .../angular-1.4.13/i18n/angular-locale_ti-et.js | 143 - .../angular-1.4.13/i18n/angular-locale_ti.js | 143 - .../angular-1.4.13/i18n/angular-locale_tig-er.js | 115 - .../angular-1.4.13/i18n/angular-locale_tig.js | 115 - .../angular-1.4.13/i18n/angular-locale_tl.js | 143 - .../angular-1.4.13/i18n/angular-locale_tn-bw.js | 128 - .../angular-1.4.13/i18n/angular-locale_tn-za.js | 128 - .../angular-1.4.13/i18n/angular-locale_tn.js | 128 - .../angular-1.4.13/i18n/angular-locale_to-to.js | 143 - .../angular-1.4.13/i18n/angular-locale_to.js | 143 - .../angular-1.4.13/i18n/angular-locale_tr-cy.js | 125 - .../angular-1.4.13/i18n/angular-locale_tr-tr.js | 125 - .../angular-1.4.13/i18n/angular-locale_tr.js | 125 - .../angular-1.4.13/i18n/angular-locale_ts-za.js | 128 - .../angular-1.4.13/i18n/angular-locale_ts.js | 128 - .../angular-1.4.13/i18n/angular-locale_twq-ne.js | 143 - .../angular-1.4.13/i18n/angular-locale_twq.js | 143 - .../i18n/angular-locale_tzm-latn-ma.js | 143 - .../angular-1.4.13/i18n/angular-locale_tzm-latn.js | 143 - .../angular-1.4.13/i18n/angular-locale_tzm.js | 143 - .../i18n/angular-locale_ug-arab-cn.js | 143 - .../angular-1.4.13/i18n/angular-locale_ug-arab.js | 143 - .../angular-1.4.13/i18n/angular-locale_ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_uk-ua.js | 143 - .../angular-1.4.13/i18n/angular-locale_uk.js | 143 - .../angular-1.4.13/i18n/angular-locale_ur-in.js | 143 - .../angular-1.4.13/i18n/angular-locale_ur-pk.js | 143 - .../angular-1.4.13/i18n/angular-locale_ur.js | 143 - .../i18n/angular-locale_uz-arab-af.js | 125 - .../angular-1.4.13/i18n/angular-locale_uz-arab.js | 125 - .../i18n/angular-locale_uz-cyrl-uz.js | 125 - .../angular-1.4.13/i18n/angular-locale_uz-cyrl.js | 125 - .../i18n/angular-locale_uz-latn-uz.js | 125 - .../angular-1.4.13/i18n/angular-locale_uz-latn.js | 125 - .../angular-1.4.13/i18n/angular-locale_uz.js | 125 - .../i18n/angular-locale_vai-latn-lr.js | 143 - .../angular-1.4.13/i18n/angular-locale_vai-latn.js | 143 - .../i18n/angular-locale_vai-vaii-lr.js | 143 - .../angular-1.4.13/i18n/angular-locale_vai-vaii.js | 143 - .../angular-1.4.13/i18n/angular-locale_vai.js | 143 - .../angular-1.4.13/i18n/angular-locale_ve-za.js | 128 - .../angular-1.4.13/i18n/angular-locale_ve.js | 128 - .../angular-1.4.13/i18n/angular-locale_vi-vn.js | 125 - .../angular-1.4.13/i18n/angular-locale_vi.js | 125 - .../angular-1.4.13/i18n/angular-locale_vo-001.js | 128 - .../angular-1.4.13/i18n/angular-locale_vo.js | 128 - .../angular-1.4.13/i18n/angular-locale_vun-tz.js | 143 - .../angular-1.4.13/i18n/angular-locale_vun.js | 143 - .../angular-1.4.13/i18n/angular-locale_wae-ch.js | 143 - .../angular-1.4.13/i18n/angular-locale_wae.js | 143 - .../angular-1.4.13/i18n/angular-locale_wal-et.js | 115 - .../angular-1.4.13/i18n/angular-locale_wal.js | 115 - .../angular-1.4.13/i18n/angular-locale_xh-za.js | 115 - .../angular-1.4.13/i18n/angular-locale_xh.js | 115 - .../angular-1.4.13/i18n/angular-locale_xog-ug.js | 143 - .../angular-1.4.13/i18n/angular-locale_xog.js | 143 - .../angular-1.4.13/i18n/angular-locale_yav-cm.js | 143 - .../angular-1.4.13/i18n/angular-locale_yav.js | 143 - .../angular-1.4.13/i18n/angular-locale_yi-001.js | 143 - .../angular-1.4.13/i18n/angular-locale_yi.js | 143 - .../angular-1.4.13/i18n/angular-locale_yo-bj.js | 143 - .../angular-1.4.13/i18n/angular-locale_yo-ng.js | 143 - .../angular-1.4.13/i18n/angular-locale_yo.js | 143 - .../angular-1.4.13/i18n/angular-locale_zgh-ma.js | 143 - .../angular-1.4.13/i18n/angular-locale_zgh.js | 143 - .../angular-1.4.13/i18n/angular-locale_zh-cn.js | 125 - .../i18n/angular-locale_zh-hans-cn.js | 125 - .../i18n/angular-locale_zh-hans-hk.js | 125 - .../i18n/angular-locale_zh-hans-mo.js | 125 - .../i18n/angular-locale_zh-hans-sg.js | 125 - .../angular-1.4.13/i18n/angular-locale_zh-hans.js | 125 - .../i18n/angular-locale_zh-hant-hk.js | 125 - .../i18n/angular-locale_zh-hant-mo.js | 125 - .../i18n/angular-locale_zh-hant-tw.js | 125 - .../angular-1.4.13/i18n/angular-locale_zh-hant.js | 125 - .../angular-1.4.13/i18n/angular-locale_zh-hk.js | 125 - .../angular-1.4.13/i18n/angular-locale_zh-tw.js | 125 - .../angular-1.4.13/i18n/angular-locale_zh.js | 125 - .../angular-1.4.13/i18n/angular-locale_zu-za.js | 125 - .../angular-1.4.13/i18n/angular-locale_zu.js | 125 - .../fusion/external/angular-1.4.13/version.json | 1 - .../app/fusion/external/angular-1.4.13/version.txt | 1 - .../app/fusion/external/angular-bootstrap/index.js | 2 - .../angular-bootstrap/ui-bootstrap-csp.css | 115 - .../angular-bootstrap/ui-bootstrap-tpls.js | 7776 ---- .../angular-bootstrap/ui-bootstrap-tpls.min.js | 10 - .../external/angular-bootstrap/ui-bootstrap.js | 7412 ---- .../external/angular-bootstrap/ui-bootstrap.min.js | 10 - .../angular-gridster/dist/angular-gridster.css | 145 - .../angular-gridster/dist/angular-gridster.min.css | 1 - .../angular-gridster/dist/angular-gridster.min.js | 8 - .../angular-gridster/src/angular-gridster.js | 2239 - .../angular-gridster/src/angular-gridster.less | 167 - .../app/fusion/external/angular-ui-grid/index.js | 2 - .../fusion/external/angular-ui-grid/ui-grid.css | 2005 - .../fusion/external/angular-ui-grid/ui-grid.eot | Bin 10320 -> 0 bytes .../app/fusion/external/angular-ui-grid/ui-grid.js | 28935 ------------- .../external/angular-ui-grid/ui-grid.min.css | 4 - .../fusion/external/angular-ui-grid/ui-grid.min.js | 15 - .../fusion/external/angular-ui-grid/ui-grid.svg | 56 - .../fusion/external/angular-ui-grid/ui-grid.ttf | Bin 10156 -> 0 bytes .../fusion/external/angular-ui-grid/ui-grid.woff | Bin 5728 -> 0 bytes .../angular-ui/ui-bootstrap-tpls-1.1.2.min.js | 10 - .../angular-ui/ui-bootstrap-tpls-1.2.4.min.js | 10 - .../angular-ui/ui-sortable/v0.13.4/sortable.min.js | 8 - .../main/webapp/app/fusion/external/b2b/README.md | 30 - .../external/b2b/css/b2b-angular/b2b-angular.css | 11923 ------ .../css/b2b-angular/style/images/horse_shoe.jpg | Bin 16573 -> 0 bytes .../css/b2b-angular/style/images/icon-flyout.png | Bin 947 -> 0 bytes .../b2b/css/b2b-angular/style/images/treebg.png | Bin 82 -> 0 bytes .../b2b-angular/style/images/widget-thumbnail.png | Bin 1929 -> 0 bytes .../external/b2b/js/b2b-angular/b2b-library.min.js | 16053 -------- .../b2b/js/b2b-angular/style/images/horse_shoe.jpg | Bin 16573 -> 0 bytes .../js/b2b-angular/style/images/icon-flyout.png | Bin 947 -> 0 bytes .../b2b/js/b2b-angular/style/images/treebg.png | Bin 82 -> 0 bytes .../b2b-angular/style/images/widget-thumbnail.png | Bin 1929 -> 0 bytes .../js/b2b-angular/styles/images/icon-flyout.png | Bin 947 -> 0 bytes .../bootstrap-4.0.0/css/bootstrap-grid.css | 2050 - .../bootstrap-4.0.0/css/bootstrap-grid.css.map | 1 - .../bootstrap-4.0.0/css/bootstrap-grid.min.css | 7 - .../bootstrap-4.0.0/css/bootstrap-grid.min.css.map | 1 - .../bootstrap-4.0.0/css/bootstrap-reboot.css | 330 - .../bootstrap-4.0.0/css/bootstrap-reboot.css.map | 1 - .../bootstrap-4.0.0/css/bootstrap-reboot.min.css | 8 - .../css/bootstrap-reboot.min.css.map | 1 - .../external/bootstrap-4.0.0/css/bootstrap.css | 8975 ---- .../external/bootstrap-4.0.0/css/bootstrap.css.map | 1 - .../external/bootstrap-4.0.0/css/bootstrap.min.css | 7 - .../bootstrap-4.0.0/css/bootstrap.min.css.map | 1 - .../fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../bootstrap-4.0.0/js/bootstrap.bundle.js | 6328 --- .../bootstrap-4.0.0/js/bootstrap.bundle.js.map | 1 - .../bootstrap-4.0.0/js/bootstrap.bundle.min.js | 7 - .../bootstrap-4.0.0/js/bootstrap.bundle.min.js.map | 1 - .../external/bootstrap-4.0.0/js/bootstrap.js | 3894 -- .../external/bootstrap-4.0.0/js/bootstrap.js.map | 1 - .../external/bootstrap-4.0.0/js/bootstrap.min.js | 7 - .../bootstrap-4.0.0/js/bootstrap.min.js.map | 1 - .../webapp/app/fusion/external/bootstrap/bs.css | 678 - .../webapp/app/fusion/external/d3/css/nv.d3.css | 656 - .../main/webapp/app/fusion/external/d3/js/cie.js | 155 - .../app/fusion/external/d3/js/colorbrewer.js | 302 - .../main/webapp/app/fusion/external/d3/js/core.js | 122 - .../app/fusion/external/d3/js/crossfilter.js | 1180 - .../app/fusion/external/d3/js/crossfilter.min.js | 1 - .../webapp/app/fusion/external/d3/js/d3.geom.js | 816 - .../main/webapp/app/fusion/external/d3/js/d3.js | 5 - .../app/fusion/external/d3/js/d3.layout.cloud.js | 433 - .../webapp/app/fusion/external/d3/js/d3.layout.js | 908 - .../main/webapp/app/fusion/external/d3/js/d3.v2.js | 7037 ---- .../webapp/app/fusion/external/d3/js/d3.v2.min.js | 4 - .../webapp/app/fusion/external/d3/js/d3.v3.min.js | 1 - .../webapp/app/fusion/external/d3/js/fisheye.js | 86 - .../main/webapp/app/fusion/external/d3/js/hive.js | 80 - .../webapp/app/fusion/external/d3/js/horizon.js | 192 - .../app/fusion/external/d3/js/interactiveLayer.js | 251 - .../main/webapp/app/fusion/external/d3/js/intro.js | 2 - .../app/fusion/external/d3/js/models/axis-min.js | 1 - .../app/fusion/external/d3/js/models/axis.js | 470 - .../app/fusion/external/d3/js/models/axis.min.js | 1 - .../fusion/external/d3/js/models/backup/bullet.js | 250 - .../external/d3/js/models/backup/bulletChart.js | 349 - .../fusion/external/d3/js/models/boilerplate.js | 104 - .../app/fusion/external/d3/js/models/bullet.js | 385 - .../fusion/external/d3/js/models/bulletChart.js | 343 - .../external/d3/js/models/cumulativeLineChart.js | 782 - .../fusion/external/d3/js/models/discreteBar.js | 349 - .../external/d3/js/models/discreteBarChart.js | 333 - .../fusion/external/d3/js/models/distribution.js | 148 - .../fusion/external/d3/js/models/historicalBar.js | 331 - .../external/d3/js/models/historicalBarChart.js | 419 - .../fusion/external/d3/js/models/indentedTree.js | 337 - .../app/fusion/external/d3/js/models/legend.js | 270 - .../app/fusion/external/d3/js/models/line.js | 284 - .../app/fusion/external/d3/js/models/lineChart.js | 465 - .../external/d3/js/models/linePlusBarChart.js | 433 - .../d3/js/models/linePlusBarWithFocusChart.js | 658 - .../external/d3/js/models/lineWithFisheye.js | 200 - .../external/d3/js/models/lineWithFisheyeChart.js | 297 - .../external/d3/js/models/lineWithFocusChart.js | 574 - .../app/fusion/external/d3/js/models/multiBar.js | 461 - .../fusion/external/d3/js/models/multiBarChart.js | 524 - .../external/d3/js/models/multiBarHorizontal.js | 424 - .../d3/js/models/multiBarHorizontalChart.js | 434 - .../external/d3/js/models/multiBarTimeSeries.js | 384 - .../d3/js/models/multiBarTimeSeriesChart.js | 405 - .../app/fusion/external/d3/js/models/multiChart.js | 452 - .../app/fusion/external/d3/js/models/ohlcBar.js | 380 - .../external/d3/js/models/parallelCoordinates.js | 239 - .../webapp/app/fusion/external/d3/js/models/pie.js | 400 - .../app/fusion/external/d3/js/models/pieChart.js | 292 - .../app/fusion/external/d3/js/models/scatter.js | 674 - .../fusion/external/d3/js/models/scatterChart.js | 628 - .../external/d3/js/models/scatterPlusLineChart.js | 620 - .../app/fusion/external/d3/js/models/sparkline.js | 194 - .../fusion/external/d3/js/models/sparklinePlus.js | 295 - .../fusion/external/d3/js/models/stackedArea.js | 368 - .../external/d3/js/models/stackedAreaChart.js | 629 - .../main/webapp/app/fusion/external/d3/js/nv.d3.js | 13097 ------ .../webapp/app/fusion/external/d3/js/nv.d3.min.js | 1 - .../main/webapp/app/fusion/external/d3/js/outro.js | 1 - .../webapp/app/fusion/external/d3/js/sankey.js | 292 - .../webapp/app/fusion/external/d3/js/tooltip.js | 490 - .../main/webapp/app/fusion/external/d3/js/utils.js | 152 - .../ds2-bootstrap/b2b-bootstrap-common.css | 34 - .../webapp/app/fusion/external/ds2/js/appDS2.js | 1 - .../external/ebz/copyrighted-material-removed.txt | 0 .../webapp/app/fusion/external/gis/js/local.js | 178 - .../detect-element-resize.js | 147 - .../jquery.resize.js | 164 - .../webapp/app/fusion/external/jquery/.bower.json | 25 - .../app/fusion/external/jquery/dist/jquery.js | 10598 ----- .../app/fusion/external/jquery/dist/jquery.min.js | 2 - .../app/fusion/external/jquery/dist/jquery.min.map | 1 - .../app/fusion/external/leaflet-0.7.3/leaflet.css | 478 - .../app/fusion/external/leaflet-0.7.3/leaflet.js | 9 - .../app/fusion/external/lodash/4.17.11/lodash.js | 17107 -------- .../fusion/external/samples/css/images/blank.gif | Bin 49 -> 0 bytes .../app/fusion/external/samples/css/scribble.css | 40 - .../app/fusion/external/samples/css/slider.css | 142 - .../fusion/external/samples/css/spacegallery.css | 18 - .../fusion/external/samples/html/area_chart.html | 49 - .../fusion/external/samples/html/bar_chart.html | 95 - .../external/samples/html/d3_gauges_demo.html | 39 - .../external/samples/html/data/speedometer2.csv | 16 - .../external/samples/html/data/speedometer3.csv | 2 - .../fusion/external/samples/html/data/worddata.csv | 22 - .../app/fusion/external/samples/html/donut_d3.html | 43 - .../external/samples/html/js/area_chart.min.js | 1 - .../fusion/external/samples/html/js/donut.min.js | 1 - .../fusion/external/samples/html/js/gauges.min.js | 1 - .../external/samples/html/js/line_chart.min.js | 1 - .../external/samples/html/js/pie_chart.min.js | 1 - .../external/samples/html/js/worddata.min.js | 1 - .../fusion/external/samples/html/line_chart.html | 49 - .../fusion/external/samples/html/pie_chart.html | 38 - .../fusion/external/samples/html/wordcloud.html | 37 - .../external/samples/images/Calendar-16x16.png | Bin 552 -> 0 bytes .../fusion/external/samples/images/arrow-next.png | Bin 1561 -> 0 bytes .../fusion/external/samples/images/arrow-prev.png | Bin 1557 -> 0 bytes .../images/carousel/slide_b_drive_test_map.png | Bin 202465 -> 0 bytes .../images/carousel/slide_b_eppt_county.png | Bin 21222 -> 0 bytes .../images/carousel/slide_b_eppt_regression.png | Bin 11536 -> 0 bytes .../images/carousel/slide_b_ios_throughput.png | Bin 26131 -> 0 bytes .../samples/images/carousel/slide_b_lata_map.png | Bin 192031 -> 0 bytes .../images/carousel/slide_b_lata_map_legend.png | Bin 3021 -> 0 bytes .../images/carousel/slide_b_nova_sdn_map.png | Bin 179361 -> 0 bytes .../fusion/external/samples/images/copyicon.png | Bin 235 -> 0 bytes .../fusion/external/samples/images/deleteicon.gif | Bin 579 -> 0 bytes .../external/samples/images/example-frame.png | Bin 33699 -> 0 bytes .../app/fusion/external/samples/images/loading.gif | Bin 6820 -> 0 bytes .../external/samples/images/tunnels/1_mon.png | Bin 22762 -> 0 bytes .../external/samples/images/tunnels/2_tue.png | Bin 22772 -> 0 bytes .../external/samples/images/tunnels/3_wed.png | Bin 24012 -> 0 bytes .../external/samples/images/tunnels/4_thu.png | Bin 23902 -> 0 bytes .../external/samples/images/tunnels/5_fri.png | Bin 22349 -> 0 bytes .../external/samples/images/tunnels/6_sat.png | Bin 23674 -> 0 bytes .../external/samples/images/tunnels/7_sun.png | Bin 22845 -> 0 bytes .../samples/images/tunnels/BH_DLSTX_IN.png | Bin 10575 -> 0 bytes .../samples/images/tunnels/BH_DLSTX_OUT.png | Bin 10460 -> 0 bytes .../external/samples/images/tunnels/BH_Nat.png | Bin 10420 -> 0 bytes .../external/samples/images/tunnels/BH_Nat_Def.png | Bin 8941 -> 0 bytes .../samples/images/tunnels/BH_Nat_Priority.png | Bin 10590 -> 0 bytes .../app/fusion/external/samples/js/FusionCharts.js | 361 - .../app/fusion/external/samples/js/charts.js | 132 - .../app/fusion/external/samples/js/scribble.js | 19 - .../external/samples/js/slides.min.jquery.js | 20 - .../app/fusion/external/samples/js/spacegallery.js | 235 - .../samples/org_chart/css/bootstrap.min.css | 351 - .../external/samples/org_chart/css/custom.css | 97 - .../samples/org_chart/css/jquery.jOrgChart.css | 51 - .../external/samples/org_chart/css/prettify.css | 1 - .../fusion/external/samples/org_chart/example.html | 85 - .../external/samples/org_chart/example_vsp.html | 88 - .../external/samples/org_chart/images/bkgd.png | Bin 133 -> 0 bytes .../samples/org_chart/images/raspberry.jpg | Bin 5755 -> 0 bytes .../external/samples/org_chart/jquery.jOrgChart.js | 267 - .../fusion/external/samples/org_chart/prettify.js | 28 - .../app/fusion/external/showdown/0.3.4/showdown.js | 1454 - .../app/fusion/external/utils/js/browserCheck.js | 5 - .../src/main/webapp/app/fusion/fonts/dummy.txt | 0 .../scripts/controllers/nbook-framecontroller.js | 15 - .../scripts/controllers/nbookController.js | 97 - .../scripts/controllers/notebookFrameController.js | 26 - .../scripts/dependency/angular.js | 33345 --------------- .../scripts/view-models/notebook-frame.html | 65 - .../scripts/view-models/notebook-viz.html | 7 - .../scripts/view-models/notebook.htm | 33 - .../scripts/view-models/notebookInputs.html | 70 - .../scripts/DS2-controllers/admin-closed-cloop.js | 28 - .../scripts/DS2-controllers/admin-controller.js | 970 - .../scripts/DS2-controllers/admin-menu-edit.js | 184 - .../fusion/scripts/DS2-controllers/admin-route.js | 43 - .../scripts/DS2-controllers/admin-whitelist.js | 3 - .../DS2-controllers/bootstrap-sample-controller.js | 5 - .../DS2-controllers/bootstrap-sample-route.js | 7 - .../DS2-controllers/collaborate-list-controller.js | 71 - .../DS2-controllers/collaborate/collaborate.js | 7 - .../collaborate/workflowController.js | 490 - .../DS2-controllers/collaborateList-route.js | 19 - .../DS2-controllers/collaboration-controller.js | 266 - .../ds2-profile/self-profile-controller.js | 354 - .../ds2-reports/report-chart-controller.js | 499 - .../ds2-reports/report-import-controller.js | 20 - .../DS2-controllers/ds2-reports/report-router.js | 41 - .../ds2-reports/report-run-controller.js | 374 - .../ds2-reports/report-search-controller.js | 244 - .../ds2-reports/report-step-controller.js | 786 - .../ds2-sample/drools-controller.js | 53 - .../ds2-sample/nbook-framecontroller.js | 15 - .../ds2-sample/notebook-controller.js | 37 - .../ds2-sample/notebookFrameController.js | 24 - .../DS2-controllers/ds2-workflows/workflowApp.js | 6 - .../ds2-workflows/workflowController.js | 513 - .../ds2-workflows/workflowRouting.js | 8 - .../fn-menu-add-popup-controller.js | 339 - .../scripts/DS2-controllers/profile-route.js | 19 - .../profile-search-controller-DS2.js | 93 - .../DS2-controllers/sampleProfileController.js | 22 - .../DS2-controllers/usage-list-controller.js | 39 - .../scripts/DS2-controllers/welcome-controller.js | 408 - .../scripts/DS2-controllers/welcome-route.js | 7 - .../scripts/DS2-directives/b2b-leftnav-ext.js | 64 - .../app/fusion/scripts/DS2-directives/ds2Header.js | 118 - .../fusion/scripts/DS2-directives/ds2LeftMenu.js | 73 - .../app/fusion/scripts/DS2-directives/footer.js | 27 - .../app/fusion/scripts/DS2-modal/error_modal.html | 19 - .../fusion/scripts/DS2-modal/success_modal.html | 20 - .../scripts/DS2-modal/success_modalpopup.html | 20 - .../scripts/DS2-services/adminMenuService.js | 129 - .../fusion/scripts/DS2-services/adminService.js | 453 - .../scripts/DS2-services/ds2-modal/modalService.js | 38 - .../DS2-services/ds2-profile/selfProfileService.js | 114 - .../ds2-raptor-report/raptorReportFactory.js | 674 - .../ds2-raptor-report/reportModalControllers.js | 423 - .../ds2-raptor-report/stepFormFactory.js | 198 - .../DS2-services/ds2-sample-page/droolsService.js | 53 - .../scripts/DS2-services/headerServiceDS2.js | 17 - .../scripts/DS2-services/leftMenuServiceDS2.js | 97 - .../fusion/scripts/DS2-services/manifestService.js | 24 - .../fusion/scripts/DS2-services/modalServiceDS2.js | 31 - .../scripts/DS2-services/profileServiceDS2.js | 93 - .../fusion/scripts/DS2-services/sampleService.js | 19 - .../scripts/DS2-services/userInfoServiceDS2.js | 32 - .../DS2-workflows-page/ngworkflow-landing.html | 74 - .../DS2-workflows-page/workflow-landing.html | 68 - .../DS2-workflows-page/workflow-listing.html | 65 - .../DS2-workflows-page/workflow-new.html | 110 - .../DS2-workflows-page/workflow-preview.html | 24 - .../DS2-workflows-page/workflow-remove.html | 26 - .../DS2-workflows-page/workflow-schedule.html | 130 - .../scripts/DS2-view-models/b2b-leftnav-ext.html | 50 - .../DS2-view-models/bootstrap-sample-content.html | 146 - .../DS2-view-models/bootstrap-sample-page.html | 146 - .../DS2-view-models/ds2-admin/admin-menu-edit.html | 102 - .../scripts/DS2-view-models/ds2-admin/admin.html | 69 - .../ds2-admin/admin_closed_loop.html | 17 - .../ds2-admin/collaborate-list.html | 76 - .../DS2-view-models/ds2-admin/collaboration.html | 176 - .../DS2-view-models/ds2-admin/jcs_admin.html | 73 - .../ds2-admin/modals/admin-menu-del-confirm.html | 22 - .../ds2-admin/modals/cache-menu-clear-confirm.html | 22 - .../modals/cache-menu-clear-region-confirm.html | 22 - .../ds2-admin/modals/clearItem-region-confirm.html | 22 - ...laborate-list-toggle-profile-active-status.html | 22 - .../ds2-admin/modals/popup-modal-fn-menu-edit.html | 129 - .../ds2-admin/modals/popup-modal-fnmenu-add.html | 136 - .../ds2-admin/modals/role-child-add-confirm.html | 25 - .../ds2-admin/modals/role-confirm-activation.html | 23 - .../ds2-admin/modals/role-delete-confirm.html | 22 - .../ds2-admin/modals/role-fun-add-confirm.html | 25 - .../modals/role-fun-role-del-confirm.html | 22 - .../ds2-admin/modals/role-function-add.html | 81 - .../modals/role-function-del-confirm.html | 22 - .../ds2-admin/modals/role-function-edit.html | 28 - .../modals/role-functions-child-roles-modal.html | 33 - .../ds2-admin/modals/role-functions-modal.html | 39 - .../scripts/DS2-view-models/ds2-admin/ngadmin.html | 73 - .../DS2-view-models/ds2-admin/role-function.html | 72 - .../scripts/DS2-view-models/ds2-admin/role.html | 61 - .../DS2-view-models/ds2-admin/role_list.html | 47 - .../scripts/DS2-view-models/ds2-admin/usage.html | 43 - .../ds2-profile/modals/profile-confirm-toggle.html | 23 - .../ds2-profile/modals/role-add-confirm.html | 25 - .../ds2-profile/modals/role-add.html | 37 - .../ds2-profile/modals/role-del-confirm.html | 23 - .../DS2-view-models/ds2-profile/ngprofile.html | 75 - .../DS2-view-models/ds2-profile/profile.html | 69 - .../DS2-view-models/ds2-reports/all-reports.html | 78 - .../ds2-reports/directive/dynamicform.js | 134 - .../ds2-reports/directive/step-form-directive.js | 14 - .../ds2-reports/modal/report-del-confirm.html | 18 - .../modal/report-formfield-del-confirm.html | 17 - .../modal/report-security-role-del-confirm.html | 19 - .../modal/report-security-user-del-confirm.html | 18 - .../modal/report-user-role-confirm-toggle.html | 24 - .../ds2-reports/modal/report-wizard-col-edit.html | 232 - .../modal/report-wizard-drilldown-edit.html | 112 - .../modal/report-wizard-formfield-edit.html | 154 - .../report-wizard-report-name-validation.html | 20 - .../modal/report-wizard-test-run-sql.html | 57 - .../DS2-view-models/ds2-reports/ngall-reports.html | 84 - .../ds2-reports/report-chart-wizard.html | 1080 - .../DS2-view-models/ds2-reports/report-import.html | 14 - .../DS2-view-models/ds2-reports/report-run.html | 124 - .../DS2-view-models/ds2-reports/report-search.html | 57 - .../DS2-view-models/ds2-reports/report-step.html | 35 - .../DS2-view-models/ds2-reports/steps/step1.html | 216 - .../DS2-view-models/ds2-reports/steps/step2.html | 26 - .../DS2-view-models/ds2-reports/steps/step3.html | 34 - .../DS2-view-models/ds2-reports/steps/step4.html | 47 - .../DS2-view-models/ds2-reports/steps/step5.html | 172 - .../DS2-view-models/ds2-reports/steps/step6.html | 34 - .../DS2-view-models/ds2-reports/steps/step7.html | 16 - .../ds2-reports/wz_steps/json/step1.json | 232 - .../ds2-reports/wz_steps/json/step2.json | 34 - .../ds2-reports/wz_steps/json/step3.json | 19 - .../ds2-reports/wz_steps/json/step4.json | 25 - .../ds2-reports/wz_steps/json/step5.json | 19 - .../ds2-reports/wz_steps/json/step6.json | 28 - .../ds2-reports/wz_steps/report-step.html | 243 - .../ds2-samplePages/drools-list.html | 32 - .../DS2-view-models/ds2-samplePages/drools.html | 55 - .../ds2-samplePages/frame_insert.html | 27 - .../ds2-samplePages/ngnotebook-frame.html | 81 - .../ds2-samplePages/notebook-frame.html | 74 - .../ds2-samplePages/notebook-page.html | 80 - .../ds2-samplePages/notebook-viz.html | 7 - .../fusion/scripts/DS2-view-models/ds2Header.html | 68 - .../scripts/DS2-view-models/ds2Left_menu.html | 3 - .../scripts/DS2-view-models/loginSnippet.html | 63 - .../scripts/DS2-view-models/welcome-content.html | 191 - .../scripts/DS2-view-models/welcome-sample.html | 112 - .../fusion/scripts/DS2-view-models/welcome.html | 150 - .../att_angular_gridster/angular-gridster.js | 2244 - .../att_angular_gridster/ui-gridster-tpls.js | 168 - .../scripts/controllers/admin-closed-cloop.js | 28 - .../fusion/scripts/controllers/admin-whitelist.js | 3 - .../fusion/scripts/controllers/ase-controller.js | 3 - .../scripts/controllers/broadcast-controller.js | 60 - .../controllers/broadcast-list-controller.js | 101 - .../controllers/collaborate-list-controller.js | 44 - .../app/fusion/scripts/controllers/dummy.txt | 0 .../scripts/controllers/modelpopupController.js | 21 - .../webapp/app/fusion/scripts/directives/dummy.txt | 0 .../webapp/app/fusion/scripts/directives/footer.js | 11 - .../webapp/app/fusion/scripts/directives/header.js | 477 - .../app/fusion/scripts/directives/leftMenu.js | 184 - .../webapp/app/fusion/scripts/jquery.resize.js | 139 - .../main/webapp/app/fusion/scripts/layout/debug.js | 329 - .../app/fusion/scripts/layout/jquery-latest.js | 10598 ----- .../app/fusion/scripts/layout/jquery-ui-latest.js | 18706 --------- .../fusion/scripts/layout/jquery.layout-latest.js | 6086 --- .../main/webapp/app/fusion/scripts/modalService.js | 185 - .../main/webapp/app/fusion/scripts/moment.min.js | 6 - .../webapp/app/fusion/scripts/network/net_map.js | 947 - .../app/fusion/scripts/services/adminService.js | 141 - .../app/fusion/scripts/services/headerService.js | 70 - .../app/fusion/scripts/services/leftMenuService.js | 35 - .../app/fusion/scripts/services/profileService.js | 79 - .../app/fusion/scripts/services/userInfoService.js | 32 - .../app/fusion/scripts/socket/peerBroadcast.js | 103 - .../main/webapp/app/fusion/scripts/utils/dummy.txt | 0 .../fusion/scripts/utils/sandbox-resources.html | 9 - .../app/fusion/scripts/view-models/dummy.txt | 0 .../profile-page/admin_closed_loop.html | 20 - .../view-models/profile-page/broadcast.html | 42 - .../view-models/profile-page/broadcast_list.html | 52 - .../view-models/profile-page/popup_modal.html | 263 - .../profile-page/popup_modal_fn_menu_add.html | 136 - .../profile-page/popup_modal_fn_menu_edit.html | 129 - .../view-models/profile-page/popup_modal_role.html | 75 - .../profile-page/popup_modal_rolefunction.html | 27 - .../src/app/customWidgetSettings.js | 133 - .../reportdashboard-page/src/app/dataModel.js | 58 - .../reportdashboard-page/src/app/demo.js | 167 - .../reportdashboard-page/src/app/demo.less | 24 - .../reportdashboard-page/src/app/directives.js | 230 - .../reportdashboard-page/src/app/explicitSave.js | 33 - .../reportdashboard-page/src/app/index.css | 146 - .../reportdashboard-page/src/app/index.js | 3 - .../reportdashboard-page/src/app/index.less | 16 - .../src/app/index_original.css | 113 - .../reportdashboard-page/src/app/layouts.js | 72 - .../src/app/report_whitelist.js | 3 - .../reportdashboard-page/src/app/resize.js | 45 - .../template/configurableWidgetModalOptions.html | 6 - .../src/app/template/fluid.html | 8 - .../src/app/template/layouts.html | 1 - .../src/app/template/r-cloud.html | 8 - .../src/app/template/raptor-report.html | 29 - .../src/app/template/resizable.html | 6 - .../src/app/template/view.html | 5 - .../src/app/template/widgetSpecificSettings.html | 19 - .../reportdashboard-page/src/app/vendor.css | 6658 --- .../reportdashboard-page/src/app/vendor.less | 3 - .../angular-markdown-directive/markdown.js | 36 - .../directives/dashboard/WidgetSettingsCtrl.js | 34 - .../dashboard/WidgetSettingsRaptorReportCtrl.js | 216 - .../dashboard/add-raptor-report-template.html | 26 - .../dashboard/add-rcloud-notebook-template.html | 22 - .../directives/dashboard/altDashboard.html | 49 - .../components/directives/dashboard/dashboard.html | 74 - .../components/directives/dashboard/dashboard.js | 427 - .../components/directives/dashboard/dashboard.less | 88 - .../directives/dashboard/dashboard.spec.js | 878 - .../dashboardLayouts/SaveChangesModal.html | 13 - .../dashboardLayouts/SaveChangesModalCtrl.js | 32 - .../dashboardLayouts/dashboardLayouts.html | 19 - .../dashboardLayouts/dashboardLayouts.js | 151 - .../dashboardLayouts/dashboardLayouts.spec.js | 392 - .../directives/widget/DashboardWidgetCtrl.js | 246 - .../directives/widget/DashboardWidgetCtrl.spec.js | 164 - .../src/components/directives/widget/widget.js | 64 - .../components/directives/widget/widget.spec.js | 104 - .../src/components/models/DashboardState.js | 180 - .../src/components/models/LayoutStorage.js | 253 - .../src/components/models/LayoutStorage.spec.js | 692 - .../src/components/models/WidgetDataModel.js | 45 - .../src/components/models/WidgetDefCollection.js | 56 - .../src/components/models/WidgetModel.js | 112 - .../src/components/models/WidgetModel.spec.js | 156 - .../reportdashboard-page/src/report-dashboard.html | 201 - .../app/fusion/scripts/webrtc/getSourceId.html | 78 - .../att_angular_gridster/sandbox-gridster.css | 173 - .../styles/att_angular_gridster/ui-gridster.css | 116 - .../src/main/webapp/app/fusion/styles/ecomp.css | 194 - .../main/webapp/app/fusion/styles/fusion-sunny.css | 362 - .../main/webapp/app/fusion/styles/jquery-ui.css | 1225 - .../fusion/styles/layout/layout-default-latest.css | 224 - .../app/fusion/styles/workflows/bs-workflow.css | 134 - .../app/fusion/styles/workflows/workflows.css | 21 - .../drools/controller/drools-list-controller.js | 43 - .../drools/controller/drools-view-controller.js | 45 - .../drools/controller/droolsController.js | 11 - .../app/fusionapp/drools/controller/dummy.txt | 0 .../app/fusionapp/drools/directives/dummy.txt | 0 .../app/fusionapp/drools/services/droolsService.js | 57 - .../webapp/app/fusionapp/drools/utils/dummy.txt | 0 .../fusionapp/drools/view-models/droolsList.html | 28 - .../fusionapp/drools/view-models/droolsView.html | 42 - .../app/fusionapp/drools/view-models/dummy.txt | 0 .../main/webapp/app/fusionapp/external/dummy.txt | 0 .../src/main/webapp/app/fusionapp/fonts/dummy.txt | 0 .../main/webapp/app/fusionapp/icons/7450-icon.png | Bin 465 -> 0 bytes .../main/webapp/app/fusionapp/icons/7450-text.png | Bin 295 -> 0 bytes .../main/webapp/app/fusionapp/icons/7750-icon.png | Bin 565 -> 0 bytes .../main/webapp/app/fusionapp/icons/7750-text.png | Bin 632 -> 0 bytes .../webapp/app/fusionapp/icons/apn-dns-icon.png | Bin 1065 -> 0 bytes .../webapp/app/fusionapp/icons/apn-dns-text.png | Bin 901 -> 0 bytes .../main/webapp/app/fusionapp/icons/atcf-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/atcf-text.png | Bin 650 -> 0 bytes .../main/webapp/app/fusionapp/icons/atgw-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/atgw-text.png | Bin 780 -> 0 bytes .../main/webapp/app/fusionapp/icons/bgcf-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/bgcf-text.png | Bin 645 -> 0 bytes .../main/webapp/app/fusionapp/icons/com-icon.png | Bin 437 -> 0 bytes .../main/webapp/app/fusionapp/icons/cpm-icon.png | Bin 201 -> 0 bytes .../main/webapp/app/fusionapp/icons/cpm-text.png | Bin 572 -> 0 bytes .../webapp/app/fusionapp/icons/default-icon.png | Bin 329 -> 0 bytes .../webapp/app/fusionapp/icons/dra-epc-icon.png | Bin 700 -> 0 bytes .../webapp/app/fusionapp/icons/dra-epc-text.png | Bin 820 -> 0 bytes .../webapp/app/fusionapp/icons/dra-ims-icon.png | Bin 700 -> 0 bytes .../webapp/app/fusionapp/icons/dra-ims-text.png | Bin 851 -> 0 bytes .../main/webapp/app/fusionapp/icons/dslam-icon.png | Bin 774 -> 0 bytes .../main/webapp/app/fusionapp/icons/dslam-text.png | Bin 739 -> 0 bytes .../main/webapp/app/fusionapp/icons/eatf-icon.png | Bin 437 -> 0 bytes .../main/webapp/app/fusionapp/icons/eatf-text.png | Bin 439 -> 0 bytes .../main/webapp/app/fusionapp/icons/ecscf-icon.png | Bin 855 -> 0 bytes .../main/webapp/app/fusionapp/icons/ecscf-text.png | Bin 604 -> 0 bytes .../main/webapp/app/fusionapp/icons/emsc-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/enb-icon.png | Bin 1127 -> 0 bytes .../main/webapp/app/fusionapp/icons/enb-text.png | Bin 627 -> 0 bytes .../main/webapp/app/fusionapp/icons/enum-icon.png | Bin 646 -> 0 bytes .../main/webapp/app/fusionapp/icons/enum-text.png | Bin 551 -> 0 bytes .../main/webapp/app/fusionapp/icons/esmlc-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/esmlc-text.png | Bin 701 -> 0 bytes .../main/webapp/app/fusionapp/icons/ettcs-icon.png | Bin 95 -> 0 bytes .../main/webapp/app/fusionapp/icons/ettcs-text.png | Bin 95 -> 0 bytes .../main/webapp/app/fusionapp/icons/gmlc-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/gmlc-text.png | Bin 755 -> 0 bytes .../main/webapp/app/fusionapp/icons/hlr-icon.png | Bin 646 -> 0 bytes .../main/webapp/app/fusionapp/icons/hlr-text.png | Bin 376 -> 0 bytes .../webapp/app/fusionapp/icons/hss-epc-icon.png | Bin 646 -> 0 bytes .../webapp/app/fusionapp/icons/hss-epc-text.png | Bin 726 -> 0 bytes .../webapp/app/fusionapp/icons/hss-ims-icon.png | Bin 646 -> 0 bytes .../webapp/app/fusionapp/icons/hss-ims-text.png | Bin 757 -> 0 bytes .../main/webapp/app/fusionapp/icons/icscf-icon.png | Bin 855 -> 0 bytes .../main/webapp/app/fusionapp/icons/icscf-text.png | Bin 657 -> 0 bytes .../main/webapp/app/fusionapp/icons/ipag-icon.png | Bin 95 -> 0 bytes .../main/webapp/app/fusionapp/icons/ipag-text.png | Bin 95 -> 0 bytes .../main/webapp/app/fusionapp/icons/isbc-icon.png | Bin 855 -> 0 bytes .../main/webapp/app/fusionapp/icons/isbc-text.png | Bin 649 -> 0 bytes .../main/webapp/app/fusionapp/icons/iwf-icon.png | Bin 696 -> 0 bytes .../main/webapp/app/fusionapp/icons/iwf-text.png | Bin 595 -> 0 bytes .../app/fusionapp/icons/logo_onap_transbg.png | Bin 52523 -> 0 bytes .../webapp/app/fusionapp/icons/lrf-rdf-icon.png | Bin 953 -> 0 bytes .../webapp/app/fusionapp/icons/lrf-rdf-text.png | Bin 638 -> 0 bytes .../webapp/app/fusionapp/icons/lrg-rdf-text.png | Bin 769 -> 0 bytes .../main/webapp/app/fusionapp/icons/mgc8-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/mgc8-text.png | Bin 771 -> 0 bytes .../webapp/app/fusionapp/icons/mgcf-emsc-icon.png | Bin 388 -> 0 bytes .../webapp/app/fusionapp/icons/mgcf-emsc-text.png | Bin 1140 -> 0 bytes .../main/webapp/app/fusionapp/icons/mgw-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/mgw-text.png | Bin 823 -> 0 bytes .../main/webapp/app/fusionapp/icons/mind-icon.png | Bin 646 -> 0 bytes .../main/webapp/app/fusionapp/icons/mind-text.png | Bin 550 -> 0 bytes .../main/webapp/app/fusionapp/icons/mme-icon.png | Bin 232 -> 0 bytes .../main/webapp/app/fusionapp/icons/mme-text.png | Bin 252 -> 0 bytes .../main/webapp/app/fusionapp/icons/mrf-icon.png | Bin 437 -> 0 bytes .../main/webapp/app/fusionapp/icons/mrf-text.png | Bin 504 -> 0 bytes .../main/webapp/app/fusionapp/icons/msc-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/msn-icon.png | Bin 465 -> 0 bytes .../main/webapp/app/fusionapp/icons/msn-text.png | Bin 318 -> 0 bytes .../main/webapp/app/fusionapp/icons/multi-icon.png | Bin 329 -> 0 bytes .../main/webapp/app/fusionapp/icons/n7450-icon.png | Bin 464 -> 0 bytes .../main/webapp/app/fusionapp/icons/n7450-text.png | Bin 295 -> 0 bytes .../webapp/app/fusionapp/icons/n7750a-icon.png | Bin 393 -> 0 bytes .../webapp/app/fusionapp/icons/n7750a-text.png | Bin 258 -> 0 bytes .../webapp/app/fusionapp/icons/n7750b-icon.png | Bin 393 -> 0 bytes .../webapp/app/fusionapp/icons/n7750b-text.png | Bin 258 -> 0 bytes .../webapp/app/fusionapp/icons/n7750c-icon.png | Bin 391 -> 0 bytes .../webapp/app/fusionapp/icons/n7750c-text.png | Bin 258 -> 0 bytes .../webapp/app/fusionapp/icons/n7750d-icon.png | Bin 391 -> 0 bytes .../webapp/app/fusionapp/icons/n7750d-text.png | Bin 258 -> 0 bytes .../main/webapp/app/fusionapp/icons/nb-icon.png | Bin 1127 -> 0 bytes .../main/webapp/app/fusionapp/icons/nb-text.png | Bin 499 -> 0 bytes .../main/webapp/app/fusionapp/icons/pas-icon.png | Bin 700 -> 0 bytes .../main/webapp/app/fusionapp/icons/pas-text.png | Bin 596 -> 0 bytes .../main/webapp/app/fusionapp/icons/pcef-icon.png | Bin 785 -> 0 bytes .../main/webapp/app/fusionapp/icons/pcef-text.png | Bin 539 -> 0 bytes .../main/webapp/app/fusionapp/icons/pcrf-icon.png | Bin 785 -> 0 bytes .../main/webapp/app/fusionapp/icons/pcrf-text.png | Bin 594 -> 0 bytes .../main/webapp/app/fusionapp/icons/pcscf-icon.png | Bin 855 -> 0 bytes .../main/webapp/app/fusionapp/icons/pcscf-text.png | Bin 744 -> 0 bytes .../main/webapp/app/fusionapp/icons/pgw-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/pgw-text.png | Bin 807 -> 0 bytes .../main/webapp/app/fusionapp/icons/plrf-icon.png | Bin 953 -> 0 bytes .../main/webapp/app/fusionapp/icons/plrf-text.png | Bin 735 -> 0 bytes .../main/webapp/app/fusionapp/icons/psap-icon.png | Bin 322 -> 0 bytes .../webapp/app/fusionapp/icons/pstn-tdm-icon.png | Bin 95 -> 0 bytes .../webapp/app/fusionapp/icons/pstn-tdm-text.png | Bin 95 -> 0 bytes .../main/webapp/app/fusionapp/icons/rg-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/rg-text.png | Bin 540 -> 0 bytes .../main/webapp/app/fusionapp/icons/rnc-icon.png | Bin 591 -> 0 bytes .../main/webapp/app/fusionapp/icons/rnc-text.png | Bin 646 -> 0 bytes .../main/webapp/app/fusionapp/icons/sbc-icon.png | Bin 855 -> 0 bytes .../main/webapp/app/fusionapp/icons/sbc-text.png | Bin 632 -> 0 bytes .../main/webapp/app/fusionapp/icons/sccas-icon.png | Bin 437 -> 0 bytes .../main/webapp/app/fusionapp/icons/sccas-text.png | Bin 861 -> 0 bytes .../main/webapp/app/fusionapp/icons/scscf-icon.png | Bin 855 -> 0 bytes .../main/webapp/app/fusionapp/icons/scscf-text.png | Bin 704 -> 0 bytes .../main/webapp/app/fusionapp/icons/sdg-icon.png | Bin 491 -> 0 bytes .../main/webapp/app/fusionapp/icons/sdg-text.png | Bin 696 -> 0 bytes .../webapp/app/fusionapp/icons/sgsns4-icon.png | Bin 230 -> 0 bytes .../webapp/app/fusionapp/icons/sgsns4-text.png | Bin 469 -> 0 bytes .../main/webapp/app/fusionapp/icons/sgw-icon.png | Bin 388 -> 0 bytes .../main/webapp/app/fusionapp/icons/sgw-text.png | Bin 884 -> 0 bytes .../main/webapp/app/fusionapp/icons/siad-icon.png | Bin 774 -> 0 bytes .../main/webapp/app/fusionapp/icons/siad-text.png | Bin 753 -> 0 bytes .../webapp/app/fusionapp/icons/ss7-gport-icon.png | Bin 286 -> 0 bytes .../webapp/app/fusionapp/icons/ss7-gport-text.png | Bin 418 -> 0 bytes .../webapp/app/fusionapp/icons/ss7gport-icon.png | Bin 646 -> 0 bytes .../webapp/app/fusionapp/icons/ss7gport-text.png | Bin 1011 -> 0 bytes .../webapp/app/fusionapp/icons/switch-icon.png | Bin 877 -> 0 bytes .../main/webapp/app/fusionapp/icons/tas-icon.png | Bin 437 -> 0 bytes .../main/webapp/app/fusionapp/icons/tas-text.png | Bin 858 -> 0 bytes .../webapp/app/fusionapp/icons/transcoder-icon.png | Bin 774 -> 0 bytes .../webapp/app/fusionapp/icons/transcoder-text.png | Bin 1242 -> 0 bytes .../main/webapp/app/fusionapp/icons/ue-icon.png | Bin 577 -> 0 bytes .../webapp/app/fusionapp/icons/uephone-icon.png | Bin 1190 -> 0 bytes .../webapp/app/fusionapp/icons/usp-dns-icon.png | Bin 1065 -> 0 bytes .../webapp/app/fusionapp/icons/usp-dns-text.png | Bin 826 -> 0 bytes .../src/main/webapp/app/fusionapp/images/dummy.txt | 0 .../app/fusionapp/scripts/controller/dummy.txt | 0 .../scripts/controller/sample-page-controller.js | 61 - .../controller/sample-page-iframe-controller.js | 4 - .../scripts/controller/sampleController.js | 11 - .../app/fusionapp/scripts/directives/dummy.txt | 0 .../webapp/app/fusionapp/scripts/utils/dummy.txt | 0 .../app/fusionapp/scripts/view-models/dummy.txt | 0 .../scripts/view-models/sampleWithIframe.html | 3 - .../src/main/webapp/app/fusionapp/styles/dummy.txt | 0 1464 files changed, 474624 deletions(-) delete mode 100644 ecomp-sdk/epsdk-app-common/src/main/webapp/app/fusion/external/d3/js/intro.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.eot delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.svg delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.ttf delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.woff delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngsamplePage.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/view-models/footer.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/fusion-sunny.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpg delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp-login.jpg delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp_trans.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/images/blank.gif delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/scribble.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/slider.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/spacegallery.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/welcome.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/area_chart.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/bar_chart.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/worddata.csv delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/donut_d3.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/donut.min.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/gauges.min.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/line_chart.min.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/worddata.min.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/line_chart.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/pie_chart.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/wordcloud.html delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_drive_test_map.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_county.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_regression.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_ios_throughput.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map_legend.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_nova_sdn_map.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/1_mon.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/2_tue.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/3_wed.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/4_thu.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/5_fri.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/6_sat.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/7_sun.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_IN.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_OUT.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Def.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Priority.png delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/FusionCharts.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/charts.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/scribble.js delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/custom.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css delete mode 100644 ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/prettify.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-animate.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-animate.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-animate.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-csp.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-message-format.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-message-format.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-message-format.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-mocks.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-route.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-route.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-route.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-scenario.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-touch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-touch.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-touch.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/errors.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_aa-dj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_aa-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_aa-et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_aa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_af-na.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_af-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_af.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_agq-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_agq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ak-gh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ak.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_am-et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_am.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-001.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-ae.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-bh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-dj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-dz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-eg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-eh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-il.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-iq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-jo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-km.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-kw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-lb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-ly.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-ma.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-mr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-om.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-ps.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-qa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-sa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-sd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-so.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-ss.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-sy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-td.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-tn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar-ye.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ar.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_as-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_as.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_asa-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_asa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ast-es.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ast.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_az-cyrl-az.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_az-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_az-latn-az.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_az-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_az.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bas-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bas.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_be-by.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_be.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bem-zm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bem.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bez-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bez.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bg-bg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bm-latn-ml.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bm-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bm-ml.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bn-bd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bn-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bo-cn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bo-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_br-fr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_br.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_brx-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_brx.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bs-cyrl-ba.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bs-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bs-latn-ba.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bs-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_bs.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_byn-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_byn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ca-ad.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ca-es-valencia.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ca-es.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ca-fr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ca-it.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ca.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_cgg-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_cgg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_chr-us.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_chr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-arab-iq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-arab-ir.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-arab.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-iq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-ir.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-latn-iq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ckb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_cs-cz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_cs.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_cy-gb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_cy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_da-dk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_da-gl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_da.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dav-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dav.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de-at.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de-be.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de-ch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de-de.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de-li.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de-lu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_de.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dje-ne.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dje.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dsb-de.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dsb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dua-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dua.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dyo-sn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dyo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dz-bt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_dz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ebu-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ebu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ee-gh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ee-tg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ee.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_el-cy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_el-gr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_el.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-001.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-150.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ag.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ai.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-as.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-au.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-bb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-be.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-bm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-bs.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-bw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-bz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ca.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-cc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ck.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-cx.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-dg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-dm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-fj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-fk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-fm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-gy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-hk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ie.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-im.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-io.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-iso.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-je.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-jm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ki.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-kn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ky.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-lc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-lr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ls.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mp.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ms.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-mw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-my.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-na.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-nf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ng.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-nr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-nu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-nz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-pg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ph.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-pk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-pn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-pr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-pw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-rw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ss.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sx.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-sz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-tc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-tk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-to.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-tt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-tv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-um.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-us.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-vc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-vg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-vi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-vu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-ws.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-zm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en-zw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_en.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_eo-001.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_eo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-419.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ar.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-bo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-cl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-co.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-cr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-cu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-do.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ea.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-es.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-gq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-gt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-hn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ic.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-mx.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ni.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-pa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-pe.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ph.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-pr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-py.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-sv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-us.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-uy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es-ve.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_es.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_et-ee.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_eu-es.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_eu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ewo-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ewo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fa-af.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fa-ir.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ff-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ff-gn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ff-mr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ff-sn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ff.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fi-fi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fil-ph.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fil.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fo-fo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-be.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-bf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-bi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-bj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-bl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ca.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-cd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-cf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-cg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ci.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-dj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-dz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-fr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ga.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-gf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-gn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-gp.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-gq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ht.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-km.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-lu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ma.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-mc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-mf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-mg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ml.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-mq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-mr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-mu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-nc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-ne.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-pf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-pm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-re.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-rw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-sc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-sn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-sy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-td.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-tg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-tn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-vu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-wf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr-yt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fur-it.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fur.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fy-nl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_fy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ga-ie.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ga.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gd-gb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gl-es.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gsw-ch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gsw-fr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gsw-li.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gsw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gu-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_guz-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_guz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gv-im.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_gv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ha-latn-gh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ha-latn-ne.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ha-latn-ng.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ha-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ha.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_haw-us.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_haw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_he-il.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_he.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hi-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hr-ba.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hr-hr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hsb-de.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hsb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hu-hu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hy-am.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_hy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ia-fr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ia.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_id-id.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_id.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ig-ng.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ig.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ii-cn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ii.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_is-is.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_is.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_it-ch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_it-it.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_it-sm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_it.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_iw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ja-jp.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ja.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_jgo-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_jgo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_jmc-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_jmc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ka-ge.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ka.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kab-dz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kab.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kam-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kam.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kde-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kde.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kea-cv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kea.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_khq-ml.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_khq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ki-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ki.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kk-cyrl-kz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kk-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kkj-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kkj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kl-gl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kln-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kln.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_km-kh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_km.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kn-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ko-kp.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ko-kr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ko.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kok-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kok.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ks-arab-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ks-arab.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ks.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ksb-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ksb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ksf-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ksf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ksh-de.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ksh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kw-gb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_kw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ky-cyrl-kg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ky-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ky.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lag-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lag.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lb-lu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lg-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lkt-us.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lkt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ln-ao.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ln-cd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ln-cf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ln-cg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ln.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lo-la.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lt-lt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lu-cd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_luo-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_luo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_luy-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_luy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lv-lv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_lv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mas-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mas-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mas.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mer-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mer.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mfe-mu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mfe.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mg-mg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mgh-mz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mgh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mgo-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mgo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mk-mk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ml-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ml.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mn-cyrl-mn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mn-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mr-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ms-latn-bn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ms-latn-my.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ms-latn-sg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ms-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ms.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mt-mt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mua-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_mua.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_my-mm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_my.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_naq-na.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_naq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nb-no.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nb-sj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nb.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nd-zw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ne-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ne-np.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ne.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-aw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-be.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-bq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-cw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-nl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-sr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl-sx.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nmg-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nmg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nn-no.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nnh-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nnh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_no-no.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_no.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nr-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nso-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nso.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nus-sd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nus.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nyn-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_nyn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_om-et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_om-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_om.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_or-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_or.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_os-ge.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_os-ru.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_os.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pa-arab-pk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pa-arab.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pa-guru-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pa-guru.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pa.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pl-pl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ps-af.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ps.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-ao.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-br.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-cv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-gw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-mo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-mz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-pt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-st.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt-tl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_pt.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_qu-bo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_qu-ec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_qu-pe.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_qu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rm-ch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rn-bi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ro-md.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ro-ro.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ro.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rof-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rof.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru-by.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru-kg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru-kz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru-md.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru-ru.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru-ua.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ru.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rw-rw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rwk-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_rwk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sah-ru.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sah.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_saq-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_saq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sbp-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sbp.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_se-fi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_se-no.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_se-se.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_se.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_seh-mz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_seh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ses-ml.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ses.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sg-cf.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_shi-latn-ma.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_shi-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_shi-tfng-ma.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_shi-tfng.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_shi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_si-lk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_si.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sk-sk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sl-si.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_smn-fi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_smn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sn-zw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_so-dj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_so-et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_so-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_so-so.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_so.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sq-al.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sq-mk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sq-xk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-cyrl-ba.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-cyrl-me.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-cyrl-rs.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-cyrl-xk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-latn-ba.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-latn-me.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-latn-rs.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-latn-xk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ss-sz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ss-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ss.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ssy-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ssy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_st-ls.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_st-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_st.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sv-ax.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sv-fi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sv-se.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sv.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sw-cd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sw-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sw-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sw-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_sw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_swc-cd.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_swc.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ta-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ta-lk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ta-my.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ta-sg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ta.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_te-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_te.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_teo-ke.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_teo-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_teo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tg-cyrl-tj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tg-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_th-th.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_th.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ti-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ti-et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ti.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tig-er.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tig.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tn-bw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tn-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_to-to.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_to.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tr-cy.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tr-tr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ts-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ts.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_twq-ne.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_twq.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tzm-latn-ma.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tzm-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_tzm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ug-arab-cn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ug-arab.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uk-ua.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ur-in.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ur-pk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ur.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz-arab-af.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz-arab.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz-cyrl-uz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz-cyrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz-latn-uz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_uz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vai-latn-lr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vai-latn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vai-vaii-lr.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vai-vaii.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vai.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ve-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_ve.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vi-vn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vo-001.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vun-tz.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_vun.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_wae-ch.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_wae.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_wal-et.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_wal.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_xh-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_xh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_xog-ug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_xog.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yav-cm.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yav.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yi-001.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yi.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yo-bj.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yo-ng.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_yo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zgh-ma.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zgh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-cn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hans-cn.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hans-hk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hans-mo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hans-sg.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hans.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hant-hk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hant-mo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hant-tw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hant.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-hk.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh-tw.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zh.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zu-za.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/i18n/angular-locale_zu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/version.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/version.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-bootstrap/index.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-bootstrap/ui-bootstrap-csp.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-bootstrap/ui-bootstrap-tpls.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-bootstrap/ui-bootstrap.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-bootstrap/ui-bootstrap.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-gridster/dist/angular-gridster.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-gridster/dist/angular-gridster.min.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-gridster/dist/angular-gridster.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-gridster/src/angular-gridster.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-gridster/src/angular-gridster.less delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/index.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.eot delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.min.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.svg delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.ttf delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui-grid/ui-grid.woff delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui/ui-bootstrap-tpls-1.1.2.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui/ui-bootstrap-tpls-1.2.4.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-ui/ui-sortable/v0.13.4/sortable.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/README.md delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/b2b-angular.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/style/images/horse_shoe.jpg delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/style/images/icon-flyout.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/style/images/treebg.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/style/images/widget-thumbnail.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/js/b2b-angular/b2b-library.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/js/b2b-angular/style/images/horse_shoe.jpg delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/js/b2b-angular/style/images/icon-flyout.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/js/b2b-angular/style/images/treebg.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/js/b2b-angular/style/images/widget-thumbnail.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/b2b/js/b2b-angular/styles/images/icon-flyout.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-grid.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-grid.css.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-grid.min.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-grid.min.css.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-reboot.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-reboot.css.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-reboot.min.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap-reboot.min.css.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap.css.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap.min.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/css/bootstrap.min.css.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/fonts/glyphicons-halflings-regular.eot delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/fonts/glyphicons-halflings-regular.svg delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/fonts/glyphicons-halflings-regular.ttf delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/fonts/glyphicons-halflings-regular.woff delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.bundle.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.bundle.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.bundle.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.bundle.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap-4.0.0/js/bootstrap.min.js.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/bootstrap/bs.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/css/nv.d3.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/cie.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/colorbrewer.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/core.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/crossfilter.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/crossfilter.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.geom.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.layout.cloud.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.layout.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.v2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.v2.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/d3.v3.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/fisheye.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/hive.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/horizon.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/interactiveLayer.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/intro.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/axis-min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/axis.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/axis.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/backup/bullet.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/backup/bulletChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/boilerplate.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/bullet.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/bulletChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/cumulativeLineChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/discreteBar.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/discreteBarChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/distribution.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/historicalBar.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/historicalBarChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/indentedTree.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/legend.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/line.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/lineChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/linePlusBarChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/linePlusBarWithFocusChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/lineWithFisheye.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/lineWithFisheyeChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/lineWithFocusChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiBar.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiBarChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiBarHorizontal.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiBarHorizontalChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiBarTimeSeries.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiBarTimeSeriesChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/multiChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/ohlcBar.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/parallelCoordinates.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/pie.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/pieChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/scatter.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/scatterChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/scatterPlusLineChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/sparkline.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/sparklinePlus.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/stackedArea.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/models/stackedAreaChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/nv.d3.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/nv.d3.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/outro.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/sankey.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/tooltip.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/d3/js/utils.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/ds2-bootstrap/b2b-bootstrap-common.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/ds2/js/appDS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/ebz/copyrighted-material-removed.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/gis/js/local.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/javascript-detect-element-resize/detect-element-resize.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/javascript-detect-element-resize/jquery.resize.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/jquery/.bower.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/jquery/dist/jquery.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/jquery/dist/jquery.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/jquery/dist/jquery.min.map delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/leaflet-0.7.3/leaflet.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/leaflet-0.7.3/leaflet.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/lodash/4.17.11/lodash.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/css/images/blank.gif delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/css/scribble.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/css/slider.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/css/spacegallery.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/area_chart.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/bar_chart.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/d3_gauges_demo.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/data/speedometer2.csv delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/data/speedometer3.csv delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/data/worddata.csv delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/donut_d3.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/js/area_chart.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/js/donut.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/js/gauges.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/js/line_chart.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/js/pie_chart.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/js/worddata.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/line_chart.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/pie_chart.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/html/wordcloud.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/Calendar-16x16.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/arrow-next.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/arrow-prev.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_drive_test_map.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_eppt_county.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_eppt_regression.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_ios_throughput.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_lata_map.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_lata_map_legend.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/carousel/slide_b_nova_sdn_map.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/copyicon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/deleteicon.gif delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/example-frame.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/loading.gif delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/1_mon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/2_tue.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/3_wed.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/4_thu.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/5_fri.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/6_sat.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/7_sun.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/BH_DLSTX_IN.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/BH_DLSTX_OUT.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/BH_Nat.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/BH_Nat_Def.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/images/tunnels/BH_Nat_Priority.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/js/FusionCharts.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/js/charts.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/js/scribble.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/js/slides.min.jquery.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/js/spacegallery.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/css/bootstrap.min.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/css/custom.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/css/jquery.jOrgChart.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/css/prettify.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/example.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/example_vsp.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/images/bkgd.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/images/raspberry.jpg delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/jquery.jOrgChart.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/samples/org_chart/prettify.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/showdown/0.3.4/showdown.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/utils/js/browserCheck.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/fonts/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/controllers/nbook-framecontroller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/controllers/nbookController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/controllers/notebookFrameController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/dependency/angular.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook-frame.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook-viz.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook.htm delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebookInputs.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-profile/self-profile-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-chart-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-import-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-router.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-run-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-route.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/profile-search-controller-DS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/sampleProfileController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/usage-list-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/welcome-route.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/b2b-leftnav-ext.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2Header.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/manifestService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/modalServiceDS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/profileServiceDS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/sampleService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/userInfoServiceDS2.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/ngworkflow-landing.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-ui-latest.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery.layout-latest.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/modalService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/moment.min.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/network/net_map.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/adminService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/headerService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/leftMenuService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/profileService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/services/userInfoService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/socket/peerBroadcast.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/utils/sandbox-resources.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/admin_closed_loop.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/broadcast_list.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/sandbox-gridster.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/ui-gridster.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/ecomp.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/fusion-sunny.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/jquery-ui.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/layout/layout-default-latest.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/bs-workflow.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/workflows.css delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-list-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-view-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/droolsController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/directives/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/services/droolsService.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/utils/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsList.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsView.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/external/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/fonts/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7450-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7450-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7750-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7750-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/apn-dns-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/apn-dns-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atcf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atcf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atgw-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atgw-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/bgcf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/bgcf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/com-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/cpm-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/cpm-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/default-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-epc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-epc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-ims-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-ims-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dslam-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dslam-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/eatf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/eatf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ecscf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ecscf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/emsc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enb-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enb-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enum-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enum-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/esmlc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/esmlc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ettcs-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ettcs-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/gmlc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/gmlc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hlr-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hlr-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-epc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-epc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-ims-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-ims-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/icscf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/icscf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ipag-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ipag-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/isbc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/isbc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/iwf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/iwf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/logo_onap_transbg.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrf-rdf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrf-rdf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrg-rdf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgc8-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgc8-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgcf-emsc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgcf-emsc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgw-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgw-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mind-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mind-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mme-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mme-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mrf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mrf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msn-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msn-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/multi-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7450-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7450-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750a-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750a-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750b-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750b-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750c-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750c-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750d-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750d-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/nb-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/nb-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pas-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pas-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcef-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcef-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcrf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcrf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcscf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcscf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pgw-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pgw-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/plrf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/plrf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/psap-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pstn-tdm-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pstn-tdm-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rg-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rg-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rnc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rnc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sbc-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sbc-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sccas-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sccas-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/scscf-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/scscf-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sdg-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sdg-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgsns4-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgsns4-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgw-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgw-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/siad-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/siad-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7-gport-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7-gport-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7gport-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7gport-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/switch-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/tas-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/tas-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/transcoder-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/transcoder-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ue-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/uephone-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/usp-dns-icon.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/usp-dns-text.png delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/images/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-iframe-controller.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sampleController.js delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/directives/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/utils/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/dummy.txt delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/sampleWithIframe.html delete mode 100644 ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/styles/dummy.txt diff --git a/ecomp-sdk/epsdk-app-common/src/main/webapp/app/fusion/external/d3/js/intro.js b/ecomp-sdk/epsdk-app-common/src/main/webapp/app/fusion/external/d3/js/intro.js deleted file mode 100644 index 0c3a3282..00000000 --- a/ecomp-sdk/epsdk-app-common/src/main/webapp/app/fusion/external/d3/js/intro.js +++ /dev/null @@ -1 +0,0 @@ -(function(){}) diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css deleted file mode 100644 index 0aa5b857..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css +++ /dev/null @@ -1 +0,0 @@ -/* font_icons.css is in open source - this empty file prevents 404 error in browser */ diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css deleted file mode 100644 index 597b466d..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css +++ /dev/null @@ -1,193 +0,0 @@ -@charset "UTF-8"; - -@font-face { font-family: "Ionicons"; src: url("../fonts/ionicons.eot?v=2.0.0"); src: url("../fonts/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"), url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"), url("../fonts/ionicons.woff?v=2.0.0") format("woff"), url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg"); font-weight: normal; font-style: normal; } -.ionicons, -.icon-controls-upPRIMARY, -.icon-arrows-download:before, -.icon-securityalerts-alertL:before, -.icon-controls-add-maximize:before, -.icon-controls-add-maximize-circle:before, -.icon-misc-time:before, -.icoSecurityalerts:before, -.icon-apps-marketplace:before, -.icon-content-grid:before, -.icon-documents-archive:before, -.icon-arrows-vertical-arrow-down:before, -.icoArrows-download:before, -.icoArrows-incoming-call:before, -.icon-arrows-outgoing-call:before, -.icon-arrows-upload:before, -.icon-arrows-straight-arrow:before, -.icoArrows-vertical-arrow:before, -.icon-people-userbookmark:before, -.icon-controls-check:before, -.icon-chevron-down:before, -.icon-controls-down:before, -.icon-controls-left:before, -.icon-controls-right:before, -.icon-chevron-up:before, -.icoDocuments-report:before, -.icon-edit:before, -.icon-controls-up:before, -.icon-overview:before, -.icon-settings:before, -.icon-building-home:before, -.icon-documents-book:before, -.icoDocuments-book-outline:before, -.icoDocuments-bookmarks:before, -.icoDocuments-bookmarks-outline:before, -.icon-add-widget:before, -.icon-documents-copy:before, -.icon-content-flag:before, -.icon-primary-accordion-minus:before, -.icon-misc-piechart:before, -.icon-misc-piechart-outline:before, -.icon-primary-accordion-plus:before, -.icon-star:before, -.icon-building-door:before, -.icon-content-gridguide:before, -.icon-user:before, -.icon-people-oneperson:before, -.icon-people-oneperson-add:before, -.icon-people-oneperson-stalker:before, -.icon-controls-pointer:before, -.icon-arrows-replay-restart:before, -.icon-content-star:before, -.icon-misc-trash:before, -.icon-misc-pen:before, -.ion-navicon:before, -.icon-primary-close:before, .close:before, .reset-field:before, -.icon-datanetwork-softwareasaservice:before, -.icon-datanetwork-messaging2:before, -.icon-controls-settingsconnectedactivity:before, -.icon-arrows-upload:before { - display: inline-block; - font-family: "Ionicons"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - text-rendering: auto; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - - -.icoSecurityalerts-alert:before { content: "\f100"; } - -.icon-arrows-download:before { content: "\f41f"; } - -.icon-controls-add-maximize:before { content: "\f2c7"; } - -.icon-controls-add-maximize-circle:before { content: "\f359"; } - -.icon-misc-time:before { content: "\f35a"; } - -.icoSecurityalerts:before { content: "\f35b"; } - -.icon-content-grid:before { content: "\f35c"; } - -.icon-documents-archive:before { content: "\f2c9"; } - -.icon-arrows-vertical-arrow-down:before { content: "\f35d"; } - -.icon-arrows-download:before { content: "\f35e"; } - -.icon-arrows-incoming-call:before { content: "\f360"; } - -.icoArrows-outgoing-call:before { content: "\f362"; } - -.icoArrows-upload:before { content: "\f364"; } - -.icoArrows-straight-arrow:before { content: "\f30f"; } - -.icon-arrows-vertical-arrow:before { content: "\f366"; } - -.icon-people-userbookmark:before { content: "\f39f"; } - -.icon-controls-check:before { content: "\f121"; } - -.icon-chevron-down:before { content: "\f123"; } - -.icon-controls-left:before { content: "\f124"; } - -.icon-controls-right:before { content: "\f125"; } - -.icon-chevron-up:before { content: "\f126"; } - -.icoDocuments-report:before { content: "\f274"; } - -.icon-overview:before { content: "\f133"; } - -.icon-controls-down:before { content: "\f3d0"; } - -.icon-controls-up:before { content: "\f3d8"; } - -.icon-documents-book:before { content: "\f3e8"; } - -.icoDocuments-book-outline:before { content: "\f3e7"; } - -.icoDocuments-bookmarks:before { content: "\f3ea"; } - -.icoDocuments-bookmarks-outline:before { content: "\f3e9"; } - -.icon-documents-copy:before { content: "\f41c"; } - -.icon-content-flag:before { content: "\f42d"; } - -.icon-primary-accordion-minus:before { content: "\f463"; } - -.icon-misc-piechart:before { content: "\f484"; } - -.icon-misc-piechart-outline:before { content: "\f483"; } - -.icon-primary-accordion-plus:before { content: "\f48a"; } - -.icon-building-door:before { content: "\f29f"; } - -.icon-content-gridguide:before { content: "\f20d"; } - -.icon-people-oneperson:before { content: "\f213"; } - -.icon-people-oneperson-add:before { content: "\f211"; } - -.icon-people-oneperson-stalker:before { content: "\f212"; } - -.icon-arrows-replay-restart:before { content: "\f21c"; } - -.icon-misc-trash:before { content: "\f252"; } - -.icon-arrows-upload:before { content: "\f255"; } - -.icon-user:before { content: "\f213"; } - -.icon-star:before { content: "\f4b3"; } - -.icon-edit:before { content: "\f2bf"; } - -.icon-settings:before { content: "\f13d"; } - -.icon-apps-marketplace:before { content: "\f35c"; } - -.icon-add-widget:before { content: "\f3f0"; } - -.icon-controls-upPRIMARY:before { content: "\f3d8"; } - -.icon-misc-pen:before { content: "\f2bf"; } - -.ion-navicon:before { content: "\f20e"; } - -.icon-building-home:before { content: "\f144"; } - -.icon-content-star:before { content: "\f24e"; } - -.icon-primary-close:before, .close:before, .reset-field:before { content: "\f129"; } - -.icon-datanetwork-softwareasaservice:before { content: "\f40c"; } - -.icon-datanetwork-messaging2:before { content: "\f132"; } - -.icon-controls-settingsconnectedactivity:before { content: "\f411"; } \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css deleted file mode 100644 index 885aa6bd..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css +++ /dev/null @@ -1,1480 +0,0 @@ -@charset "UTF-8"; -/*! - Ionicons, v2.0.0 - Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ - https://twitter.com/benjsperry https://twitter.com/ionicframework - MIT License: https://github.com/driftyco/ionicons - - Android-style icons originally built by Google’s - Material Design Icons: https://github.com/google/material-design-icons - used under CC BY http://creativecommons.org/licenses/by/4.0/ - Modified icons to fit ionicon’s grid from original. -*/ -@font-face { font-family: "Ionicons"; src: url("../fonts/ionicons.eot?v=2.0.0"); src: url("../fonts/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"), url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"), url("../fonts/ionicons.woff?v=2.0.0") format("woff"), url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg"); font-weight: normal; font-style: normal; } -.ion, .ionicons, .ion-alert:before, .ion-alert-circled:before, .ion-android-add:before, .ion-android-add-circle:before, .ion-android-alarm-clock:before, .ion-android-alert:before, .ion-android-apps:before, .ion-android-archive:before, .ion-android-arrow-back:before, .ion-android-arrow-down:before, .ion-android-arrow-dropdown:before, .ion-android-arrow-dropdown-circle:before, .ion-android-arrow-dropleft:before, .ion-android-arrow-dropleft-circle:before, .ion-android-arrow-dropright:before, .ion-android-arrow-dropright-circle:before, .ion-android-arrow-dropup:before, .ion-android-arrow-dropup-circle:before, .ion-android-arrow-forward:before, .ion-android-arrow-up:before, .ion-android-attach:before, .ion-android-bar:before, .ion-android-bicycle:before, .ion-android-boat:before, .ion-android-bookmark:before, .ion-android-bulb:before, .ion-android-bus:before, .ion-android-calendar:before, .ion-android-call:before, .ion-android-camera:before, .ion-android-cancel:before, .ion-android-car:before, .ion-android-cart:before, .ion-android-chat:before, .ion-android-checkbox:before, .ion-android-checkbox-blank:before, .ion-android-checkbox-outline:before, .ion-android-checkbox-outline-blank:before, .ion-android-checkmark-circle:before, .ion-android-clipboard:before, .ion-android-close:before, .ion-android-cloud:before, .ion-android-cloud-circle:before, .ion-android-cloud-done:before, .ion-android-cloud-outline:before, .ion-android-color-palette:before, .ion-android-compass:before, .ion-android-contact:before, .ion-android-contacts:before, .ion-android-contract:before, .ion-android-create:before, .ion-android-delete:before, .ion-android-desktop:before, .ion-android-document:before, .ion-android-done:before, .ion-android-done-all:before, .ion-android-download:before, .ion-android-drafts:before, .ion-android-exit:before, .ion-android-expand:before, .ion-android-favorite:before, .ion-android-favorite-outline:before, .ion-android-film:before, .ion-android-folder:before, .ion-android-folder-open:before, .ion-android-funnel:before, .ion-android-globe:before, .ion-android-hand:before, .ion-android-hangout:before, .ion-android-happy:before, .ion-android-home:before, .ion-android-image:before, .ion-android-laptop:before, .ion-android-list:before, .ion-android-locate:before, .ion-android-lock:before, .ion-android-mail:before, .ion-android-map:before, .ion-android-menu:before, .ion-android-microphone:before, .ion-android-microphone-off:before, .ion-android-more-horizontal:before, .ion-android-more-vertical:before, .ion-android-navigate:before, .ion-android-notifications:before, .ion-android-notifications-none:before, .ion-android-notifications-off:before, .ion-android-open:before, .ion-android-options:before, .ion-android-people:before, .ion-android-person:before, .ion-android-person-add:before, .ion-android-phone-landscape:before, .ion-android-phone-portrait:before, .ion-android-pin:before, .ion-android-plane:before, .ion-android-playstore:before, .ion-android-print:before, .ion-android-radio-button-off:before, .ion-android-radio-button-on:before, .ion-android-refresh:before, .ion-android-remove:before, .ion-android-remove-circle:before, .ion-android-restaurant:before, .ion-android-sad:before, .ion-android-search:before, .ion-android-send:before, .ion-android-settings:before, .ion-android-share:before, .ion-android-share-alt:before, .ion-android-star:before, .ion-android-star-half:before, .ion-android-star-outline:before, .ion-android-stopwatch:before, .ion-android-subway:before, .ion-android-sunny:before, .ion-android-sync:before, .ion-android-textsms:before, .ion-android-time:before, .ion-android-train:before, .ion-android-unlock:before, .ion-android-upload:before, .ion-android-volume-down:before, .ion-android-volume-mute:before, .ion-android-volume-off:before, .ion-android-volume-up:before, .ion-android-walk:before, .ion-android-warning:before, .ion-android-watch:before, .ion-android-wifi:before, .ion-aperture:before, .ion-archive:before, .ion-arrow-down-a:before, .ion-arrow-down-b:before, .ion-arrow-down-c:before, .ion-arrow-expand:before, .ion-arrow-graph-down-left:before, .ion-arrow-graph-down-right:before, .ion-arrow-graph-up-left:before, .ion-arrow-graph-up-right:before, .ion-arrow-left-a:before, .ion-arrow-left-b:before, .ion-arrow-left-c:before, .ion-arrow-move:before, .ion-arrow-resize:before, .ion-arrow-return-left:before, .ion-arrow-return-right:before, .ion-arrow-right-a:before, .ion-arrow-right-b:before, .ion-arrow-right-c:before, .ion-arrow-shrink:before, .ion-arrow-swap:before, .ion-arrow-up-a:before, .ion-arrow-up-b:before, .ion-arrow-up-c:before, .ion-asterisk:before, .ion-at:before, .ion-backspace:before, .ion-backspace-outline:before, .ion-bag:before, .ion-battery-charging:before, .ion-battery-empty:before, .ion-battery-full:before, .ion-battery-half:before, .ion-battery-low:before, .ion-beaker:before, .ion-beer:before, .ion-bluetooth:before, .ion-bonfire:before, .ion-bookmark:before, .ion-bowtie:before, .ion-briefcase:before, .ion-bug:before, .ion-calculator:before, .ion-calendar:before, .ion-camera:before, .ion-card:before, .ion-cash:before, .ion-chatbox:before, .ion-chatbox-working:before, .ion-chatboxes:before, .ion-chatbubble:before, .ion-chatbubble-working:before, .ion-chatbubbles:before, .ion-checkmark:before, .ion-checkmark-circled:before, .ion-checkmark-round:before, .ion-chevron-down:before, .ion-chevron-left:before, .ion-chevron-right:before, .ion-chevron-up:before, .ion-clipboard:before, .ion-clock:before, .ion-close:before, .ion-close-circled:before, .ion-close-round:before, .ion-closed-captioning:before, .ion-cloud:before, .ion-code:before, .ion-code-download:before, .ion-code-working:before, .ion-coffee:before, .ion-compass:before, .ion-compose:before, .ion-connection-bars:before, .ion-contrast:before, .ion-crop:before, .ion-cube:before, .ion-disc:before, .ion-document:before, .ion-document-text:before, .ion-drag:before, .ion-earth:before, .ion-easel:before, .ion-edit:before, .ion-egg:before, .ion-eject:before, .ion-email:before, .ion-email-unread:before, .ion-erlenmeyer-flask:before, .ion-erlenmeyer-flask-bubbles:before, .ion-eye:before, .ion-eye-disabled:before, .ion-female:before, .ion-filing:before, .ion-film-marker:before, .ion-fireball:before, .ion-flag:before, .ion-flame:before, .ion-flash:before, .ion-flash-off:before, .ion-folder:before, .ion-fork:before, .ion-fork-repo:before, .ion-forward:before, .ion-funnel:before, .ion-gear-a:before, .ion-gear-b:before, .ion-grid:before, .ion-hammer:before, .ion-happy:before, .ion-happy-outline:before, .ion-headphone:before, .ion-heart:before, .ion-heart-broken:before, .ion-help:before, .ion-help-buoy:before, .ion-help-circled:before, .ion-home:before, .ion-icecream:before, .ion-image:before, .ion-images:before, .ion-information:before, .ion-information-circled:before, .ion-ionic:before, .ion-ios-alarm:before, .ion-ios-alarm-outline:before, .ion-ios-albums:before, .ion-ios-albums-outline:before, .ion-ios-americanfootball:before, .ion-ios-americanfootball-outline:before, .ion-ios-analytics:before, .ion-ios-analytics-outline:before, .ion-ios-arrow-back:before, .ion-ios-arrow-down:before, .ion-ios-arrow-forward:before, .ion-ios-arrow-left:before, .ion-ios-arrow-right:before, .ion-ios-arrow-thin-down:before, .ion-ios-arrow-thin-left:before, .ion-ios-arrow-thin-right:before, .ion-ios-arrow-thin-up:before, .ion-ios-arrow-up:before, .ion-ios-at:before, .ion-ios-at-outline:before, .ion-ios-barcode:before, .ion-ios-barcode-outline:before, .ion-ios-baseball:before, .ion-ios-baseball-outline:before, .ion-ios-basketball:before, .ion-ios-basketball-outline:before, .ion-ios-bell:before, .ion-ios-bell-outline:before, .ion-ios-body:before, .ion-ios-body-outline:before, .ion-ios-bolt:before, .ion-ios-bolt-outline:before, .ion-ios-book:before, .ion-ios-book-outline:before, .ion-ios-bookmarks:before, .ion-ios-bookmarks-outline:before, .ion-ios-box:before, .ion-ios-box-outline:before, .ion-ios-briefcase:before, .ion-ios-briefcase-outline:before, .ion-ios-browsers:before, .ion-ios-browsers-outline:before, .ion-ios-calculator:before, .ion-ios-calculator-outline:before, .ion-ios-calendar:before, .ion-ios-calendar-outline:before, .ion-ios-camera:before, .ion-ios-camera-outline:before, .ion-ios-cart:before, .ion-ios-cart-outline:before, .ion-ios-chatboxes:before, .ion-ios-chatboxes-outline:before, .ion-ios-chatbubble:before, .ion-ios-chatbubble-outline:before, .ion-ios-checkmark:before, .ion-ios-checkmark-empty:before, .ion-ios-checkmark-outline:before, .ion-ios-circle-filled:before, .ion-ios-circle-outline:before, .ion-ios-clock:before, .ion-ios-clock-outline:before, .ion-ios-close:before, .ion-ios-close-empty:before, .ion-ios-close-outline:before, .ion-ios-cloud:before, .ion-ios-cloud-download:before, .ion-ios-cloud-download-outline:before, .ion-ios-cloud-outline:before, .ion-ios-cloud-upload:before, .ion-ios-cloud-upload-outline:before, .ion-ios-cloudy:before, .ion-ios-cloudy-night:before, .ion-ios-cloudy-night-outline:before, .ion-ios-cloudy-outline:before, .ion-ios-cog:before, .ion-ios-cog-outline:before, .ion-ios-color-filter:before, .ion-ios-color-filter-outline:before, .ion-ios-color-wand:before, .ion-ios-color-wand-outline:before, .ion-ios-compose:before, .ion-ios-compose-outline:before, .ion-ios-contact:before, .ion-ios-contact-outline:before, .ion-ios-copy:before, .ion-ios-copy-outline:before, .ion-ios-crop:before, .ion-ios-crop-strong:before, .ion-ios-download:before, .ion-ios-download-outline:before, .ion-ios-drag:before, .ion-ios-email:before, .ion-ios-email-outline:before, .ion-ios-eye:before, .ion-ios-eye-outline:before, .ion-ios-fastforward:before, .ion-ios-fastforward-outline:before, .ion-ios-filing:before, .ion-ios-filing-outline:before, .ion-ios-film:before, .ion-ios-film-outline:before, .ion-ios-flag:before, .ion-ios-flag-outline:before, .ion-ios-flame:before, .ion-ios-flame-outline:before, .ion-ios-flask:before, .ion-ios-flask-outline:before, .ion-ios-flower:before, .ion-ios-flower-outline:before, .ion-ios-folder:before, .ion-ios-folder-outline:before, .ion-ios-football:before, .ion-ios-football-outline:before, .ion-ios-game-controller-a:before, .ion-ios-game-controller-a-outline:before, .ion-ios-game-controller-b:before, .ion-ios-game-controller-b-outline:before, .ion-ios-gear:before, .ion-ios-gear-outline:before, .ion-ios-glasses:before, .ion-ios-glasses-outline:before, .ion-ios-grid-view:before, .ion-ios-grid-view-outline:before, .ion-ios-heart:before, .ion-ios-heart-outline:before, .ion-ios-help:before, .ion-ios-help-empty:before, .ion-ios-help-outline:before, .ion-ios-home:before, .ion-ios-home-outline:before, .ion-ios-infinite:before, .ion-ios-infinite-outline:before, .ion-ios-information:before, .ion-ios-information-empty:before, .ion-ios-information-outline:before, .ion-ios-ionic-outline:before, .ion-ios-keypad:before, .ion-ios-keypad-outline:before, .ion-ios-lightbulb:before, .ion-ios-lightbulb-outline:before, .ion-ios-list:before, .ion-ios-list-outline:before, .ion-ios-location:before, .ion-ios-location-outline:before, .ion-ios-locked:before, .ion-ios-locked-outline:before, .ion-ios-loop:before, .ion-ios-loop-strong:before, .ion-ios-medical:before, .ion-ios-medical-outline:before, .ion-ios-medkit:before, .ion-ios-medkit-outline:before, .ion-ios-mic:before, .ion-ios-mic-off:before, .ion-ios-mic-outline:before, .ion-ios-minus:before, .ion-ios-minus-empty:before, .ion-ios-minus-outline:before, .ion-ios-monitor:before, .ion-ios-monitor-outline:before, .ion-ios-moon:before, .ion-ios-moon-outline:before, .ion-ios-more:before, .ion-ios-more-outline:before, .ion-ios-musical-note:before, .ion-ios-musical-notes:before, .ion-ios-navigate:before, .ion-ios-navigate-outline:before, .ion-ios-nutrition:before, .ion-ios-nutrition-outline:before, .ion-ios-paper:before, .ion-ios-paper-outline:before, .ion-ios-paperplane:before, .ion-ios-paperplane-outline:before, .ion-ios-partlysunny:before, .ion-ios-partlysunny-outline:before, .ion-ios-pause:before, .ion-ios-pause-outline:before, .ion-ios-paw:before, .ion-ios-paw-outline:before, .ion-ios-people:before, .ion-ios-people-outline:before, .ion-ios-person:before, .ion-ios-person-outline:before, .ion-ios-personadd:before, .ion-ios-personadd-outline:before, .ion-ios-photos:before, .ion-ios-photos-outline:before, .ion-ios-pie:before, .ion-ios-pie-outline:before, .ion-ios-pint:before, .ion-ios-pint-outline:before, .ion-ios-play:before, .ion-ios-play-outline:before, .ion-ios-plus:before, .ion-ios-plus-empty:before, .ion-ios-plus-outline:before, .ion-ios-pricetag:before, .ion-ios-pricetag-outline:before, .ion-ios-pricetags:before, .ion-ios-pricetags-outline:before, .ion-ios-printer:before, .ion-ios-printer-outline:before, .ion-ios-pulse:before, .ion-ios-pulse-strong:before, .ion-ios-rainy:before, .ion-ios-rainy-outline:before, .ion-ios-recording:before, .ion-ios-recording-outline:before, .ion-ios-redo:before, .ion-ios-redo-outline:before, .ion-ios-refresh:before, .ion-ios-refresh-empty:before, .ion-ios-refresh-outline:before, .ion-ios-reload:before, .ion-ios-reverse-camera:before, .ion-ios-reverse-camera-outline:before, .ion-ios-rewind:before, .ion-ios-rewind-outline:before, .ion-ios-rose:before, .ion-ios-rose-outline:before, .ion-ios-search:before, .ion-ios-search-strong:before, .ion-ios-settings:before, .ion-ios-settings-strong:before, .ion-ios-shuffle:before, .ion-ios-shuffle-strong:before, .ion-ios-skipbackward:before, .ion-ios-skipbackward-outline:before, .ion-ios-skipforward:before, .ion-ios-skipforward-outline:before, .ion-ios-snowy:before, .ion-ios-speedometer:before, .ion-ios-speedometer-outline:before, .ion-ios-star:before, .ion-ios-star-half:before, .ion-ios-star-outline:before, .ion-ios-stopwatch:before, .ion-ios-stopwatch-outline:before, .ion-ios-sunny:before, .ion-ios-sunny-outline:before, .ion-ios-telephone:before, .ion-ios-telephone-outline:before, .ion-ios-tennisball:before, .ion-ios-tennisball-outline:before, .ion-ios-thunderstorm:before, .ion-ios-thunderstorm-outline:before, .ion-ios-time:before, .ion-ios-time-outline:before, .ion-ios-timer:before, .ion-ios-timer-outline:before, .ion-ios-toggle:before, .ion-ios-toggle-outline:before, .ion-ios-trash:before, .ion-ios-trash-outline:before, .ion-ios-undo:before, .ion-ios-undo-outline:before, .ion-ios-unlocked:before, .ion-ios-unlocked-outline:before, .ion-ios-upload:before, .ion-ios-upload-outline:before, .ion-ios-videocam:before, .ion-ios-videocam-outline:before, .ion-ios-volume-high:before, .ion-ios-volume-low:before, .ion-ios-wineglass:before, .ion-ios-wineglass-outline:before, .ion-ios-world:before, .ion-ios-world-outline:before, .ion-ipad:before, .ion-iphone:before, .ion-ipod:before, .ion-jet:before, .ion-key:before, .ion-knife:before, .ion-laptop:before, .ion-leaf:before, .ion-levels:before, .ion-lightbulb:before, .ion-link:before, .ion-load-a:before, .ion-load-b:before, .ion-load-c:before, .ion-load-d:before, .ion-location:before, .ion-lock-combination:before, .ion-locked:before, .ion-log-in:before, .ion-log-out:before, .ion-loop:before, .ion-magnet:before, .ion-male:before, .ion-man:before, .ion-map:before, .ion-medkit:before, .ion-merge:before, .ion-mic-a:before, .ion-mic-b:before, .ion-mic-c:before, .ion-minus:before, .ion-minus-circled:before, .ion-minus-round:before, .ion-model-s:before, .ion-monitor:before, .ion-more:before, .ion-mouse:before, .ion-music-note:before, .ion-navicon:before, .ion-navicon-round:before, .ion-navigate:before, .ion-network:before, .ion-no-smoking:before, .ion-nuclear:before, .ion-outlet:before, .ion-paintbrush:before, .ion-paintbucket:before, .ion-paper-airplane:before, .ion-paperclip:before, .ion-pause:before, .ion-person:before, .ion-person-add:before, .ion-person-stalker:before, .ion-pie-graph:before, .ion-pin:before, .ion-pinpoint:before, .ion-pizza:before, .ion-plane:before, .ion-planet:before, .ion-play:before, .ion-playstation:before, .ion-plus:before, .ion-plus-circled:before, .ion-plus-round:before, .ion-podium:before, .ion-pound:before, .ion-power:before, .ion-pricetag:before, .ion-pricetags:before, .ion-printer:before, .ion-pull-request:before, .ion-qr-scanner:before, .ion-quote:before, .ion-radio-waves:before, .ion-record:before, .ion-refresh:before, .ion-reply:before, .ion-reply-all:before, .ion-ribbon-a:before, .ion-ribbon-b:before, .ion-sad:before, .ion-sad-outline:before, .ion-scissors:before, .ion-search:before, .ion-settings:before, .ion-share:before, .ion-shuffle:before, .ion-skip-backward:before, .ion-skip-forward:before, .ion-social-android:before, .ion-social-android-outline:before, .ion-social-angular:before, .ion-social-angular-outline:before, .ion-social-apple:before, .ion-social-apple-outline:before, .ion-social-bitcoin:before, .ion-social-bitcoin-outline:before, .ion-social-buffer:before, .ion-social-buffer-outline:before, .ion-social-chrome:before, .ion-social-chrome-outline:before, .ion-social-codepen:before, .ion-social-codepen-outline:before, .ion-social-css3:before, .ion-social-css3-outline:before, .ion-social-designernews:before, .ion-social-designernews-outline:before, .ion-social-dribbble:before, .ion-social-dribbble-outline:before, .ion-social-dropbox:before, .ion-social-dropbox-outline:before, .ion-social-euro:before, .ion-social-euro-outline:before, .ion-social-facebook:before, .ion-social-facebook-outline:before, .ion-social-foursquare:before, .ion-social-foursquare-outline:before, .ion-social-freebsd-devil:before, .ion-social-github:before, .ion-social-github-outline:before, .ion-social-google:before, .ion-social-google-outline:before, .ion-social-googleplus:before, .ion-social-googleplus-outline:before, .ion-social-hackernews:before, .ion-social-hackernews-outline:before, .ion-social-html5:before, .ion-social-html5-outline:before, .ion-social-instagram:before, .ion-social-instagram-outline:before, .ion-social-javascript:before, .ion-social-javascript-outline:before, .ion-social-linkedin:before, .ion-social-linkedin-outline:before, .ion-social-markdown:before, .ion-social-nodejs:before, .ion-social-octocat:before, .ion-social-pinterest:before, .ion-social-pinterest-outline:before, .ion-social-python:before, .ion-social-reddit:before, .ion-social-reddit-outline:before, .ion-social-rss:before, .ion-social-rss-outline:before, .ion-social-sass:before, .ion-social-skype:before, .ion-social-skype-outline:before, .ion-social-snapchat:before, .ion-social-snapchat-outline:before, .ion-social-tumblr:before, .ion-social-tumblr-outline:before, .ion-social-tux:before, .ion-social-twitch:before, .ion-social-twitch-outline:before, .ion-social-twitter:before, .ion-social-twitter-outline:before, .ion-social-usd:before, .ion-social-usd-outline:before, .ion-social-vimeo:before, .ion-social-vimeo-outline:before, .ion-social-whatsapp:before, .ion-social-whatsapp-outline:before, .ion-social-windows:before, .ion-social-windows-outline:before, .ion-social-wordpress:before, .ion-social-wordpress-outline:before, .ion-social-yahoo:before, .ion-social-yahoo-outline:before, .ion-social-yen:before, .ion-social-yen-outline:before, .ion-social-youtube:before, .ion-social-youtube-outline:before, .ion-soup-can:before, .ion-soup-can-outline:before, .ion-speakerphone:before, .ion-speedometer:before, .ion-spoon:before, .ion-star:before, .ion-stats-bars:before, .ion-steam:before, .ion-stop:before, .ion-thermometer:before, .ion-thumbsdown:before, .ion-thumbsup:before, .ion-toggle:before, .ion-toggle-filled:before, .ion-transgender:before, .ion-trash-a:before, .ion-trash-b:before, .ion-trophy:before, .ion-tshirt:before, .ion-tshirt-outline:before, .ion-umbrella:before, .ion-university:before, .ion-unlocked:before, .ion-upload:before, .ion-usb:before, .ion-videocamera:before, .ion-volume-high:before, .ion-volume-low:before, .ion-volume-medium:before, .ion-volume-mute:before, .ion-wand:before, .ion-waterdrop:before, .ion-wifi:before, .ion-wineglass:before, .ion-woman:before, .ion-wrench:before, .ion-xbox:before { display: inline-block; font-family: "Ionicons"; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; text-rendering: auto; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } - -.ion-alert:before { content: "\f101"; } - -.ion-alert-circled:before { content: "\f100"; } - -.ion-android-add:before { content: "\f2c7"; } - -.ion-android-add-circle:before { content: "\f359"; } - -.ion-android-alarm-clock:before { content: "\f35a"; } - -.ion-android-alert:before { content: "\f35b"; } - -.ion-android-apps:before { content: "\f35c"; } - -.ion-android-archive:before { content: "\f2c9"; } - -.ion-android-arrow-back:before { content: "\f2ca"; } - -.ion-android-arrow-down:before { content: "\f35d"; } - -.ion-android-arrow-dropdown:before { content: "\f35f"; } - -.ion-android-arrow-dropdown-circle:before { content: "\f35e"; } - -.ion-android-arrow-dropleft:before { content: "\f361"; } - -.ion-android-arrow-dropleft-circle:before { content: "\f360"; } - -.ion-android-arrow-dropright:before { content: "\f363"; } - -.ion-android-arrow-dropright-circle:before { content: "\f362"; } - -.ion-android-arrow-dropup:before { content: "\f365"; } - -.ion-android-arrow-dropup-circle:before { content: "\f364"; } - -.ion-android-arrow-forward:before { content: "\f30f"; } - -.ion-android-arrow-up:before { content: "\f366"; } - -.ion-android-attach:before { content: "\f367"; } - -.ion-android-bar:before { content: "\f368"; } - -.ion-android-bicycle:before { content: "\f369"; } - -.ion-android-boat:before { content: "\f36a"; } - -.ion-android-bookmark:before { content: "\f36b"; } - -.ion-android-bulb:before { content: "\f36c"; } - -.ion-android-bus:before { content: "\f36d"; } - -.ion-android-calendar:before { content: "\f2d1"; } - -.ion-android-call:before { content: "\f2d2"; } - -.ion-android-camera:before { content: "\f2d3"; } - -.ion-android-cancel:before { content: "\f36e"; } - -.ion-android-car:before { content: "\f36f"; } - -.ion-android-cart:before { content: "\f370"; } - -.ion-android-chat:before { content: "\f2d4"; } - -.ion-android-checkbox:before { content: "\f374"; } - -.ion-android-checkbox-blank:before { content: "\f371"; } - -.ion-android-checkbox-outline:before { content: "\f373"; } - -.ion-android-checkbox-outline-blank:before { content: "\f372"; } - -.ion-android-checkmark-circle:before { content: "\f375"; } - -.ion-android-clipboard:before { content: "\f376"; } - -.ion-android-close:before { content: "\f2d7"; } - -.ion-android-cloud:before { content: "\f37a"; } - -.ion-android-cloud-circle:before { content: "\f377"; } - -.ion-android-cloud-done:before { content: "\f378"; } - -.ion-android-cloud-outline:before { content: "\f379"; } - -.ion-android-color-palette:before { content: "\f37b"; } - -.ion-android-compass:before { content: "\f37c"; } - -.ion-android-contact:before { content: "\f2d8"; } - -.ion-android-contacts:before { content: "\f2d9"; } - -.ion-android-contract:before { content: "\f37d"; } - -.ion-android-create:before { content: "\f37e"; } - -.ion-android-delete:before { content: "\f37f"; } - -.ion-android-desktop:before { content: "\f380"; } - -.ion-android-document:before { content: "\f381"; } - -.ion-android-done:before { content: "\f383"; } - -.ion-android-done-all:before { content: "\f382"; } - -.ion-android-download:before { content: "\f2dd"; } - -.ion-android-drafts:before { content: "\f384"; } - -.ion-android-exit:before { content: "\f385"; } - -.ion-android-expand:before { content: "\f386"; } - -.ion-android-favorite:before { content: "\f388"; } - -.ion-android-favorite-outline:before { content: "\f387"; } - -.ion-android-film:before { content: "\f389"; } - -.ion-android-folder:before { content: "\f2e0"; } - -.ion-android-folder-open:before { content: "\f38a"; } - -.ion-android-funnel:before { content: "\f38b"; } - -.ion-android-globe:before { content: "\f38c"; } - -.ion-android-hand:before { content: "\f2e3"; } - -.ion-android-hangout:before { content: "\f38d"; } - -.ion-android-happy:before { content: "\f38e"; } - -.ion-android-home:before { content: "\f38f"; } - -.ion-android-image:before { content: "\f2e4"; } - -.ion-android-laptop:before { content: "\f390"; } - -.ion-android-list:before { content: "\f391"; } - -.ion-android-locate:before { content: "\f2e9"; } - -.ion-android-lock:before { content: "\f392"; } - -.ion-android-mail:before { content: "\f2eb"; } - -.ion-android-map:before { content: "\f393"; } - -.ion-android-menu:before { content: "\f394"; } - -.ion-android-microphone:before { content: "\f2ec"; } - -.ion-android-microphone-off:before { content: "\f395"; } - -.ion-android-more-horizontal:before { content: "\f396"; } - -.ion-android-more-vertical:before { content: "\f397"; } - -.ion-android-navigate:before { content: "\f398"; } - -.ion-android-notifications:before { content: "\f39b"; } - -.ion-android-notifications-none:before { content: "\f399"; } - -.ion-android-notifications-off:before { content: "\f39a"; } - -.ion-android-open:before { content: "\f39c"; } - -.ion-android-options:before { content: "\f39d"; } - -.ion-android-people:before { content: "\f39e"; } - -.ion-android-person:before { content: "\f3a0"; } - -.ion-android-person-add:before { content: "\f39f"; } - -.ion-android-phone-landscape:before { content: "\f3a1"; } - -.ion-android-phone-portrait:before { content: "\f3a2"; } - -.ion-android-pin:before { content: "\f3a3"; } - -.ion-android-plane:before { content: "\f3a4"; } - -.ion-android-playstore:before { content: "\f2f0"; } - -.ion-android-print:before { content: "\f3a5"; } - -.ion-android-radio-button-off:before { content: "\f3a6"; } - -.ion-android-radio-button-on:before { content: "\f3a7"; } - -.ion-android-refresh:before { content: "\f3a8"; } - -.ion-android-remove:before { content: "\f2f4"; } - -.ion-android-remove-circle:before { content: "\f3a9"; } - -.ion-android-restaurant:before { content: "\f3aa"; } - -.ion-android-sad:before { content: "\f3ab"; } - -.ion-android-search:before { content: "\f2f5"; } - -.ion-android-send:before { content: "\f2f6"; } - -.ion-android-settings:before { content: "\f2f7"; } - -.ion-android-share:before { content: "\f2f8"; } - -.ion-android-share-alt:before { content: "\f3ac"; } - -.ion-android-star:before { content: "\f2fc"; } - -.ion-android-star-half:before { content: "\f3ad"; } - -.ion-android-star-outline:before { content: "\f3ae"; } - -.ion-android-stopwatch:before { content: "\f2fd"; } - -.ion-android-subway:before { content: "\f3af"; } - -.ion-android-sunny:before { content: "\f3b0"; } - -.ion-android-sync:before { content: "\f3b1"; } - -.ion-android-textsms:before { content: "\f3b2"; } - -.ion-android-time:before { content: "\f3b3"; } - -.ion-android-train:before { content: "\f3b4"; } - -.ion-android-unlock:before { content: "\f3b5"; } - -.ion-android-upload:before { content: "\f3b6"; } - -.ion-android-volume-down:before { content: "\f3b7"; } - -.ion-android-volume-mute:before { content: "\f3b8"; } - -.ion-android-volume-off:before { content: "\f3b9"; } - -.ion-android-volume-up:before { content: "\f3ba"; } - -.ion-android-walk:before { content: "\f3bb"; } - -.ion-android-warning:before { content: "\f3bc"; } - -.ion-android-watch:before { content: "\f3bd"; } - -.ion-android-wifi:before { content: "\f305"; } - -.ion-aperture:before { content: "\f313"; } - -.ion-archive:before { content: "\f102"; } - -.ion-arrow-down-a:before { content: "\f103"; } - -.ion-arrow-down-b:before { content: "\f104"; } - -.ion-arrow-down-c:before { content: "\f105"; } - -.ion-arrow-expand:before { content: "\f25e"; } - -.ion-arrow-graph-down-left:before { content: "\f25f"; } - -.ion-arrow-graph-down-right:before { content: "\f260"; } - -.ion-arrow-graph-up-left:before { content: "\f261"; } - -.ion-arrow-graph-up-right:before { content: "\f262"; } - -.ion-arrow-left-a:before { content: "\f106"; } - -.ion-arrow-left-b:before { content: "\f107"; } - -.ion-arrow-left-c:before { content: "\f108"; } - -.ion-arrow-move:before { content: "\f263"; } - -.ion-arrow-resize:before { content: "\f264"; } - -.ion-arrow-return-left:before { content: "\f265"; } - -.ion-arrow-return-right:before { content: "\f266"; } - -.ion-arrow-right-a:before { content: "\f109"; } - -.ion-arrow-right-b:before { content: "\f10a"; } - -.ion-arrow-right-c:before { content: "\f10b"; } - -.ion-arrow-shrink:before { content: "\f267"; } - -.ion-arrow-swap:before { content: "\f268"; } - -.ion-arrow-up-a:before { content: "\f10c"; } - -.ion-arrow-up-b:before { content: "\f10d"; } - -.ion-arrow-up-c:before { content: "\f10e"; } - -.ion-asterisk:before { content: "\f314"; } - -.ion-at:before { content: "\f10f"; } - -.ion-backspace:before { content: "\f3bf"; } - -.ion-backspace-outline:before { content: "\f3be"; } - -.ion-bag:before { content: "\f110"; } - -.ion-battery-charging:before { content: "\f111"; } - -.ion-battery-empty:before { content: "\f112"; } - -.ion-battery-full:before { content: "\f113"; } - -.ion-battery-half:before { content: "\f114"; } - -.ion-battery-low:before { content: "\f115"; } - -.ion-beaker:before { content: "\f269"; } - -.ion-beer:before { content: "\f26a"; } - -.ion-bluetooth:before { content: "\f116"; } - -.ion-bonfire:before { content: "\f315"; } - -.ion-bookmark:before { content: "\f26b"; } - -.ion-bowtie:before { content: "\f3c0"; } - -.ion-briefcase:before { content: "\f26c"; } - -.ion-bug:before { content: "\f2be"; } - -.ion-calculator:before { content: "\f26d"; } - -.ion-calendar:before { content: "\f117"; } - -.ion-camera:before { content: "\f118"; } - -.ion-card:before { content: "\f119"; } - -.ion-cash:before { content: "\f316"; } - -.ion-chatbox:before { content: "\f11b"; } - -.ion-chatbox-working:before { content: "\f11a"; } - -.ion-chatboxes:before { content: "\f11c"; } - -.ion-chatbubble:before { content: "\f11e"; } - -.ion-chatbubble-working:before { content: "\f11d"; } - -.ion-chatbubbles:before { content: "\f11f"; } - -.ion-checkmark:before { content: "\f122"; } - -.ion-checkmark-circled:before { content: "\f120"; } - -.ion-checkmark-round:before { content: "\f121"; } - -.ion-chevron-down:before { content: "\f123"; } - -.ion-chevron-left:before { content: "\f124"; } - -.ion-chevron-right:before { content: "\f125"; } - -.ion-chevron-up:before { content: "\f126"; } - -.ion-clipboard:before { content: "\f127"; } - -.ion-clock:before { content: "\f26e"; } - -.ion-close:before { content: "\f12a"; } - -.ion-close-circled:before { content: "\f128"; } - -.ion-close-round:before { content: "\f129"; } - -.ion-closed-captioning:before { content: "\f317"; } - -.ion-cloud:before { content: "\f12b"; } - -.ion-code:before { content: "\f271"; } - -.ion-code-download:before { content: "\f26f"; } - -.ion-code-working:before { content: "\f270"; } - -.ion-coffee:before { content: "\f272"; } - -.ion-compass:before { content: "\f273"; } - -.ion-compose:before { content: "\f12c"; } - -.ion-connection-bars:before { content: "\f274"; } - -.ion-contrast:before { content: "\f275"; } - -.ion-crop:before { content: "\f3c1"; } - -.ion-cube:before { content: "\f318"; } - -.ion-disc:before { content: "\f12d"; } - -.ion-document:before { content: "\f12f"; } - -.ion-document-text:before { content: "\f12e"; } - -.ion-drag:before { content: "\f130"; } - -.ion-earth:before { content: "\f276"; } - -.ion-easel:before { content: "\f3c2"; } - -.ion-edit:before { content: "\f2bf"; } - -.ion-egg:before { content: "\f277"; } - -.ion-eject:before { content: "\f131"; } - -.ion-email:before { content: "\f132"; } - -.ion-email-unread:before { content: "\f3c3"; } - -.ion-erlenmeyer-flask:before { content: "\f3c5"; } - -.ion-erlenmeyer-flask-bubbles:before { content: "\f3c4"; } - -.ion-eye:before { content: "\f133"; } - -.ion-eye-disabled:before { content: "\f306"; } - -.ion-female:before { content: "\f278"; } - -.ion-filing:before { content: "\f134"; } - -.ion-film-marker:before { content: "\f135"; } - -.ion-fireball:before { content: "\f319"; } - -.ion-flag:before { content: "\f279"; } - -.ion-flame:before { content: "\f31a"; } - -.ion-flash:before { content: "\f137"; } - -.ion-flash-off:before { content: "\f136"; } - -.ion-folder:before { content: "\f139"; } - -.ion-fork:before { content: "\f27a"; } - -.ion-fork-repo:before { content: "\f2c0"; } - -.ion-forward:before { content: "\f13a"; } - -.ion-funnel:before { content: "\f31b"; } - -.ion-gear-a:before { content: "\f13d"; } - -.ion-gear-b:before { content: "\f13e"; } - -.ion-grid:before { content: "\f13f"; } - -.ion-hammer:before { content: "\f27b"; } - -.ion-happy:before { content: "\f31c"; } - -.ion-happy-outline:before { content: "\f3c6"; } - -.ion-headphone:before { content: "\f140"; } - -.ion-heart:before { content: "\f141"; } - -.ion-heart-broken:before { content: "\f31d"; } - -.ion-help:before { content: "\f143"; } - -.ion-help-buoy:before { content: "\f27c"; } - -.ion-help-circled:before { content: "\f142"; } - -.ion-home:before { content: "\f144"; } - -.ion-icecream:before { content: "\f27d"; } - -.ion-image:before { content: "\f147"; } - -.ion-images:before { content: "\f148"; } - -.ion-information:before { content: "\f14a"; } - -.ion-information-circled:before { content: "\f149"; } - -.ion-ionic:before { content: "\f14b"; } - -.ion-ios-alarm:before { content: "\f3c8"; } - -.ion-ios-alarm-outline:before { content: "\f3c7"; } - -.ion-ios-albums:before { content: "\f3ca"; } - -.ion-ios-albums-outline:before { content: "\f3c9"; } - -.ion-ios-americanfootball:before { content: "\f3cc"; } - -.ion-ios-americanfootball-outline:before { content: "\f3cb"; } - -.ion-ios-analytics:before { content: "\f3ce"; } - -.ion-ios-analytics-outline:before { content: "\f3cd"; } - -.ion-ios-arrow-back:before { content: "\f3cf"; } - -.ion-ios-arrow-down:before { content: "\f3d0"; } - -.ion-ios-arrow-forward:before { content: "\f3d1"; } - -.ion-ios-arrow-left:before { content: "\f3d2"; } - -.ion-ios-arrow-right:before { content: "\f3d3"; } - -.ion-ios-arrow-thin-down:before { content: "\f3d4"; } - -.ion-ios-arrow-thin-left:before { content: "\f3d5"; } - -.ion-ios-arrow-thin-right:before { content: "\f3d6"; } - -.ion-ios-arrow-thin-up:before { content: "\f3d7"; } - -.ion-ios-arrow-up:before { content: "\f3d8"; } - -.ion-ios-at:before { content: "\f3da"; } - -.ion-ios-at-outline:before { content: "\f3d9"; } - -.ion-ios-barcode:before { content: "\f3dc"; } - -.ion-ios-barcode-outline:before { content: "\f3db"; } - -.ion-ios-baseball:before { content: "\f3de"; } - -.ion-ios-baseball-outline:before { content: "\f3dd"; } - -.ion-ios-basketball:before { content: "\f3e0"; } - -.ion-ios-basketball-outline:before { content: "\f3df"; } - -.ion-ios-bell:before { content: "\f3e2"; } - -.ion-ios-bell-outline:before { content: "\f3e1"; } - -.ion-ios-body:before { content: "\f3e4"; } - -.ion-ios-body-outline:before { content: "\f3e3"; } - -.ion-ios-bolt:before { content: "\f3e6"; } - -.ion-ios-bolt-outline:before { content: "\f3e5"; } - -.ion-ios-book:before { content: "\f3e8"; } - -.ion-ios-book-outline:before { content: "\f3e7"; } - -.ion-ios-bookmarks:before { content: "\f3ea"; } - -.ion-ios-bookmarks-outline:before { content: "\f3e9"; } - -.ion-ios-box:before { content: "\f3ec"; } - -.ion-ios-box-outline:before { content: "\f3eb"; } - -.ion-ios-briefcase:before { content: "\f3ee"; } - -.ion-ios-briefcase-outline:before { content: "\f3ed"; } - -.ion-ios-browsers:before { content: "\f3f0"; } - -.ion-ios-browsers-outline:before { content: "\f3ef"; } - -.ion-ios-calculator:before { content: "\f3f2"; } - -.ion-ios-calculator-outline:before { content: "\f3f1"; } - -.ion-ios-calendar:before { content: "\f3f4"; } - -.ion-ios-calendar-outline:before { content: "\f3f3"; } - -.ion-ios-camera:before { content: "\f3f6"; } - -.ion-ios-camera-outline:before { content: "\f3f5"; } - -.ion-ios-cart:before { content: "\f3f8"; } - -.ion-ios-cart-outline:before { content: "\f3f7"; } - -.ion-ios-chatboxes:before { content: "\f3fa"; } - -.ion-ios-chatboxes-outline:before { content: "\f3f9"; } - -.ion-ios-chatbubble:before { content: "\f3fc"; } - -.ion-ios-chatbubble-outline:before { content: "\f3fb"; } - -.ion-ios-checkmark:before { content: "\f3ff"; } - -.ion-ios-checkmark-empty:before { content: "\f3fd"; } - -.ion-ios-checkmark-outline:before { content: "\f3fe"; } - -.ion-ios-circle-filled:before { content: "\f400"; } - -.ion-ios-circle-outline:before { content: "\f401"; } - -.ion-ios-clock:before { content: "\f403"; } - -.ion-ios-clock-outline:before { content: "\f402"; } - -.ion-ios-close:before { content: "\f406"; } - -.ion-ios-close-empty:before { content: "\f404"; } - -.ion-ios-close-outline:before { content: "\f405"; } - -.ion-ios-cloud:before { content: "\f40c"; } - -.ion-ios-cloud-download:before { content: "\f408"; } - -.ion-ios-cloud-download-outline:before { content: "\f407"; } - -.ion-ios-cloud-outline:before { content: "\f409"; } - -.ion-ios-cloud-upload:before { content: "\f40b"; } - -.ion-ios-cloud-upload-outline:before { content: "\f40a"; } - -.ion-ios-cloudy:before { content: "\f410"; } - -.ion-ios-cloudy-night:before { content: "\f40e"; } - -.ion-ios-cloudy-night-outline:before { content: "\f40d"; } - -.ion-ios-cloudy-outline:before { content: "\f40f"; } - -.ion-ios-cog:before { content: "\f412"; } - -.ion-ios-cog-outline:before { content: "\f411"; } - -.ion-ios-color-filter:before { content: "\f414"; } - -.ion-ios-color-filter-outline:before { content: "\f413"; } - -.ion-ios-color-wand:before { content: "\f416"; } - -.ion-ios-color-wand-outline:before { content: "\f415"; } - -.ion-ios-compose:before { content: "\f418"; } - -.ion-ios-compose-outline:before { content: "\f417"; } - -.ion-ios-contact:before { content: "\f41a"; } - -.ion-ios-contact-outline:before { content: "\f419"; } - -.ion-ios-copy:before { content: "\f41c"; } - -.ion-ios-copy-outline:before { content: "\f41b"; } - -.ion-ios-crop:before { content: "\f41e"; } - -.ion-ios-crop-strong:before { content: "\f41d"; } - -.ion-ios-download:before { content: "\f420"; } - -.ion-ios-download-outline:before { content: "\f41f"; } - -.ion-ios-drag:before { content: "\f421"; } - -.ion-ios-email:before { content: "\f423"; } - -.ion-ios-email-outline:before { content: "\f422"; } - -.ion-ios-eye:before { content: "\f425"; } - -.ion-ios-eye-outline:before { content: "\f424"; } - -.ion-ios-fastforward:before { content: "\f427"; } - -.ion-ios-fastforward-outline:before { content: "\f426"; } - -.ion-ios-filing:before { content: "\f429"; } - -.ion-ios-filing-outline:before { content: "\f428"; } - -.ion-ios-film:before { content: "\f42b"; } - -.ion-ios-film-outline:before { content: "\f42a"; } - -.ion-ios-flag:before { content: "\f42d"; } - -.ion-ios-flag-outline:before { content: "\f42c"; } - -.ion-ios-flame:before { content: "\f42f"; } - -.ion-ios-flame-outline:before { content: "\f42e"; } - -.ion-ios-flask:before { content: "\f431"; } - -.ion-ios-flask-outline:before { content: "\f430"; } - -.ion-ios-flower:before { content: "\f433"; } - -.ion-ios-flower-outline:before { content: "\f432"; } - -.ion-ios-folder:before { content: "\f435"; } - -.ion-ios-folder-outline:before { content: "\f434"; } - -.ion-ios-football:before { content: "\f437"; } - -.ion-ios-football-outline:before { content: "\f436"; } - -.ion-ios-game-controller-a:before { content: "\f439"; } - -.ion-ios-game-controller-a-outline:before { content: "\f438"; } - -.ion-ios-game-controller-b:before { content: "\f43b"; } - -.ion-ios-game-controller-b-outline:before { content: "\f43a"; } - -.ion-ios-gear:before { content: "\f43d"; } - -.ion-ios-gear-outline:before { content: "\f43c"; } - -.ion-ios-glasses:before { content: "\f43f"; } - -.ion-ios-glasses-outline:before { content: "\f43e"; } - -.ion-ios-grid-view:before { content: "\f441"; } - -.ion-ios-grid-view-outline:before { content: "\f440"; } - -.ion-ios-heart:before { content: "\f443"; } - -.ion-ios-heart-outline:before { content: "\f442"; } - -.ion-ios-help:before { content: "\f446"; } - -.ion-ios-help-empty:before { content: "\f444"; } - -.ion-ios-help-outline:before { content: "\f445"; } - -.ion-ios-home:before { content: "\f448"; } - -.ion-ios-home-outline:before { content: "\f447"; } - -.ion-ios-infinite:before { content: "\f44a"; } - -.ion-ios-infinite-outline:before { content: "\f449"; } - -.ion-ios-information:before { content: "\f44d"; } - -.ion-ios-information-empty:before { content: "\f44b"; } - -.ion-ios-information-outline:before { content: "\f44c"; } - -.ion-ios-ionic-outline:before { content: "\f44e"; } - -.ion-ios-keypad:before { content: "\f450"; } - -.ion-ios-keypad-outline:before { content: "\f44f"; } - -.ion-ios-lightbulb:before { content: "\f452"; } - -.ion-ios-lightbulb-outline:before { content: "\f451"; } - -.ion-ios-list:before { content: "\f454"; } - -.ion-ios-list-outline:before { content: "\f453"; } - -.ion-ios-location:before { content: "\f456"; } - -.ion-ios-location-outline:before { content: "\f455"; } - -.ion-ios-locked:before { content: "\f458"; } - -.ion-ios-locked-outline:before { content: "\f457"; } - -.ion-ios-loop:before { content: "\f45a"; } - -.ion-ios-loop-strong:before { content: "\f459"; } - -.ion-ios-medical:before { content: "\f45c"; } - -.ion-ios-medical-outline:before { content: "\f45b"; } - -.ion-ios-medkit:before { content: "\f45e"; } - -.ion-ios-medkit-outline:before { content: "\f45d"; } - -.ion-ios-mic:before { content: "\f461"; } - -.ion-ios-mic-off:before { content: "\f45f"; } - -.ion-ios-mic-outline:before { content: "\f460"; } - -.ion-ios-minus:before { content: "\f464"; } - -.ion-ios-minus-empty:before { content: "\f462"; } - -.ion-ios-minus-outline:before { content: "\f463"; } - -.ion-ios-monitor:before { content: "\f466"; } - -.ion-ios-monitor-outline:before { content: "\f465"; } - -.ion-ios-moon:before { content: "\f468"; } - -.ion-ios-moon-outline:before { content: "\f467"; } - -.ion-ios-more:before { content: "\f46a"; } - -.ion-ios-more-outline:before { content: "\f469"; } - -.ion-ios-musical-note:before { content: "\f46b"; } - -.ion-ios-musical-notes:before { content: "\f46c"; } - -.ion-ios-navigate:before { content: "\f46e"; } - -.ion-ios-navigate-outline:before { content: "\f46d"; } - -.ion-ios-nutrition:before { content: "\f470"; } - -.ion-ios-nutrition-outline:before { content: "\f46f"; } - -.ion-ios-paper:before { content: "\f472"; } - -.ion-ios-paper-outline:before { content: "\f471"; } - -.ion-ios-paperplane:before { content: "\f474"; } - -.ion-ios-paperplane-outline:before { content: "\f473"; } - -.ion-ios-partlysunny:before { content: "\f476"; } - -.ion-ios-partlysunny-outline:before { content: "\f475"; } - -.ion-ios-pause:before { content: "\f478"; } - -.ion-ios-pause-outline:before { content: "\f477"; } - -.ion-ios-paw:before { content: "\f47a"; } - -.ion-ios-paw-outline:before { content: "\f479"; } - -.ion-ios-people:before { content: "\f47c"; } - -.ion-ios-people-outline:before { content: "\f47b"; } - -.ion-ios-person:before { content: "\f47e"; } - -.ion-ios-person-outline:before { content: "\f47d"; } - -.ion-ios-personadd:before { content: "\f480"; } - -.ion-ios-personadd-outline:before { content: "\f47f"; } - -.ion-ios-photos:before { content: "\f482"; } - -.ion-ios-photos-outline:before { content: "\f481"; } - -.ion-ios-pie:before { content: "\f484"; } - -.ion-ios-pie-outline:before { content: "\f483"; } - -.ion-ios-pint:before { content: "\f486"; } - -.ion-ios-pint-outline:before { content: "\f485"; } - -.ion-ios-play:before { content: "\f488"; } - -.ion-ios-play-outline:before { content: "\f487"; } - -.ion-ios-plus:before { content: "\f48b"; } - -.ion-ios-plus-empty:before { content: "\f489"; } - -.ion-ios-plus-outline:before { content: "\f48a"; } - -.ion-ios-pricetag:before { content: "\f48d"; } - -.ion-ios-pricetag-outline:before { content: "\f48c"; } - -.ion-ios-pricetags:before { content: "\f48f"; } - -.ion-ios-pricetags-outline:before { content: "\f48e"; } - -.ion-ios-printer:before { content: "\f491"; } - -.ion-ios-printer-outline:before { content: "\f490"; } - -.ion-ios-pulse:before { content: "\f493"; } - -.ion-ios-pulse-strong:before { content: "\f492"; } - -.ion-ios-rainy:before { content: "\f495"; } - -.ion-ios-rainy-outline:before { content: "\f494"; } - -.ion-ios-recording:before { content: "\f497"; } - -.ion-ios-recording-outline:before { content: "\f496"; } - -.ion-ios-redo:before { content: "\f499"; } - -.ion-ios-redo-outline:before { content: "\f498"; } - -.ion-ios-refresh:before { content: "\f49c"; } - -.ion-ios-refresh-empty:before { content: "\f49a"; } - -.ion-ios-refresh-outline:before { content: "\f49b"; } - -.ion-ios-reload:before { content: "\f49d"; } - -.ion-ios-reverse-camera:before { content: "\f49f"; } - -.ion-ios-reverse-camera-outline:before { content: "\f49e"; } - -.ion-ios-rewind:before { content: "\f4a1"; } - -.ion-ios-rewind-outline:before { content: "\f4a0"; } - -.ion-ios-rose:before { content: "\f4a3"; } - -.ion-ios-rose-outline:before { content: "\f4a2"; } - -.ion-ios-search:before { content: "\f4a5"; } - -.ion-ios-search-strong:before { content: "\f4a4"; } - -.ion-ios-settings:before { content: "\f4a7"; } - -.ion-ios-settings-strong:before { content: "\f4a6"; } - -.ion-ios-shuffle:before { content: "\f4a9"; } - -.ion-ios-shuffle-strong:before { content: "\f4a8"; } - -.ion-ios-skipbackward:before { content: "\f4ab"; } - -.ion-ios-skipbackward-outline:before { content: "\f4aa"; } - -.ion-ios-skipforward:before { content: "\f4ad"; } - -.ion-ios-skipforward-outline:before { content: "\f4ac"; } - -.ion-ios-snowy:before { content: "\f4ae"; } - -.ion-ios-speedometer:before { content: "\f4b0"; } - -.ion-ios-speedometer-outline:before { content: "\f4af"; } - -.ion-ios-star:before { content: "\f4b3"; } - -.ion-ios-star-half:before { content: "\f4b1"; } - -.ion-ios-star-outline:before { content: "\f4b2"; } - -.ion-ios-stopwatch:before { content: "\f4b5"; } - -.ion-ios-stopwatch-outline:before { content: "\f4b4"; } - -.ion-ios-sunny:before { content: "\f4b7"; } - -.ion-ios-sunny-outline:before { content: "\f4b6"; } - -.ion-ios-telephone:before { content: "\f4b9"; } - -.ion-ios-telephone-outline:before { content: "\f4b8"; } - -.ion-ios-tennisball:before { content: "\f4bb"; } - -.ion-ios-tennisball-outline:before { content: "\f4ba"; } - -.ion-ios-thunderstorm:before { content: "\f4bd"; } - -.ion-ios-thunderstorm-outline:before { content: "\f4bc"; } - -.ion-ios-time:before { content: "\f4bf"; } - -.ion-ios-time-outline:before { content: "\f4be"; } - -.ion-ios-timer:before { content: "\f4c1"; } - -.ion-ios-timer-outline:before { content: "\f4c0"; } - -.ion-ios-toggle:before { content: "\f4c3"; } - -.ion-ios-toggle-outline:before { content: "\f4c2"; } - -.ion-ios-trash:before { content: "\f4c5"; } - -.ion-ios-trash-outline:before { content: "\f4c4"; } - -.ion-ios-undo:before { content: "\f4c7"; } - -.ion-ios-undo-outline:before { content: "\f4c6"; } - -.ion-ios-unlocked:before { content: "\f4c9"; } - -.ion-ios-unlocked-outline:before { content: "\f4c8"; } - -.ion-ios-upload:before { content: "\f4cb"; } - -.ion-ios-upload-outline:before { content: "\f4ca"; } - -.ion-ios-videocam:before { content: "\f4cd"; } - -.ion-ios-videocam-outline:before { content: "\f4cc"; } - -.ion-ios-volume-high:before { content: "\f4ce"; } - -.ion-ios-volume-low:before { content: "\f4cf"; } - -.ion-ios-wineglass:before { content: "\f4d1"; } - -.ion-ios-wineglass-outline:before { content: "\f4d0"; } - -.ion-ios-world:before { content: "\f4d3"; } - -.ion-ios-world-outline:before { content: "\f4d2"; } - -.ion-ipad:before { content: "\f1f9"; } - -.ion-iphone:before { content: "\f1fa"; } - -.ion-ipod:before { content: "\f1fb"; } - -.ion-jet:before { content: "\f295"; } - -.ion-key:before { content: "\f296"; } - -.ion-knife:before { content: "\f297"; } - -.ion-laptop:before { content: "\f1fc"; } - -.ion-leaf:before { content: "\f1fd"; } - -.ion-levels:before { content: "\f298"; } - -.ion-lightbulb:before { content: "\f299"; } - -.ion-link:before { content: "\f1fe"; } - -.ion-load-a:before { content: "\f29a"; } - -.ion-load-b:before { content: "\f29b"; } - -.ion-load-c:before { content: "\f29c"; } - -.ion-load-d:before { content: "\f29d"; } - -.ion-location:before { content: "\f1ff"; } - -.ion-lock-combination:before { content: "\f4d4"; } - -.ion-locked:before { content: "\f200"; } - -.ion-log-in:before { content: "\f29e"; } - -.ion-log-out:before { content: "\f29f"; } - -.ion-loop:before { content: "\f201"; } - -.ion-magnet:before { content: "\f2a0"; } - -.ion-male:before { content: "\f2a1"; } - -.ion-man:before { content: "\f202"; } - -.ion-map:before { content: "\f203"; } - -.ion-medkit:before { content: "\f2a2"; } - -.ion-merge:before { content: "\f33f"; } - -.ion-mic-a:before { content: "\f204"; } - -.ion-mic-b:before { content: "\f205"; } - -.ion-mic-c:before { content: "\f206"; } - -.ion-minus:before { content: "\f209"; } - -.ion-minus-circled:before { content: "\f207"; } - -.ion-minus-round:before { content: "\f208"; } - -.ion-model-s:before { content: "\f2c1"; } - -.ion-monitor:before { content: "\f20a"; } - -.ion-more:before { content: "\f20b"; } - -.ion-mouse:before { content: "\f340"; } - -.ion-music-note:before { content: "\f20c"; } - -.ion-navicon:before { content: "\f20e"; } - -.ion-navicon-round:before { content: "\f20d"; } - -.ion-navigate:before { content: "\f2a3"; } - -.ion-network:before { content: "\f341"; } - -.ion-no-smoking:before { content: "\f2c2"; } - -.ion-nuclear:before { content: "\f2a4"; } - -.ion-outlet:before { content: "\f342"; } - -.ion-paintbrush:before { content: "\f4d5"; } - -.ion-paintbucket:before { content: "\f4d6"; } - -.ion-paper-airplane:before { content: "\f2c3"; } - -.ion-paperclip:before { content: "\f20f"; } - -.ion-pause:before { content: "\f210"; } - -.ion-person:before { content: "\f213"; } - -.ion-person-add:before { content: "\f211"; } - -.ion-person-stalker:before { content: "\f212"; } - -.ion-pie-graph:before { content: "\f2a5"; } - -.ion-pin:before { content: "\f2a6"; } - -.ion-pinpoint:before { content: "\f2a7"; } - -.ion-pizza:before { content: "\f2a8"; } - -.ion-plane:before { content: "\f214"; } - -.ion-planet:before { content: "\f343"; } - -.ion-play:before { content: "\f215"; } - -.ion-playstation:before { content: "\f30a"; } - -.ion-plus:before { content: "\f218"; } - -.ion-plus-circled:before { content: "\f216"; } - -.ion-plus-round:before { content: "\f217"; } - -.ion-podium:before { content: "\f344"; } - -.ion-pound:before { content: "\f219"; } - -.ion-power:before { content: "\f2a9"; } - -.ion-pricetag:before { content: "\f2aa"; } - -.ion-pricetags:before { content: "\f2ab"; } - -.ion-printer:before { content: "\f21a"; } - -.ion-pull-request:before { content: "\f345"; } - -.ion-qr-scanner:before { content: "\f346"; } - -.ion-quote:before { content: "\f347"; } - -.ion-radio-waves:before { content: "\f2ac"; } - -.ion-record:before { content: "\f21b"; } - -.ion-refresh:before { content: "\f21c"; } - -.ion-reply:before { content: "\f21e"; } - -.ion-reply-all:before { content: "\f21d"; } - -.ion-ribbon-a:before { content: "\f348"; } - -.ion-ribbon-b:before { content: "\f349"; } - -.ion-sad:before { content: "\f34a"; } - -.ion-sad-outline:before { content: "\f4d7"; } - -.ion-scissors:before { content: "\f34b"; } - -.ion-search:before { content: "\f21f"; } - -.ion-settings:before { content: "\f2ad"; } - -.ion-share:before { content: "\f220"; } - -.ion-shuffle:before { content: "\f221"; } - -.ion-skip-backward:before { content: "\f222"; } - -.ion-skip-forward:before { content: "\f223"; } - -.ion-social-android:before { content: "\f225"; } - -.ion-social-android-outline:before { content: "\f224"; } - -.ion-social-angular:before { content: "\f4d9"; } - -.ion-social-angular-outline:before { content: "\f4d8"; } - -.ion-social-apple:before { content: "\f227"; } - -.ion-social-apple-outline:before { content: "\f226"; } - -.ion-social-bitcoin:before { content: "\f2af"; } - -.ion-social-bitcoin-outline:before { content: "\f2ae"; } - -.ion-social-buffer:before { content: "\f229"; } - -.ion-social-buffer-outline:before { content: "\f228"; } - -.ion-social-chrome:before { content: "\f4db"; } - -.ion-social-chrome-outline:before { content: "\f4da"; } - -.ion-social-codepen:before { content: "\f4dd"; } - -.ion-social-codepen-outline:before { content: "\f4dc"; } - -.ion-social-css3:before { content: "\f4df"; } - -.ion-social-css3-outline:before { content: "\f4de"; } - -.ion-social-designernews:before { content: "\f22b"; } - -.ion-social-designernews-outline:before { content: "\f22a"; } - -.ion-social-dribbble:before { content: "\f22d"; } - -.ion-social-dribbble-outline:before { content: "\f22c"; } - -.ion-social-dropbox:before { content: "\f22f"; } - -.ion-social-dropbox-outline:before { content: "\f22e"; } - -.ion-social-euro:before { content: "\f4e1"; } - -.ion-social-euro-outline:before { content: "\f4e0"; } - -.ion-social-facebook:before { content: "\f231"; } - -.ion-social-facebook-outline:before { content: "\f230"; } - -.ion-social-foursquare:before { content: "\f34d"; } - -.ion-social-foursquare-outline:before { content: "\f34c"; } - -.ion-social-freebsd-devil:before { content: "\f2c4"; } - -.ion-social-github:before { content: "\f233"; } - -.ion-social-github-outline:before { content: "\f232"; } - -.ion-social-google:before { content: "\f34f"; } - -.ion-social-google-outline:before { content: "\f34e"; } - -.ion-social-googleplus:before { content: "\f235"; } - -.ion-social-googleplus-outline:before { content: "\f234"; } - -.ion-social-hackernews:before { content: "\f237"; } - -.ion-social-hackernews-outline:before { content: "\f236"; } - -.ion-social-html5:before { content: "\f4e3"; } - -.ion-social-html5-outline:before { content: "\f4e2"; } - -.ion-social-instagram:before { content: "\f351"; } - -.ion-social-instagram-outline:before { content: "\f350"; } - -.ion-social-javascript:before { content: "\f4e5"; } - -.ion-social-javascript-outline:before { content: "\f4e4"; } - -.ion-social-linkedin:before { content: "\f239"; } - -.ion-social-linkedin-outline:before { content: "\f238"; } - -.ion-social-markdown:before { content: "\f4e6"; } - -.ion-social-nodejs:before { content: "\f4e7"; } - -.ion-social-octocat:before { content: "\f4e8"; } - -.ion-social-pinterest:before { content: "\f2b1"; } - -.ion-social-pinterest-outline:before { content: "\f2b0"; } - -.ion-social-python:before { content: "\f4e9"; } - -.ion-social-reddit:before { content: "\f23b"; } - -.ion-social-reddit-outline:before { content: "\f23a"; } - -.ion-social-rss:before { content: "\f23d"; } - -.ion-social-rss-outline:before { content: "\f23c"; } - -.ion-social-sass:before { content: "\f4ea"; } - -.ion-social-skype:before { content: "\f23f"; } - -.ion-social-skype-outline:before { content: "\f23e"; } - -.ion-social-snapchat:before { content: "\f4ec"; } - -.ion-social-snapchat-outline:before { content: "\f4eb"; } - -.ion-social-tumblr:before { content: "\f241"; } - -.ion-social-tumblr-outline:before { content: "\f240"; } - -.ion-social-tux:before { content: "\f2c5"; } - -.ion-social-twitch:before { content: "\f4ee"; } - -.ion-social-twitch-outline:before { content: "\f4ed"; } - -.ion-social-twitter:before { content: "\f243"; } - -.ion-social-twitter-outline:before { content: "\f242"; } - -.ion-social-usd:before { content: "\f353"; } - -.ion-social-usd-outline:before { content: "\f352"; } - -.ion-social-vimeo:before { content: "\f245"; } - -.ion-social-vimeo-outline:before { content: "\f244"; } - -.ion-social-whatsapp:before { content: "\f4f0"; } - -.ion-social-whatsapp-outline:before { content: "\f4ef"; } - -.ion-social-windows:before { content: "\f247"; } - -.ion-social-windows-outline:before { content: "\f246"; } - -.ion-social-wordpress:before { content: "\f249"; } - -.ion-social-wordpress-outline:before { content: "\f248"; } - -.ion-social-yahoo:before { content: "\f24b"; } - -.ion-social-yahoo-outline:before { content: "\f24a"; } - -.ion-social-yen:before { content: "\f4f2"; } - -.ion-social-yen-outline:before { content: "\f4f1"; } - -.ion-social-youtube:before { content: "\f24d"; } - -.ion-social-youtube-outline:before { content: "\f24c"; } - -.ion-soup-can:before { content: "\f4f4"; } - -.ion-soup-can-outline:before { content: "\f4f3"; } - -.ion-speakerphone:before { content: "\f2b2"; } - -.ion-speedometer:before { content: "\f2b3"; } - -.ion-spoon:before { content: "\f2b4"; } - -.ion-star:before { content: "\f24e"; } - -.ion-stats-bars:before { content: "\f2b5"; } - -.ion-steam:before { content: "\f30b"; } - -.ion-stop:before { content: "\f24f"; } - -.ion-thermometer:before { content: "\f2b6"; } - -.ion-thumbsdown:before { content: "\f250"; } - -.ion-thumbsup:before { content: "\f251"; } - -.ion-toggle:before { content: "\f355"; } - -.ion-toggle-filled:before { content: "\f354"; } - -.ion-transgender:before { content: "\f4f5"; } - -.ion-trash-a:before { content: "\f252"; } - -.ion-trash-b:before { content: "\f253"; } - -.ion-trophy:before { content: "\f356"; } - -.ion-tshirt:before { content: "\f4f7"; } - -.ion-tshirt-outline:before { content: "\f4f6"; } - -.ion-umbrella:before { content: "\f2b7"; } - -.ion-university:before { content: "\f357"; } - -.ion-unlocked:before { content: "\f254"; } - -.ion-upload:before { content: "\f255"; } - -.ion-usb:before { content: "\f2b8"; } - -.ion-videocamera:before { content: "\f256"; } - -.ion-volume-high:before { content: "\f257"; } - -.ion-volume-low:before { content: "\f258"; } - -.ion-volume-medium:before { content: "\f259"; } - -.ion-volume-mute:before { content: "\f25a"; } - -.ion-wand:before { content: "\f358"; } - -.ion-waterdrop:before { content: "\f25b"; } - -.ion-wifi:before { content: "\f25c"; } - -.ion-wineglass:before { content: "\f2b9"; } - -.ion-woman:before { content: "\f25d"; } - -.ion-wrench:before { content: "\f2ba"; } - -.ion-xbox:before { content: "\f30c"; } diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.eot b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.eot deleted file mode 100644 index 92a3f20a39267ae7f45144f412a995a663730360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120724 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

@FHUiu&=5w(f-3S1h*&)&h2 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 - - - - -Created by FontForge 20120731 at Thu Dec 4 09:51:48 2014 - By Adam Bradley -Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.ttf b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.ttf deleted file mode 100644 index c4e4632486d863337c1c73478ddb3c20726c55a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188508 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

8E#xmG!w{$tO5=<$!EHPzZXo}IBc1_sqA&q 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.woff b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.woff deleted file mode 100644 index 5f3a14e0a5ca6d20cc4fac708979e807b0d51bc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67904 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

  • F(S(gioucm()OHA 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 E0LEz`i~s-t diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js deleted file mode 100644 index b9de4be8..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js +++ /dev/null @@ -1,3 +0,0 @@ -appDS2.controller('postController', function($scope, $http, $modal, $routeParams, $rootScope,PostService){ - -}); diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js deleted file mode 100644 index b2042b85..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js +++ /dev/null @@ -1,19 +0,0 @@ -appDS2.config(function($routeProvider) { - $routeProvider - .when('/collaborate_list', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html', - controller: 'collaborateListControllerDS2' - }) - .when('/drools/:filename', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html', - controller: 'droolsController' - }) - .when('/droolsList', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html', - controller: 'droolsListController' - }) - .otherwise({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/net_map.html', - controller : 'netMapController' - }); -}); diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js deleted file mode 100644 index cf225def..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js +++ /dev/null @@ -1,5 +0,0 @@ -appDS2.factory('PostService', function ($http, $q) { - return { - - }; -}); diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html deleted file mode 100644 index 43bec521..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -

    User Search

    -
    diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html deleted file mode 100644 index 25c081a9..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html +++ /dev/null @@ -1,60 +0,0 @@ -
    -
    -

    Profile Search

    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    User IDLast NameFirst NameEmailUser IDManager User IDEditActive?
    {{rowData.id}}{{rowData.lastName}}{{rowData.firstName}}{{rowData.email}}{{rowData.orgUserId}}{{rowData.orgManagerUserId}} -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html deleted file mode 100644 index ca317616..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html +++ /dev/null @@ -1,190 +0,0 @@ -
    diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngsamplePage.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngsamplePage.html deleted file mode 100644 index ea801ae6..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngsamplePage.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - Sample Page NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html deleted file mode 100644 index 2288e985..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - Sample Page - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html deleted file mode 100644 index f4d8d7ed..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html +++ /dev/null @@ -1,13 +0,0 @@ -
    -
    - -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html deleted file mode 100644 index 2eec0cfb..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html +++ /dev/null @@ -1,2 +0,0 @@ - -ONAP Portal \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/view-models/footer.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/view-models/footer.html deleted file mode 100644 index 7cbff474..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/app/fusion/scripts/view-models/footer.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css deleted file mode 100644 index a9edba8f..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css +++ /dev/null @@ -1,173 +0,0 @@ -.gridster { - position: relative; - margin: auto; - /* height: 0 - */} - -.gridster>ul { - margin: 0; - list-style: none; - padding: 0 -} - -.gridster-item { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - list-style: none; - z-index: 2; - position: absolute; - display: none -} - -.gridster-loaded { - -webkit-transition: height .3s; - -moz-transition: height .3s; - -o-transition: height .3s; - transition: height .3s -} - -.gridster-loaded .gridster-item { - display: block; - position: absolute; - -webkit-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - -moz-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - -o-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - -webkit-transition-delay: 50ms; - -moz-transition-delay: 50ms; - -o-transition-delay: 50ms; - transition-delay: 50ms -} - -.gridster-loaded .gridster-preview-holder { - display: none; - z-index: 1; - position: absolute; - background-color: #067ab4; - /* - background-color: rgb(6, 122, 180); - -ms-filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#067ab4', endColorstr='#067ab4'); IE - opacity: 0.2; - */ - border-color: #fff; - -webkit-transition: width .2s, height .3s; - -moz-transition: width .2s, height .3s; - -o-transition: width .2s, height .3s; - transition: width .2s, height .3s; - -webkit-transition-delay: 50ms; - -moz-transition-delay: 50ms; - -o-transition-delay: 50ms; - transition-delay: 50ms -} - -.gridster-loaded .gridster-item.gridster-item-moving { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - opacity: 0.9; -} - -.gridster-mobile { - height: auto !important -} - -.gridster-mobile .gridster-item { - height: auto; - position: static; - float: none -} - -.gridster-item.ng-leave.ng-leave-active { - opacity: 0 -} - -.gridster-item.ng-enter { - opacity: 1 -} - -.gridster-item-moving { - z-index: 3 -} - -.gridster-item-resizable-handler { - position: absolute; - font-size: 1px; - display: block -} - -.handle-se { - cursor: se-resize; - width: 0; - height: 0; - right: 1px; - bottom: 1px; - border-style: solid; - border-width: 0 0 12px 12px; - border-color: transparent -} - -.handle-ne { - cursor: ne-resize; - width: 12px; - height: 12px; - right: 1px; - top: 1px -} - -.handle-nw { - cursor: nw-resize; - width: 12px; - height: 12px; - left: 1px; - top: 1px -} - -.handle-sw { - cursor: sw-resize; - width: 12px; - height: 12px; - left: 1px; - bottom: 1px -} - -.handle-e { - cursor: e-resize; - width: 12px; - bottom: 0; - right: 1px; - top: 0 -} - -.handle-s { - cursor: s-resize; - height: 12px; - right: 0; - bottom: 1px; - left: 0 -} - -.handle-n { - cursor: n-resize; - height: 12px; - right: 0; - top: 1px; - left: 0 -} - -.handle-w { - cursor: w-resize; - width: 12px; - left: 1px; - top: 0; - bottom: 0 -} - -.gridster .gridster-item:hover .gridster-box { - border: 1.5px solid #B3B2B3 -} - -.gridster .gridster-item:hover .handle-se { - border-color: transparent transparent #ccc -} diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css deleted file mode 100644 index 4bf19bfa..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css +++ /dev/null @@ -1,116 +0,0 @@ -/* ui-gridster.css */ -.gridster-container { - background-color: #EFEFEF; - color: #fff; - border: 1px dashed; - overflow-y: auto; - overflow-x: hidden; } - -/* app css for attGridtser */ -.gridster-item-container { - background-color: #FFFFFF; - position: relative; - margin-left: auto; - margin-right: auto; - min-height: 79px; - height: 100%; } - .gridster-item-container .gridster-item-header { - /* gridster-item Header */ - position: relative; - height: 50px !important; - border: 1px solid #d3d3d3; - border-bottom: 0; - background-color: #E5E5E5; - white-space: nowrap; - text-overflow: ellipsis; - z-index: 1; - -webkit-border-radius: 2px 2px 0 0; - -moz-border-radius: 2px 2px 0 0; - -ms-border-radius: 2px 2px 0 0; - -o-border-radius: 2px 2px 0 0; - border-radius: 2px 2px 0 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - /* IE6-8 */ } - .gridster-item-container .gridster-item-header .gridster-item-handle { - cursor: move; - margin: 12px; - position: absolute; - top: 0; - left: 0; - border: 0; - vertical-align: middle; - -ms-interpolation-mode: bicubic; - display: block; } - .gridster-item-container .gridster-item-header .gridster-item-header-content { - line-height: 44px; - margin-left: 26px; - font-family: "Omnes-ECOMP-W02", Arial; - font-size: 18px; - color: #444444; - float: left; } - .gridster-item-container .gridster-item-header .gridster-item-sub-header-content { - position: absolute; - top: 29.5px; - left: 26px; - font-family: "Omnes-ECOMP-W02", Arial; - font-size: 12px; - color: #444444; } - .gridster-item-container .gridster-item-header .gridster-item-header-buttons-container { - position: absolute; - right: 10px; - top: 10px; - overflow: hidden; - text-align: right; - height: 30px; - color: #444444; } - .gridster-item-container .gridster-item-body { - /* gridster-item Body */ - position: absolute; - width: 100%; - top: 50px; - left: 0; - right: 0; - bottom: 29px; - border: 1px solid #d3d3d3; - box-sizing: border-box; - overflow: auto; - color: #444444; - /* text-align: center; */ } - .gridster-item-container .gridster-item-footer { - /* gridster-item Footer */ - position: absolute; - bottom: 0; - width: 100%; - height: 29px !important; - text-align: left; - cursor: pointer; - border: 1px solid #d3d3d3; - border-top: 0; - background-color: #F2F2F2; - -webkit-border-radius: 0 0 2px 2px; - -moz-border-radius: 0 0 2px 2px; - -ms-border-radius: 0 0 2px 2px; - -o-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - text-decoration: none; - /* IE6-8 */ } - .gridster-item-container .gridster-item-footer:hover { - background-color: #E5E5E5; - color: #565656; - text-decoration: underline; } - .gridster-item-container .gridster-item-footer .gridster-item-footer-content { - line-height: 30px; - font-family: "Omnes-ECOMP-W02", Arial; - font-size: 12px; - color: #565656; - margin: 20px; - text-decoration: none; } - .gridster-item-container .gridster-item-footer .gridster-item-footer-content:hover { - color: #199ddf; - text-decoration: underline; } diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/fusion-sunny.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/fusion-sunny.css deleted file mode 100644 index f9154a1c..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/css/fusion-sunny.css +++ /dev/null @@ -1,362 +0,0 @@ - input, textarea, select, div { - font-family: Arial; - font-size: 11px; - font-weight: normal; - } - - form { - margin-top: 5px; - } - - - .applicationWindow { border-width: 0px 0px 1px 0px; - border-style: solid; - border-color: #959595; - box-shadow: inset 0 0 10px #000000; - margin-top: 10px; - margin-bottom: 10px; - margin-left: 10px; - margin-right: 10px; - } - - .feedbackMessage { width: 99%; - font-family: Arial; - font-size: 11px; - color: #1f1f1f; - padding: 3px; - border: 1px #eeb420 solid; - margin: 3px; - background: #fff9e5; - } - - .menubar { - border-width: 0px 0px 0px 1px; border-style: solid; border-color: #959595; - } - - .footer { - /*clear: both;*/ - border-width: 0px 1px 0px 1px; border-style: solid; border-color: #959595; - font-family: Verdana,Arial,Helvetica, sans-serif; - font-size: 9px; - padding: 10px 10px 30px 10px; - background: white; - } - - .pageTitle { - font-family: Arial; - font-size: 18px; - font-weight: bold; - margin-top: 5px; - } - - .content { - border-width: 0px 1px 0px 1px; - border-style: solid; - border-color: #959595; - font-family: Arial; - font-size: 11px; - padding: 5px; - background: white; - /*height: 600px;*/ - } - - .popupContent { - font-family: Arial; - font-size: 11px; - padding: 3px; - } - - .logo { - border-width: 0px 1px 0px 1px; - border-style: solid; - border-color: #959595; - text-align: right; - } - - .sep { - border: 1px solid black - } - - .logo { /*position: relative;*/ - float:left; - padding-top: 25px; - padding-left: 25px; - } - - .applicationLogo { float:right; - padding-top: 25px; - padding-right: 25px; - } - - .applinkWhite { font-family: Arial; - font-size: 13px; - font-weight: 900; - color: #FFFFFF; - text-decoration: none; } - - .terms { font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 9px; - } - - .broadcastMessage { color: red; } - .broadcastMessageList { color: red; } - - .button { - margin: 5px 1px 5px 1px; - padding: 3px; } - - .toolbarbutton:hover { - color:#005491; - } - - .headerText { font-family: Arial; - font-size: 15px; - font-weight: 700; - color: #000000; } - - .headerBackground { background: #336699; } - - .errorMessageText { font-family: Arial; - font-size: 11px; - font-weight: bold; - color: red; } - - - .normalText { font-family: Arial; - font-size: 11px; - color: #000000; } - - .normalTextRed { font-family: Arial; - font-size: 11px; - color: red; } - - - .smallNormalText { font-family: Arial; - font-size: 9px; - color: #000000; } - - .tableBorder { border:1px outset teal } - - .validationError { background: #b9eaff; } - - .templatebody { - background: url(../images/body_graphic.jpg) repeat-x; - /*margin: 40px 80px 40px 80px;*/ - } - - /*--------------------- General Content ------------------------------------*/ - - .relative { - position:relative; - } - - .clear{ - clear:both; - } - - .left { - float: left; - } - - .leftCentered{ - float: left; - text-align: center; - } - - .right { - float: right; - } - - .rightAligned{ - text-align: right; - } - - .centered { - text-align: center; - align: center; - } - - - .noWrap{ - white-space:nowrap; - } - - .disabled { - color:gray; - cursor:hand; - } - - /*--------------------- Tab styles -------------------------------------*/ - - .current { - font-weight: bold; - border-width: 1px 1px 1px 1px; - border-color: silver; - border-style: solid; - } - - .subTab { - font-weight:bold; - font-family: Arial; - font-size: 11px; - color: #0F3B82; - } - - - /*--------------------- Grid styles ------------------------------------*/ - - /* Grid navigation and header styles */ - .gridFilterLabel {font-size: 7pt; - font-align: justify; - font-weight: bold; - display: block;} - - .gridFilterText {height: 17px; - font-size: 8pt; - width: 60%; - font-align: justify;} - - .gridNavigationBar { font-family:Arial,Verdana; - font-size:11px; - font-weight:normal; - color:#000; - margin: 0px; - width: 100%; - vertical-align: middle; - } - - .gridNavigationBar .navLinks { float: left; - margin-right:15px; - padding-top: 2px; - height: 19px; - line-height: 19px; - } - - .gridNavigationBar .pageControls { float: left; - margin-right: 15px; - height: 19px; - line-height: 19px; - } - - .gridNavigationBar .pageControls input { font-size: 8pt; - height: 17px; - vertical-align: middle; - } - - .gridNavigationBar .pageInfo { float: right; - vertical-align: middle; - height: 19px; - line-height: 19px; - } - - .gridNavigationBar .pageInfo input { font-size: 8pt; - height: 17px; - vertical-align: middle; - } - - - .gridNavigationBar span { padding: 3px; } - - .gridNavigationBar a { - text-decoration:underline; - color:#000; - font-weight:normal; - } - - .gridNavigationBar img { vertical-align: middle; } - - .gridBulkUpdateRow { - height: 35px; - line-height: 35px; - } - - .gridBulkUpdateRow input { - vertical-align: middle; - } - - - /* dummy class used to lock the form elements of a grid - ex. bulk transaction processing */ - .alwaysEnabled {} - - .hidden { - display: none; - } - - .selectedPage { - background-color:#C4DFFB; - color: white; - border-style: solid; - border-width: 1px; - border-color: gray; - padding-left: 3px; - padding-right: 3px; - vertical-align: middle; - } - - .selectedRow{ - /*background-color:#C4DFFB;*/ - } - - /* Action Item styles */ - .actionList { - margin-left: -20px; - margin-right: -10px; - padding-left: 5px; - } - - .actionList li { - float:left; - padding-left: 3px; - padding-right: 3px; - } - - .actionList li a { - text-decoration:none; - color:#000; - } - - /* Filter Operator List styles */ - - .filterList { - margin: 0px; - } - - .filterList li { - list-style-type: none; - padding:3px 3px 3px 2px; - cursor:hand; - font-size:11px; - } - - .filterList li:hover { - background: #404040; - } - - .filterList li a { - color: #000; - text-decoration: none; - } - - .filterList li:hover a { - color: white; - } - - .filterList li a:hover { - text-decoration: none; - color: white; - } - - .filterListItem a { - text-decoration:none; - padding:3px 2px 3px 2px; - } - - - /*---------------------- Customized ZK Styles ------------------------------*/ - - .z-datebox input, .z-timebox input { - font-family: Arial; - font-size: 11px; - height: 15px; - margin-top:1px; - } diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png deleted file mode 100644 index 29b92cc572cd7523c7756a228ba12f4df3f2b945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 zcmaJ=O^ee&7)}vH78bqQ(~$Mxg87(sn>Mj=iAn1QO{s0b9yd*%kh5%*@O4Jn!c`Xt!=`ZWK2dhS@atj1FDT z(yw?f`#<@}J*CS<(&&*c9+0UMBS!OZ9|1FPhNy!aZ+7=Bsx!=)OTOJBJ?oa@;(&KD z44(!OWiw2DH;o*3j0otXp&zR3@yk~%@I95iQ?W!V($UD@o5!d-Z`tmA?8+Xydkxf6 zg$e|SI3NuU!bC|`cA=}#eP$L|uz--U%AN$(v)Vw%F#;97%()_jK$3X4Q;{Ti1(ZZs z5=8n+9NbYVl2WRI<-<~Mu{TgUMsw+lo>X>3NTdkDbUNjyWgf>v0m`zRX_QJFMR3V1 zBu>hO$yTmlpu~;+i1;`JnWEFj6QZ&-(vuW|XeApa%QDe|38@nakQcL*a-e1X9~uNJ zbV54lG~Ry-C-y8tLI)*y61%io z4K6*bMjwTA-eWr0@ay4CdMUO|L$lLQ{U1k1zuq&2hwb9KVgGfZ_t-9h?{5y>507qN d{rS0YVV^mEcK+LoFTdIBDw&Oz@%;M!{Xa}^Dpmjh diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpg b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpg deleted file mode 100644 index 618b1a9248f9f73b98a6a4e7aeabff0e2c91edeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62502 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 bYN(6DL`>pRFEAh?F==!89Uvhc|IGata+6M# diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp-login.jpg b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp-login.jpg deleted file mode 100644 index 618b20e919c06172537abd356b4fe5e24ab3e6a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21266 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp.png deleted file mode 100644 index b355f109fb8440a503627ff376f810ecf551c619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107597 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� zuAnA?Cm;_@ydfZ0+$NN?n=fNhAJsWty~R5t=@6YzJ)NM3m@L9H#IK<4)Kwi6DClWg zJOoqsm7n~>{)<*#Q&AS$Y(cO9(r`XIho5@C1gPWyM}P75?ld^79er^Zy8OF1HRAfL zz&!h;IRP)SDtY81loN5cnLNI|z$2f!7HPzFY|7baLDe1$?$$t{y6Op0! zR#no2(69$pJX!{T*SqA6j zwZCjXTnEXbu2!Z6Fm4JfqF)DHjBo>?R#!Yc1#X-G1CDOg5+34wJD(V^SYV z#NrgA$Dht9hnRq;N;Y~aw|VFmyFJyONA9gI*Q|{`!S>%WY;YA33BA3KKM3(SBA1X$ z0a0+-0`0@)O;k~vgto-qnGjn7o8NZ1FtMj(@m={QGy`f&^B)nAKUX`LumY9Q zd(*R;t#_V^Tf-CqoQn6dTN)5LXEphIXA(-C;VEifH3bd1o~UpjgePjHrt~o=U(9vb z#d^gS14%SXWPHivw99{2ird?9g|%TqDY2E?R!NW~v?FWn15&aM$weaCkYvW2F?eHP z|4%o{JK8sg2fCsh{@hnG)xz?Cty!;re9wKS;@DiLW+f{!7K(jN|d-AmVBu!D#$ZuFZD{Eci`oIn7ni7zTQ}BotCCR&Vo?a+Hms_n@=l8-(kmv8n{X3G^ZIJhb|N1LK(rcgpX3vd+ zC_+jrc{716Rg)%wJW5V(r=qGYXNNt{;lBml1INBLj@j|8>#MnnNFF{8+X7@Uft zTHP5~jv^Kv9Lr?h0R9 zR=at|V{&g{p?Vb7 z&=%+$dzx)MJ+5WUzcCQzg4Be-Ifzp|K1sFRm&Bgo;44Ks0G-AyCm@@Jaj$-{%iiZ0CmE@cmqeoRL%{t5XETUF;41)HEXGDwNr@DsPg{ZIsvo6S z$fdz_T4p8WGb#E;Yc-Vv=B58?NB>HcWM6h=o$1&E$Pmi6aq@81L$Yli|IXQZigt@Y zegT#JM?$iQ^`20Hov9-=?PdGsGWynu5?L{+dWbk!B}e+}-Gr|n=0FG$ zF5D#+C9HhaNq?rgk*!Qbh*M3_B{OE}Nm0C6W=jkH}OmU-R>vE`q;bH-Z4i!EkB2+k|-ens~?RIK7nb>~JbL@tgFP7&m zV$aoI;xV(^c`9WYhKzZFOQS#kagQ*w*vXq zv!aT+nJH3chqDd!w{M@Yqv(L;hm*|@BtjoMs(*exTXF!-3^adM$SG<_*+twXWPv4B z74}XD9U9u7u?QP$Tnr5-IGyMS2pGOT2lw*{kFA53OWDN?9lCW}W}It*l)hgpR=rx~L2#^em^eH6 zR>?*T!f0vF7JXX;wcl0GW|=VMEo$_x#U**e8?;_?(2>nFjien?6OubM@mvgfWCvJb zw2*T_FjwghMLv9KY=CuC{&;esrD_};&SG(V=zbZ@?(1tn_tP<87=?lG8SV#eI&iQ} z__OdX8ZwW9a&d(wi~l5riD@})(xh1Km;3!rWx-#pR)~v>3HJD%jn6f^)sdV8Y#`a3+jdom%$z2**jW)fmV~w&i z?UPB^BJ9A?Rnx3smMz~9-R>*wf1B-5TlcJgK8+VThSt7r)4$)E1V-te&udYqV{BKy zrhX5u8vEdajwc)T1q%0RCYc;6Yv{~Lqgn<(M$ap$F^^zB+6w-!7eF%DBL0t*+axw> z21%YKAE%L|orjNwcoz2B3TzYfum^7U+cjGE(b)yF+({Fi8zV zAkaR&H)B4=ijQSQMWQZuqI$>gle#ujm84-jMlxQ%_{o{tTI&a%{SuZtOs@C&04r*^ zHKJGg^-Us-KxBAM2h_6_h(gBiq6yZ9J2Z6+7_^n%efC@ORU$)Hi*E3g>>JmV-BgZN zJ=Uk;5!Iw4DP`hZ^@+vmj?SBF?dDpi>Bb)uOB|Z5P>QO;@*;n+EPEXTb9x^7+!u9o z4|^VS;#^HfsPH+NT#lWQAyrv7Gaqo#X>A#1K~W@vSD9h*lIzo*PB-QhvaB?>cCtnr zF^cx6MsA2}I1aqh-C5Pm2( z92_P{^$pJx7P{Q@w@w*#bj6=Co#r20~ksdt$-EJiLqu?#h>u(sI>MzrT-RXSapM-1qA<(t` zWMsn>Y5jaG(HBsAzPF+BCNzJ(-^+@aQIdc-)1MtNE$FD6Rgsz*W6~ zucDeO&BQ0kK-Y0+cvRfCmC@_)ivHB`tl{eTgq59@2k85ARp`fsoBz_oE5}PvV`=QQ z-4wZL0;}T1>UW__uPuVA1{-7O*xO?FHVYo3whZ)Q3DR=aKRi0-=A^BSMvVfo>s!^W zJ(~5JaKn9w%+V7#+L}m;8Xfl7_42!dRdmX(@z(cm?%b$cL*}?DjI5T_ud_U-Od+C% z9gRcPW^$xe8qd%P(6x!}@lxWrF6b_5gS|7M)_Ek6YVXeMfM5%_xq)uzQraq!!t%B3aHKt ztU^;_BHWJ}@fYf0B22)TVEfL*HbyaK^fi8*N89djKjd~@}{&% z1&d?ZrTWI=*hR6XkP{4-!->1D3}_&vD(U;a=uLL;>gQPcFyY9ur@gJRj$>t8@iP}% z3;W!Y4oFZ$xl|YqyeVR+`BFF%xIXxA#(Z*yCxv)_5!ug1lY6BiJ4!!UUnXdIYjfa0I)eXT#4;~(wh_YBwlSWUonq>letvg|0z>iaV} zNv+||gLB5g0-Xo!hb&7_vvu(P)*nUsz77WV{AFU($o$^>9}E%jX6mnw^nee~10{+m zKjGC?))6JItpQptHV#Kq>+4Af!!xa+YiM^PcGc26CR#n5QWa$RG8|@G3O|k zn<<@k13I;l7?>{Q1^?NggD7_~4_#_{+k)K4i>HRYNW}DZ_cM416(sC6`FKig-N(FvVFBQZ&CAlI^NR?$+(RxjPo6zRcy^= zR?m~-%W61B!#c&~70P=&utuOQAbIE4WpS-v^!r=jLtd+&cZeY3q_@wvs)`1eS9p@z zTY;zBy+7B~Yuy&%cyG5IPOkU+SOFKhdHWVeOv+mTjKz=Us{r;zXk z<*H2JB}7?*mm93Ra%m^o6an4#`bTZ3M9P@e@BVg`ZK*HP)Xp z&*f5Pmy`Q-<4cv8^&U4GvM{6h$}_3l{ZZnXG%Ln1Hf|K&CNq1k*o0N!BaYug27{h6 zV2}%}!m18r?8K(=d%+=i=;(PSdAWFBqbQ!zy#+Ce=+-0J8~aDOmQP*d5HLnTbx7y6 zfB}IocWK_Yw^*V#w}Md^S6_ra9rf;6QRQu$HjnXPNL{NK1t;`xs1Gd|kQlbL44tWe zWf2^nEld@Cz?M(s&1_p9F~z5~LQ@`dWbs%OWcptGhzX>V6{WC@;7*$qE2A$C~?c%AVDz8r2r zj`n&cS7)d*>^wewxTNZH=ILhXv2gWMKmCVBEF`qnl8LCsWj2>J_wc+gu+|c6V1ReA zPUd!Z&gbcwlE8*l6psI6UxkhVKD88LiWB9kIjF6N*rrtkLvE|oNYa6on}48hhHm2wgMR(~ka-8}e< z#Js?Q`k&<`GPN&`BfkNS%fd zWnr0G*1u`F0Xt0D1461t{;S#~5%B~ci!Ze6hFyi@zlo}z^BY6f?k!~<4?cz1U29l- zqO5`_RJ=GrjiK}l$7mg<3YosCnp}gFtx6t%RRM-FV{j5{tHEjUjiZy(dw33?U4C!& zP5Nsdl%DSzQ(aoJyg;d!)mfGMg`&(IeqjZqA17}5;vW~vV>V!sUh{C$emHYqg87W1 zm=#c4^>YH5v~&WSVt9MHL}n;bph4E>ntiSaA<~xVvwB{SaQjh0{AT zKYQ07-R@gmL!et&5;!iXco@1VD2cksR%oiS))12SV)C9U_Vmi({7)t3U&tUH6X>QK zmr)J4+!h!olxBSRaEu%>LiK98Cn)NEg(_kv%B8$m0i;f!A_1ZE3SK@$ zgoJZX5f-SU{N@&d8G(0HCfi8PjwzySA=!CSnKp!HExl@> zI47DVrT-1E+hDDlZ-UQy>vP*#I&LP)VFRX1RWAOsXG&6_yH{+f{7*ee>1drhD~Zr{_9#?kqXLL4xp+J^Z3C%LIDd;y4jhP#YZH?rmG?*p? zeJ)oPM=?RhGOqRYpb$dJ8w2y0T|CKIc$ur9zy}U{NW=jz;am#lLHyGvD%3J50}we+ zr}$3QHuofc^kh6cd+{%sekz_g{DmjNCn;ukb~JLspLkL7*?hFDIC8zqCyR0TY3miW z=V4{)a%$5%%gOI->qh9k&uK?WJpy<^*o|bgPEqwJd2cTI&@tZG? z6kaKl#huSIi^yw3k*=4|q~JUB0k zobBq|Iax*TukRu}iWC`l&G4-cIRRLJVXpZnbxf%Cn?Lu7(3xNotZI4@R!v4D?-3yn zz3>RH6_;jrga4!K%>%Wlfg!LHXIy^t7FpHE+tCRjY>b7Kjcu3I8g*of83Sl5t~F1- zZDWbC&w8I)dhcOC2AsJFIyNoAgLvG0H)jW_hzS(yAHPj)=pVFV zY8DKaUt&78zsyN%DifubYzv=0YPDMYEA$)O+O3~4<)AtS-4p})22o%Sf?;3el)rzl{)7_Ik!Vqx8$?4%>|F0Meuo+DO8W2@A#e98 z>9Fl-LU$QaMD+dn9pnA#Fd&41L$ojNeTAUS=gvVTFMw}~NtJEAn-P)A^=TX_mfT>w zIBm-eC>-he8Dz<9AP?^z((hf@%Sn6(LH}psA99zX9a)U`yiW-|nH8KAn;Nefvstz=!wPA|o9xQ>Emn*cvWVfeDHbWqlpF)Afv8_uR3O&A(z3 z8LesKbYI$)aOpPGqavA_6&-=~7XH>xVh1)MT_~U-CtS|sOG|2@+K5j?*b+fn_!2;% zH@jBr{Kb~zWKdALgt8GW3&QPE;qWzw-jS_jX$A;eSbu=}OL^tjp=-LbNTfhsM{W@t zN(C}xU8_&=3zm5lEzcrewUO!5$X5-Zyl{9?X6qCAE{qO(1f=(FxwU6RrkGS;EcN)6 z%h$=$=reS!;UD`DV7RR?I>8_R6X;HH zoa6d>t>q!fsk^^zkK#~?0@)_L175hjv+%>(*+>2O5E77}qHoG$QY`H1%P)s>*aE!n z*#9vXvWLSmmD5!+qDmPxT*eP;vrn`943!wETQc8PMAm4D`kcj64F#hd} z3rRt~oss3?m7tRHNz!DuVoJA)kLz8vVyC&BK{@t2R+rVHfpFE zuR%-9k->7nXF%e;ute~FNyrfaC%~zQEux7S-_FQqA|HJOvKh5wh;6a^G;-bX*A!T@ z)h#(gQCC+N&-QNr?R=zr{D$f~et6UQ`GnGa>eeY$oRcQy{a2jf+swqiZrZimbb7W5 zg8_u*{o&2rPnF6sRs@QvVQOzZ`^9E*cr1+lEnLepHKK+Q33x$72R zQFcjR(B%gihy56|iQkn&uJ11D`%d_z#|(lbpLKwP_0h#L8s z*?tqKei1CbpqnzU!QvH)BQSl06rZ9}#bXKE(iak}ksMW<(e>Ze5z`9VCBzt)U0QoB zK~jor<+qo`vUFc1+B}_-jMZmP@YtNF^dqV(k{XJ*03B=GBk#`HU{mHR2w}Jjp)XII zzEj0x2Do!fB3W)wdI+5CQlT=A#zsiO?{q!dV)FIhy^-ksEyBY@&z*ta5l7E>TFy}b zoK%~PP!^=lj2 z>$a6nztB1MGl6kanqBw}n5BM1&`tD1Q-;WvZ>zmO z!JOeQhlr%JhzH=Zda35BddbP{v<)XhxP@12L!Zm(V(DX{H|;Ld8+ym+N-Pfc=f+VH z44STn*IK-;hWSWtXI#aTxvf5ph%q(KWz8B_>LQ{Po10E6W}?DHMB1UyNyEokJfE>5 zjFnSv89K7c5#RK9Zx?v$Uf4Ik%zp9sYtij(J2Sotg=@w=q)3^-3$0@3C!}7>q=*DT z;R6G*ggVNA@KJWC1O$KoAyCG~Tf}J&l+Sw42tRV7;b)-#`8^!X*I2202iJpafILMH#!2m{683pO6*cSpBF7h%w0o#zafyBdCh zFT60|b20j^U{?`~O#qR$4?CynjRqc}uY;8KAq`$3HW$L3Z%SUwbpzh1UEmTlPwMmNTUM#VQNQ?;DUhWVU{uMen$+ z^D3szS6&S+Ey8iG%Gs0L!fbr0xuCiEJZU6wPJj5;&FQQ3P>DZQ5}Dul>y_XUL_J0- z#(Ukm_gLzO!Q4`@f<67vPFZ1{k@N?l#Kh8BTGIbwRLBV5nyqc^!__+c$3>xM1`++dh1N;m%Pv_IUQguFD z|CO*SK;F)0Sr~^uXM81B=jTfMSG#SiVO9lR=-$_xXM1BFcl0`y6TcWIfr1hN!lm&) zskf`8{<+-C)`i+wD?HCXgah2)g`>NIyKPcL826T~#LN(c_Rc+L7uJ8Qp{hhay0#nf zPN(}-(=wY!fplr-Z!5UQq(_c4!Q01xbKhcUzH|FMe+e=?7n;=Y*eKO($VUjBdpSQ8 z9gE4*eFzbIILsFFjE$NS&Lzbt%0tD4I#l3AZ~cD6_x_jSmBR1NZpwU>=I0NIHt2@b z^7Eh;;Zg3jcV3yi$wW;_n}oWKk;xOMhJandkOj-(hQWn1uJ`k2r>pTfhBhFhUL9{u zGZmxe(Sk@X>&!>LPVb(P+ct(_dG%s3hf{8^I+9^`*O+3OlZzd0ev8zRAxniqaW(C_ z+lv2!5FxHV{&SZWenbL=FTW2&oVF)1%p$eqa|M-r$T!UL!~!!M@kS_PGMZgYW?XqG z&p{VY^KhYmo}gWQW3j%~ghEt;uroi@3ya#T)42L}uS?h-f6J=ybb+^ga0a{S8JZHt zoT9;v5`tDdmIH7T1LaL(KFGCtS& zdZO!nv%uf>cJJWPEQ|W|d2wl})$0nH;`y%|sgcR<^Hg9SN5Bz>_kDSkAB3l8IA7OH z=ipSJM8`;&3-;|S?}bk6;f=&gr|*tYA&wVcjM{oq?Asx92a)ll99x$`i&LZb4d1{4 z9(1G|Ty3{^Xqri2GFa4^Uf>JTjS^M+NA=wIbG&MRyrgKFKrFJ?4TNvXq`?50~ zQ?mKsq0ZcJO(IFhunk zLJ+T}wId)4c>qKt5<22d88^qTgvqlpo+N$9;<;e>^ zpqSF-hHs8i+qx+5L9F#R@9XpCxTyxU&n0L%1mZNF1+H&-y{DWszi&?$sj0dvo0Td2 zwNgSKcDrdEQ_B*IM&Nxu61Cpun!)jUA_l1klOMDliuN`J9xnY&gBhgtF1;| zcEnY^fH-=uLjX{;!LrDd#Ad`~6?j}qr0xtkz^}~mSv$|C@O#5uXf;MX6JJ|<=Xx&H zQ-Nt4m7fuS zL->QgU7Qx_JCrWU8xg;lbM00dEvAL}U9T{B-LKO;Fibh$?3(*sJab$U1U|j*`ii8c z5$G8kikp8mx68`OVbe*)f0$qp3K`!jk>9U52uO4P@@>u=lb%ud8yQ(Jo#q3R#K zWYROXA+(xGxnQ;`elT@d1Y+_XEN^W4Q&&S|)G>J;lf}xKXAbrr9>V76^bXf$-#VPv zw7Xp`9O?LT_CM)b_KQ!i72}G5l)KaiO$SW%+@q7|U?N0mX_#&9neUyKXLuc z;o(H`N>B88ejkC~B~qGcq$>G($UA&+3 zl3{#b$f4@OxaiHa;8xDCBNk5VrQpf7wXKc?urpgNh4~$~MG3pUFortLa{L5yWN%-A zry6)F+T1Qg*9@|vhu3aLe;lM}$JW%koGxRH{un24Fo!sA;%HxXi^Htk(-9G{SEE02 zyjS+92G$LWeTX7|?jeK>mdDiDyZdi}_nX44H7DISFWGMAT}}ht37-(-Df`e2r4n%E z9Tpvh8pu{`z%HH|@`ii4ndf4&0Km=r{#JQ;&2jm0W^V3LM$um8_uWAcv$1+sr`3N( zzvL9w#jz>xL4^#o|GyXDwfZ0H4Y=)M2MShBJTYk*zfuntgs=^Dv3X^{Kotgx& zE6b?dD6~OvDIa`UU@7WY!;B%apYC0LA+7Be8{Y}W=cbD2`divjsTu|5Fy*1sxzIDp z$uDFUAE;$iG6P)yKLDseSHJGXQD!O<+t7$r-uuW$$@+{7M`Fq0EJ{E&6%tC2RVma8 zpw}}=Hu^`dbAE~hWUL-EwNBk87U$L*ELt67b&RtHV`4vbR5KxLob0M?;&2LDN@5XF zG%zu{z=xMcXzS?a@ZljE8=Jh6n3Yu7>Wt=%?>t80P@9?#HuEBiHL#5O$*%goSOY*` zud~0|WU+ox*?6(2pBQd6typ_=!QYKji1ycEb;VZw9XW^98fi6BYqqqvb8^oX`r9)& zn@1>5YN)spQYdl_DH@wvk*X6R0^blQ3Bur931b9Onj}V8VJs*afe5@u6%u1@GKCn@ z4Jo>NI|;)?r{shWF+=$fF%u^`DzW_9imG*w&+Di*CIODfYKqfS6sIRiHTF{$0c9di zUmD}e)F7SRIh0#zX!_}&Pm9Mdu~o0CgsaJN{=Z`cGkMJ$XRk1}WRXpsR0zE?JUKkQ z8DiBM+MuK)n@V{gza|L11Ay~-B_)M#3X*2QBESX+8Dd?Ca}jg%c~Yq~ zjm=p!1_=4_k6z+G|L6aYxw#^cL5dJ#oEHvaeFSiIG36XW`l93U5L;7?yCj-TS`GOn ziW3v$db_bv3K?a&Iy1v7XRflZdmqYq$LE!roKG{(KP?`=a^s|iDcnd1w)7VAmM2_Cz43vFqtef#Bs=5uf5NAzV}0# znj3id;RiWE=~biKXC}_i-M@&oIxruHd*$1bgU^%Od*RU!XU&TS#pwhE{!vmAEYrCB&LjO6^~D8xt|t~PjZ#zssTejO${M1 z+VbJ(Ji}A-h=x|mLLgHCHrB`_*3|pCesBIZ<0)~GSeB)M+TYIg=#;LToC>$$YZ*RS}TI*w2YWd|@ z14cuo>_fw>Xz2u9OPX=_$D^Vwr&Jt)#adrVSJ5Rc?iK3L~FvF$kMLrl=WXGOXf-2K+1y#}3 zbV4fw$8J6+|E5kXpB9g`kKUa2#jRFS8+m)R8R6=Wt@Zeg_*J_l#6PqO0UCIQTyfn;ShGd0b7 z7cX&i&mJDS;{@^a98bUa45Jg*_}W*##GS_up>RkAgcc_>LJ6c&NP=WlS^Zu*(L5QX z3eiUM-1D#V?Qj2>d_F}ed%zjWdCN;LTtrBLl#L(-)|O~%k2rkW5ZP>iaE4+*@WyKw znVX-(7?)ryDmk!~znALbi-ikNNpMxMP-1CfhFnh%BBd~4n)x{9+?7dAZEq!$O0d5g z7U(|mnsf!8_#3na`?Pqh-AlkKt8LF!_jw#M11*AK_3NsCW~n^45)wdVE ziCG(^`POHkP?t--dL>5Ua$8H|s^*o~(Xd^j7t&55Y#C)^gpLWEV_R1TvNc1#E5m`o zJ@jsA=Kg!`q^UhkS9b^d_7C`+b`kh%#2HYE#e(7Dh0ElZVuTB@x=jB-7lVVnNKy8& zD=GvXlFhXeh0PSCLMKZmoFGiKB<6--Z4pF)&)jC+#hGM{RgF*<%P|1pkjAkzHAz>gOptCQ7GP|^bvGZZlADM&Be9|rzjaXJ2J<$VhY*O zid8CkxJXts+8egvcehdqQc0G$X8?)13ra2%y4I}(?k3Mv+;DZu#0s3GXrMg>*TiMN zrZUmzKdnsyXNxEilTBy2{q}yIdp4k0bl$4JdQV8e zs-zh+pfpaF(TStA5|YC743+ssg63wV1xvuSnLOvFiuARmXppN5g{Y;R1A-u2HbLC{6S-xJzQT$xnI>>Pe939grZTa{+Sm*J68mc* zjJMiO8d&2j#yQGJDk9DG`4aDb@Gepc?!WII`g(h6zE`WgMgA#=h+C~2HuCX};2coz znrk*Z2(E4cHmmtqYYpYCMnsaa;jb-I=VRrl#{7C_mUM!^T14y^+`gSdy9bGczEk0_Tzrf14L^|N;vy|#cQKw_x4m^a=y z#}EGgX&!#$F7k`BjE#!4HAp=T*B|Wmrr5<=7{uzYE!LQN*0N4_i7SAunIqad5uiz2ikE?LXDxxL zKxvVk+k3eEz%D`?@#GJF#*0tAiVQQfZ|$P7t&^$gS>AvAXFT<6ipRe6dG0=Sm?$NA z|NV>n=tnOxHSIWaZVVxt5X4?-VKX>w_|Es9=J^+2C6px&4ee%V=pd;~3yXzkxpH+5 zNF!XzADL2kM`l+h2poI&4$$13!@4E^b)5zg)7H^QZ(k=PqZewyV?O&vBNS*;K&m1; zws-R7-}xf#t!@11@t^YgTjwZNG^Lp-qFAF{Kt)B&8+hTvNnSaBiBK9+p$}Qhr2-mL z0nM3+t!+(oH8;@J(M)G+11&j4OFAMWAWEc3N>J0vR82Q!vidSkd8Q%N_%yp5+mMu! zs&};51ncnA;_)j{K*UOm5GRNcTpF9>`h0<)xeKGhNw5y>0rIM^5!Pp_+r*^A8DeYEDox&|8JR8e+UfHI=^Ur- zJVtlV)+#&F7s#Y@617#Z_(-MWlPDN#7ov^Rb#Df~ug|PnX?eaD*t!u#`bHU88>8mh zn!B&9P94TK2+}!Hx*d!EB6D=mk!~?uk_yP)8cW%0kmwJ<_{r>K`@iA@b3Amm?%e>&S9iVfI2T6 z6xB=!>xF+opa_)o_&_xgZ!_nstMgpn&~7B@LXBrnSsi2Jick8}8mo2Ec^j-VC>wwQ zBfLsC7K)+^xH41bwX>IyVVcj}eJA~WT?EqMVuK14&e)pWdlh7~EAqiV{`9dHb7j4^ zS7&;!RFb<5;T)^Y5^r_zZ`Ay7GsU2adEDqrbrTj=va+gwzg9S`^RJZ^1SpQ}Il$f> z9dxxcFflsIbI-g=*VaDne&9adJ#&WVUwNIy{1Pp>439i~C%^sW-{!l2`**zj%IoYu zxPv=CbBw084$fbg=lhSpz~tltxWI$yfD{1%5j{P<3?0}*6j_{GAPOx9hPv3g^~-Ge z;qyHCvzJ*~SRk9t(An9_j{e;Y?C9j+{y~J(iSL_45CD#J%5ndF$B_gK507*8$|#dF zlNcSd_rMsscm;p$|}naNpRI(vbd_<}2j3_F!a? z;N3pi&RK^N)zmwSl9E9A(babtu8u#xiQ3`nR#swd|8ilgj46ZFN#QUtM#sKz7_*!e zVKhF=LHk3;Sgdr!PEr(UuFRHs{mfNL7C!r#Q|#>Rs*$&plGtQVE!LQ#Hse#eUe~`~ z(Ww9UnwILx#7F(=XRUQs-P-C_#bW&eU~ALHTE>MNDK;d)cs2i{29~b~XYp*ghTSk&$ zrcmI?Cx6Oq|MQ6s&JA9adf$g-nHqww)gptLW5>h2GxI%)pgrVWs z?RzHY?%Oe+S)VJk~24^+aXly0M znHZ}pe(Fd+~L6cG~}Bno1ODO;{x9O2@*^IUo67c{6M|N5JML^>0aN(E>a6Q(3#D#W=$f?!Fa zAR-JhEH32cMw7}tuBX^iu}R@VBhzEU9*WAmK<@H)G9bdyPi z2pc1n#<@H#P0f7iOD92`Bnm=|)+nh_Dn?X8h@J2`_toCa#waC;8U&3E5!<#6a_60U zFh&z7i8f2#rCAuHs~}W{shJW_{^Vt*CQ5|lSR5H=BoydK5&NGItNdzA1`44RDhxp> zR2UEh0U`)MD6H@-!m?0UAu)j@wi%X$W5HFJELXUEwZMz#-=pn?bL{Ht;rNag_VxF$ zr>~u@IY~}H-~`H9kQQwX2#ZT6-H3 zTV1DBPf)M_C_9UF0a|96ShT$T;RrLu3U}RgihaBK39!lJw7T?(kIk(5IAW|DKHshJ z{wAN{X2gFRSw*dQj9B~Uwrc?Un`K}*TpgpzE6AnuB2`_8xqf++(aU25Hsa)6r#N}n z3Bm~acWj}*uZwfynwlq=o0p(u5N4M7;9jUfmFOk73<0x3eY4te9v_j&$>_c10#AOrH_ zQ%sJJViY(TAzYY57+a7Mp(HYpI3)?A5SdC5X40fGSyJf~K_)}ckR^yBNT-NZKt&~K znJBD`aH^RJ6El8(fp^Ydr@i3<`}(`MefKsF5417R(Lie?iSSzrk+@H&TKeUUXVO1+ zk>RJ4#~Rpkm5OSGVs=q8JU)xcHX=eVE5dlCc`a$6nh+>lVh|@*9SoaS#ktk*x#bH= zBpD6XCB-3*v2mQ(j#O}3dl1kqM~yls5=N)NVu`Io%ZRzM;H^uejLqdaeDpSM8`@1I z6WeZNExV&Sakw?C)P>vJA$>Ci?nXSPR=mBspi~cKvHthHSy8(6p?zyp!qvsbB$ZpN zq3c*VW!Md2CiRntOBw{>yin7}a#%*LTxaCc2)1BpNH=rp-iPSe($Cytfu8Pme*a&6 zng8v7{f|8H{U31m0}t>ozy1ZZgV0Kr=9c)&zx;D{^tbX`kKRizD-gwqZ+znqsF-H{ z_B%hrYJ(LXL$E{$XR$(Ho#g!R2ydT0N7t6yP(mVvj~%uyP6~!1kP2%pK@fN>KnRZy zNUs$VLe=Hd<0-kOf|7xMj5EpjYf+&}RF*)IIMxt#6 zg+)4tq`LmI2|nR7YqWqejz!@uW)lWA-q)6zt$wS{z31G!9wI1GuMz{xZw za1?Eh;iWQHPEYd8*=zK*r8%^ti@Oi*mAslS_r(4 z)!5`5`HCjh)<88vMkWNjRVmxai!PD1?ze8w{xPtz`p?aPReUOv0 zNycbmxlPRr$zjlFVk8-gCBf-SBV3x8X2S<&=D$73&wu<=GHnfn zX+^nE#uN+Oe)|Cb>i56MzJ1$x>4nq$&9|Sx(8T!*Ge{zYNP&z!K}3W&sz!!_LZ!sz ztHWq_02K&tmWV=1i;Wdh1UMyqx~6srm0&1JBBiX6P^1JQEeMNQ&Wa+C%DeeWpWrF1 zLrR5|87^M>fb*BHqOBt>Ez(*7>l-0#g3Aemb_ORzG7&8|XHH1J3Is1=G!9!SQz=$( z^NSS6rYHsy7e2$O2Kq{ z1O1#F+`_h&ENWFO)lIS3Pm9MtNl92?i{WnQ@0YD|t5bxPlKB!`9-G6c3@XYjQ}3j} zI>mCLnJ*4X2ycogeE3uSx7h6EQ1kapRIIhz` zSc`T7gYtR~Yf&m<%0#?3zQnuNrfF+y$SdXU%0s;|Z>(&T2n=sZZ9P2Tp zZe<0sy8Ehq??h*@`i7%!+PIaq$j!_Rmp|Xu6^i=k*Y&~hwfd@*F+kL6lsJCC{`>>OL?Ye=2%$BQ>j>j zAWcJKiuU%1_V#v~n$tvq1>q8rp+E|d_%*WAih_tac6^9G{(~>@XMg@Zrp6aQ=BS{& z#~fZfE2TiVWYv}kDg_#6D+ED+brPGP*)rj%r=|C*6V@QCA(D!CW`_LrD^$W9`E(;u zLzb3~R#M&FG`F>3QXwT3Q3xe@k>-4{!qw9=JbU^&hqkwI_wjw)b7&ho8zdPZmEe(y z1~Q2<@WnGxBYFeM8XhWE;EgNpPhnVAlYCk{K3?%yahH7Y&lwi#Y#+~ne6rY6Ny59bv8axHQaFCcBIvrzlg*Y~#HB!fkd#?1@j5TPh zvCdnl;0(@5iaO-VY@V}Mt|Oup$B!PNyS)izOf9g-pU~C7Cb8k)@`k5`4Rlv4=(j6m z6`PBS-3YsC^=b;%rr_FJOb@HU?iKbVH(^j2W5CH};5^anh?)~_lKd!aZN;Sk6PFQM zKn#=Drn!E36jy{$W<1#Iga?JKCX-9CbN3F)Wy`nz;`>Nh;q$-s0C(Rt#ECnGa2hgc zh#j0cGs@{RXBpgcfSr4e(A4@oi^T=MW|A7`G|sq0`{SM8FlBc1xANsL+)saRJCceI zI;(mq3!iP{g{2Ww(~DfVJi`0$f56!@=NKQKM9GMro<3$~7MPo#q^&K>_U!{4Jh+=< z$A;Lpt&^rqmQ(=Fl>rSzeu@bMxlr)cuY8tLzQ}+1f4)npSO6KJt@fb00Ie-TrI8|) z)bW_E&IS%1KFGFhJzTmx#`Dj=i7~#IE2X>(u`>j+!jU6`+HzzJIhC)O)7d(!`Sp3rC8IL zPI>3gMAuOTl53U2f)o-dpqQq{e-M&o9m zYi}?VWP=8UcHQY>BRI)=PP=QV#;e~?B;*Eby+eVhVO0(%5*>%JNhS+eV-Q-CmV)-q zc1F)#q?|7hs3y>%FZ%+Vj%mymdFY{&?A^1CU;O+jUVQc?CML#6r8{`&bNBJYlg}}F z?JD;_c!~o=W|&(n^4jaK^YfoS4=&)YJMW>pYmuv$u5j)=N2y7w6|8~`6fG@T ze)nr%;M%n@E?yWVmun=OO%sL^rTq0WHy88L%kSU_5Y}@1#1LQq{m+p~!RW{wON%qS z_2y-yNMU1(k^<*qI=AF_;DI9y9oUXk0i9jVynp5_g;D`2(m0{WEiPaemzWtF!!=~c zY~4b-vx{tdJ7gO%sVwDGnmKKG{@fDhFTKW*?H76UueF$iY7VOWrI(Li|Kj1~4aGyOIF)O`uQd-VD`2Ut z8JnIb$YfBV4|%e9Cs`7=Tx8OrSBr}DH#v!|iK|O`_()!hi@HvN) zPmme)5m{GaIkjiqwbrdxQ8$}9Ze{Vlx{$3MwzP58_{y)nycQF}7Y~W8(RQ)2Wj**%lz905!~755{0dDCio!ykdrzI< z&9_dol#lt=xBh|e{{0h-O-yrfWRcI@{Qw_aTBK}SIeTFSm_<5GE(OPr?BJpM4--m_ zL}QGj9&avC~bNtv4 z$B*t|_uk#~^fYqceYdk?M;k{D-%hD0_{mS7z|qEq3#0sp|NZ~w%fJ13zWAjF38Tnc zl?am6lfgJcS7(NQ_wW9YVj(7*Z6KWvQ2{6kN=RlFEBwiy{4c!o+Icdm6kE486Q}~Q zF3`~t@z6uZxpaP*x!EO@O5wC4m9pG%bcp@?`cbNkF%=pzik4i8$?<%$XHo>(=bwae zktlE!hA%QZe2J)|lT1%9>F!=KjZGjVCe_TSE-~}L3?E*9i962p@W`pX+_AHbM(GeP zMmgn=YFFKih*jrT9UxRQKl$bVQGfcUfBL7t_7jI#Z_(mbjvvAsnHdD5GfTX8afGP3 zgD{)J3LkzWV85379 zIz|{>rxVcNj0eZ9LpWbxv`{SQfU{$Zyf?Z;OH&gM-g}Dfjs^l}kk;EmNRh0^gx|0J zGA_f-+l?fn`%MbN>Ivjl)5UsIga3cK$}#umjIEn#H*NsXZ&+Kcbje+r+2I|JZL+%Z z;Jc^h$~Y#iV|Mp;aL3Rf-7Psf8q#D_5xqTIXljhenDp*0vNoclOZO6d|Riy|s~nfvx141nIQm;K99o`LQpM%Qf=E6HoKP3vZIiG_!m6 zZlY9xP;ug7jc?+drlq-o_Kqgfkwc0i*&MVsr^sakn%W}DMa^^1JWo0maqr#7*|x0> zDPjbc*5+1<`8@OUQ#3V3G`9+N47Bl;fAJ74%>h=Ih=Pzx(eU2;A25D>nm`1eXreSu z6d2my%~!wtAa~t9M5xP*Umj-m`Zx=dlPFW6Q7NK8p~Cx3)N~%>6hV{%p?oJL<+7V< z)ys-yTjv@DQ`~4fE;gCnVX314Cr-J-8m}C$RIn8vA8SpF(X)i1^pz(Gq z6&o@-SK<7~0*;WwhxXIAwT)EbFCvxlYN~IgGK@_C&rTXui4Ft!mSF{ ztqRJ`R#R&gi#7AcVa;{b@?*@(&nGDyRe_=PpWkNcJ^FQ~{uJ$Z?TZC~%Z*yV|nOwm3?VXH`Ot7#}q#TzCvvBO#9v*%4 z9{PIPktR)dS1Z$F)0`U~CpIuUw?L(JlX7E{*f` z2aa)KcNgs`YS}Ey_l6e`yQDdF^>^(*LYnSxJXLp@O6xHT>jdSpVPa|)sZyk(bYh*H z9Owz&Ay!Q=>r*@HSU{UCZ#8?XL=b3nva-^?Xjp?V4lA?=M~y%xMMFA`aG;%_A|htX ziVsE$%;sU|Ko_^~-$70ppX;F_?*=MGf_wOaC8XK(2)vmCT)MSCR>O_z+-5>| z+*%J1Ur%AacJaB<-FCBvh0E-)m8-34(YRqMNe%@c#UU`xGjFW3Na?^Bq=^wGW?Op` zcOKru)|M=xDU+6t0Ed%~C>uc#(cRuiq#6l@!%;-Z04c&+Gvox!%@sL&?i}UVV5C5V zAuiU*AZ|Uq)_B3}}qQKIaQ#f0sQn5r~gb*3ZWx>>Jfl3^cjnZ^Jlw=Q^Rs!}^(mUR_mbJR6_JTBsYaGu zj;B9Z;_~$uc=+gcK6mFJ`+6H`!6Zel?jA^1>eWp_{l@#3SwMaxi%0Fo7Gh=ILIO(V zi-wtn0zuSF5QLPiL8vMVBH^GXv`JjGpxD~V>XYJ#)pr;qovP73f83gC7i%zRjCDAh zh^4IY;xQarW>~Tjm#3GwHdUaZp_P+|_tD-E5|}bb&n&BcKTA@8q^nC;|KxCvkF(Zt z8_XrY84hwQs_sf^?#(BU)rDov_0~E-{F)XdVp+$t!g9qKoQYAULZAzDwlr~KXcybs zb0}LT!je`YLU=Y7A_goWiogZlk4ynl;$(ju}%(d&I96!376L%b>cWVo|!23`+>#(ZYglYe;kc>^v@%&3~GB*>m zurR@?6NeF|2qH$x5aS{)U6|mx7vJXm`K#oYibO%g&Ru=ncmHutow|+ICWS=P)tTdw zM-KAlTceyg`z{}x{eTyre~*28_Cgf+YuTL|4ZG;_t zz1)53I7<4PHjYb3Sv8n6NGX#wqVvg!Hum?4N&swYP@$l?ElpcT6We$8aI$=uNX95- zh;;=g(o`w|m#$oAc5w+Q(_kGLsnBsuXa)Jv8K!2Y$xV&XxTB9$M~S6)XeJjX;cYHqvL(49F5$L`eVes`>YWD-F$*EReG>Z*i=>ZxHU)@qfC*$wnmN(?WMoH znb4I{QlNxi9|giE=pm%fl}8XDP(op(#VLW4)@P7QZwZpir0Cn$!Nn^xEf zU#4qoH;W6?6qjbnr4>R1Sf_a9)zkdl51!%j@Elr4K!6gOa~Iy^^>^Rrw=X=vAO8Lq z>1Ypet^!h#FH9grg(%GM+AC-I;-f|S`a`d+ksh5wv43$QWB*Dgw|+NUH2(w z=jS%>G(~Qm*>FVy}#O?d(YR>rLWIY*8)+m0-&qrNl`~;_k z)&DOxP)IggIBqq0thL@+i>6yYeQeZ*WX;E{VW_w+UV?YVt-Yq!crB6Bh`305I^fiS zz3k{{B`q|e@Y8_`6e>_i<#k4Zsv2`jr1VCELMoIL1PYXL-n>&NI@_B#c;Eowc>l~< zOvQUqIa@?gA)8hRW3g6%2#FDXT6Kc?xe}wpW3)9z4DRYB2x5fvM3O*Clnlw2;Kf(o zqq(JvZ~W08GPt9KP#J`PAk1)OWRCCr-Oo95ev(+UVr2tXhJFnz1@nuGjE-Dm-`-v9 z8rX`E8b{35o*stwALHuPNiJNt#L1H<=bQBVFkuIw6$pK(8f@)mRSvXZD{H0Kt|DW zriSx--zpdcF>4nR{&TWnS+iyNbM^`J~ z{ks>aNWs9sHiq^N(A&|)D=(hrM?ZO)qAeqo!%08&Di`8V1TyDcX+<6@HA19)Cyykq zSQZzGT(~^KPk#CY_nz#gwJC!XX)3Yf(xnN8ugzmcGgjp=IFzX1T$xY_gw8QOJS*<}DI@{BH?W>Qny?2lw|M*o3rI?=nKKcgQ*t@frwro4k zzkHTwpLv^dMUxH!7DvaJD&$Gc&ypD!AZW}H%N*BDmcM^(n9->j{`)W7&hcH{1S&vU zyNphXdUMcUdxiOO=5M0aUMC+bNI~sm%592}+fA z5Df`ICGg66YmgYflEOc?P=;t-@y)c6luDjLD`W+wLMS^X$0x{ULw@VghuPB8!NSY} zK}r#&1A<6WERIw!MRIZ8lECRk#z#Kkf-qeIo#YL?K^kS z($UU%Iv}Qr=P#GZfBy`>_fW`#hdSsC1QC|N`KCZvfm1$HT~w0`>rc`;R9z%z+-A!` z@Xv29sQy4=xsP{s2ePZ1G;y_qKqfRjjZ5rB1lmE_LfKfBN-_CT%wi!XA8X16V&}bk z5}6-H2+ueP!o>5Ys@|+VLwD0>z4jsYQRDTNSx45|B;?6!Hf-WiRqI-<1{|^RD&^Qg zSxUy{3QR5JkxH0)CZ@;L2?eaxC=Xs?tVTIYRtko8Y-3k%FOje)5rRk|!Yn1D z(Auleg%zZOfKUrU6%d4gw5Y(_c=}b1T2AS!22lxvbsAmKqyoqOJ-sLwQYw|Oae<1} zbhSr3_Jw=7e0hw~u?mjR-($KAl!^5c&S|W3gi?Cf1LXy)G7Lzi6$cOO=PO_R9hw_v zF}mQbHQ{eW!0T(}*g76%kT`@xMo5{Dx!k+6ZGyOZ4vDO}c+8 zgc-C`ymxJ$!VjNkX=y)SIyp#Zn(VHPw-S_qHezX|re`k%tMQJ)n-s>*n`T;|Xkf0WSt^y8Eg1?GL#a|BHV%XG*3mKmA+gGT4=26t zh^k2dll9M<9H?4ryD9wTR-pb32c`8MRwhXUw8qxnt}h-KjSvcLCAa`B6*Eg^hR3GS z#fV%P+GYF#Sq2A}I{w$o-Pxb!~V6YWG|-s!+%FvJ)eqm9N`i!*>JQ#PgK zV->8fAY6sRd;0hnUwV)~`^zVo&leHa(VS82+TO=NUptBl(rKKn>VzB!LzoWf>~7?x zm(TG1#~)|!&L)oDwwE9TZHw&O)y;zspWr*+dxn{XVnRF-ezGo=$)zeheE)Ioy6aFv z!A*lyyz|z1{@*|U4*8`bL3AhWZ9Bd9oV94mcDwiGoB?z%lXb*mOp z%Xd&{rzq-xYg4n#=3~Mr%aMb7X^a$A=M;5|b<#&I9Mx1mvBqku9we`J?(32nHds_{ zW`MYM5wP4W1#m4ds?}mY>RfSgH(JN6{A)4z!coPptX;OsUtVC@Wq)U5QMN*4V-61V za@$}(*)XJ7bi8xn3a`9=hI1FMFgmqBp={7`G1;ejW{|Lw5Jy8=(AU$*p+mcP;K92% zb!dQ=rT`_tx)`l180#tC+JG~DVn90_Wwa}M%CH3&dyl1qdw0{n?KM8UG|Jw=eoh_P z!~Vf;I-3>JX`}^_;0@LaM4*t$v1_oOpa0?|UVHfsIvVdlkjB{<6=(ug=KgyRlTBy% z${EyY4zdwlTztBGLj* zA*^p!KfFB7-+liVj9i~bsBFy~6AYmgK61fI!XTu)P+{rJ2dI)EyL&IPp%D|cG9Cx~ z)zhbmo#hW6K0;R{NPE|=Bu?8U5!uunziUmpQ*{>JzoM9j=RHZ54L|B@NRmrY4QX-` zClw{;Zwj_lb-CQNhT(l|f)`OCce)_G>~1|w2Pq3CSNa&YK2wr}s|-1%W%eeDcR z2Bf2qY-7mzD-)c#ILQxxagK*hZRd~w@GBhL+eJz`%5fPfLQGuE8cD7%W6>`5&rb`S zP2+6H==eOp_{FodHUxa*_dm;lJ-sw%Ey9!t2$2#(<+Tq^TBM4w#sm6;J9lvG=wU`i z3fyt*ZsLl>>N0_ZOkhZ*HJ^RpFn6Cg#K`Cr#X^Z(LzeCR+vw?TC6n{My;cZ{b7i0wv#xH z*SWrFH#@Vt*`2#H`#ft6KsXEC_Ni(`oVsw6m%Zp{^Ynqw} z&@#lJva%wD%Mv}E@avk(q^M5V?3-j88wXdln?(rnJ(H z8*D?hV-3~`v=x+H%=zgRF3pt*<2)Zau%8_p+EF-^s&57#49g*I@-^M4Iq-Uls++xT zJw?>DA9pQDe)~1ES8OBMp?`HT)2e#v%E%Gh;6Hr4M4cni&ShIk{qJ}WPhe68+KU|7 zw~wZ%l{enHz}NrfIbM0|EU5@-YH33QE-A5VV;le7AN)3tKX{PNmLl(-cpE7yJn`{+ z`ND5KPFrUi6Eh{I<`OPk9OulLixirg=nE6>tC1#xv9U35 zDFa(Jl8bX#3rY!uFch2HnVMW=d}4w$@d1xg)=`oAnFlT_#R?24XQ`Ezut}AcVjh*t zp@SSHD;OW2LZ>O4H}ukylPLTqSofnj#2TNPy-K40uX1=~B_|C$Zgs748Ii4pU|9=h zmJ=?_R2ZEvF;hucPN60OoQyFdzzWrP(0vkaeNgz!vU(oA%M2NHzlYyyWTSNDm%ohp z94n)J#jMdaUoUG+!ys5U1va)27cg0soSG~#Zv-29I=JV+E;^bc?@ej2OFz4RW8L?= zh5W7?MTx9u>bw>2#`~#_y%8b4e&@!Tw_PF4wd=}v*OKcV-zIA?_8DZBdOfZ0Xt6pa z)G3?VTDa%He!7}F_~El}@Rfi0F_$J+XfC$%*n8rsg>L?is=$ z$JT+Zgi7E{4W|kY~k)ZchefAghKn?7wKcj zg;4&2rm}4d@3BxyA)KMTt&LDgUU>CwCMIV%dhh-8_HAZ*W)UR=qFjtp0w;WLhLoT} zuNX2;Fg?2jvcQRx!+h;4PjmjB?O3fn*_0$I`QBg=+M+Ysf zE!1>Mwc-*v|O)42z3P0bEz#fCNnd{#LI|`;5K5DaV~T|WQ&VFEfuPu$BcD^` z3o*tRv@!l*S00TBQD7VqlC-o$t-L~9$V0vv6Esmx9hb)@sHBd;Eq&xefipgDPYQ{% zVzpZ(b1*w0-&c~!uLNvmvKJ+MOBPo9FGTu)zOsSol4f$D%u*#`1>cKomDiao;cF=| zhI%K5%WezOsVil(_0Eb$E8A+FlW<(AQuw89VQUV)y1L4&ZW-P?;MZqsjgMfrP?G_Z zOI2noDI$m%*w9BuOFpZ`6$t0y!L=2#KaU~ueo}I8Rg!xvoXGk<4ZB8~d+VvXH-EX- zvvH%rQ!jE7b+{_asYfwhh+Z1#6p6zrM+j#f%CBFT`mzZ2M7#Gst)5VjI zewe|H&D^uI6(b)YYAxVug3+lttaWsDwXv;r1I(4Q;d4PKkZAM}-Mq@2#Eig`DO^US|YXnVAc?!iA3^^`Ot#EN@hK&ce;z-a!AykYN z8f_$DU@^8t9D1`OLN^{O6~evu>>&x8_|~_6z}xSh;=NPn7#TXxlTSXuy~hr*v^Y;L z4k#9jB#EH9yhLYL8&i{2{`AlOhOVAoD%BeKT)@5e9ODoF;Pdo$$6!*@ig&C#Y{rcU zq=;xLc9L%{5QNa#nZqO#RLix@Y?vvqq_3Z?CpVK7ry+&kHmqwv=|Xr3zc&?%E2RAO zOt>Hr?Af!8-~YYeU}$KJp8j^)I`Xu(M2+BvFp6OFVfi(^ZAeLp(Ds7 z49u{OUVQOfJyU(#g&p{p=as%H4Nv<#WIFaSDZ2&YT%yW^RRrr3DV(eFw4fJ`1NE z)_P;9b1BADeA!e`Ah9uTy?cpLNmE*`kS31d%QIY1VvbmSv|J~o@Q=hn>&NfL}Tf!v9E5$_Wxd{>Ah&cJ) zC{O+H72Z2F#>Js=O3P(hiUn{wQ@06}l&kKtdVjj~1x#d3j6z6X>*uRP*W^cKNzZkD zRQO9R`1*$SwkEdi=%cf%K(Qr)o*8dEGrw6sRFx3~iLZosyD{;ctB?zeyP9mHmtyHO%%e1z%5#;k|r6@Vc@bD#axdNN}+lggn z0d}iMi>Q~(Wn8oP*F>1tfB1aClFjNVC1op^Eor6}$}CnAR#NM?3>Dyz1Zy7vL8E}F zo_E_goDg0XmtE-Hn%jXBS4u_Sk0V2TK#xZjRM7}!Tje&^#8_MroM$mYFk4EQEmg5j z(B08We@~~!Je@&`AnV2!Kljh~n!U-nbstlAmDE7oMDBaN!E?Lu>(?7ZHyR+<qO2`YZzs*;^`5bSZS*B)d80BNgg>{@7S>lD`7x~F6r}={~e~Jf>?cl>lcTko< z67b>+uXFbN7%#tZisxTB$*(UYmEZfFPw~#(dpQ2qdz?Od zf)`(YfuT#oOie8i#^2`L*$cdTYKWPcZ?JL08}#%S`NR{S<0JPUX6u%2&?PX-{<-ZG zQifO&XRdrfxvcr-x4zF0fAlIrm?xKaJn{JbeECbiMxauZ3~}Cpn5hswv?!(YhE5@n zB1Fo-cX1k*nTAuWO|z|~F2o=UQS^G~z*>w+edLjKNEsn)%*BhNeD6Eo$iNNGvO(6U>Tt=sR*3rVwFN z#CSEwSDt-`zP2VF+22bjvcfS`qh`8(k$yj?!Y^fbT#c^@ECHI-g)CN6#ulqgFV$Gl zV1&X2F|OVXkVT7F>x=vho-A%y@~!V3t{=j7jZxn<{3Grv(%7x>%7|a$FkSm{WnJmo zxC?jH>&Xb%rAkUwYot_c?CqktDKk4-=L7Mi^qn8#0~#D+&DziE|F0d2YrRT0Q%c?J z&sX34ua`|#=OfnZAHN>2v33|-@prGohg=C)trF3})Teq-t zQ$Mj(%rDn?^PTrts-`p-TlnH{e3GLFwh-DXon2kLc>F#7>hHh9rO`50bYdfk2@Tdl z;9{JX)STv(w=YrqfBp+i!56sy$RJ}EX8Fgj{5_N7!-z1ZsvX~b`UUPiw3CilBCW>Q z#B+>B;%tOTs~B6RwK?YgV+SZSk1)TGvb0>Gl4=s`8zcfzK!!QAcD(uaD6K6o^O;W_ zB`yXaywTSCu{43JAVflYG3LH|_jA|X2bi8&X7utjE(pc`4S7Mp-PC2vK7!e zl(W=R>}zTjvv*dm#yU8^xzq#6%({a>G$68H$U3p!KXDym*=1@DugP9>t2L&P{Ar!T zh&Awu0V5rNrO=WT#=J!XZYs#US<2U@=A04M{uor6*thFRA@osUW!KGjQAzgmn*$wVNlC*RMkZi1PI^?Kv%Q%we*RI6^;@~GOK=!hLr8@r z1Z_~+^FhkM^F2YHshKK2dgeIKJbRq6@deVVKo|uwrL{F+$6ybSJbaX+NA{49Eml{s z7@YJFSH1XC2%kA-Yl4%fhB$L>9$Yu)E-f%MQ=+NZiFBG!1ZWhCODX^O_2+o)^|Q>+ z*Kouj3b@Sd=bXlRER6t(aT*%8n)KqwrMbqM1vA6F|#e>ubB3fZd{ON-1oiVzsYX0NuZNcl&}d>u}bqbBwlL8D<VO=Jo z0U3zQKc=uKgv>KLSLHAN>TA6C(n*pu#JQXw0xHBISzNC1`s-&H9vTMw>wNg$0|e3m zm4@L{5c)GKdrsuyfF0X6QEYmX<>eYn3o}fNU1sNCH#moJ2~rj?S~7HLnwhB*VceYc z0{WjT|2_2_jLcfY>f%wHLuKc!NDb4&qv%3J)1Eer02>6nab}3G|3I z#W~(N?ymZ`ue$R7Dh-gUhR3Q)S*&)J*SU=>0MXesG2hlT{%lZGYlccqgA?R)d76v4 zE1|)<>r(vevfSHML;b8$;A@AAU1x)_*N`kXGa=rJx8!P-)v6lqT2&Q7G@g^Isw|sH zbuBo9a0Zc7+1lB{k-=^BNNCh^@E{8EvL}w}LJS%qGZFN@islv^hg zuln2@w~8#9y`ku_9!GbXe8)M56#>=MqOI>hhzohbAixQi`8wp9Au87$Ah%0Eum3i8 z#esgi!{}z+bbSXjLONFEf32j8|0xCM8yR*pS_Z{WIBim_?9j(nF`MiV`4ML!77XJ%@ME-H`{EU|fn)(zou(80P|<485FIS`u3$3Vf!VLi(zN zdK3s`@$YpDmO`mKN)^yLAqZ5K@#Z-tN;ybULVM}i-_YJlZ zJA4F6Rw5N}dq(FEY@Dgs6wPuO7bd$HVZ8`L&*q)vgW^QRfHTYHC2^7JGvO&wAZQHPIROBPkRL zsGzQ>$o?G%T-k7ZOM~Nf34d{m5ZH}itK0Q^h5WJ>5PJzf2L;)##3t3OYGroX?P z?OXe}Fm)OwW3XXnimgX)3$PK+I;1efN^NF=OAg2O{tgc9*-Wf5h)yXC z)*rqGP7jYWH^0o*ty}2o>LQBrSgFyr<~JB28eRk|e5siVav%d7A#+O!!xv97KQqa_ z_ufIVIr3zACWEoU(b3<KM`k(s?hqe;{C=E(lmrneWG2Dd{qls+qrdbykDwE#pAfR$J$(M~WiHASj5Vc=Cv(nUCx0A5xvU5G?_17M4yrLBi; z+xoGoB{gN74G2Vx5h-Dq@`+E~%l?CdynFIIC*Qru#Y?l)Y6fRS7V&=NFPYU&AWW9J zX9ArIh6pK`h;JvA3zVqrSHuM~3drRb@HbH|=zMZ6upZoA=5R(l_ zRi*|KKKXWbxyJC!5{os1Ryk4voRb8io@tfYZZgB5bD)hQwWi(?mX)~Fk7G}O*QL4F z@(bcNhu#OpbBJ|5zF33b+f_)e5u%q#Cyi-HcBv=q*0FVCF~X4;Pt*z_iQ*V3>j^*B z>(5tb@iiS9?`LSNn>BR{o5#(RQ#X^$Ua6Q`d-Jz99U^Oa3E-wizqJXtSAITrHJ@tj z`_cG0hb3;oQa$xHww)giE35`-dJ_8|$M1)lpHg9gBvn$7Rd5Mw9S)P0K zG*bgDbTsc=hGC`Q}rvFgvqIZ%-dv1~#*E_eQo4bh3MM2dz0l zBtct^2m%}d#^sopD0BAQY0jO$$oRx%l4^y)?VC7scsDJofN&b2GG(PS6kD74(1#B4 zgYW&6rP&g~XhPvofzP(HSX?Tym=XVdlFFh2N0^fcnTb7w!Wf%fd;`zB8jE!PeH?~3 z7ZOEYO{PSEB*rPdMm?!;HbhwOz^~R)D&;c9q%<}8rblm1c1Y#u?2Kt`-^~6yHuLcO zG2S^b#y|hlPZ=3r02?8csblx`(=QVNDKrj+=aq$ZG$n@0&l*t;hUUdE(%MzG*w>b;@O9m|U)Md9K7#BC)D~lOfK}YlO2|l!(Ad ziMCm#s;O72W`mVBEIBl?GnOj=pvY3CPCDlZ6;>;MAr9oNHg-30$F|Kp`rr{-n-s#Nz713as6b@t#vb}{LetaN z#&PE_boRxj~Ey~(}+4(9z z{>e+6K7EndnJMl*ypKH)$~fHugikyINWgCYY#Z(kcuH1p%<-eh!S&YKmT$*Od- zZlerxs{7uob&Ztp$U2gh3bPk3(bv&J+|x!ijG0SQzV+j`8QjppJ)4@5PN19xd3(|9 z!3VK*)Nk4jFjBIjEhBTwj4xLynE)F#VNrg)#`@TdIv;}YPddG-CbG^C4(bsC@+t_( z{c3U=H=RoE+Cj^jM!!ZG6zeH|G9Q8Sg+7gFZ|8&1uyx)>YLwMFU}e>pvl5^to3C`))1x%yEkm$ zt{vNG4qT(-T1ttM5-BB4fwGRae4hL6KEx|;U*__nqiO_cYDrZd73L`B;FBM{lf63! z_@`%&^V%ElFf}oQu4$U$kiHFleCWsl9yof4p7vHQoE}2UfPAr&ia45M*AemX z{RfezH0YLZVpc#O^cJ)C&=3_twwan6scxIxGRW%q1dxh@x~3V-q^tiahkudwBQ6B_<{-gi%D2q(o63ojL*` zv9^kE3Br|m;Qpf=zI!jB^!a2;c^JsL(Ekj|)Hf!okTd7c@bzyz!`y6%D1>9jnu((v zf|`#&kpgW5DlCwsj?_3xrG!hDW?5dU`oKq5MTx*~OCs~CWxeHfv5=_4-x=H%3cJrGq3i;j z%J~VMRjf9WRfOLvw6&zhp>6h5Xv73~66#k_dHXX-cI)4ywOc}6J7gR0lO1MRZrAGj ztkJZ25Z7;T#^5p&>DbI6AA+xL` ziBtk96gi=|Yu7d&yyp)7@#$BnxBwL@HgDTbdtVoo6eh-Ii1HzS_@xK=(y!mg;@k>G z3&J>0Q!yqVNl4-8@4w35eC7L;bVN&E8|ThWV6>wpgin0zC|mkE(A6byUY%vE!I(@H zCLpzfno*oQKhETmCKY+&Ld?E>d)U6EkI*iGP1rlo&PR{!=fZ^%Rw|0)Cr20=nW3|- zg{i4|7MD|u@(1?r?Oi_i>oiKS6DZ6h3*| zIp6m#oIp9veMb*aDI322ji)$&VG^7mO{$sm+kmUk(h_p-JxBQB7oMQAEdslejV*(f zpooCLH=7zuq7%-Zy}-&!4Mad|do!ChZzKpJoK8Rqgp632FY&@pUt@fHnc0O3Gt*1V z&6ZhOs3C&@Aq>*VMklsib1{@oUVBS5hA0r^jA3zTl$P!;nznDJ6a=JUGcUh4%HhF{ zbRF!YP2PSg_y;yTtbmfSjLfbuzEq=19w&W$rF0;K@jeY_u|i@Iq{fh1=OL>`W=!@o zE$gmGantDUUwy*-S_PQ9Mrysrq*s5O?CQ30rN=-cg=Lk6YGFM!q4ZfX?)a(-B|PgWO8ZSXalUjO?!E+ zF?7cfhj#Cvy%-aSl)xDxCqc^0KOjKKEIKJcs4`tQRN9XK03ZNKL_t(-EqwOz`?xTC znb+PO!l{UtkH5>G{&hrqOO97xdmTlMfA^&)c;ey1Y;4bQ>2isaXGUph4cW76E803H z7E?x-EVJb@Zgvsr0&>!F?C@?LJa#9ssQErY>xYN71~eF(`ov!mGP_*n%zeqv#fMkB1HRT}QU>kgiN>SZpD)ex${%#vkxaRFQmG9++ib`SRQTTec~o^5@E zuEw1^+ct!U z6^}f47dv)r;wLY?!RxP|WO!tZR6B~rnEm?>aqP&Q96B&aPe%^ns#s?Tf&gO;QX0^; z3{sLAuOjH{@1nUiW`1^&o}PXNHuq%JxB?>_QpTJW?UwBaBrbLO^A5WrK6R zZrX`e6|1n~s&;ZRwQ81CZXG!Vx{@$+ZkVQ?O$6;ZYC)dqYK`aKI>%i*I?1(!#O^x$ z^>uFS?{j#p)4$=?cr1iqNn6I}mYG~AQ6t6$5yGjgI>Tn`mG$ug2oh~cwZX6&Akx6} zz)RKEC=CAftr^#+VBBgcdnOWat4g!0(EUb7MC0HxSfLvc%g$My^msLl@Zp?FDVzkU6euqPRYD*la3Up;HFj_5;J^Ky&++Gf`!Bq8dWf0% z65sg#Pe2J0>j+Gl<0nVC@7}{y%kXD^@y~qwsplCS?B~nB^Le7EnKP4%tO!M#6XdKX zM(;hehtGWC9=eJOm#iS1A&z5W8MC~!>?OsS6y6BQ$k-SY(^H;OwT7;aRyOu`6ADl= zMA#IGV4$~?d+$EL@Z}dUCcsFAl*$`}b&Y`yMSknE4|3;VA5yO%>@q5fXv+KN?AZ7e z<5TnWbZrDIDpZV3m3iUi6I5M*RUvarn#H-xgl@tgUZH0H-X8wvKmH;I_ijR1&mmb9 zGqbb&umAi1#mLwK1bOmN$nSjdNj~}5F@#=h{2;2VXvx*3IwB=ZRF8zvSt6&FAddAIEqpHf{RAV>^Uw0E*PsXQp*>O@f8H@7C;)^W|D z`YZpE1vvT$lIy>Z&AwSu8;sWIw2DqrOj^Tg@A+`XWl`(~Yg1AzWgRfH5>PV%EyW!B zc5EaUtVV{^wHYFF=HD(%wUkxzmp}2V_~j@wjpEF70wUM^WND> zCKsx-_x2OzB9zi7ERhVdfg%Z{A`qZl%9j2P4({85aGJ4+DV8c0BMLZ?N2rkbYRWr9 zRi1h663@MMiiIjnF9}|IcarZve}d!hULdg+X)T+Z;L{J^&1WCKi-9f>dVx?mx;s1B zv~d&ty}d+n#7eS6Qr4azmJTOER+cr3Qzcw2Vc)I|JoeBb@==PkCOZ#Oq!K8l7`Z%* z6_y|bNrk}9v8hM$`Ct1Ohwm69vNeROVbK^BF+5%3#W&6}HCMrfF-v95(Bu*qMwj{N zE9ZIP#nWi=APWc=6N+XmF*eLmMo_9%*uH5K`vwOIRq7q>R*^5Xaq8>@ue>?T)RJUo zewq2@Iri?|L3>NP=UUM|SW$YBj#B|h4__%$B@{LCk)fr@(cLU)&KY8*k)#N8Ruq*T zrqZkCeDhL(LqQaR^0Dno8U{A@vUk^JcJJIkXGer{)y!d%XQ@=mw=uBWxk0m#P5J@CGbhWawLODrkj|;0A zQ+S7}Ses0En^51)D(Pt*eK=4V$v!Bk1kzBcIDNEQXkwokh5mzU~4~Jp3VA zawj-@?g9sPc2mq-g21A+_7NY}B1zc0tC#=jk3P>rNmH$9=I7_BEH2Q~-ooAc_mIP) z!xfCFppa-ISzM@6t$=Yko_XeVUV8Dk=ZlD_RGcrHau!313IwSYfNBJzmlhX!=j}K6 z^h0-1XanmzM`+bZW8pV~RVjR(`EbZE&)i(X`oXH96Gk2tpcB76OQ z6};%H2c~~Kq?8Rcg?B95tEx{e%K2iLoUjDaP^y(#F4wRvO-PZ+5`zCb%fuNzvFtY@GLIfVb{&Dy4pSN!-8BEl$-G+#>cE<1=c90=F5!D z)JRMdScP*Er9zM?<)tP5@tN1ywqqlEHy4323WF0Cg?BzXA$=T10HI3gYYF&`NB8rQ zBRhHh#08GOeToyOMi?DiW~sD7#TY`V@RhHEVjQ!nr=9(S1KhE5JA+#`(NsvlER)tM zSd*f)CD9I@9gb4?Sn2l(V9NmN+L6VaURQ@0DHpjKgdWQ>+g8^}eiB!Od5 z*Ldl@As*P>#@6;I^X6qmSx&Bj8?u%~@xC|@(-;{xoB#d;DXPYDX=;h7sdJVoie0m4~FwVyF#RfwBqtKq57y+Ay=Y z!uGxnlw-AbKxTlUyG6P6Rb@*zGZfycf8$15%Z;MdZ$`Y|XzRIdjuo!qr@1A6NY;&g z#io*lRZ1%{70vv_Jhmo~F2vay4&NZ>WQYx$xHvY;*Z$>c{@oWo&c^nTP)URms6e5O zB?@D#lt>{7uqYBFhOIq0HaxtChaT9;M+uyxy3+S^-j0t$s9hyWo3#-=1` z8KnX*jde1E@gPtFV`^DKg!j7S;|wkd3`V3`8mh`llb~8zLa79oSX7k9XkQ(GkVxxL zx{4qnZVEsu7MDvPB$3oS_~8Tm!IwVC{_XwbLydM-gbF}|l8!h?dE}wPoI7`x3zx?D zw_pAoeSIAWyM!R;0~M7wgF1B9Ri1gxGESi`X!0s2>5oiN=XbM`IaSA{6;cSM<|_Q{ z-+Y_zeeY$AQA|x;pjz$ZvB&O1DT#9lK^UM@gNj0oO|aGw1_?X1ck_iWe3I0{v(LVP zvkE08xmeKM-NN#6nWd#gtkV>mb3FOvqxAIj^3|{Y6T=tBkun5Q;+#b4n%@p(fWd$; z1O`ge6VzsAXzD1E2ti87`H6Yn8(U&STaj3J6XGiRQ{Q*w6|6^aJ2zsnCRk6BRci`K z#lrCPGUE$nOpx<~Lnz3!$g&=RE_~5Ss#7YdX|!}%w^lDukA7GUQ~ZUCqJHUv!)A^3 z(#r{@hxx9SDoE!qCD;^6LN3gqYL1Gwj7`sz?i?V%5oA&29_m^@p5%7Zhi|rh+^Br% zMhE;Fy~s7!G8mI>)Ota^($uUevXVO&o)8hE0e8;G@+}dgM3FTQ)o=9*C9?~F(Z287 zDK>XCv$-wCx>iz+j}+1P%r}$z4MW#3riRm=pRm^9w8c7s(T<9(usAogu-t_!85h_XP0>@~s<41@8Zht^_UeaKo+4ui!iMVJOi995GNhMN2D z+eh3~;KkR@Ff=lYlo7`IueT`@Y~S3<;En;dZQac5!ZJU4{$<9e#(3}=z(KOIc&=g@* z$U?Qk>*vNevU4L%0jO+%3b)?D=+EfjwhoF+(X*Bu)xhx75*H^HF>w)Oq@7!hqH9I?%BB27QprT$Ngcx z{$N;3vfnUHJsTQV4*>u1%{4~D`s2F((8yfl)?%`QUh6C`%p}Mpp*0t9?_GP?xn&zW z`(AgFf z=OV0j$UtGO$kJ9lOe!!0GRsbr0+hlyi;|xEiL*#{$eI$R^Pzu2Vk`tgAw`%a(?Vhs zqEKPcY~R$v#{Q$+eP9zkZr?!=r57 z*uz5~{Sc2me1y##iU?b26^_R}2x&|dyy zIpMjdj{EN;hEyknN>Px4rHM(Z)3fB7Hd2uhiHkWoGRLLqGF=<;1Zx9SGs9Wq3==jZ z;%~>hkzI)EO}<7*M(0YLADhKQEr=+OF(#W@VwF)xg7a`nE!CvfN0v}0B(oaX_0lxl zFK~Fc5AywQ1{H}_6&YDKJ5u7LYNQ4ut|HUx-Ukc<$SX~A7_wXy%rBIfoL-=Nb5|zq zB}?%X80^m^v%S@!ar?PhSH_LpdaACwAvu2|sLR?bBi7gRiChVt33S~D;)L&!76H2k zcX8;zK8k_hk^A;>bYCxVl*76f&d*fPrs^RP>o{`gP9D1NC`}?IFP)F3kP4|njCDjo zm<0rS=*rg()OjvLfFUssZB#=RY>mxi#HP{1VXg2IPpiE5B!kP%+4<`F*VD`#3&(_FMRF^_6+tTbb?Z0rf~GJ^B2w!@q-`ynDdhstC~4=ex8ZR z@6*=W%)n=3FGH*mgpmRaHB-e=MFG|-s;OdhXpXbzFLCP32{vx%4<`Wd=#;L+a^B# z*dt8OPVnN3KP4A5v3GYrfl6p;Q#|>ZhlzrSFbKRm9nF0ozMG@>+=a!_Tr85NC044l z7`cpdmcITT+FJV<9U7xrF$9$=^COqpxN!qAj?sZ-Y+;^v&W~~D#zA7#H8HB<{rfz! zB6u7&>kyc)YEF+#QxOqSu8G809|dk|4Sldr_>m;qP))VxIi&IvJX=XTrf+|4hx#vS zg1Ddizq`7DI3YnPr1CdUmpNi>-Oo@@Z#5R}ELez5LQyH^1eD8V#wKUjv!Of7P7>Kg z(t3>cHsGk+;VNzfTis~;@LPesA?aP`Uv6ghyIx)FYQMN$v&pz?s(!B}%h!q&1j2y@zSej=xXiZo&(!y3PL)HAy$`}F9}|K`4ui)IEQtTVsjIR4&FgmYmU$? z`;K`jvC?ni2!{&;tZ+yvkRdpmVw~}9b(v7YrVeLAoW&P5)$`7r@X`E6;0y>Y5!#_K z{$n_c#h}p$9EE%nxv+q?Q)I+2)_CbY0QA=U5TxNV~nUTxWjE&E; zxUfu`k=hlBezc!Q<3q-F)D zQjD&FjIatWj$G#4&@@vElK=D1zkw8vYMPK}Lt2Aepjnu!@khV^Sq|*(!=_cN(MTm| z%IEpDPko$C{oDD=zk7-kr-!LkQUV##)zO6_#8E(tkhk7G$B&_A5IP+!VWHJ+f`6Dy=W-=2`oaA%&x@`G&*V~J<(yCB}qC`>b9RxuF z1VMD*El)Y;?4#sreadCSgAY7J zAy>d@P;HIGB11J+93C8FWXno=Y6RJZgJ~gX>Z*~|haOv9 zkxx4CmPS%GmZO7X%*2vheLaaac)q}x#I?5A#dJSyETPs^wRJ%@DY;7-kpjVf0gA>i z*tUGpC@B>vC*QpCG17D~Cnq%4Lu!MsLvlipQvs2dTpS%|wi3}&lOeViW!;O&{v$e$ ztJPK?RAfG=Gr6(g*xMG459dI?v2fg+X?1-;NmAs9y+yIPQarRxAQ9NaDYO)dQYmI= zc!p}Z%*iv~;*q;H@v-|iv9i7B_+myA5R)}!vR0zYAuqr9BCDDLwyxFY^AOQye-vz}a)7 z%$2LesToVDOo}&wKv{}8MOSA7>((q~?dooNmbBB}l*jX22$V@;l(8u3bh8GFuo|pW zo(UAyB*FJNROjM;gMR30XYc>mC0*7o(%*0hdH;N#`p@>+OqnQnze+Zd!rA`Gr9 zD?Cr3lPU=Yp&~Af4sdSpI2|2p>Fj7gsytCuFmz^&@vMhXio=J87`ixs6*0<&By-cujgHdX(m*T> zT4p$Naf+iumszr|6`e`~uAN^wqw7cZd049v(#F{Xq@}wJO}b3N z#m$CELYO2j@l2@2UB;CVj+>W?|1A6RkJ5RFf4axLX791^*h(Qig;H{nz`E#=whJkO z7GV^^fN!egrAMF?RwqnMOffb#M?+1gzl*o?&V>;*GbC z@W$SKG`6+zzC z|Dg-K_2zK|f+fov$z~-}6Qgu@G}6#qOu>(m^XEo+YtLcceER^Sqb1@nCP~UX`p6wT z@rlQ1YptbPvHb9dZ}W|>y+QZV*V%FRMn3cDhv@5F0yZYW^7`9v^Zv18NK?QNgN~S= z9HS*%LN@QCRi3#@h2v*Oxo1r)Id7q0sGEk6Uga>q_Mk9a-Kty}vd2O&QHgo)#CdG4 zj-XJ3#o6TDQbeUNL$~ye6GJ76i7goErL^4zw}H4a>lZgVuK#nH^FHkRKbN>`af0Py z6J5?in4seX6UQlgDM=T+2B86yI5fMIM0k|6q?|yZP@t>5g`7&6aElB2E9et()z4R4 zlSM8T3%j^_$?^e9_778lZYIV3ph9#@$*sK#(Z68$yG~Af#1;z;0tz`vOLGm{Bvhl= z`6Cw0Wim&o6{F*`oIZJ;gGbLWJy)W=wUwG&4yl}Z*p1b$M3%Y4JjLW}#CLzRo4xx7 zh{%)3j3aA{bT5OCFwXEMOojf{9sK66KEtZz%~+ElEUC{%f)W^Eu)2yTEzOM$Ea_|~ zpYgzIW@hGywWhVLg_fo|n(7L)HP+ynGRs%A(X+ITB#H>bm>t`;^6WE@^UPDbxMTAw zy4q^VdI>TmS|=EU7ZAphL@Rthi;!+WpU>BjE7o%G{bTqd!>68ol#hMvE_QBP!?rE` zbhozS`qj+~0qBY=VZyT6%gqse~nFt5xc|+EFz*HxaT1-^Q$4*+ENAp-9KY zX%vRIY7C|Rr?hx19wpX=2brq|S$PHk03ZNKL_t)5CJTxuDZH@ez!a6SApdo;H}Nm}U3`?!PfPd0E!xBhNgR_T zF5S&02^j5`lqN!(gjfiyb_>6$svOq15Si4=AnXDP z=31lX?M#5TlH%S>CFMST^Ck85yO8S-{%ij1y8m93+oG>RlGsI4<+a^~qn;Wq7Tw~c zBOX#tmL_&Ca&54&E9O#%?C4*?rysbJ9jkiiThfNCOw*LLY+AjHE&VHLsP~zj8>h9d zk-R67CL}T;10$DsdCw6}oGUR=^*C~Vf_IM%^Rw4avG3FvGbT$E)Dn6{rYmsv{20ei zo?_XOc9t(|!RpWj3uy-uO)$h(GF3`Ae>vp*cu1)#C}gt)%DMt0Jfw)Q!lFDMKk%HS zRwpQFuQCAp2$7{MbG*9$EdR$}evhB-KFsA=Nkkpm4-hh;AuqXO<644T%+$;%c?_R= zVjI8trH^5Cne&5Zk-EZ~6&>{UEMaD@LKs^B^gs*0JU>fSW|*oNPMjX$;^-vxO${`) zG$W)z7#BaSgg{8pHo+>v#9YX$ZyaQFGD7$TG&1cvQq7N%PLyM+)D;ZB^7)5(^nnfd zQsXIw5gDfE6E2R=5@c)ef*eX{q}3=Z5jsH#SBRUM8`!$Jk9+Uz=fQi{@$lW-c=+BO z-231bmiDxue7Cn)($zuV>Mq(^00h)(`5$FUu1T+gf@zcqZ6DQIL-3jHoDrI=xS@^o;x@3i6`&l z;~%?^$;(r`f8->EjxI8dO&CdPBi5{5+D3O{mOxzbcr3IM!n!kC{ox<};U8YT2wB)u zxHJ8VliUbPBqSq~B@Uh#q)^|Cm(97Z&@4Ow(^NdE&_YrTL&7*tkqsxE5BXkmzq`#UZahm=V)aR(X+GU(uL1-0K>r*O+)D-e8>uybp z^@4kptA4syI*Uc+R|>BDATP(Q6irvZUvD(L*;eaj1kYO;7C%^V#ckPE*A|;JFNK9% zcmu|%sH`!d6NmCP8jQt{Li&4_^7Nzk(^+3c##LHsvTW?@Vf%)aY+BPvZ+AV*TN|-q zg{hfYni}h|QZO=A;afl6%R7fh2t}SyLaYR1lQWb`8tZACx7Nps3`XWs`a;CE4a-@# zq63+f(Mbe4L?#JZ`;={-@4d8-KmX$YyKk zZd*oHW)T{sbdqT4fzgseu?`g!Id$e7rAi2%mpaW-HCk$5wrYm1t~#Fi)T1n2Ru4ik zTQTh2e~Lf*t8eqwum6bAu^DoOI_m3d@H`Jgf>p5_=_)UMB^UzVlFJI}>+;mqWof9( zkqwknW04@0MdMuDMnujiDHM=JO1C5W=?m}hCx8BZUU}sZM-C71{`*Ino+^>eHGrt$ z7+0 zmypSU@|-lTuR!Y(txb*8)YVd~FJgtqt1lnq$3NV| z$V8c-zMk6FCKBIw@}{^%Pg9;XT@7TVO<^rps)1O{JYTFEVzC`@;@Yd0B-Z6HmnI+Ul|rm>LI#XMYE6KlC?rJ!W=w_yC(g2Z#Zs0v7SdDVYJ9qJa?|V7UbjDu#5FxHZoL}|%w^LnR^LV#dj4yOGH*_l3nFU=|x9hyDUI=t@2dvSlF-)g9 zGD2chK%u^!s?Abakgl65MI!u+rW8e#g$9{J`Yl`>AECP(Qpg4PewJJ|ixiV2ri}0u zs4T)SfXR{Ad3<3(yYG$kBu4mzLNXm`s(AR?PYatSwwlDta_ZbPKi_wp!I^|A0b}JE zq949VrMjIR8+*tJL(Y}~fsaF5m_+0G9y&4(_mK&hEE%4E?EwGR*Ir<34w7sUAtRb= z1^qosm>8L6_}nO>JWfH(uxm>f!S8*JvC$c}ty_i{!?wO<{Pq_=PG4USy~~T79=eRJ zj*(%So)x{+);Dr`@B-trF;*2gcd^Xh{HNz3(mZj`Ry^gWo{GrjaSMm$*s^IA$4?LP z@*4*T6M+>zSZ{&Nnxc0+hKFbP>#zKj`Ps+G=M^u#^g6HY-p{4cIk19LXMfHMFTc;P z|MEk8?wJQbMF?TRdYITl$}Gl4K!lPOoyg4q4L8_II+M*>80o`qFWMvku4R5}A zh~2LrrBJh!UH3Inn>YBrp-|(43{z*jM;HsTGC<&=RK&K;%h=HWWsEd5)YX&8z^OAs zTo}Dbb4L@xz-zC+&Hwrz{%h&YbWafH@MI(|v67~ix`aS@i-cvK0P3k_CCR(7}JOUnXg z#`%5hRezVb3Pq42^AWdA`@7wKG_ZBk3hE01%a^sYwr?rLqEi#q7PGAH z>!q!^h_EqH6f!+E!HOkq{N{6?V%I}=F+4iTz}aD}$RWLe`SLtNLj!bnH`CtP$;WnZ_s$J$ zSldI!S4>QldEuq~44$9i{Kz-fG@hU3!pIaazWgq)zJ7?ovt#74MVgyx zks>CWm1J`Y-}lg3Ffua5?%i*&vUerLnmm)!^Bg~RhH5oJTL>*Qbap{Qt&>pOn4(Hp z-_uD$-b)cjS7j@uXSsKsM_F2y$!bkYp-5I{c;(Ia7#ccDK3_w9AxlSF4J%fxW%$wrp_Ui|H_Wks$}ut< z^WC5AVR-a1UwovOr5&wEp;O+GI}DvV(q~{~hHw1fHO@^$Xi-GO2G2wUal(b8r^?cf(1o)Y9fHUa zYC{m@8JeBq?|=L=8rwd{nvMnn9b--6f|9JkCuY^M7QXbEM=6JfBoV~gk$tPxkV-k^ z=kE@1{MdPfwGfXEqQ1D?S-qg9^v_D($IJZPTC5XF)gUU-$Cz4$W4x>_0= z8)@%o;l5ovX>YAZ*eX`}813`k!85${^Sz7=&oDJHjU?pPo_m^yc5TH_!br&G^AwA< z2s7^z4!s2|X@C%}dz3OE$OUxwbkfyYgES?y&|IFJV&>(?0;2cq`2$bdBJ%{;&|Mu5e-PegB!NX^GWR~5pAK<&+dx1-%L+rfs z9y&T&*|edLfB)})pL0XwyzuINzVp(1g!9w*w%wioDqwQH%EWwymCYH9fK=1qUKPSQ z?Y+fZj%!9Mi#b(p1Z4$hMn)N*tFp3pm8;6>*kNJ6t5f2&!8&!7#u?ofmADI0q6-uD zR3`b4+z9+je@m=!h1I6rn&;yMS)`vq1sR0zA!CmuHmT;{Vyq-FX_m9qWNn4KDN&M= z`8mO%Qv)f+7>9rI#JA(V=hmYiEZ9>&O$J9X^Od01yPd$k)ZJz887kn zp+QEfV1f(@lB!P94$``=e73^H$(V`BdG|e+21JaFJ(Mtb9)wmSY=lRd{+=#=6dv1P~`T0pUY+OZaM<@Aw4F?V$=Gf7bw6)ync5YHq4&mij5AdDu?;+9I zv^$LW^RN7b+Qw!!Y*>a88c!&4K@Jj)^ka-L7@-`IS4%t@V726(eaAU_?kxA+wU$Tj z-$X9(nF}K-aZGGuq%stX0oiQevUr5Y;UlLxc<2maQj3yB;-t*`hfZ?%_$gMd=|l=2 zZG67=_3!YNzx@H_vZ0u>OkSQv0$E?NW_1^>?QIN>&Y@n}PicOhMkA0)VT7U-YA#LA zko43OEKDP;Bcda; zsxWfIVxyh(G$15z=P78(yilAS8ewT?C!3bH;>i@Pn&xgVs$LiJ)a_LZ^pE7{_{aD> z_(vBKZu)gM#>U=kY_;&`!lnUHCKVo#g8a0`(-xnA+3|67B|@p9%h=Wl%a*oNTVFtn zkVIKxEtr^#soDaea$_7xgzvjhpil@7ojT7;dyaE?dd{bg+%L>}-C9O@3eCEkr>_2>lVxV~X@q1~hv9#AiUd~gB=4mKo*s^II zv6tc9!zU?E#I$#I($d^QY$61)BjOrJw8eTp2hLnz&!MwK6tObE=y|qp+suFSJ5N)c zoMw9b6025pV3R6BYP6LYFF>jQ=}D@gWM*CyhL%7{iWv{jHzY|l%`CD6QlgdQ$$K}l zet9PiO+ApQ=a2vLd%XC@KCn5WM6qxGS$1t*PtBS}M-w)&L!+dlMJZxD>D=-<<+a(= zp}(YiDfM-=T)G^&*9!tAeK#SoDId-_6#Ip#SuW0n)Z_xDE?uUvw!m}0_BlK^iN_dd zX=>oaiQ|OjGR2(22#?9hGRIC1Q%y49Wz*-T&!N*}{L!C$n=gO))3g*46gf7oU&ZY7 z93$fsOqJ)6GK-Z(FdkZ`*!M_q?(_%^S<8Lf`^g0v7Y=4)@+zi#X*2zOOUe4U@wBki z)D_9*JmxB8tdMvzB3JMz)Mh|A)oV45ICuUcbMrBtU&ISEN-2B^GxHU``qk%o{f#3W z8ysbB*5J)YD6KKR!dOXU6cck1k%ioqb@)|Ag&Q2^mW7l+Aw8^x2)HmY!^q?;t;?6C zq)D4DJ2gVsH1F6$TT7f6jFHZuBR;63kpJc-zX{EDF#^dh#IHz*TpWVjRxfrjGS1(R_Re zuf_*^KR)c|+>TRqyMU(~i^|PAkz2XP9bhtr2ja-1V3A2kbD_ZI^&1)N8e`A?!_3WB z@RX!~!wNq8rHuTo>*@ybMe|0lI@5oT!P{a0(EAR+GNIvnvb{@TJGl7I+-at}f)0#HE^r?F} zetMX#>(_Gs{W}<%s&ZlE9K$may(^ZI^%XX$VwEK^?rLYGV7ip>?$JTUW;J+ul(l$D zFgP^C;e#i*YvT%fJA3ho@!|+0Vq_*mWIbkQsvJ3Tp10oK&xO&8gmIO85YXM(&W@d1 zSkt$H+ML2CAqkySxT~$6ww7kfVTRY?e$qc z|Eb52KpaL`YmhQv)rv00Mu(Z4n5Cv?DG0&IGiMkW90f1qrY6db8kL{pz_9`Tw?Fzz z9@){&v!8s1-+1m5eB$HxaN^8a4jv!i)whmt_Ut@LdRQA{MNHPS^siaQ_RXs(cnaUf z)aC?B+KX)8ww8PE-%MLu7TzW}Pdxqz8#bM;Xx zWSr?sqV?RHp>V&IXFUuMGRE{4;l=mE1pU3KpU`=KIbZ!q6|2)Fpn4)YJ%ecV9F zy-6o=edlqj$GGzOF>=9>X@w)7>X3r8Y+2dOL)+Gnxo0y^?Apxi%sd5Ov1Ua(O$8qt zme2yqTH*uS`j>KPYMz(gJwv&g(B0ZjOML<2GCqRt_7-}VFX7~HnM9Y6DW=EMK2$1< z4-MdzRxP|)LvuY@>H2)1Eb7_Af>|BEptritX ztQABi!79b6!6E+YZ~m5nk$HrwaY%R}C|9eT89dL#%oYkQIfM)mX*LMbx{H#?U}Zq8 z1IA~noEaMCo&AT{e{7t&QixDK+NQCsY0#H5Os1w#3uEJ&%VX!*&tZP~GY?V7)euJ- zPfFL-=qiPpEX!A{WdDJa92=aXTvhz|g}0fU4>2;ACj3d4eSt<0Pyz`ySXqkoyUL_7^{OuQlnOrz=)=^4znJ(%xQ+uc{zIT3T{!-?ox<8@ABU zT!Ro*q?8EH!6<7B89x2ggWP$?2BxNGXlZF=`HF4|MdegN*z;n#oVmnh9@UU}mU z)~?@3_mU3c#L(E-$YW1DOeuVg!HY8_Xrjt2Hc6akPe`rSZRY!EQvO0UiZyMHui>&!~U!8 zK5kMy7A4b*j4R=I)=GH^yE&EEdr&SA9G| zBaK}I!W!e2&a0MpvwdAJO@2h+TN+k1kPX_%EAX@>oGZDA0qr@@1TifQg2(RbV|IR) zh-G;z|hHa~tv=^E2~c z4AYeguk3l3bHkU&3&m59?V@{W6Q|D%kY|N1egNiNah|ZQA zpMClPF3oAqPlUX(=P+~gF-i$8U7loYVv1#Lb#A#VEO_bKRC{Qh<=n_D2Tu&~?t#;s z8@bHXT$woW5ng~nr9+j}oSVkSx|xbXkj0YdeU^515qKiaP;oww*hW}sY3Xd| z>tOi>Jc(e59}lW7xc*li&T_&!E*54?eVoT*1Zn);Hz(t>1Z;RsEa!pZ}LX z=Iro1x~kDpgtXSdShb{DjftWdn+vWZaJVc|Z-GbU7#9u);3C`IGW+bsdB$dARxWG7 zcrHp(;oO}Fm1ay>VquAlCbEWD$Pd^J*k9CM;umF>wRq#VxWFxeGgw(KfJ_c@c|;T; zbb<{N;@C&)99nn?8{;JrN=H}&J`veujvA8?L2}Y_#f-i`F)EMekMdwOJxVdfTA<{0z*adb|I8Bp!laJp`O~&GjgnKrx zX6xFO#8FJXkRfj(&W&846jstmX!rUapPpf^JO?t15sLcGZa((-Ir+qBf`ao4@@Aue^JdryjkV zz(hz9qot<3xt32o^%${&BZDEw2QDx^JA(BxOqQxl%}%40b8V|cVsyss=9JIGbj+Xr z-FG=QFhL{~TEyfF9{ruooWD59nv9)@N%q5{ZWb>Bs_7T5`2MP3?6EKYgwk z4OWx&J;K;fo6T|O9b5V4Pxmu1H-ivG5~EybRc!F3#>6u$>&o*xUw)eHn>!KAxyzWf zNb6XDNn|L^&7*aQ=jTYYLYN#QV-er@;p?DFEbq$m zDMJ)PCX->;&UHNbKVZaKab}bwXlYYq?Nef58V&zp!s|ap$q1eoFTd zLV@oivw2jK;2VuDR|%_GXL!>Na3@pILt>rF#y2JMCPs!n^O-#7E?nTfqxIaibv*?s z7ZANz=`tFmkk_RUdW2Ij23G$4Vs#Hod z?0g@l`?GnEUS8#)Eflqb474*S7Wi^u^aWd}@G)cil~EAQpkCRwzc!Ut-Vx)4aL=43{pA zBfSENl~k(p%+JN{cAmlxg%xP+g58ZW%vP!xD=1_=R`ho9^e67)!5tfT=e-kr>jy7$ z=)^Gd)d=O~9nseMPFE^G>lh^^)>J7Ja@5rq-OdV;B6^%LR9b;2VRcUz+cqrc&9~o0 zd4@zoHLN-#X*5eiz2);qd)OQ|~(Qz9vGlrTFxk4(p6RtTh*#aPdcmsLy> zTPpJ*Ha6t^4ENr14`&9ZIB;l?IPs`d5`Oah9)xFk?zxXs@SLgf!i5=r^y44#-u@E| z4PBtUy@{PWH*oKcJ~Dx3?V43I)YmaP7xArsc!9tF`yUd<9+3%%5|4~uK&K&MzDzH! zLJ(O&CDK=AdXjc>?p*L(rufx*en;aJLNGN`;oQ)9>Ka?f2AT95E3OodD_?=J5XTxL zu7nrae=8FI1k3cRf}ku&DY4eW&tyR7Na6(YIpRu*B(4xI9NxI+~qh(p7~Ov2Qh#FFKmgM)1DUBc!yooErEWtP!d z&Hwp#FY@EPhnP(aRtw%8dY2dXyiZ?eJ)2f`vUzhKtxZK#xl9;qUVZN%Z=M+iuYgHr zT^uNyLr2bV&!)B17IJv8VPy0YrHWyBdl#R4bQkrtS=Ov-BV#LgIZ0iy*2S#qh&s>X z(R+b7lJmk~Ec4dK^D_hQI&%KQKHQQ}Jp*7VxY9i zroF9>#~#{=Cu8^h7S46OL)ALcqZqIZqM zd!hLdk{D-EpPZeir)Q3224|yFrb0Q^pWlNTebb0aY82^$b#YoEW^w+lNjw6)KFM!?PNr ztHjkRZ4Gs7>0iUr<^nb;V=V-pptGZuOks#}ENE-4r#bHtn2M( zPfjs6TcI|Sr=_XL7e4zjHg8_VmMt5p%@>Fgm@mgnj8DGtt$jI{zE z$*S%ee*24$v!tVmzx?WtIDU2=xhyG*SnqvcWq=zX9GruX}51uPL%;E zNpymeg1(-1)-3NxUFHHUBykjxBo1TZNf3#4Tr^LmiH=uxzcX|5%+AdtWq=W``)~+B zi7_5VcoD;bUXGv-cE2c*IEz zN+X1D|K5ekhjd2bD2i@*vGo@CM%Nr%7AgkLjgFHDL7}$R@s$#bT&Oo>l&)i;I4{B~MS5sDfr3yzDkI2Pka0v5Mnp-3(J`TM^j(wIdqLtB z={6#3C6($V(kOyDpRw^N-g^HS`JJ0+tqCwmWdVKWWWTpjSltdm@`2ZpOUkSowbyO33G+$hT!jb{@4IHbL?RDSQN^OmjgNCknL*-`NL^@gykwTb0v%o$rl1VPa$&vgP|f{u$E~m$~-~&rnwoSREsc@BA9dr=~u`j(awd@9Jgmu^}dB$H+)YJ}0TG z&!c>|TQ#X`URn3N%zBD7E0!=bH^rsPqbymv1dYav15jXysV^#?{`huQu3EyMedW9C ze)B!*8XDNLaWh-D^s{x{QkHf!lFte}Sw&inNlcoV<3>&bi%h#;XQI`qB-@~*!1KXK zch;FmrwDnAPEx`+%8inZW_)ad$%%2tzY-cHl~XlofmM>p*?IorEB}eWSi-qE@>$In zzVrkSKD>#%m#}g364tI=!SKiwBNxvya&CaBvGa_MPSM_6;Ip54kR?5x^sise(w+_q zg<1k4MlO!?)o*;CGlL^++Om^|#!kvrjg_f_GxgXljMzka)+`Xcwbs`}Hdt{*T;*LG z=pYxnkh!X1`0_L|lOvnWr4PDDI85OcZpj!MOBCx=BB~ahZUYE7UcYCYK5zmmT02D14Az1?^6(Ds#FIDej~JkRk12N}xxoS&ZM^7Lgkt?i_x zrG-_?I#{>7o1XSo>M{W~tWb?CXU57r|JplDmjoMDFQ>kx17khn#4<2=p0!<#tnUcO zQbt-!lxSKS8+qjZds)4-g~o#C#*ET)4hNZKVm{{F*d?asE3`H?(!Z>W`eK04F}_H! z5+~u7Sx%lCeELbSs)4%Mkc2D{tsW` zm6v|b#~!(l9UE2>2n)UjJUp4<-1#xS@q?GRFryin(OevzK?)D6W9sW`X=z!G&+g!Rfdgy?fkpn`#kq;?W4W5oek?& zQD5)E(}cBHQvn?zgpWj`H7-HXx`ns09@>Id3(vtc_rxX`osLxzcuHatvq;NuQPBcx z1j-ZC)#X{cY8i9$1C+vfBsm~((YMkm>t@TdNF7s~^J(p9q_ew&d?8P%G{t;rnwnw@ zeXHA8-`7U9TESvjyGru-!&!3qJbp%z$+{?GBVvq}ynpBn-}~NcOiXFscx!}gAy2tl zO__tnq1J7Hl-}ZKYH{CbNkh}Pp@0ZCwpxURxTLF8*fup+pxKT&?$nvAzv;VDr+~8inGP1J9T+=QZBM`!Kw+Bxkb2WIzkkJ~eUGYew z5S=7AKy12$Qcee+6EQ~5k(30=%Me?^`^Qd_&1P7?qLZvLs3bw4oj~cf-Go_ug59<- ze24}5%|})GLqQL37=M`sUXFDgl!?=QNLoOwQ)5{)S#8*`p`ZS>>k!H#ibL|5fKAJr z*tWa@X$9Iy;zYB`vpoFJP6|OlMygbSqKTsf6Nf|=Cdvta{ry*X{m=l3SIcY1hRNk> zn4FJ@bcTJ$&T{d>DZcpVX71_lL|Mha@Dz>N92+)wQ4C^oHbKQ;eMu51j+`Ij+dtdG zso_axHROfhzO_sF+*9|{x1tG8NXOxl?jrZ?A3e`2Z|>o@e&dTYH?BiQA(c{&470Pdj9j`zAQfNyrDyrnWTUfYMxqP&qUjWy^GS*3iFZDLb~TXUm4w zG&dDcN>eRYcyHfZgjLP1d+(sWt_eRVP^m;@vL1d`qWp+*IcD$P)0`W+$jaW8Y~8+{ z`o?AWxptVTplz19`2?hwqW}LN_TKEtuIoDU{H?wBIpMHN7&_vj_!_r=zqYE9nsw{)lub+sE4j{l`Y%yL`jxKNz}+e903pnF(>9Z zk>kxfoU@01*ym;@K!BF2RW5fo5k!OpBrk}Y_w2RTTHp8kVuwU2Q&%byya{f(`|ztq zS<8D^iSLnN`A!>W9KEh&cA>?5tHZiA>rq+}T<;d^m&;I(e`TGEaR*S&_&)S)`~s@S z0~gUO`#&P}GbDnpG)Njbq3GcAoV?qK0K6iSjpHg@5wIw4NrNJDOB4&&FhED(@bNSB z_tn_8W?+@tOFm%Kw3=o0!TXI5@`tSMI#$2-&%(mGJK(7-B0bMWugh?DrD%AMbAFkz z=0zBp*u=K|kI_yWymRU-)3I=P+9ydX8?u8Sx3`(?#wOX z3Zbttgv#Q+s8AU#Q>X1AEC!ThB(zbkgKM{AxR+PBkn-A_r?_QXzWn8AbUHZ$eM21Bx0gc??PUM%%~X`9DAD#t3^q{&4O@4u z2glfGn z=9rgVx=2Ly2t_1zP^K=HI}J#dBanOHMloi4Ma3tfmu3js_pA)Pd$?W&hAk6edSn7@ zNuxF;2hE{F!SG;>&wc73`}S<&hd(~d_g{RSix;l3cHId3AKuGTPwZ#+t_=+KXDF8= zp^Gm(Lw)^xE&0MZx;-V^zruLll=IHKc(KE@#)V##lDAjFm>i4|Lgz$AGv*} z#kL)jd}T(n*vzpZ!>givZ_KjzCQg%FEVRo+5SD+Ra@zEu<%7BZvKD3*mS}YfYV~?) zQ*+B_nv_5+L6x-J6@1lloNV}ci^qpx#Cv`I@&N+myvyv&3>$}Q{PyRc z;?qy;M~Ub5>^#?Q-ezoYfXNMGWsZl#28UIKEM-<~Z*I#sog`i6?pJz+QC6Vu}K^qLS69)fyB<7i&F199inw zy=5)$96!&}jV@mLP%2Ps)G_rjj-I*7;>=a{ZQsb2u|X6ayj?+!m zg-|6i3H8)dtvCoRikQlQl6bp6arqYSo|>nfAu4@!yo#Y`2|1hB4RdJUb{ds9 zBDY@9#z0X<)JlRvBSck`^Ojb-L#ShqQ^A<&iPxSFHeI@K*Fyw+ODw#CXP6zWgNnc5LL_ z)CDFtZ(wr!W-6JG8cT3Xh>vj#N(?RtYbVyRd+$TcH4V+P(|q->U*!1lGbrP+NsYCe z_i^IvELU#_P$L{aGt1R~^EE>7%r3N1CdDBr5<*yZTrQ8sMJbHdQ6(k{@nuxFdhiU% z5K8TJSjiJCJj~8DaVXMC1qmTm;2sZGR=LnoIDZe4M1J1l@nPY(_eYdZ-;=Adx*_RR z>)zrj(Kzb(04YMHa51aGI;@RZAYS=6Iw)^iNw7#LpmmEjkc@5T%JrMPbod0H{OCc( zstL*$tJ3-I9YgsC?jas@*xwH?axZJ@uCONe058YA-Nx$il@Br4Dfs2A_xKZhPw+{0!zVva{eCbo9jS2)! zxA254#Z~(G-kT>le%-Ngatm*szDh220x1R?&2B`^{VzXrfDN^RB%dR=97|ww(-<4q zuV?SJEo2^yccjKs6dkfe7#eC2uHPhtHXOi zB^kqw2A-UHBcobbM|-Kwt?4^>=g~!r?GybR+OwXk)2HxsAP7f~U*yuoKO=9?5Zbr- zz2EpE<0GSZm69Yn;yCgJj7t#RpsEs39a2+}h$G}VL4nGu1fwVrtap6pr6c^ifBzRG zm0^;`FgF*w1TkpIshBpOe(q`ZZC^))F4l(_dKLm+DRh?Ly@@p6axtz#K`XZ`bUgi8 z%qx+w^6c~qf?pP52someihy@I&QK)AM|jb3q(!;A^-}sveay2j7wVz_Z}HwD6wC3& z(MO{qh%tn+>legFD5F*&w8?bf;Qk37d3ZzojE0=xEx5RA451`>l&O-_b6vjn{P#F@ zZVsf%t?31v>LYl|cYk=4E7!YRzj_;|8w5!~Def#pXT36686>N~o06zqj^0#!29-`o zl4M1ys}x2I#^_bYjqm|r#Ip0Sf!Vov2!b&tR%q{6+M0XJ>fZaPo!8|kL*%|7EqLEW z^TQtx>^x-URv=MrB1Gb?zvtUf`uqu6W3n0{K)tXi>rh1wwm^Ilwf3SwYs5J;aq(9T zj-q{s)=UFCI>@P+r9U%2m%8d78e6UY{pFA1J*ujoWeoO#qpVO)zDu=O z%z2M;XXoPsNiek9Z5CTOP2GO#))*#ftmEZlSMjH2>8J)SSxaz&^7AMhK`YK)xyg&Kyv42&&9<=`>xOHf zEe9UnMsuN{rY)iE$c#dT4w)9l`Z7NL(Oop#ITvnpY1@KoB0REfGoStFqYS1gDtFNV zr&E?Xjz9kD^Su7{asK76eT8)gN0Bg#FCslTsFK6t3M3R{iSXFNle~9vniE&LIH}Nb z(45O5cn5_q3fU_geH%FbSJ;`xr6jo3veE7BWukoC=$&=%W~oJb>Ch z@p~4^^>w+6(^ATxl)|ByU9^1bg*SNX$PJcSaZiV;;LGUT#YNAnuO3IM$RZSN@sc2D zLh#Xd5@OQgazbhFkt$MhP!U0Ey?l`uiD&-@cOD`T6iRy0=Za?VTx)g6O-d!nFhrSL zTtuxXe?m#ObP-XHE5nI!@&DiLm;Q&E4Eg_jIrw?MT153+9x?k*R=?89`(>4h9~2Q( z(3n(6`aISPMg)Zc49d@fUBbxtf2z zGKj)UTsX7rB(defQ65-0q*p+C$dTa7QNZ2%jr(~&KBy>3Df^QW|1Cat94^=>K_ns~ zLWs_Chhw&@x!r=6jNw&UdLc{vy%fy*Du4U-d0sws9lv-Rtme7L_w(@9HKMu!GENyvlZ_MIkw^5@^? z)_jXE{rZ;~T|Z3!$av>HgHRAe;esi5ufDwa1`<(3T}PCD@^(4`N@TTddE zdX|(Mp58=Bma|69J;xOQUGHgj3%u4b{Nq0K+pwy#hPwn)!reZ^yRqZppFryo{$En6 z-fzyke=+jC#J>QdH9AR2s`WUw3AP;l#Efq5Jt`D9C-Gq_Uq%N@QY=v{-iY6KoiKH7 zia`bYcWk6#6v5k-L!a`%#;>&JfxEhg_jM5WmE8KD37!6dBPwqrEw$9+M@g=YWayq> zF!&M}my?;4{=_hCI~bLfT6Pl+biP28Lrb95ZgYKMj%s&-eH%u3_RwA`%EqW)A8;zp z$pxsULM>B>vZY)!5~rOMSRYU(StiDX@?j}LLE&-=YZw?9q+Y9Y{P+pBO^mQ>(|Syj zlBkHxNL-hV!&SD9Pm&Q2FfovX4!*F2w2qZ3twN!*jNkaRFLUem9U4`G3KrMx(pp%+ zVq<)?bMc0bM_Gr_9d@l7=1b2!MC+xaT$o-YH3Qf}arneVZq0pz`RRFv3@FA z@V;BpYC{Q@7bNIXIoXSR?&YvYb(8ZNPsW>vPxGDczRJvO7ea-glJX!}jVN3t=?@@i zv=7S&`}j30lv-JiU06w8Fvd_x(?}Ol0bIaHAWbyteW#|ZEX+mZE)G?ZJKCKNqN<2q zmGf{H{dN^HS5}QBO4d~f{G0{j|9MflUpB^rdYtf2e17(zzsmA$`>uik2* zszCcTI?1q-lycxau1`yOweg<1Q9N<*A)eg7iE3T&uArLKc>3X;j8_wOZ{LA6b(SQe zff3{*001BWNkl>tIwsiz3wya*vWMy5&t3tNOTntIdyId6~`YMme}^3uE>8 z{UT_L7W(=Im|I%JI*-vpa1QY{nhbqGf7;?B+Xpe#Lww`M?=W>`9;+)X6vFKJnPDe zZRB!`R96T^hla^{>fufNtKa@SPaRlK>cD7^^`0b2D73~ZMX;Wuhu>!E>eo4UX^}u3rP8uEL>fRO7p-*P z(%U(Qa$F|8QEXUN(k}N6@r4Lw9D~VHRAQFrL_#1-5-O=F6HUXaLrLycTgBzK2MTNH zcDtyo9;I4xw+}-~$7ipwtKRKWm3WxDfO$!-m1XzxxXLeg7x(jhyq|*WJ}|WDLFkedhE<5;fUvsA*wV-05m(A_y#rs6 zx-OeW2YG7mBqQS!G?J(Iljpz1<+)kL$48kM8E3=jFzd&M80xRlsHW5_2~`~!AIivR zqI`j%R|O|WP-rT`P}NYSi*p^k0JuO$zluv&jY5kMTzn{vPe_$w)7BkG#c*@x215o$ zs#SK453*tSVQwwv{OGl#G}~=Hx_<{d*Y#6T7Nx-nSkY*e;6p|S13KPFPnbc`eC zrQ~3NObllaTm$6U;A9-KB zsEx29wY@7H7P(8rBqGcF!XWW^N-GsiQi)xQ#B-sVXlki>;APwNUVL>wQ5256u;_F} z>tFtJ--Y?|>xL)=^wQOFxWAj)|01sI51vuIZ-wvwkvor{)BEzEVj2jmR1c-1 zq-;MGoKBJR7;xDXIul;ffYN67wXEx(tIf^v6GhmTyRl_Jy|W0eKT^*&Q^F==eh zP%Y(|Ll3iIpoX@K9NaX>z(4;K^IgaKHRFu+_fu1lViE76Sfteciz)~{FO_N?HuZgT3e_p`DCw z-+^*%YFd*o%`yk-P_nO zHo(UY?&Z+~`w=vq!qc>#Tg?Sp9@?G2&1-j9YBt%jc92b@{aD*Xe2&qIJh$l7K(WN+ z=m7ui7oTLu@hRRsah^-pmso6duu5aKFm-bt7pjQvC(!1_*G}@Iw@zZc!O_5(z?JD7 zbGwZWnv@(93i=zK?OVqA;>RE3%bz^NNS~m6PB3Lskdm^qEtkv^wND$y`dB-*m*<|@ zOQ-lm{B@tBT#43)sD>)XHlh5yTb(hz=y>5rukvSq^8-#@o*}3j!SsPwXjJrrxB?>` zbQ1Yxc?VQTa4w+4^60Knc5L6t`Kc=$K6VZzG0R^0E?RZ*u0T|UfWfH>A!s^e96dG5 z#VgPA%)3*3`3sM;YjPZ=Iwe-d#bif`ytNQ?)OjEzNy?*#9^uuuFEBk{s3y z-$2~^Xa3ilL&?wdGd$qEdS8X?b%niF6(M+53cd(R#haCAgEA>fB{&g$2v`r!$ABbn zZ6xcK3vHam+dL9BO_kdVZPKhlU!#T=aH4Ple26Bfm^}DkUr2Z#p2WYetGNHDYSr&~ zUmC}IX!Q_HfW5DE<=6O7?ms-C=u#KQNB8aK(2lJ%OhEe%sj`gqXKWbhVACdLQZyKREU_wQi;wsmY8tznd>xp0TB?Gltn zlatC4iCpL#y2cfq_Py^%HBUrkXXQL#$i7hQr5C^Ud%6n6sB} zFg7yE(8vfsc;yZL{OjN5{Dn)5_cz!)Hps?_aRvtZ5T%%HcKPm4-{r+O&hV2Hmw4sK z6h}^7c2tGkma7(yDZv@rQuHQPY9VYX;c0aV_IR{TOi+MVs7qao!@L z%fl+iiz4?5=S{q%h(poAgbr2JWo@7E^dsB&l}{h!w|?b0o;)zga5WH$Hd+Laj<|In z6;^Tj9dGAa9MAzPCrj!pFD-|wIH~IHp`woBl{7<-etBcqD zpeh8le0h&k2wyPRXL#;o5A)c8UChtkW?^oQpgjF`;dlSpGyKwLpC!$NW5?f#-%rePkaK<0IU@bqDJdK_#W&CCY5OR&)O1RW4t>&e-@k<0B*J;L&s=^;uGIy1aY` zyu@wA@aP!1h0|v*U=du99BRQ!NKk0)K%$hk(II615JXxaa3@=q`Su1n5?P82YWxtQPV%ZF~(zicF~_{RIr3#F)l|rKq@Frj0TmcQWK?6 zT16$9kIEF|bQA{YIHseFV2%h2i?&Vr5&EkM8~2R!^scr1%E!C>^u$HJ_0kazzc)oC zfkQhs@s-a#$z%K0F;uTGck2#U=5J!XCzXJ~GBK!G`{X_lL(y%qwA3Qasx;>pxq0I{ z8`lk!(BWf`9b$6RCWh;MblY8YTBT5$Lcpbc%(M-Mr)FvDN+i^}gj6TIdG0pN*4upP z+5K!9twHFZyhC~mX30^$OGPU-4OLk?yoHbK-^q=|7E{-5apCGUu3w*JajDBvk(U>c zIQmJore1@=Muo}s8+d5@R(5aM$d(Oj8E$y0i9&n}x{&BNi|cubRJm91!LH2qLmuU? zA$|s(kH2Gj4~f_K5Y<+ou@2A`&R)L5zx|W1^Wtl#SS+fL^r38M6Ic^i9 zs15WXrZiXvPeNd@o|37R^SR_rtVnquG%^W6D2jr@T4Jn|T6USQtj}W|>J<;`{jxLj z=iNukhf3XFz+@~ee~03ZtTZ@DT(s)662FfUm&!^4#zes4qIhx~E))ctqkVw{g>gB~ zLTlO}qFJ&dymR6#N(o!m3=?b%O^D`07nTv|AGoWy2WWUd)X2SEh?FUBu4D{_5Q(3q zlxkJy5sQd(HZJChF2hyB(~llttWiO1j?*5I*kL8XW3?_jBR~mCG!hiS5l2=%Svm@( zN@0R`<$fuqpp>Kw5)}x(h$wcQu&X~~(^ETna?fU7dE*%UX~Gi^?_%Rv1x-w^yFE8c zCNMfa#Mt;c<`&vqzI=sLxtMWo5cu1l$&IUMjb(ZXuPHwH z1&MAmQVonWQueIhf_-!g%~qGicEMr?xf`oX!sNOjk$^rv~km5zKI^o)#7XRm; ze2W)eIzd|v;7k^ay!9kX5%Lb>Lp2tbmT+Dm{fBF~S zqmmjPePjbw6{*;vl-MdoM8^k*gbt&FH9qs)Aue9H#I@VaGS8>%CW0!*U1jEvj!yo# z_A$#dj6h^{-Q^;a$oX=BB!*gFouHx;OiQ4mVW5$c$jW{j@yomM_jMjUC#EO`O6cYV zMG^76-um~!4tv!|o1W~fY?oHUQT_`oyFdJKf9Y|!N7EZvp$GUGz_ynNMK|8iyr&{L2-^UB$%TDC|Y%7NrN8ar)kSLx#bb#$^Mp3R)$|2*hEPMp;>GIMPoJPc; z45iVKsQM9uRvsl5Edd=|#B_%QWlS_-mMR*LM}i{(DnTgo%^f0^N}5nfGyzQ~2tHJ4Ew!nnnk21o>gqIq z`t4V_GPB6o;6*04USg){XxV^P8D1=2If~%XNs0?Oi|riiqLM-fPa_kf5;6 zlh8ru9gJ2e(I}HL(4QdvRYYZA`p~J62qYoFU?LMQbdhcw(HeyijKiZ*%3wVN6AvAg zW?a6xz?(;oQ*SibyMHI+LlqJSIvDbxqYO7>6d~dEg5{6@`n$aN z(-Y(j;H47(3?eGTqxsZRkMfD95AxpWV;p(=2t_;a_`{P7)r2f`sHVcfy_29lL4;sa zv=SPLP+Ql}!0Alr8}r3TYetAb2u9) z3eQr zHV1RRgUBSBBu(iqbZNKS53B>d$-LGEtt28`N-5cg#F2mGkyuzYBwPlZ^^ypCmjVbu z$AW@2n(lm62Hz~$c5P{Cz47Rn1%PoW)369J*QQ~M#$F{a*6vs}UB>ct~e}7h~1egqkFyc7^M*D<);TU0WV!}nnWdW zxf=?cR#Dx9iCnTQp}*Qk3&Xopv;6H3-ePcYnDu&?nLBrQ{qTEq+Dq)+x}J~h+e%`D zsp~Vmbo3k*75K=*d)d5cl$NxZ?g&d}fW?KtrFSmigTYA_jbEh?APQ7GTEpbFjjUNW zipU}X;>gFSWsgAb!{viTJ5TT$bXs;-9<6hX>kvZZAq6Es2b3Xr9dF4-5h&u}=p)cG zgm_cNWVAdSediK?{x>i3=8;oWt5psh+{b60J;c)wZ)T{LV3ZJiPAJpv;)t?`KKIeI z3UsaJdoR7kw|;blg`$EaRmAxiuj*na7x0V^_py7+IJ>qy#>XC>z;!&E)=yBa_R{|{ z7CXXHdx`mGlcho-)>BV1>a{9;{T1pBLzWu6E7-nmg8$+7{~J!6xxn!77~6O4!s{xF z3rk$O@)}M>m6XX+iah7^)D6D*cQ3Q{x4+2d(LStgmI#}e6zZKI%H#bK{dL19Keh}1 zM26LAlmY~Y_c0~Xc}0*K$KJcdzy7y>OtaG_kReI3qP|)MIF)km;mhNpe|V5ey^82^ z?Cl(lTEbv|1G!tObJwwMR{DgMU(QlZmSyDm980ZM85^l6Et>aq9|2QFTlOL*MM`hZ z&!aB-aBB6R{eJX51gk7JE9OB7cX?a9D4a=31ra1-sOu`qWTZ)jR4JNi1(~@+YpIFP zTS(DCdkc1niZ(Q7u15KzSG;p_3RhURtQ##yMs7Kq{9eTR{iM1d#H_lzc(}X2-o=~O z{YGTgJCw6*93ADchxSs}LLv@Af%i$gVU$J zC*SxnZ=bx(j_oPoz4IJDbDp!;7btAOTz;KRn>R9C6JCD%U4C?WhMK^1Q+TSIapm?* zT&$XeLNaVnsGz_re6VHgLK6S%e39Y73VU{KA~6nMSiHoD)Lv$VD{=N(6Th!2V11-W zh)!ZgJQl4iKGg6wz866|oJ9I9sJKUw(g+ahSPMoQat!ahbC&PC{3b6QJ;$XR4zI>h zMd0#}PxIPaXLx4cdcN}IkMZb3>!~OkrK~0HJemPLRv9cYW$@_nQ~c%g-(z+WysnmB zACFj1QZA8;V0q=$mw58P8n$lfV{&~z2^j>To#$MWj&Zhb zS;NtHFOz0fy1|$G4nbBN9xHew2`Hl(9v!AquaFDN%ZNs;N?$E2HB$GG(nGI!lmN({ z^HCwxMA6V0uIpJ?Y*L6I!BFuIuM?bvXfDHHf{=-(l2njR8^mElfg)uYx_D1gq5rTe z`NjV54=7M~L2K3WB3^qJ&1F(WvJ@j36)`B2AjTlIK3vwIn3={e-Xd>0#04^Isdg91 za!>PCyuCNQaO~Vg3MFhD8^8p?1cwe5=L>@BWoyLQsrNkxu)FVaeWeh%73_P7_JDwL zWrS)EgI#8mix+ILSc%=ou&(j=jxB5$Fc|4zgGT!rnn*egI*@yX)^$2rgT>r&U;XY$zWL^L?x?j~x!9(1X(}G-x*w|pQ>}#W zoNQ6W^X4_hQgto4g}1K;&di>m>vEQS128C(ayJ^6u-cb|*D|6v(*^stkFssZQO%o( z7re^IwZmssZp?K#dG-ckDr}!z%bKA9Qlg<$0|_}MvN5n2@C8}|SN7%;U<8!6 zI0vmHMZ6&u4{i~PeqMh0B+q~61as5~dI*sWN5HF$8?6@K{^4D8bR8(wDLOq1~LCn#C4E(1I(0h`x-&4Q0_)68(I-o-!~xh)xxX4x$ng z2kZL#8At?!BPfq}gAS1sW>x$QnB`%)toRR;MAKKV;hkq@c9FdBWI8_marqKWG`-VF z6jZVlz0{5Wu}YQPtNY!f!vpTtAMQMU@g|oC>_>!BW?JH=)2OFUO^mv(WQN3ORGLue zz!HYMy@aEK_YOr)YG-NQ2_)j^$}lHRoddsxiQ&Og_~at<&DwHC8=-{0CktN2BiwBg zj1|S*rK%#V>^CB++Alv)9*KC7K)HJfXxn1%&Pn!7ZY-5O4o@`M`4G)qc}OW#h1vNo zr>?xm;p3;daBH6Hi;hK~;C;ci@j74m+%s&M7@?I1{^FZ2^6IfG1ThR$0=u@X;l`EI z{NyK1){Kqt*ujT*{NaaK+h3*X92Kp~_Ze~@Fgki-lnCMjS}S^qC_nw_>wNuNKV_j^ z!Dju~5JzE3#qpU1W(&s;kGxA7po_wr1gD_u14XxpvT0=^-zvzm6jem%n&=473PK*J zR;%pU`4EW$MVFw34k@{ZQjMI{bKY|Jt#JC}OB#-`2d zsbooXj<3Q>JLgKqo+6NNRWq zeBm?CGTx^Uu{`tCA*Rlr=lZo7Dp@~PGS1z+!;%$j2&6jW#`HX|zjc%y6VK3>=}77g zD;lb3c#Y3$d_3}!THr7$!8&jbtWM|_nxWCPn5;rx_^7U9rR%tB;o##4w_2?-I6RDK zg(!u%KsD8j4fbQyYX9B}!J;P+Hp>fES)rt)N-;dxhgZV%LX%F{(pS^Ve;Fwsh~8gO z;mJ~k(Sh8CyMm0u1B=J%U;nUh{9_f69>unoF&{)wDqUWYWc{GisD$xpN}&ys)M(Dn z(rqq4u>>xs$`YZlv~K6XR&vptI(vz*1=b7?k_ClvktP(pkGIJX4Wx0u;qMDk4Bp+f zSYN&0kl@QmA78$XQ225Z>n%DsLXop!xR1y8ZeqA%AnzhN;u{Nrpi*oyz}5KTU2la61>*&y$cYurU(#B1>0L-5%Cyt&k#p(P9XSIheeM~R}vKp@6cMXC@x%^ zVblyV-WbFwxVhNn2U4N72Y{^j;Hr;;fv2aj7dD+3o3~i z7BLyOo1W8Gt}@s0v|V7n*`(8MGC48ECm-F%`i4fN+)-%=Do`J2AgPADG@+H`0`RC1 z7#nD?eai;4cDOu8mjJdh{G$`}LqG%Tu>q>|DgK|B}rMiR_7kc<`l=X|TLH-PHWLOm?yzH~l zX5~g<3{{;#R-;I2Q0YUe4P<7TqIn13nnUsqH7w!+&FPCc9}w1XYU%>E*vR^^L4q=f z?V!piOCNN+X)gm2S(eG*YQgW%#mO5{oyvFyBp5*k^X@bf4{ZBv5M-NO=H-Q5agPhyGmPWnC_KgD!sT|X> z)TF}G5A9^z-HE;=m_KIX*T$yKmRrt=Vu6JfZz>UVn|O>V#Irs<_JCsIAu%3 zgp{K}6&=CKm0essERx>GBT~*-$h&;|)wj8DVT6410W-}dEDkRY34*l>FBLkW!rNyq^OrBa$$V~bqR8_uK3LZD-y%(h_@tUC9{>O# z07*naRN~{ise~3vIh=|+xk|l)GMZ3CRD1}f$<-@#2y9wA$olai#20aY7kW$gc*Zz9 zPExMln&n7UFFzq+SuSKlh^jr^$70dpo8Lc7f3@JBeevTA)IFOf`asoLXlpLM zdxqvx2O%k+1&t(CE?t}9)VV8cn%IXC0~F;Yz5JGYzv8hA8ZR0f3~j5pac!Qr51-<# zW2d=rW07XpluW{vf)QMKzL!tC6CclKqZnN~Mp{kF*j|MR1!Ds>MjA<}w37FkGghgs zRzb5$1W76|I#8!p&6sKD+`6;CQmZ#BS&elqOMzkW|sS!a!OfsZ^;X8LcFxtx{Zj9@}k^ z`VLh$PiJn5LOda?;r!(*Ah33%K|&Ipw5u>8%X#Ice7DEQlGS*VUR12}cwdx^|8nHT zN|)lC5Yv4Ml901+^EUQu-iUIgEHlIrUEvZIx`rPfImUO6yvL=*7S<%xl_4t}1HPcq zooDTs=Fpn0coBlmF|-LG^1KGCLSG*k(~l`UrkF!?LZ8%lWZML{@60gky6oMvjnsDe z#WRJ*W6jm`NntNX2*`*JaJ$PS_+y=i+ugtuk+P! zyvprGP%4We1{X+7LaQsBICF_-pV)^ot3@vH@7a^T2ZTJN%r9ClUc1BVZ=K}G(X&j? zG|8Q&kSgdZ-b<TCv0i8%MRH`?&>K)|K5>l#Z#E`0tAPIGokYx##G-V;HqOuxG za~YvI2YHjkwNSQ8cOfN+rciM1@>O!yF)>sp3BF7uj3X&}h%PJQ6^g2y_C5+T(J=VRBuwl4hICqKf;sT;g> z@)m9HabzeJBCt=%@}a2-anC?6vpbadlvt3Xd9l}c2sw^SdzAGUBJ$hnIw8yGdI9e+ ziKk+^eC6{`@@t>kOGQ&IyyJ)C=Ist&{fl{;%_f7DezX@fik4LzKYxXDm#>l}8Q!-* zGCWyCb)blRHPxi%C5UE~;PV^o(+2kMPFn?^=>Xx9cR zS_n24Dv^AJ+8s1O6kP{rE?%Z>A*cl9^>U)1^96~v=+L3BUSVLUK_L!wKSxiW=GeLG zbWNQg8tp8JfXBoOaEJj=G5b5x1XP)iF6FK_y6i&CxCsf`BwW5d&GX-Wg#)`bQ>mwT zy4<*RlevXioU4_unV@u9cF!qOmu}E(7t{v~-bJ*$E1|PJeRUAc?b$A0d;Ud^9KXWs zB3P>tHAFDcZSI0Zpkz7biq3N(lqBr<+y$%z`UeLXSvwZH6c$*%Lx^Y@%{?oCr!S>9K7b+z~ChPMPj&_Ez5N*u}z zH5(hd+K7$VH~SHW`x$m)-|WQ3jO=J7QKBeObRa+y1PI>^G|=ALs_ybtY3@B{U!0p+ z4UiNGNz_U^sECZN1~RHMv+g~Q`MXnBm$-Fjk=2%`rxx=)R5#2g`o0%#GW4Vg)x^K~jMYmd1PHAn8rBumVc&Ju4PkQv z30>c+j;^CftSkzO3n7Bz0kjVU8`o9$?%&JQ@Bk*n%x;gOt;?*~lyAL$obz+@eDbk} zIl6Z{t+hqgm)DpWn_{@SfrKVj0wO6I6DI`Y5J}_O%NG-xF*u)qGI3RB+Gx|JSHqz# zWki>-CdVqp;XSi_<0n`7iyxk#NtOTQcb{gao`A~=S7%M|pbO!m7T7ac;|rg-pR-rL z!_9^xQ=z-oErL)H1g%10!BXfZC`bwjS|_x;!x&Alc@e7GMEe%CRAarSy=3Z%@<#U^hae-BN@llSeXViMkY z{}MMAo8+!1vN=tax6j?;5C85BKKa;#EHBJ)=Ij|xpSz55o_#aJY}+!zw&?+OY#n7{ zbc~U{UPkK%&-eH_|1!&G0w>~PA= z^bkRL+8ADX;{@xuB9u!wA21q}>nOJ4>Pv-~u@RH`BC%10%`J^mp^!32#F|9#r5eZH zKgX3D^9=1Cr?(F066w&Kh?XTWmBkyiW=>eZt~ugO$|=qkXlaNQQ2Xk`z-% z5XE}C&4tVJ%r9BI9w73lI}mh;4#~k6+a&1%?c5b47jy)`C$~*e8|aO6b#au)m>R4x z*ZR&I&{#uH|*Fue4t23*p!}pJbL^S2959$M!272iC?gvB5>xr#YKsUok>-Z zBqb_I87fsIRWwVQMq&sULUV(1Zc*7X>r0+eTB0e!)td^%D1#M^2~l7evkjzBWc#iL zqyvn1j1E75hZLC|&IhcI79`3!l+8(9ivzQ}*tK;M?JeHrC=#qHvFvJm`)rDl z+`WV8ZBx`(W2`4&dI#{qk>(i~MUXPq#i>hl>?FOE5K|@CfRhyC6-E+V7R?YP#8Xy> z9A$ks-3?vhkn#4J zOROx;^OawJhTr`Blhn(a6Q{59%^$tbt0%5-b$%7=G~QHr`P2gMoc}hGFEciv`Rucg zuz&X~TPB7W8|tN&LZV!>Cr5C38|~xu>Agp^Y+_&pf)<)to5kgIl&|0=DMXGLkh62g z6uG5kZk43|sg;g$IxsFN74bjcoC9PiE>Y!paQ706CD+4#D(e}30=~JghKEso8oO79BHk>%+6WFfOi%x zmL6%deSDhUl8RY9qPk~;68Rvuio$d@8xlI(@7S#NmSE@PFukc^q1oW_&D$K9>cfbj zwL*fAZmMEpN*kcPrCv!{NFcN=Vv;Bt>f-Bnd+z@?rV{)YSyjm|{2b-y;7g%f$nWA) z6sAr=8=TUh6H=`)NkXE8G%aD$GRl+)OG~J=MI>v}Zm*CpT_+JuLk!n$-A2ay=r1XB z!H()U*|@t^=Y_ZY&&)|L^cyjSEv^uP_lRvWGdjq9dw0;I0^a9Qmw_RZD#y>w@q@Qc zv+hzZU%A2gb7z^^Gm1$f-hgrlIpP3GaU$d^Qm0$1?G zenzo#=M1J)W@&AMn{$g?y*^LgzQb3(^bB8o?imJp0*P`A-nWGV2c~)B)B<1o-W$C1 z`f1kMmWE1cwc1p%9DU#@|Ngf=%}~XYIEz?|IEQ2bT!QEjg@y&TBC4~c=w#bD5KHbH zZ5#81L>H!jIFu63UcAV6zWaTSZX06XbUy>V1}CtzvO+7%kx)X5CU-IAoZ`HS-srBd zC|8Bw_~v~U`3e35Yv8!Xl&&%9!tyFkDZI6$Ntv2XSZM~dP7tLF`+192U|mkT)hed$ zP^=xLFoyK_AXx9w#*n1Z>A>kCm%U&#QWOdaozU6%_jqrsu5*+Nftjt-j7*H+LQK3g z-ZEA%v30bcQjup8;~xq)-L7V@@JQ>%&<2TN=pDr%P*yNIIl^#%57%z4aPj6m8?6}z zYAN0|i}3VfXYC5^I)PGR=&Mzkw^`(!dmqP5|6$9LVpY+l{Hl-7|9>je>aK{QUpT0I z00RqMj3nY7o1#vK!*l+!yL%HOsn}pOPh{!gM4 z1`@|e&9Hmh6i+>HkiC-w)W}F(8|OUA2)S#cwP*j%G5*)z`z(uV4NRqnzy15~^ZW}h zv2$vSdv=V)taT_nwG5)-`nO-fr|;Xv&Mgx(^MG@nwzaG^G8R{wEH5o{V_}8YF3xlQ z+B#m9P?A7lcImt&!LegvfUi7zAD_8@mZ{!|JLy)NA!YdW$M&#mw9NdS6{faKGd$E! zy{xDyOG-1Ytne{5S2=PlB8p1caA402&N*xlR@Yl>v|9|->-408&SSYTtTUXJc;fH~ zHax&PCoa)wTC5h(3D^=PNhtwoo?-I*uFF^mIywqyiK&oE$K{)|ab*>}1MToZ;k?It zja6-gNI(c7!TSm~7TWyv^RMt)CFi$4{SePR^AJksWWnQ91l7d`5~a{eMf?qi7vgd2 zP3+=>+bkSi3|Awna1t-N@!$nbf`pW|gSHY%UAEOvt;CCiBmpLedzqaY<@n8IuHTyD=KLak zwaHl7RN>fKgb-15Q3_9gZ-r`0SZ`+Cq7hIR**_YtosVq`-Bj(2^ke20!3Gdi3U*vMUlLj}w1mMzRqPm(IxOcWDM!+XwL zyGAQ(asPqcRFq=JK$-npCJ|p4B#K9QN2aP|Qf8s8c=`A#zWLhwTwcyt52a#_p%BqH zuejNEBx@VIdhHl5y?>VH9yrXe-M^oiz7+g=B#&r=4;e-h_D%H?=p!Tw_wI%fWf_|$|jzV>wGg(U*t_^-*NX)xO6f9f#v!7h%|NJlC=hmtPV~S?X zqa`4=&Dg*o_wC!lSY3l_qI?9N6CIF{@zCx`*gYLXn8czakLHoy5J-!|I~H#6k<}Fg zwn^}4JfnRnPD)Y1Zu1yuq>}hLT%-$Mxp0Zb#yU`oET|AMF>7_a?VXOFgLj|;*5@&Y zMpR^%setp2&HT2glJA@&Mk`EWa5PAC6jy3ANQy_(@)>hWD=e(H$OEJy(AU?8NfLb9 zqmAG~z_~o;-f*`DM;G=Uw%crV1Ca`mEfO&XU&tMBf)Pz`Up;2wguwN=MPB^zTU@^b zKIy|t3Eu(U1&oT8P*Okv-uVwSbep$h)WQUxBTjD$LW%3v*wDvxO)dT|U0(dRoCL-v zMw!?$87EW`v=7wEhOJ`*^du6UAi^(pIyV$S9~6M41i^?$1;uzpadc*Y=id^RRx{qe ze3NZkC+JaWq)$Q@pb1LjMbO?dfMu$u#Fb`~MvyLdS|sjJorGOAjnl3~;;+U1C{1W9N~f|oKE8-~Al?L0qz?+S~p z3f9yKB+&pxzlGpg2RZ8+2E}Wf>c?` z0!w+Dc~#?k?_T4XPqjEOP$mgkVWpoImMam*P{Cp(Cty&{6k<+Cz)^B36$KAYRQQ`( zi90Knw)b)GU4Y3-6gRG2=G3|KY#rZE-D@)MBNNBFxUbF{1hEDCN5`qoC#b^O+)IWH z8R7%tbul5u#5=21oKUStOS{;+hoU1-$s{G$2^Z!!c=Oa5nz_YkO=1mRJgpQiH#a!9 znz3^zr8m(ezJ)l83TaHc44zD)IFuq~Pf2VVqKkKl+-lO2Q0)aJDH4iOEP`YiWn~$z zmpHWJ2nY7=LW^LWXR^PK$>9O!*KgC-MSztLBp!^9c!O6y=4TMF+MSbYSYMASbOZbqYl#bW4juFL`)X>{g!TOk=j>?L4 zRp^ofw9l!OERQ^}1FbdZt}L^>-i}6Q}!iox?#Qqk$p`Fet&5YrJ~$8n>3# zX=ZJl&0h!)*2h24Y`Z-T`6c}o0)lv4yo+F6+YCzrPuP| zk{$|*uNGBUWK&Q?1LPTGO?;M-Wf__CWEkifz^f8QEBeZTv?GwS4(C2-k{InvIssEY zt|Wqw83*1IoFll5nid{Ce2_g`CQ-PqC{+c)sxqhM8XP};i5)w4F*80yMKVnAk#-q$ zk$Yf3mAGlE{KXI6JqP>yuknd$KT-6yrt31*gZSVo-O^DfE1Le4S(ZK>9D}qj9jz{Q-m{lk93nT_Wc`?|Ka{A0QPF`7v zSeQ!4LqL>gu)oBA`0{7@;1ybYKIyK6n13TF^GeSA_v>GeqtwymC zQqe|AcZ^Xxwo?HYat6nSIQ-C2szbf_U@;-1qAZ8DPqTZp7p+xi;eh(UX(2xq*jKEr zq!5y9u8~wU0bqK#%7NK2&fZ+$#%i16XRokj=rD<>!ZkB`gNkg@d%nHQ6kRzH*2e_EZBtVmnB7L=J%JpZ=m>Ut z!Aiol#U*a6SzbST38Qiz+dhm@zA$r(SGW%v7ZTpSy3A`A=2;14oG!;Oq)vpV6l((& z3f4(H)E)8lp(`}B<)!zovU}%N1|Qu`pH^Vou>lhm?KiYxeYJ(nORRgx`)4onYxixV zfn?LHBDfy0d3KUW>Yt#3gIrX;5OEqY^=3O>T#9kI~E&3 z#m22G*z~B_F~;OR7YNP}f6JGAT8sW>iNWUqtrC!c!=cKWsqI^+4-F86=px`V#{0``9qT7C z(nX&=o3aY|IVq_6e=9P~yYi2s(+WNUH)x@e3&+n~;+8GbZZw&lo?^JSL=r4P98Tgz z+fgLO#I=Aa62ev+O{~(7i7vP^px0HUrn@6Zh|@t|=LO{=t4yR-;9|wh6{7xu;7E;T`}VC&PEK>>;yD(Um#HR!{sg9m z`bd+MRxUJsi973XWv;=Ab2oYQ-Alar=KHjkR@k+7mY#}1d>+?0BKY8$ zespCOz1~Dw4>pe(1^7sb6i@P@?2Z`bM7LOU{&dCn;sW9<)dY_0+R4;FAI3(zZ50Yz zb{%saT0XGSYNGH|6JcVoM#WI%(fF>|%ZXxPy~Xw0i(~~EQ-a5+;-CndhxcZVvmiP) zMe(R~Mbft6`urldZZEODZy4v=u~E_iQJ5C;8#AvrLXpuzh-*iOC7xJ%5$| z^#A-lSLWL|Rfk|uRPf%in62{8)tk(%HyG%vkYI~xiK2){&6$LR>4`yh?wH`l8>i4x zi4BJs0%g{+oQ>R~vVcB!i~BF%VrF2PiVi&fz&`G*GzG5Jf&c&@07*naRQcN%kF&V3 ziX@Q`;=L+XH}Md)s&JteU#x2s$_oY)H9o#UDlHzq{|I0D?86LJVpDMb@-4pp_pk8o z#oOejLLh#|otRif&e%{dd$wCZ(<9$_jj1ADMJ4lA_PP)J7%XBq*-O)I% z2UNlFPY@>SDW5pJiB7fstA8mq$Vb_8bq~(4d5v_Y#Ez|r5=~GBomSB08c9!`v{ECf ztYK{f>ny?L_>hpfm=EB609O=>pOInS6%ZE2h{}0%-e&9AAbY09NnBQhEybUcD2)%1 zk(31wS(5`313a{MEBi;vjN;KwK$Wog0?*KFG%^~wCzukL6rcOeNve~7ASxbKimnrI zWUoYVSwLaEW}}_4xV%mXBhf6+L@f&9FcQ1^TFKB~?}_x=Jdabijali&n`p*YcqXj} z;d^gi=4&s!&FSmQ+*n+vX*E`QAW6Yz43+|4eCmFV?3tvsvCQJqGD{1$**!DL!+WPG z+YOA($(3N^0zbyF`Y58K2qwx@iN%!`H|DN#b?!EIZZFZ=Xci*Qc;V>OP)4)?KT zVw{=jDf(+wDj~-fW{SSpScpJw3!5U_BBjj}_e}G^q3u-CgtB-t9~d9n!Oi(2{K40M z%xb%Zs2bux2MtMyYmFwSuHImFa(j&Lb;X_}6k%E+vWRMx5)a+Ghhy)ZVkv9lgCbE0 z&e^Cn^PXy@#NmV6*|BvHqay2UsHXYSXYQxBR^c1ZzsB{26`ZP~R29S&w*LWNu&@d( ze_Y+Fgxos3w+vPSPd;>r-}#MCvSYdzgDp%1J(WrsNm4LnoHr;*qwq1$DJ#dmoimIL z)eHZwBK%AVF642_ks^gt0$yhX=OUiwA~PzQVn)Km^2#EMiwkJVSRZZqt?!;Q-G-Fuw!Wt35lXMj5Fkn1c1yJtstdiQ>VB6E+H|eR1<>pl;y7eKYKS?Gnc? ztunv3$XjPFF*UfCL6xA1p7JOi*#ZwD z92%fnEu#^{JKBu~OH0e#nw#UrGp`X+!=Z!wc=*6J>XkadwxX6qhe9vW!B#>9`o%{k zRI3R-r)&~xD)5h_b#*A%<-y>nCK0qT-1NyGjt)&^Z5oTf&IHC`0OVR^UPxh7#r+~lW5SG zBxT#qZG7p=zs}qreUq~{mOvNxkG1H~W~in)dSC~&vVvkQClYYMMSYwL5&YM>xVAi^ z3W~E*I2Wn(d5E?-mo8psZM{X19+XkokWs3n96WlMk?|31u;`Fe@)?r@RrX8`QC1%Y z$NBl}%b&Hj+B_UO3f}@e37%AhT@zJ4eRPJ)SFf;SHOEe0V9(4rN2iCW5XD*EMXFk= z;?^{Hj|!Hu7Dnr3nl>j}T8|f&F2||EOPAU8k-F!P*;fCw>EoAu-C;ANxTCTSg}}3O zl|(>U5ljMUi6reIDfPsVA8m^6yx_)%KyVJ{Y*g?TlSj;Y>KGx$b*RnTMUr5k#|TGu zZ)e}uNh%U4r`{{jQAaCTq#zZ@WLD94!PGuob z)-a}pT_#dY7gts}e)2Rw_|dDJJ$a62KJf&*rbbC=;B2#?Ug~0M>qMDG9lZ)6QgO2k zV-mIw)%mq2AK}Egud`xvG8Dlm#A<>~IQ9Nj<{n#TV4@diH*?5iVJ}<>a7^?J@N17h z#JNk~V!n|fs;4-tK}c9`(e)b^_?iiz1(mZ~2hW)#@@XqNQ zy!zHDPM*Kc?Ui+`0|~8Yt7AOInWMAKJ=3_pD16qEfAGgZ^kEmVBGSVHv23f;Z1 zrDhCU26_oDaA{$c+=EgD#ji7ZeayD{S69e7%<3WY;&q-m;9coC^c*VR5y zRzgp$%84s;+-|?kY+u4>4$m-N@|0<#$zzOZ$ms7aF*{P@`tnV3Q;uMAh^x4ccrp}W zN>Mx)LE4y#A%z`;rA(V`qeDy$_ky>D2r;070i|d*Gj1*|v(oY?t?BRWp|9FgtUwAE zVJXrVi#2k)(^?BhrI zs~3*5?lWv56b!1uttH2Q`jhXVgCh@)lFw*0U*v!OolmiU=QxS7jP{jz`oY~i`Orb; z?yPY2#v=2#7ic#(uufC1qzn)BFf%d0*0BNVC5=)RPm`RKvlp-PfBez6c>BaDye=^@ zy^TcGxOj06O$iAKtt^r^*|l?!&pdT6^^zy}te8IOrfe#uaZV9*g&Xs0eD}pyX>BAZ z9Z5|Q4|I`L*UD*RaP9UAL6<;#Txc^iG036&4$#wA#Y&FYHf7&p@60GW#(PNv=nvEf z^~)U`9ZPok(2^oL=0Yc1Pzb01lLINAd*VJ$U0>$nhH&P}ZH}G0%E*yfj6{WK1hf>o zGf_ySQety@b%m|NeY7mxSZ%~kv9JIS|3A0Y{iq_re=R~t-!WUeD-b<|&2X5`WfMfA z_mEO(lVD6rl9bR%8cE->X_Fm%VFBTzwawj1^1H3sLlC^nsZ=T)+P#aRY8lDb5Chh^ z7@LX4E7#2&(B4y3Fg`HIPtGlH^YSe&(q!9kg|XdZge;E?6s1ruP)`l_&5m;F@)cUG zWt8d11r=>0iudd!LY7XV6K+Q@p^2(zaSevcmWK|^Fw&zjp%n$OE+wQl5S0 z0h;C{XU|?_+r%I}NdYiQK#`CJ13n69y@Ez7Fd2%`q)P(JD$;xuM)Bn2=oSTygRJi|A?^?mL=dM{5u@-P^~Ysb#hE!2>oC9m$%i?(XNE6*@i|_7`8B@z-R}{2fBrf=ZI}?& zn0-iPcs#TtS@(|Y-=J>(e7jUW{PZZ^O8xUWP8f6~hWmK#6Av)amx5hK#ABU}_mD``;CMk{XtjkmkDcMA*H6(512NLM zoB828H!6_gRT|@#$uX(oo}&jC9vvnRIi8$Udq(O#?AbO(RmJ(VLrd54(bn7gtN-z< zUqwE=&M4%29bfnm>2M|pz5Tu1Tx@gd>TO!yu)Mg$xvIMy!Q`8*8Uq@T*A%|7Eq4#E(zQ?!kq=P$ zBt#LP%N<#BovgV=yVax>4659VHVHk6kV=l&EFNkhV14W+BT(+}#S|+x!#K>cl8Ykx0E;XWFaK+tGO=&RRQ zX|%YpxJK^c8me%*>yk+%9)&Sk507|F;}n56vH408 z#%IQ27kS|nUwGnv_HP|Rh0YoW#G7cho+#QPyme`jul?{{mRt{(a>NLAz$*dQ#x>Tk zt&D-*UTW1cA>=q~i<%zAjJ{YwhmexH0H(yHTetc9@4UdFgNJ$Q@yBSjGM<0=82|Uz zpXd0MC6;r86OGX@GT6`L=qQbic&`SPvf6Z9o4dpNr%!{@%uY`-J2TDd`WkP(`wkQ1 zWAxQ}qVsQ%u0BMHL*JulQ{w!sb^h~TzQA96=S?mzW#qby;7MGQ@mk8~9zV?g^xIEy zV8;lhut7p(hebRfHZdyb_`C5CROHOndMk_!4{_=06&99O@X8eIB}1ZgH2srEYkv6N zBOE@ohdawFeB;|cFa=w|TT&CKlr))lG+Q}dOpztwi*dH-zC?A$Ub(x| z{Wn-ViIql^lUMI>_4+))=1dLtM{g%w_i&UDLGh@~ zNmy<>e)Pt1v`KmT$){*I;d`&2S0nWIdXEs5X2xIAWxdlQxHArK_4uOeYW z1D4<&+B*h&Ym5yJar4Ga78h3#DG?+VMGJ_O5T|Lh8(g__gYUm_obSDUmh(3q@1MWM z(AWrj5A3CtCH&|oXZVY6zR8=%&Y;UZOw4R$!=?P;U%tqH{rW4MxUj^D3%6KxnoGA< zc>Tmhmew0lL5=}Q2?UgFGSRE};?qa?#Qif=bp!EPv9i|%RXlV}409>7&@g=aM<+OW zX&FmzG*j&Cgo4C41ks2Wj0%L1;gn-!>lBYab077Q3RWx{PsKLbJKW2mt%KA{1$9jV zS_<8r{DQ*qq1*rGVjl7#`}80IE75T5{+%Oy_MrpZ`1YGDy9%c-UE}*NrTpeo_mY%) z$Zd`)KuHOvC`ggw=A(}nJ=F@c6J@kt;O52#>$+TU=@mE%Rcq9a_~M4rp<@mFG3xQJ zY2DVbmhmEZ1kr-hCa$lNv=D@DynET5;Qsl0&VK4X7|)6%`=y%rb1dWgghGeiSH?3x(hJ8!(p)zu9)yd@6?F`D2*3=9f6#^qF$Ff~x(xkn!6)A!CYUiKuuh4RrH zG>Aq@Wp3w+@4bAC6PM@M2npBDpW$;)+)MvRAJ*rjDqi2YG9YhxhK|jn{v|&EyL8ezyuZAMGUb-Jk3W76eS(4k>CWZl0w+Gx&GF^&AkU^>8bbgU;gTO z-aLJirq8juO3;Sj61*~;zq-cx>$kAv1XV?s61;QVZaP{j<i2*CS|NnDLJ|}>>giePXu&`Irk<|>8tX<<3|~u z94Gg!Xdjd}7#patZ~G|yJ&L5j6s1tI{9_tc^A8n{?)RbSX0R9(btQcMfjykLdXsOx zdkw35dF$j=whRyP$l)C%NlGa!6)z~-2_Sj*sL=w(JBCXM)rmgT?PbodHOMTeq=(=m z13-!{%B#Xl)JNfsmydY(-94~;cz6jP`u?BedH=+p@lk8zM|qF`sGt1{8CiEdS!sec zh)z%@1(Oo&CVP(%vnXQ7Q#_Cf4zWdEc>s&XqG=|5oL_#zyv3itaE$YJHt@mm=$;84JaQ229VR%mvk@CKWxN(LXVGawyPc7^7BwBnyd{_l zj<^CNM3z}rtZmYyOl@oeU8&&QdSN7}3bI%rX1NPFaQXT?IxRCiJi>az^7_dOTwH9B znHqz=6&^gYlSA9bSy))+rPto#*vWIOH!^yA%G|SeCl4Ok&%b}}DNbCTCVX7|-5}kJ_qOQdGfD0jt8(ma|dz(=*31U~-Gg;^Nzx-*2zV|9G z9XrcHbA^!f;FQC9L7OtD1RpG}u-j3=@snd03F=3jKXsMUH{00CI5unY?!{I9_^)1~ z(vxy&ZUtBBA(%)lR!R|^$4VI`0p*&Qe1ocLvvj6NpZ8EwRDZWyQUZ+{5hdX}k)kpwX^Py#)Ja zhMDL~DEWZK6?A(Y^&;vQyXgMXY^$H84bX-CNXf(Qk(A$g<|vmJmN{{=#cHVV!W*Zl z_VjRI?>MQ_@s#%zA;@vR7I(WLS};54HIAL*{aC%h+`<}7n_*QMTNrdn;V%;_vck#- z>5^R`+s~p>{w!s^`~%>^ukv~S$e;16c#j{YfJpe|>Ru;>(2GKpMj3-LNeo6ZKAQY> z#&U1*MWF~T+Dqd-Hh6Nc$fQI=rL1QqZk)M|$O<~NFiMe%p=ujEws(T34^9*O2F7=g zu~0Cf93_`CS~eWryNhqWew;si{xzC;&O}ejzkBci4{RBtDhbwsRym0{O5S30oBab- zcHF;>)x$F^G(Bs%(6*kE5&EhySg+EPmZ(dcN?67?i#ADQ#&onGUhp{D&Lc?`v}Jmr zhtECv2)icwNo-_&8S#iR(L_=diB9p>F(O+n=1}+`=*{sgXOOlqO_( z8&Mvk0?JzkdTRhUAMu4ks2(F|eLzIhZne2NKTqGl0HsO~w^o{*x;Rfx6~WM(8Xi8n zhpCBS{^V`U>w|yvF>}DkFXU z)cOXQyS0Shr^$UlDIXWl-Xj=X@C0%6Bq=+`hdA4JgQc}5wvn?qf0eMahW1%Bjr5VW z?1D1KLTbWJYqg>>*#wD9!+3-0m>LKS5A@(g^ZvO@tht2MEU>V$!o;?J<2AP?e z<=WgT&%gRUS*W4{lxeYje2}$P&UapVja*g8RaD+KrEoVQ8{=`x>*; z;|%upK}d0`f>kM*B(x=EJvZE3YH|9~Et*-Nx86qx7Ogx68;gpMhLqmNtJCEf<&tJ< zY>>U%w=&oxtgWojT-yNKIoEtFv?^NEI0T;(cuy?`>CCTL5iC;8a+@C^P&hTLZQDxZ+cRMLZJtZ zOh^+VXNDjN5F$XBMmNyD(S_=+>hAJ3vrPKD?woD(u=l-rvkcG;5+WX05gnaXm05Z7 z+;jF?>sz1ElwiA5{W_Bs$IDM0;19p@G%q~4m#HBT*9LF<)MYQp2s7v{=K_f5CXqli zGBQe|-r&xy1vw{@i3<04?lO5Tld!ZzkYI_6{om-cbV_J@^gm1 z`aCX^_$hXUnY;^b$MGvB9}feDTgrKwB~lV^%c_g1;n-Nfoz^vO?Ix}g^~FaNAY z{|Ax2KBGO!<3^7yFSB04*w*{1bTkY!#!$(j>*M5#D`QSa2ox$3BvgprXob@hp@KDa zFhi7NIHd_%P~OBMl?ff?xUspxnJaggJUT-z1^6zYutA|E<)yn8vxt?A^TwU8&$~7p=i*la%eC$>Zx!p*zNQQ`4iUDI4?Lm5%qbiYjsEHBK3vR9S1o z^~EJdCPo;U9OnF`8{E0}5#N075P$UYDMm6!D7$#0a6JK=kBqTQg(w0GR>}G#qs&wJh@|(rw`7@qKu7%+z`?Zz+gp1D;Xb% zo_i`L0Xm0Qf^|`?ee~EdjvYV7;=LtuF^IYw0xJLjAOJ~3K~xJEAugEH6q*@LRxuo$ z-OG+0H@LojGeRGs#5&ib*hHMcxwynt0bH`6Q8w;kv_knV^TRo_qfc)@?NhbZNaEV$_Zr$S5} z^b|=Hk@ChR2CON8)5rGGYL_1d9wUf~hK!P7NJWa0r}mEW-~E?gV{H5#zWc_9oIJFj|MZ#T>=+7+nJy-D z5!VH=C~UNO7ZqJ}l_0(ZouTraR9l1;7lK5M ziSr5GOnyw!MYfm1s#m&1GJ*}rR!sj(WFwus$C`EIn@ z@iFs5yozRyiDIsT0&77mUb$pX5~oY&9htU-0M9*nfIAC|ES)!rW{20$EmDLUA6#9;z48`+{N-mkIN6|TGF))cZ#VQ9R54U276czttpe<* z<%A7j;wcRo1F&HMN9Vz_wa3I^e;rw{Spu54Hu$|~kMl=g zdWs!GLZ$5B0*Hw*t$uPJJ>l^BlmI55K{4YxJZQG+~l$S+sGEu9Y8rxRSQqf z)c7~w{2aFZ8t+}Y$GRTkqic(N`<0*byDvV)ksTu#7rQ7;bcO7>vW9f{s9vV8cZ^jv z$9GOJywT>$@)~!W9lB1%P$~7#Mc}uh5QUyi`M@SV_-M)}j)}2hx}7ffS2t1Krg6LM zJLqB^!8wWmU6oOooU&4-O2nRiTA6fd3F&D6{UKmG6uXRh65GvtJ#;1{=7dG_=WLm7zj+}r4Kb7`63 zM#k)L#%w*u_&^)Yt(7L1Zro*keS>2M_i*^|ZVInxdW|xQMpp3Tv4ec=3#WPM;51X2 zBePAk5=3QqZ_^!S3L6h+ z?@%JxM7SFS`y2{kt98VwH$E91#EOxq-rowWW@xz~=C+oI& z`pIK_{@G(JEG{rRJBK!!zx&Z^+}SL-zSIHJKzYkd4W2u7m`n@T?%bhlx0s(C!`oIg z@{<%cg^JTg(s1?IV4lb#YJ1I%<#jqiAd4xFUdMP`6+-mw(s82nKH~L0YjEM#2LJni z_yOh{M|t7-(<#%$C)@nAFGcrbk9&btDp+!F(LPWMhLOxLJ*n6?H$llnyzXTnI4A>n z-@)kKR!UGRpo5FkmG4A*e%HlF2`HS8w)$G@=;N%Tor?9EGGr)IWux%iT3A76CG)cr zRJB2zM|_7YIeR$UK}*Km%s5Y-I>oI!uTT_Sjy!RYm%s9Pre{ZSSTa%QqQz80aeUtd zd!~mIRl4V7umvfqeiIq@C;S@V)k6#OU-iq2N--&t>?WcQmKGQrt1>h(!Nu#hxVi2? zRk**j&e~>^(eZIcMyh1Nk~v3~Fmxv&(c_{J&=E0GFLB%*s#X}OH!v!rT?RTXVEaMu zJ!|aV8516{w+WwCGx^WI9yiSm{MQQ%?m=1G7V*Ky1UXwUUek=%D|DJImR8nice@xB z5Lci=v|=bkutCuYLR%^nwK2--IE6H#xJm^?3Q!%ylfsVLXywy%p|G}~ySBv4P?g!S zI!J-?p3IUgMv_-lTBsXUGC5LZ-~0}yr=}>JWvwhwT2UVwCTk3_=_`EajSu+to9Fo8 z>OE9eW6#cARCI-PGXDB!zu;SMT;}cTn_OM)&?*COojK3D@1J90Xox>}>1qDtr6+i1 z_b9`<6$^)0NC!I_P&QiAYmLimym|Ix{=<)d&gHvp+BRSXB-63IQyMR@xM}%!-+7DI z&o81(g)bc6g`q@+m{StF%6Mp&={Z$6a#v!>!9yjlaQ)T-op!;lU3;k48*Hw1xU;lD zhYB0rz@^)ZT)T6J0?$UL&D+2Dfc1{$lWU8-apn^)-)*wljaD!XO1}2oVP1Or1R<2X zbLI>Uqd0x!0J+3Y->b9-3lXkzqA7{WaE&66(NPU1}ngePL7<|yN zaR?qH+K-Em{!c+0TAh*;vxcLG_me9STg1jjBJH~jDf}uO$VtA4!zTHFL^zc$o)+G> z$(^NPJyqv0Qc~9ix$ly>0&NSl?LsJ{YF-7bvXrJv#Yrpxk}_hHioR_jW_4H*g08W! z)aI49F7ln%&hp`fORTj@v>u{S8AFSSMb_H{_g7e3FZkINRi8J^fX#gW+tIUcQg+l@5Q%65nB9wX}4(RzHg$wLM#Dth7ql@_M~#+C59 z$EO(im(TLw|IPb+van8}8@zw{9vj`a`GYS$$%&og3@JhT1YJnVgceCStp{z85baR3 zFPPK9#B7!6M#hch4X&-VDM|-A+F@HsPW!2{N=p9{m0~;7ts;GxB_x;6fy1S*L->a+ z6n>ehu{^@R>#>$zzwznn)BT{T$0STy77}{uR=*AZief#F4xZu6vv+(1x4zD@iVsi- zG0=&Wf8bq&pGwJSsv51zB%v~aqk_UGzbcIcjrgdLm6ToWT(qaq!J~YacDF+(1PY)g zg7X$*GJ;EojMi~!E0B31_fW4WW)4sC%>D^3-n!4Zi&uE(wV(2CR>kF2F5X$Dg@N@= zvU7JBpW4mnaNzpVI`3awX02JG6x_UigCDP4=g`hczW(`>Jbm;qvvoy1w5XKJkp&if zEC5QUsW~3>nw)m1@!rLC{)fMMgR|FL76P%(jC70 ziv^a=I9Jy^S5^bNC&#GzCX!e@#urq@p~?c$4)Gp`Lx&Pipi!-G?8s4Gef=Hg_v~TM z?j8L8OUEH}`0@GMtcPJrWk71YcIGlBO+D{k`ye)rs)`toDK{Bbj+ajz;`cv)l98(B z!}A|==k{&B@xpV|GeJ^bdhm(994syv9GbS*T)Vr*#oNoQm4>CZ=f?6TAKti6$ZC|5 z5hS33O$3`L0yW;CT!>M?N@2xgY=^n&VLo^2398;Bp-482$#B&NGG8WPUGgdmnm~q2 zn7{WHtx{fx0~I1&mQWz#$%5c*oSK!2_fx>3CGI9dh*3%|L?g;xa2SM`t05T@GOW*7 zD>Y{>-Q_25oa5sgD|E)PZROtHa4)$sJeo$Q;+srN&qwr7uTId#YbXZo*k+=XA)k#K-< zlMpCengXot^8cJ$;(zJTwp41@mkZ7j7(W6$J^ShTdpB{)K3sk#=EZi6o!ndQsJcQKoH$%`gh1uzwmBo7@l+o%aWT+4=a7?hcps-pKT$|yr#vgp)B>(O29H){2$pg!$ z2U7W%oEJi%6d$!>Ay4AxBqI=q#89Fru#B&k;8WCXlzzsv%RWmfAl~-*BLRgCnjoF{ zd^?3#y{t)vEi{*Jt@G0lukq%EJKWs_R1Jqtv}%Wx9Wv=M)(Gs~ImLkkdzhY`;{3-K zIseH8jz9Y}pL^jYvPK<8Y@Tx4WV-5kV)rCR=0>TgByW(dRM_7L`6m2B>}>mRQA`93 zN}|iCz>>f_SJwC+|NSexeRY{a4-*26SK#HRkMO1Ejx$w-iYwx1sWP-{#|J-IPDF-; zN1Vlr$7MNA3|&>FRR)&Un%rDk=U%f*((JJZ zoDRZgn?4>zcb3N}?H*G+KARL=|K_-6DTX#)E1xW4B0t?KwN+4@r|vh|H=c2Lwt?BW z$Ljr6F5JA&dlzo7vavz#EvAe?K+apr;Au*OZgmwMep)4v6-M%CK7FjX~)u zWiYg?&~-wYl<&bitO?|KPCd)1RVy@%re-`Qw8bbyZWCi1O2ypr`AXo= zzWN-e=0>RaZp?Jh9v3{B?;>OnYLrr8EeLO&`GBj}ZgTqcQye;Y7}1*Rw{P&ljWs^G zxx&)wD$TB=3~>}5s^-j$RC!|GEGPF*b6{?iU@h;Rzru%S&T#VR0Y3lK3F=Z{LXjeR zL=VSDil&h#H6_RkTT>|iiHR%>^FvQDICg04>eH=Rjjjr z1pb?U{Y_rpXYj6!epib4z6FJInjm?M9uAS&BxuBk=rZ6+6p`AyWh9x*@{_R4E1RB! zXpurM$j(K|ZAkl+Ug{!2z(w_)R~9dZ)u!-&eCsE?@$p^SmC2Y`=yghtOew4(5{Hy8 z&>_0;X1QW&a)Os$evyNx4#ken1Z>%+Lcv@;^eP9fDe(xy%)gQft`kOa+`{EKEJ;YK+_`!P@S?d;j?YZOZ8LeSliE%~b z)&z%(*`@?cT>2T6WcYCbST9>tm1cOX%0xZq&SsZ|l_vL^1x;sTQXvZGeczdPTk+`Q zMUu=I`ysqIF`wajghw{|53*SMRD-bfH4?T8ne<;*=#Q52Sv*)Ie5OJXKJ$PX`f6nf zE-g4EChv)XP=L2g)fM|^hG}R^=^`&aB2_LW>y-o--E+$zw8^oifmBCuXtd675rIy{ zHm-?-2sjHm^4gUxskwrk4a4&XcQ9K4Q*BCIp;-(t3*prqgsODp|M-5=>m` z8i)7};@ecIQ&kltH=rWisFVVeC3n;U37tqsEb*r9GshA&yJnEc-pbN zvcg8Ih4YSF8^#(9#_CnZhKC8_xW0IYk3ac@y9;-C>f~XbIliAdZL}+*ShG*>cl`#$ zg}{1I^7`3NxZhQDbq#bC??a;0#vN#M;N1dR;sF?Oj-aLARMeE^_@15YpB~23jB4pX zq<}jMQo*V!o3758k1la{={|e+?qp_igo%2Ey2{C=Ae2R%G)Tojl9^a~cZHOW7<#VX zDxOmilO0tgzXpZ4n+Og;GoEJ*O%5?PHpFtfWMQSr-Ss9L-ICHlSJ&~9rG3NzL?wNB z+t&Y+hu3Ff8$GVDZmS-G_^^c*4Hh0B9x6g%Kz{d+Uk*MCzC}WglZ`?8eIQ1wdJma* zXxm{pv+SE1X1bmcIxT{hKBVb={7UB?I(VG(I1x%+$5lpfrj84G%PBNX9MNX67mgFd zqws+o%doWg!l6AJ9LuTtRusgEp|pWKljvxhRVj3w%Cg{4!9^8vaA~SBc+z6h7GNT@ zB|d;liFLjpQyv{Haxp4)$U!2*2_H2Xh>p-kZ+YE&bYuDzqB2UUaqjvG-+AvM-+K2d z%XSE->xqdJH6FcKTG2Y1fcmhdvq}_PqXZiQUTc)|D5>Crr-|j=%Zu!pZSdleIqG<{ zEieLw>cO%eY@0m5L{{bb69<`_oaN(BuJOuGUS(o(lwCXK8K0bF*F+t&Vx2|w);SP5;HW?oq{qqwXoSS6FSe@zN3iTX>E;?C$$iVW^dkDcqbOjZ68(JZf zVO_v>I#d;8XoOA*MDnTV#6pyroU!q7L@l6#BM-4iS*6o60!C|s_gLFyc%;VD&z|ede)c4-zyYF1#PPdAeIv-wL;?~leeChNNzVg&z#)gOR)`BaefKa6W zFd89dqlXaj(2z(gL|UE^VQ9!OJ2cK_Il{_Di+jr}+-i1cxdLawiBA8;bhp6P0oNn3 zNhp7~d66 zdU=4d!;#&SoZdUdXjn(eE?z0R4vZ3<(ln*Us)diQ-K8iU$M^1LMd!~{wm*o z^F!`4h1HFeapUo-XGgCh1(hhI)hWVP674iXCD9Vai$t4}bTB(z<$iOO^OtY%!Ai}d?j7a{wi=%tWoGv-oHn?w^uJHgHQL^A@%AR)`qBHmd*Kf2 zrN&pL*=RX#oxjUlAKhl8VwkMKm!CPpH@L?BIcq^C3wb08e}S_N17y&l z_D=Egm!9X?$peTu98C}*^BroG?4KUt^xkR4sw#>h6EY)d0p0U47x^ukJmi-gMnW&T zHW1KgaVTGslW}6Y#((|CFSB!Iiof{rhg@IXpd%ITH$C5d<3kqjFY|?`PI74HI1MFa z-bOY}h#@Hv`P66yU5R+83USG#(#pwuMd`RRz~9Nk z1?88mX?oLE2#;z9wtp6h68McvOUIY>6)m zw6j=iDTyS9P#wl+4ZO;tcuUmQB0p>|nm%0{5kZtjl%~@yD6$YmS15wcDS~IMBYd=3 z@czYXd~#=nP6>OjxB1-RT^yZhuwx{rp-OUJlH))bBm_*11&sC{+C^VAi6TBH8AhUY zh$o;#A!#?!i$d_dXTgV9bS36bXA%o6|*qdb7>)Mw^Y6rL=)8Qw-NKCWfm_j@GE^xQG_F8LvZ%P_<6sRJz0b7MvRG z`W50Fb#Z*@>7%T7J>P%-GRs8)rk1EIJ=ne6W_8+_G@pw}ZiDqnDh&`q^wn{+=U22lEyRP`Nub*Jg>;!-Q{kM7N@;x@( zFjg|&{OAVP?yT|bkv+U{>HxbY>WJ&0lwdu63OUsC` zyCLitYS5Xk(<%aMt%9|-W3^SV*>!Ao+jPpPeD})Gm8^gA%C_CkrkdT-y6^gFA831(~KKk$`hWK|`=N>Y-ZLJ-?#SO*U5m}I=3 zp-PJoZ9SZixNuoooQ>XQu5^H*gM#WXAs@ntPK80mgG09Pz}S68*u(2+l8Jy-hI6-8 zsJbpM9-e3S_y{7x{mp_~_t!Xgdx;O1yR3FfY&M3^H7iRcSJy7HXDsK~+%QLXPOx`k zi1B)bhIBAxz<3uG>dLP}3UUAdAOJ~3K~y7B5`vKV6ulFoHJ%SHCT2hMuq`pG_jk9y33riP`%I z%_J&%<_o49ny)^+kK;RrsD}0EA%#PIs(}ng?Yf1vx0Z$?&0My=&j^F~Nsqx|ED|~Q$m6i8%qjDJLiCIr=7tzj-CK`N#XG9te`?jF;JoMC-30m)=3y~J6CFVJ61S5)iRWn|xlQ*8U>+5bp}?IY?^&*bbeIMsGm zSI-9eAu-9r_L`CI9D7_Zfgac=-jP*c@6rWtSiK1^`eJ!;^uCi96%Uj62FJ_~Q)SH?-n`x9es_UW`{(JjTYPf!F1I%v z>)z1O4X7q(W*<=1D)-BR_2rT)OLutv!U8)dhSdQsuOKPP64%US6glmP2!+?p9l)#i3L~;>mA40 zk1w;b*(T^pY7}DApn9QUlC)Tx4cdv zLlkHN2Gv6V5L7TIDN;OcEOE_NhiNuyia&o4ECHRF$ih>B(l;>%cFm7-`srhw zICY5Okt{aEQlcdqa}FEWF)_lST@%b^NtvIHoI%9;|L?Hw&sIFbFB?U+cekP>{$yza zN$W(k^JszRb_}!gPhQ~k{vG_qtH0oq zKEyG*pKIPb1AYHvpAP$;7)GUZG4UQFDa{b5i6Uf*kSoGagD_L4^g_#ph)>FZ7G%Jb zWjm`XJPa2_q4h5hih6`dun!?6-ydflAtVf8fdBNs8xXeMgYYXtsJ7rL`IUQj6(ZxX z2Lnf~T}ZazLcOA?i$}_^MO_RL)*%SpZW~*cDIHMgV(`^5Y(9chx)0Ta0HFs#hN$xh zq9cqLw#Ws_Bq&TW3NyklR=QkRy^6CXR#)h#20qIpSmPXNaeyVD@(Rx9l&-?2ExEqX z=B?Y8Se!1H{OXGg4dsZ9ojH<0P?X*y)e0+xW~u3DsX)g$y4{lXR+q)K7PnVhEUs*@ zw!Fk_!|<=a_IX}DJk5~mB+Y?F2SIzsNL90YZW1jwV{r`065AKOcdviPsou%Z8(Mvc z2fjq&06|4srv$WC+`hZaM^_gZ-!~fbFz{(YQPEnR3`LG}U8*5qt?fgc-uDauRUcvv z!C|HBGswJ)mh~bLp0**`3?ZQ6wIT>X=Qv%VSqdB75@QS_^&IU=f-$U@npZ!##t+~B zgf&;g$N8m?Cirv=$^g?U#4I?xKqd<7N<=9vLXbLE=Qsr`%O!YF*?4j+4t@VT7h=}A z^BO0rpGc~eqTMQ3Yj&|?4LsfCe5+78Iz4}I@dlR{Rw#4>tMXVtLxC2F_qJ$?5Z#&I zxwruOeg61spJ$?4#o7|DgbnLi-00FN;{>#Grq1cp$9dw(W6aM^;C&ZD7llR2k_^wx zaD_wjlgy9RsB7Z1*VCqj!Huf#lXF693V+iD#C)d8A>pyh*?2>#ba+K7p$2r&kn)sK zpiQ*P);_SKD*VX{``Ev4ivRP6AMpBzH@UV3g&AVm2Yzil|sFpuc!<-xr} zf8dZup37k{Cpc^o4&n+SJWvb5fFktKlSlt^249GTfr8{8wIz9==*V{5st0AHKi47P zRARoRI;}$53n{_*0_nvDd+969MZh^rr_)JOM>JMe)jBpGqAPjd$d5EF4uo(HTw&Fx z3X|*_Bq-3}y-=tch1DoiiF+&M5emc$T4@{}@1khX6A#i5;$-BMp$H`_KF|yr=Pk8R zATCZUh=I(osWX0X{sKS#`Bm0cm97_j5h!h-8=xsdR~fVnar^!z>XkFpD$nuE;aQAZ zCAV3Mhb_q{*fBRoHPdYQMl{- zEW9LsO&J;%jaL;qPP4dL^4`bS`1tw)QxoHy+&{;m`Ek60_ddDG-@S8@`?i8LISLiM z&mcinnjl%EIb+l97+F{$DY~_a@1^%DCIX7a`i-bg4{=XrBH4e7z1Sy6cnZ;Yt)ggD z8QSe8%WEx)T_cgXl(K2OgVps_-aG#hEi|R6Q-%t;3K+Ukm!aZRK^8;3Txjt2$F~`& zp5w)5o?vrhlbiPz`Q*k8uG}lBjm~iT*b$yNy@UCklQ=PWXE7d3$S?xcOtW*U#_p*h zrs{?qkMYs$QhBxn%^?wd#V3}ZPS1XClKZV#n9HwXbq-+klHLFTEn6{o1G@tw@nEU~ zpPL_I?|=RU-uUn~-}=c1yz$8*ONAy>8mx32KRtVsa~E!N;=nGRIC6j^J4YCf^U zvxqMcWl@P{D=F_-f)JFV3~|~aM5_o%I`jyq(T7-~uAqG2#2@^b!vkHp+L{A?h14QE z?&77d(~n?hJ?>Jg2d5T!bPjFs;eo=FRN)U}Ua7ke40^1D5KtlBj)PIR(hIKfy{jl& zOF9)$)+5?b_&~GW#@Q||C^~u=H9U>Y8hv47kT78Ns}e@vdyVlxaY`kBlwNZs;QZE0 z)fsNUCcY(eH6et)Lv9cu=qx%Et4PZY-h-+nHkl(+34T_Cjh654{IqxIAXq$wz^YeV-za!e z>I^F%mF?Ql3YvGWU*Y^BbVDN^n4y#0y|+4j-DfanI8~!b#`izC#e3IR>2@}0cQ+WH z80D$YJDak^IhH}gf)z~vT#^gwqijID9T4F@5?h!`@jw4C% z;MS=jeJK04Xy+lH`g7Dn2h_vZO|P%4gusjuzIl2FM|Vx~qn}^oZ{NDWM~jYVpdw47M|E3 zw%4`$9?2~{F7!J*;v@M~mqmi~N9DdqaG*>)_;?UPbAV#S5EblM%9i%V{)4`VA0obHJLAEqxqO5YNCrfxl`Z~*Juc56wm z6AS$Vc-!~rsfAOXWi;3`ltrLSiZ72KI$Cl#5!RjN=a&|^yws(gjbcqLiAnvyWEXM0 zpfp9WP-$>>VVUClKcoKqKAt;uh~Y+sjlyyHW|LPxzRji+T#uIOJ)*PZNIZDy{X<&N ztzAd}fe-+`n6Lb?Fipu2p$<-x$yA z9jBhmBng7^0$LMn^1)4DgZCk7dk~x}$waU|t)ZO*Q50q1%*R*x-Us(s><;17C?@v^ zmZr1ZU1%bq31paRjo_tU;F08-ygi#TvYvWGlHPL>HKn$f+`S9vJX2(XEsV8^i#wd5zJG^@KHfyEAOC>q#h9obRB)^GH!FZpTPeN&< zsoj7s%7}Akp6JVkl zbhz3wRot>28O-(m^q^nQ21T}^MGV-Z4E|ksknt4;;6cLnMYx1VE;zzAeMs06EQUvA zqRS)l()GX~GU%_e1?dqa!bl=`iO!;4#So>kUC?e7SZ@fG2Bt9@vFZ4P_3aZLry&}= zzM*HgAcL=Ouo!QD?b4gb`c=x ztf}_l0Z)W0`e>n6(RWKldlGLdd~$c0|LN6bzHW17$A>xp@g>e&xxvkiE^DERRR(3E zz9pKAZaG!=@4XNnL8OkG0oAiDNpO!Gyh4c~ z1Q$huxxtCT1Pk6%`efQ?48E^KPs^`!lK$zEwan zK*d8p-RB=&U*YDh*Qgt)5G4wO_JUEGXXhInojc4|PVeDwUO&&@zk7)rYaKQUMLVyv;e?BKT3o&T5wCxE zg?&4xdE)RM_U{~FveBTbg}jf=rUj!?i47746z6K2y@yKp?n8(6gCFy7XZXvj$7d4> zD)qn#sBED2^t9%#COpl zu-V+8U377#g5*O4)4+%5E*hU5`^W3pc2)UfDV!vP~de1r>jVH z2y@8sn&J z4eJH3qdkoTNm0@&2_}={tf;iN@LRhs*>b;*bm-J%ra#jUl2Zof|Dd<5h6b95{(UN2 z%t)^yv!!3KbVk=f*D02~gCc1>fC=D_?kJ0~WYnJ_f!6)IU2=_Iy(|0W6vJnQqS(y})^QdakCz*P+HCFD~bl-s8U z*}erCoJ#sI*w%hz`$Vw?Uj=#G_mD@}qYM@g*QY{ngVy?EbULV$xJswspP(Eo>npT^ z$5yMT#t4PZuszS?@T+4lw-r|L0|m5KOdr(FJWMt2k17vLd|OA6XVYu0u6Nke8Drek zsOX%KH~8?z5^sO9z^cs%c?Io##JN+DQ7@#ar%8!vb-lkATqsed!Ac3@4N6rbgG^E` zMY8i5T(2RrJvV+ELvH(z8cq9T8;~kW#W>zRojri}(TP^afGy`NPDjTDpVe@ofpu*H zB>|z#71uX9{N_aq>`a2F^L(}+p5KWs2rGxwu;*}^>_HpwPV{uJ_s`T@ECJNr5-xyd)XR~ zk^cQkVif}uQ+VJD!+@}Ha5@ZP``^TGBav<8pQt{r98KUlMVF0s$-n>W@A0z_ui%Gg zkl`6hiK)Cgrw2VBpP^1pV_xn*ptI_kN6U3zB2t?pOydYXpj9;Bb3vk7F?gzF zlS5+_UOK#sJq^udP1C4G`om^`zdLh*A6!{s-Hd_Lk8P{UpxaaqtKFE=&F>Jfb ztyY)2Ya3j>yUFFH4vWn|TV+@!pd3mx%4)=$nAekj9#L`M6MRxhhcEyU_uyo|ts&}7 zR}Y<}Av}W6LcdUL4dU@YcA^twEoR7jXXBsuGBAP%Tae)i&JuJ+mMKPt>&(xNvtw?8 z9dnb+PK`1-GDN+SMZTH@ics_!rY2YnmRhD5A8If=T4%DBGm7jy z=`X+^wP8!!)A!-(y>{6)sl=U-!;9O_97DFQ-2-D-DLy(o`-0rNw5-)wZRkkU zEX3upP0qq$U@{5=?f|`eMD@MQR0wz#MW6k!GJ3lgl?0fHRPG;9>mNwT9CWc3<+f~N z7!ZPb8RUnj`!$L@d(o`MSt`C@C|D+P#Z;rhxaI0tT}69O=6y^N zm6F_Vuy?%5%+MH{>n)a>8#FrwB^g~^!Ag!5g_juaCSIX}i4Mlf_rfm*Cg=eOxPJr0 z+!)iFt_OBM-uGZE*+v@ixNTez>C+2*|2f^F-S_N>qG}#|(wRhYXr_drTE^H=h4HZ= zrl&`lou6TDcAC-QI(e>9;vm?5!QO&{qcXg%V7#6&Jz8g?QDvx-kt^aJ_Wx_|T6*L* zj__C2ifise2%|9{15*2kFW6P=_@=x8*#1)8#)Hk%3+T_84JNdM>sj^aqFPN zo#P|?;_fZnIzGVhs`ps{k8o%XUzMqhkn5#xoTrVw-0bQGx72C#luz079{KA$%AD1} zz5c7g;4T{Dp;c<{#uxOe|IChnxB43{^H=mgJ<15f#yB$pOdOCi_{heh0ms-tjUfXw?VnQ1_4 z2P%>$6x7S5)64=igDb@6fYc2pVH79J(9RG*>H!ACjfU8yHw;(PQ;{4V5l9C9LZtM?@Q0;M{ zJubQf$Y>=mD4A?9Z9uU35FOVh+NKvEWiWRb0bGi>w4`SfV#o+&a09J14jC$=$oScX}JA zr^h(Gb%>MW4u`7&sq2kiSF*gq2NvKHJuKE%C~BivqhIP3^LX5h`j zDACyOjY`259P3Btkrz}JXsVl{lR+*(J{7Bzs`1|w5iSAzH~`Pj27LbHJN*68w|Mx) zV?6xk4BtF^jkC>&OC(%SRvmN_F(_0At4XpVp)VX&im+g*h2lu<#xoJns?Fwwtdj#_ z=HOgHW01Mo2d6kG9&)uJFi8lyArv6O6QHlqsT3yUAW1ooe57-POI_09JZ(->9DRun zLWC90u|EG6fB4<6@aNC|gjKf!l#tknB2<$#nMs$h{vxM==+5A!3wK&kE4SltWt->R5;w=c0pw0&so4?NVgRPJquPHaB`S% z`_>^&kB@NLGx|g(FA-;^LJ!h@6_+5OEwrR9V9rP9fp&I2Q?hU<lG0l)=-7w3X6o?YV6mrwA|$4~LEC*R@m%OCOd`%ApK9P#E-FenNlg@}!4uB4w7 zjF~TRi4-hc>Zn@RhAO@HGVBCxG=gi^MMV}Lnw92rq|)e1peif{1DxyfRL_mDF8eN= zr*BCogPQrKD0Ddp(>>Q|BQTMvwF%JU68Db={N=L;`1IFzj9W?-9TO4=gX>r)-V|p# zeJ5&<1qn?joCg-=R!)(+WEi$A(|(CCY$6x53SDW=aBeNkxkLoP$~3Jpm{x=bJEjFQ z7TOkYaw0xPrz32+UzH*}4_W{s%z21A ztx&!pM-XKe1+nWJNI=Q0G<$ZCd8(W~96Cb8YW3n!S8`6QqQ>VsFh=y~Q_z~Kei_l! z_0lpiJ*3R57QXhuW%qBsw(dS)W({h`4>E1~@5`i0}@oMIi43RWHC zpkth@7$>U^$1B3g;Tp&5gcbQfrO~)Lg^UL>sKFgMjLG^nw6iGn(Ru7FT4{!UsW)he zA;hJLo&c~|ng~u_$#mf$aioHdr6iJRM+O2m04@Z0aX#SX*##cIJi}Kn&hhx!Ii9?H zjaT2l!JCUqgIXr8o3{nUf+||ihIS%Nj8O%LV16>V8vMl+!E^n2-^huju3EW)PyYUB zNK%ge%Q0+eGV>fHUz|tYR8!ha?m&XcAp$2<--Z0UFx%iB2ZNPVjka7i`0f1@{QlEl z;t)nDD`I+V%z_Oi%TPq-ZIYvLUZV%23*Kh`MNiGLqOc5eSB47nv03N5+On%RU0! zRO>|$%1{)59+*V4XzCrtk-JoCSXLfWa+Nz)Y}AdICJ;IUW~g8wBTQ5%Iwv+HO;AnV z%(e-0R>Fo914a)dj5Ki6Wc2K0EX7F&h#uKK(|SH9BOU>ixeuH77#6@2j+wVk&ei}O zJVV`)mu#Jt*)#mnZ(1h`(!s}vM<^>&$LJVXCB|V&IOuvD^&Jil5>^RVC*Yv#&?mE5 z1b{_LlYa2XFL_o8-FQPBP8O*lsH162SOc=KZvB63m|r&|iFM8v4~T}>=jD!i0FR3w z-vGE6f%DD9s1qRo00TZrL_t&r7ncLhhmGUlyHK{O4c9y>prkwXP3BHzZp4?->ijZA9kgOo1+&O8=N-pF%Hjmu}p)&T)oHt_Zr?G zyz@YFqs!I4BvIwTJz*>*jOdaQ79_M42xMU}w_qWD>M?i^qt`Ovd)<#M|F`S-x|h*b z(BfOg;zET+qU+# z@u5nhIaYro8%_h5Sm~!NlgzDwN%rIH1GHV(cN_u3R?_saejN)U5r_g#>Z%GBxpwntuuokU5w_j=n>q_nO z>W*tFuw$AvW@p?YOcc;*x-^!vO}Nh{p8|iqqLEwDdTfi6bUR<=es6ANO4>H$I~@nL zRVb^(O=r{7*K018-S zvJzhi7-TvP&ww$d#}dIEKf&0)XR-Q+m3i!X0PTkw%z*NQG0!lT%9w^8z+T}NUo9Ke z_Da{5vE*I5VKEiaKK+hGzF@j1phruGB7Ex8`%Z?{;f<(5wQU`Q(Uz3a!$RM!23G+WwjMHS>5c zoyX1W{CXm*)O8zp>+PkHcV~@+wx4&tm^pHBMQ)@klyq?2Wk7WZSoIHXa8q1oqrR(i zzO(DN&Lh~jP8x^s-tse6;P0Dtkc1_3LQJ`)jNgbNTdWECmTYg2*a?yIr69FKoovnq kk*=^--nJG#l(N--0llr&?jVjh*8l(j07*qoM6N<$f^uAT*8l(j diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp_trans.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/images/ecomp_trans.png deleted file mode 100644 index 4e8381c1a5c6c26fcbea9c8e83cfc8923f31c011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109926 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 or - // undefined(indicating the use of another browser). - { - var isIE10 = (eval("/*@cc_on!@*/false") && document.documentMode === 10); - if (isIE10) { - return 10; - } - var v = 3, - div = document.createElement('div'), - all = div.getElementsByTagName('i'); - do { - div.innerHTML = ''; - } while (all[0]); - return v > 4 ? v : undefined; - }; - - var browserVersion = getInternetExplorerVersion(); - - if (browserVersion && browserVersion < 9) { - ie8 = true; - } - - // This returned angular module 'gridster' is what is exported. - return angular.module('attGridsterLib', []) - - .constant('gridsterConfig', { - columns: 6, // number of columns in the grid - pushing: true, // whether to push other items out of the way - floating: true, // whether to automatically float items up so they stack - swapping: true, // whether or not to have items switch places instead of push down if they are the same size - width: 'auto', // width of the grid. "auto" will expand the grid to its parent container - colWidth: 'auto', // width of grid columns. "auto" will divide the width of the grid evenly among the columns - rowHeight: 'match', // height of grid rows. 'match' will make it the same as the column width, a numeric value will be interpreted as pixels, '/2' is half the column width, '*5' is five times the column width, etc. - margins: [10, 10], // margins in between grid items - outerMargin: false, - isMobile: false, // toggle mobile view - mobileBreakPoint: 100, // width threshold to toggle mobile mode - mobileModeEnabled: true, // whether or not to toggle mobile mode when screen width is less than mobileBreakPoint - minColumns: 1, // minimum amount of columns the grid can scale down to - minRows: 1, // minimum amount of rows to show if the grid is empty - maxRows: 100, // maximum amount of rows in the grid - defaultSizeX: 1, // default width of an item in columns - defaultSizeY: 1, // default height of an item in rows - minSizeX: 1, // minimum column width of an item - maxSizeX: null, // maximum column width of an item - minSizeY: 1, // minumum row height of an item - maxSizeY: null, // maximum row height of an item - saveGridItemCalculatedHeightInMobile: false, // grid item height in mobile display. true- to use the calculated height by sizeY given - resizable: { // options to pass to resizable handler - enabled: false, - handles: ['s', 'e', 'n', 'w', 'se', 'ne', 'sw', 'nw'] - }, - draggable: { // options to pass to draggable handler - enabled: true, - scrollSensitivity: 20, // Distance in pixels from the edge of the viewport after which the viewport should scroll, relative to pointer - scrollSpeed: 15 // Speed at which the window should scroll once the mouse pointer gets within scrollSensitivity distance - } - }) - - .controller('GridsterCtrl', ['gridsterConfig', '$timeout', - function(gridsterConfig, $timeout) { - - var gridster = this; - - /** - * Create options from gridsterConfig constant - */ - angular.extend(this, gridsterConfig); - - this.resizable = angular.extend({}, gridsterConfig.resizable || {}); - this.draggable = angular.extend({}, gridsterConfig.draggable || {}); - - var flag = false; - this.layoutChanged = function() { - if (flag) { - return; - } - flag = true; - $timeout(function() { - flag = false; - if (gridster.loaded) { - gridster.floatItemsUp(); - } - gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0); - }, 30); - }; - - /** - * A positional array of the items in the grid - */ - this.grid = []; - - /** - * Clean up after yourself - */ - this.destroy = function() { - // empty the grid to cut back on the possibility - // of circular references - if (this.grid) { - this.grid = []; - } - this.$element = null; - }; - - /** - * Overrides default options - * - * @param {Object} options The options to override - */ - this.setOptions = function(options) { - if (!options) { - return; - } - - options = angular.extend({}, options); - - // all this to avoid using jQuery... - if (options.draggable) { - angular.extend(this.draggable, options.draggable); - delete(options.draggable); - } - if (options.resizable) { - angular.extend(this.resizable, options.resizable); - delete(options.resizable); - } - - angular.extend(this, options); - - if (!this.margins || this.margins.length !== 2) { - this.margins = [0, 0]; - } else { - for (var x = 0, l = this.margins.length; x < l; ++x) { - this.margins[x] = parseInt(this.margins[x], 10); - if (isNaN(this.margins[x])) { - this.margins[x] = 0; - } - } - } - }; - - /** - * Check if item can occupy a specified position in the grid - * - * @param {Object} item The item in question - * @param {Number} row The row index - * @param {Number} column The column index - * @returns {Boolean} True if if item fits - */ - this.canItemOccupy = function(item, row, column) { - return row > -1 && column > -1 && item.sizeX + column <= this.columns && item.sizeY + row <= this.maxRows; - }; - - /** - * Set the item in the first suitable position - * - * @param {Object} item The item to insert - */ - this.autoSetItemPosition = function(item) { - // walk through each row and column looking for a place it will fit - for (var rowIndex = 0; rowIndex < this.maxRows; ++rowIndex) { - for (var colIndex = 0; colIndex < this.columns; ++colIndex) { - // only insert if position is not already taken and it can fit - var items = this.getItems(rowIndex, colIndex, item.sizeX, item.sizeY, item); - if (items.length === 0 && this.canItemOccupy(item, rowIndex, colIndex)) { - this.putItem(item, rowIndex, colIndex); - return; - } - } - } - throw new Error('Unable to place item!'); - }; - - /** - * Gets items at a specific coordinate - * - * @param {Number} row - * @param {Number} column - * @param {Number} sizeX - * @param {Number} sizeY - * @param {Array} excludeItems An array of items to exclude from selection - * @returns {Array} Items that match the criteria - */ - this.getItems = function(row, column, sizeX, sizeY, excludeItems) { - var items = []; - if (!sizeX || !sizeY) { - sizeX = sizeY = 1; - } - if (excludeItems && !(excludeItems instanceof Array)) { - excludeItems = [excludeItems]; - } - for (var h = 0; h < sizeY; ++h) { - for (var w = 0; w < sizeX; ++w) { - var item = this.getItem(row + h, column + w, excludeItems); - if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && items.indexOf(item) === -1) { - items.push(item); - } - } - } - return items; - }; - - /** - * @param {Array} items - * @returns {Object} An item that represents the bounding box of the items - */ - this.getBoundingBox = function(items) { - - if (items.length === 0) { - return null; - } - if (items.length === 1) { - return { - row: items[0].row, - col: items[0].col, - sizeY: items[0].sizeY, - sizeX: items[0].sizeX - }; - } - - var maxRow = 0; - var maxCol = 0; - var minRow = 9999; - var minCol = 9999; - - for (var i = 0, l = items.length; i < l; ++i) { - var item = items[i]; - minRow = Math.min(item.row, minRow); - minCol = Math.min(item.col, minCol); - maxRow = Math.max(item.row + item.sizeY, maxRow); - maxCol = Math.max(item.col + item.sizeX, maxCol); - } - - return { - row: minRow, - col: minCol, - sizeY: maxRow - minRow, - sizeX: maxCol - minCol - }; - }; - - - /** - * Removes an item from the grid - * - * @param {Object} item - */ - this.removeItem = function(item) { - for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) { - var columns = this.grid[rowIndex]; - if (!columns) { - continue; - } - var index = columns.indexOf(item); - if (index !== -1) { - columns[index] = null; - break; - } - } - this.layoutChanged(); - }; - - /** - * Returns the item at a specified coordinate - * - * @param {Number} row - * @param {Number} column - * @param {Array} excludeItems Items to exclude from selection - * @returns {Object} The matched item or null - */ - this.getItem = function(row, column, excludeItems) { - if (excludeItems && !(excludeItems instanceof Array)) { - excludeItems = [excludeItems]; - } - var sizeY = 1; - while (row > -1) { - var sizeX = 1, - col = column; - while (col > -1) { - var items = this.grid[row]; - if (items) { - var item = items[col]; - if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && item.sizeX >= sizeX && item.sizeY >= sizeY) { - return item; - } - } - ++sizeX; - --col; - } - --row; - ++sizeY; - } - return null; - }; - - /** - * Insert an array of items into the grid - * - * @param {Array} items An array of items to insert - */ - this.putItems = function(items) { - for (var i = 0, l = items.length; i < l; ++i) { - this.putItem(items[i]); - } - }; - - /** - * Insert a single item into the grid - * - * @param {Object} item The item to insert - * @param {Number} row (Optional) Specifies the items row index - * @param {Number} column (Optional) Specifies the items column index - * @param {Array} ignoreItems - */ - this.putItem = function(item, row, column, ignoreItems) { - // auto place item if no row specified - if (typeof row === 'undefined' || row === null) { - row = item.row; - column = item.col; - if (typeof row === 'undefined' || row === null) { - this.autoSetItemPosition(item); - return; - } - } - - // keep item within allowed bounds - if (!this.canItemOccupy(item, row, column)) { - column = Math.min(this.columns - item.sizeX, Math.max(0, column)); - row = Math.min(this.maxRows - item.sizeY, Math.max(0, row)); - } - - // check if item is already in grid - if (item.oldRow !== null && typeof item.oldRow !== 'undefined') { - var samePosition = item.oldRow === row && item.oldColumn === column; - var inGrid = this.grid[row] && this.grid[row][column] === item; - if (samePosition && inGrid) { - item.row = row; - item.col = column; - return; - } else { - // remove from old position - var oldRow = this.grid[item.oldRow]; - if (oldRow && oldRow[item.oldColumn] === item) { - delete oldRow[item.oldColumn]; - } - } - } - - item.oldRow = item.row = row; - item.oldColumn = item.col = column; - - this.moveOverlappingItems(item, ignoreItems); - - if (!this.grid[row]) { - this.grid[row] = []; - } - this.grid[row][column] = item; - - if (this.movingItem === item) { - this.floatItemUp(item); - } - this.layoutChanged(); - }; - - /** - * Trade row and column if item1 with item2 - * - * @param {Object} item1 - * @param {Object} item2 - */ - this.swapItems = function(item1, item2) { - this.grid[item1.row][item1.col] = item2; - this.grid[item2.row][item2.col] = item1; - - var item1Row = item1.row; - var item1Col = item1.col; - item1.row = item2.row; - item1.col = item2.col; - item2.row = item1Row; - item2.col = item1Col; - }; - - /** - * Prevents items from being overlapped - * - * @param {Object} item The item that should remain - * @param {Array} ignoreItems - */ - this.moveOverlappingItems = function(item, ignoreItems) { - // don't move item, so ignore it - if (!ignoreItems) { - ignoreItems = [item]; - } else if (ignoreItems.indexOf(item) === -1) { - ignoreItems = ignoreItems.slice(0); - ignoreItems.push(item); - } - - // get the items in the space occupied by the item's coordinates - var overlappingItems = this.getItems( - item.row, - item.col, - item.sizeX, - item.sizeY, - ignoreItems - ); - this.moveItemsDown(overlappingItems, item.row + item.sizeY, ignoreItems); - }; - - /** - * Moves an array of items to a specified row - * - * @param {Array} items The items to move - * @param {Number} newRow The target row - * @param {Array} ignoreItems - */ - this.moveItemsDown = function(items, newRow, ignoreItems) { - if (!items || items.length === 0) { - return; - } - items.sort(function(a, b) { - return a.row - b.row; - }); - - ignoreItems = ignoreItems ? ignoreItems.slice(0) : []; - var topRows = {}, - item, i, l; - - // calculate the top rows in each column - for (i = 0, l = items.length; i < l; ++i) { - item = items[i]; - var topRow = topRows[item.col]; - if (typeof topRow === 'undefined' || item.row < topRow) { - topRows[item.col] = item.row; - } - } - - // move each item down from the top row in its column to the row - for (i = 0, l = items.length; i < l; ++i) { - item = items[i]; - var rowsToMove = newRow - topRows[item.col]; - this.moveItemDown(item, item.row + rowsToMove, ignoreItems); - ignoreItems.push(item); - } - }; - - /** - * Moves an item down to a specified row - * - * @param {Object} item The item to move - * @param {Number} newRow The target row - * @param {Array} ignoreItems - */ - this.moveItemDown = function(item, newRow, ignoreItems) { - if (item.row >= newRow) { - return; - } - while (item.row < newRow) { - ++item.row; - this.moveOverlappingItems(item, ignoreItems); - } - this.putItem(item, item.row, item.col, ignoreItems); - }; - - /** - * Moves all items up as much as possible - */ - this.floatItemsUp = function() { - if (this.floating === false) { - return; - } - for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) { - var columns = this.grid[rowIndex]; - if (!columns) { - continue; - } - for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { - var item = columns[colIndex]; - if (item) { - this.floatItemUp(item); - } - } - } - }; - - /** - * Float an item up to the most suitable row - * - * @param {Object} item The item to move - */ - this.floatItemUp = function(item) { - if (this.floating === false) { - return; - } - var colIndex = item.col, - sizeY = item.sizeY, - sizeX = item.sizeX, - bestRow = null, - bestColumn = null, - rowIndex = item.row - 1; - - while (rowIndex > -1) { - var items = this.getItems(rowIndex, colIndex, sizeX, sizeY, item); - if (items.length !== 0) { - break; - } - bestRow = rowIndex; - bestColumn = colIndex; - --rowIndex; - } - if (bestRow !== null) { - this.putItem(item, bestRow, bestColumn); - } - }; - - /** - * Update gridsters height - * - * @param {Number} plus (Optional) Additional height to add - */ - this.updateHeight = function(plus) { - var maxHeight = this.minRows; - plus = plus || 0; - for (var rowIndex = this.grid.length; rowIndex >= 0; --rowIndex) { - var columns = this.grid[rowIndex]; - if (!columns) { - continue; - } - for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { - if (columns[colIndex]) { - maxHeight = Math.max(maxHeight, rowIndex + plus + columns[colIndex].sizeY); - } - } - } - this.gridHeight = this.maxRows - maxHeight > 0 ? Math.min(this.maxRows, maxHeight) : Math.max(this.maxRows, maxHeight); - }; - - /** - * Returns the number of rows that will fit in given amount of pixels - * - * @param {Number} pixels - * @param {Boolean} ceilOrFloor (Optional) Determines rounding method - */ - this.pixelsToRows = function(pixels, ceilOrFloor) { - if (ceilOrFloor === true) { - return Math.ceil(pixels / this.curRowHeight); - } else if (ceilOrFloor === false) { - return Math.floor(pixels / this.curRowHeight); - } - - return Math.round(pixels / this.curRowHeight); - }; - - /** - * Returns the number of columns that will fit in a given amount of pixels - * - * @param {Number} pixels - * @param {Boolean} ceilOrFloor (Optional) Determines rounding method - * @returns {Number} The number of columns - */ - this.pixelsToColumns = function(pixels, ceilOrFloor) { - if (ceilOrFloor === true) { - return Math.ceil(pixels / this.curColWidth); - } else if (ceilOrFloor === false) { - return Math.floor(pixels / this.curColWidth); - } - - return Math.round(pixels / this.curColWidth); - }; - } - ]) - - .directive('gridsterPreview', function() { - return { - replace: true, - scope: true, - require: '^gridster', - template: '

    ', - link: function(scope, $el, attrs, gridster) { - - /** - * @returns {Object} style object for preview element - */ - scope.previewStyle = function() { - - if (!gridster.movingItem) { - return { - display: 'none' - }; - } - - return { - display: 'block', - height: (gridster.movingItem.sizeY * gridster.curRowHeight - gridster.margins[0]) + 'px', - width: (gridster.movingItem.sizeX * gridster.curColWidth - gridster.margins[1]) + 'px', - top: (gridster.movingItem.row * gridster.curRowHeight + (gridster.outerMargin ? gridster.margins[0] : 0)) + 'px', - left: (gridster.movingItem.col * gridster.curColWidth + (gridster.outerMargin ? gridster.margins[1] : 0)) + 'px' - }; - }; - } - }; - }) - - /** - * The gridster directive - * - * @param {Function} $timeout - * @param {Object} $window - * @param {Object} $rootScope - * @param {Function} gridsterDebounce - */ - .directive('gridster', ['$timeout', '$window', '$rootScope', 'gridsterDebounce', - function($timeout, $window, $rootScope, gridsterDebounce) { - return { - scope: true, - restrict: 'EAC', - controller: 'GridsterCtrl', - controllerAs: 'gridster', - compile: function($tplElem) { - - $tplElem.prepend('
    '); - - return function(scope, $elem, attrs, gridster) { - gridster.loaded = false; - - gridster.$element = $elem; - - scope.gridster = gridster; - - $elem.addClass('gridster'); - - var isVisible = function(ele) { - return ele.style.visibility !== 'hidden' && ele.style.display !== 'none'; - }; - - function refresh(config) { - gridster.setOptions(config); - - if (!isVisible($elem[0])) { - return; - } - - // resolve "auto" & "match" values - if (gridster.width === 'auto') { - gridster.curWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - } else { - gridster.curWidth = gridster.width; - } - - if (gridster.colWidth === 'auto') { - gridster.curColWidth = (gridster.curWidth + (gridster.outerMargin ? -gridster.margins[1] : gridster.margins[1])) / gridster.columns; - } else { - gridster.curColWidth = gridster.colWidth; - } - - gridster.curRowHeight = gridster.rowHeight; - if (typeof gridster.rowHeight === 'string') { - if (gridster.rowHeight === 'match') { - gridster.curRowHeight = Math.round(gridster.curColWidth); - } else if (gridster.rowHeight.indexOf('*') !== -1) { - gridster.curRowHeight = Math.round(gridster.curColWidth * gridster.rowHeight.replace('*', '').replace(' ', '')); - } else if (gridster.rowHeight.indexOf('/') !== -1) { - gridster.curRowHeight = Math.round(gridster.curColWidth / gridster.rowHeight.replace('/', '').replace(' ', '')); - } - } - - gridster.isMobile = gridster.mobileModeEnabled && gridster.curWidth <= gridster.mobileBreakPoint; - - // loop through all items and reset their CSS - for (var rowIndex = 0, l = gridster.grid.length; rowIndex < l; ++rowIndex) { - var columns = gridster.grid[rowIndex]; - if (!columns) { - continue; - } - - for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { - if (columns[colIndex]) { - var item = columns[colIndex]; - item.setElementPosition(); - item.setElementSizeY(); - item.setElementSizeX(); - } - } - } - - updateHeight(); - } - - var optionsKey = attrs.gridster; - if (optionsKey) { - scope.$parent.$watch(optionsKey, function(newConfig) { - refresh(newConfig); - }, true); - } else { - refresh({}); - } - - scope.$watch(function() { - return gridster.loaded; - }, function() { - if (gridster.loaded) { - $elem.addClass('gridster-loaded'); - } else { - $elem.removeClass('gridster-loaded'); - } - }); - - scope.$watch(function() { - return gridster.isMobile; - }, function() { - if (gridster.isMobile) { - $elem.addClass('gridster-mobile').removeClass('gridster-desktop'); - } else { - $elem.removeClass('gridster-mobile').addClass('gridster-desktop'); - } - $rootScope.$broadcast('gridster-mobile-changed', gridster); - }); - - scope.$watch(function() { - return gridster.draggable; - }, function() { - $rootScope.$broadcast('gridster-draggable-changed', gridster); - }, true); - - scope.$watch(function() { - return gridster.resizable; - }, function() { - $rootScope.$broadcast('gridster-resizable-changed', gridster); - }, true); - - function updateHeight() { - if(gridster.gridHeight){ //need to put this check, otherwise fail in IE8 - $elem.css('height', (gridster.gridHeight * gridster.curRowHeight) + (gridster.outerMargin ? gridster.margins[0] : -gridster.margins[0]) + 'px'); - } - } - - scope.$watch(function() { - return gridster.gridHeight; - }, updateHeight); - - scope.$watch(function() { - return gridster.movingItem; - }, function() { - gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0); - }); - - var prevWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - - var resize = function() { - var width = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - - if (!width || width === prevWidth || gridster.movingItem) { - return; - } - prevWidth = width; - - if (gridster.loaded) { - $elem.removeClass('gridster-loaded'); - } - - refresh(); - - if (gridster.loaded) { - $elem.addClass('gridster-loaded'); - } - - $rootScope.$broadcast('gridster-resized', [width, $elem[0].offsetHeight], gridster); - }; - - // track element width changes any way we can - var onResize = gridsterDebounce(function onResize() { - resize(); - $timeout(function() { - scope.$apply(); - }); - }, 100); - - scope.$watch(function() { - return isVisible($elem[0]); - }, onResize); - - // see https://github.com/sdecima/javascript-detect-element-resize - if (typeof window.addResizeListener === 'function') { - window.addResizeListener($elem[0], onResize); - } else { - scope.$watch(function() { - return $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - }, resize); - } - var $win = angular.element($window); - $win.on('resize', onResize); - - // be sure to cleanup - scope.$on('$destroy', function() { - gridster.destroy(); - $win.off('resize', onResize); - if (typeof window.removeResizeListener === 'function') { - window.removeResizeListener($elem[0], onResize); - } - }); - - // allow a little time to place items before floating up - $timeout(function() { - scope.$watch('gridster.floating', function() { - gridster.floatItemsUp(); - }); - gridster.loaded = true; - }, 100); - }; - } - }; - } - ]) - - .controller('GridsterItemCtrl', function() { - this.$element = null; - this.gridster = null; - this.row = null; - this.col = null; - this.sizeX = null; - this.sizeY = null; - this.minSizeX = 0; - this.minSizeY = 0; - this.maxSizeX = null; - this.maxSizeY = null; - - this.init = function($element, gridster) { - this.$element = $element; - this.gridster = gridster; - this.sizeX = gridster.defaultSizeX; - this.sizeY = gridster.defaultSizeY; - }; - - this.destroy = function() { - // set these to null to avoid the possibility of circular references - this.gridster = null; - this.$element = null; - }; - - /** - * Returns the items most important attributes - */ - this.toJSON = function() { - return { - row: this.row, - col: this.col, - sizeY: this.sizeY, - sizeX: this.sizeX - }; - }; - - this.isMoving = function() { - return this.gridster.movingItem === this; - }; - - /** - * Set the items position - * - * @param {Number} row - * @param {Number} column - */ - this.setPosition = function(row, column) { - this.gridster.putItem(this, row, column); - - if (!this.isMoving()) { - this.setElementPosition(); - } - }; - - /** - * Sets a specified size property - * - * @param {String} key Can be either "x" or "y" - * @param {Number} value The size amount - * @param {Boolean} preventMove - */ - this.setSize = function(key, value, preventMove) { - key = key.toUpperCase(); - var camelCase = 'size' + key, - titleCase = 'Size' + key; - if (value === '') { - return; - } - value = parseInt(value, 10); - if (isNaN(value) || value === 0) { - value = this.gridster['default' + titleCase]; - } - var max = key === 'X' ? this.gridster.columns : this.gridster.maxRows; - if (this['max' + titleCase]) { - max = Math.min(this['max' + titleCase], max); - } - if (this.gridster['max' + titleCase]) { - max = Math.min(this.gridster['max' + titleCase], max); - } - if (key === 'X' && this.cols) { - max -= this.cols; - } else if (key === 'Y' && this.rows) { - max -= this.rows; - } - - var min = 0; - if (this['min' + titleCase]) { - min = Math.max(this['min' + titleCase], min); - } - if (this.gridster['min' + titleCase]) { - min = Math.max(this.gridster['min' + titleCase], min); - } - - value = Math.max(Math.min(value, max), min); - - var changed = (this[camelCase] !== value || (this['old' + titleCase] && this['old' + titleCase] !== value)); - this['old' + titleCase] = this[camelCase] = value; - - if (!this.isMoving()) { - this['setElement' + titleCase](); - } - if (!preventMove && changed) { - this.gridster.moveOverlappingItems(this); - this.gridster.layoutChanged(); - } - - return changed; - }; - - /** - * Sets the items sizeY property - * - * @param {Number} rows - * @param {Boolean} preventMove - */ - this.setSizeY = function(rows, preventMove) { - return this.setSize('Y', rows, preventMove); - }; - - /** - * Sets the items sizeX property - * - * @param {Number} columns - * @param {Boolean} preventMove - */ - this.setSizeX = function(columns, preventMove) { - return this.setSize('X', columns, preventMove); - }; - - /** - * Sets an elements position on the page - */ - this.setElementPosition = function() { - if (this.gridster.isMobile) { - this.$element.css({ - marginLeft: this.gridster.margins[0] + 'px', - marginRight: this.gridster.margins[0] + 'px', - marginTop: this.gridster.margins[1] + 'px', - marginBottom: this.gridster.margins[1] + 'px', - top: '', - left: '' - }); - } else { - this.$element.css({ - margin: 0, - top: (this.row * this.gridster.curRowHeight + (this.gridster.outerMargin ? this.gridster.margins[0] : 0)) + 'px', - left: (this.col * this.gridster.curColWidth + (this.gridster.outerMargin ? this.gridster.margins[1] : 0)) + 'px' - }); - } - }; - - /** - * Sets an elements height - */ - this.setElementSizeY = function() { - if (this.gridster.isMobile && !this.gridster.saveGridItemCalculatedHeightInMobile) { - this.$element.css('height', ''); - } else { - var computedHeight = (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]) + 'px'; - //this.$element.css('height', computedHeight); - this.$element.attr('style', this.$element.attr('style') + '; ' + 'height: '+computedHeight+' !important;'); - } - }; - - /** - * Sets an elements width - */ - this.setElementSizeX = function() { - if (this.gridster.isMobile) { - this.$element.css('width', ''); - } else { - this.$element.css('width', (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]) + 'px'); - } - }; - - /** - * Gets an element's width - */ - this.getElementSizeX = function() { - return (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]); - }; - - /** - * Gets an element's height - */ - this.getElementSizeY = function() { - return (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]); - }; - - }) - - .factory('GridsterTouch', [function() { - return function GridsterTouch(target, startEvent, moveEvent, endEvent) { - var lastXYById = {}; - - // Opera doesn't have Object.keys so we use this wrapper - var numberOfKeys = function(theObject) { - if (Object.keys) { - return Object.keys(theObject).length; - } - - var n = 0, - key; - for (key in theObject) { - ++n; - } - - return n; - }; - - // this calculates the delta needed to convert pageX/Y to offsetX/Y because offsetX/Y don't exist in the TouchEvent object or in Firefox's MouseEvent object - var computeDocumentToElementDelta = function(theElement) { - var elementLeft = 0; - var elementTop = 0; - var oldIEUserAgent = navigator.userAgent.match(/\bMSIE\b/); - - for (var offsetElement = theElement; offsetElement != null; offsetElement = offsetElement.offsetParent) { - // the following is a major hack for versions of IE less than 8 to avoid an apparent problem on the IEBlog with double-counting the offsets - // this may not be a general solution to IE7's problem with offsetLeft/offsetParent - if (oldIEUserAgent && - (!document.documentMode || document.documentMode < 8) && - offsetElement.currentStyle.position === 'relative' && offsetElement.offsetParent && offsetElement.offsetParent.currentStyle.position === 'relative' && offsetElement.offsetLeft === offsetElement.offsetParent.offsetLeft) { - // add only the top - elementTop += offsetElement.offsetTop; - } else { - elementLeft += offsetElement.offsetLeft; - elementTop += offsetElement.offsetTop; - } - } - - return { - x: elementLeft, - y: elementTop - }; - }; - - // cache the delta from the document to our event target (reinitialized each mousedown/MSPointerDown/touchstart) - var documentToTargetDelta = computeDocumentToElementDelta(target); - - // common event handler for the mouse/pointer/touch models and their down/start, move, up/end, and cancel events - var doEvent = function(theEvtObj) { - - if (theEvtObj.type === 'mousemove' && numberOfKeys(lastXYById) === 0) { - return; - } - - var prevent = true; - - var pointerList = theEvtObj.changedTouches ? theEvtObj.changedTouches : [theEvtObj]; - - for (var i = 0; i < pointerList.length; ++i) { - var pointerObj = pointerList[i]; - var pointerId = (typeof pointerObj.identifier !== 'undefined') ? pointerObj.identifier : (typeof pointerObj.pointerId !== 'undefined') ? pointerObj.pointerId : 1; - - // use the pageX/Y coordinates to compute target-relative coordinates when we have them (in ie < 9, we need to do a little work to put them there) - if (typeof pointerObj.pageX === 'undefined') { - - // initialize assuming our source element is our target - if(!ie8){ - pointerObj.pageX = pointerObj.offsetX + documentToTargetDelta.x; - pointerObj.pageY = pointerObj.offsetY + documentToTargetDelta.y; - } - else{ - pointerObj.pageX = pointerObj.clientX; - pointerObj.pageY = pointerObj.clientY; - } - - if (pointerObj.srcElement.offsetParent === target && document.documentMode && document.documentMode === 8 && pointerObj.type === 'mousedown') { - // source element is a child piece of VML, we're in IE8, and we've not called setCapture yet - add the origin of the source element - pointerObj.pageX += pointerObj.srcElement.offsetLeft; - pointerObj.pageY += pointerObj.srcElement.offsetTop; - } else if (pointerObj.srcElement !== target && !document.documentMode || document.documentMode < 8) { - // source element isn't the target (most likely it's a child piece of VML) and we're in a version of IE before IE8 - - // the offsetX/Y values are unpredictable so use the clientX/Y values and adjust by the scroll offsets of its parents - // to get the document-relative coordinates (the same as pageX/Y) - var sx = -2, - sy = -2; // adjust for old IE's 2-pixel border - for (var scrollElement = pointerObj.srcElement; scrollElement !== null; scrollElement = scrollElement.parentNode) { - sx += scrollElement.scrollLeft ? scrollElement.scrollLeft : 0; - sy += scrollElement.scrollTop ? scrollElement.scrollTop : 0; - } - - pointerObj.pageX = pointerObj.clientX + sx; - pointerObj.pageY = pointerObj.clientY + sy; - } - } - - - var pageX = pointerObj.pageX; - var pageY = pointerObj.pageY; - - if (theEvtObj.type.match(/(start|down)$/i)) { - // clause for processing MSPointerDown, touchstart, and mousedown - - // refresh the document-to-target delta on start in case the target has moved relative to document - documentToTargetDelta = computeDocumentToElementDelta(target); - - // protect against failing to get an up or end on this pointerId - if (lastXYById[pointerId]) { - if (endEvent) { - endEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - - delete lastXYById[pointerId]; - } - - if (startEvent) { - if (prevent) { - prevent = startEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - } - - // init last page positions for this pointer - lastXYById[pointerId] = { - x: pageX, - y: pageY - }; - - // IE pointer model - if (target.msSetPointerCapture) { - target.msSetPointerCapture(pointerId); - } else if (theEvtObj.type === 'mousedown' && numberOfKeys(lastXYById) === 1) { - if (useSetReleaseCapture) { - target.setCapture(true); - } else { - document.addEventListener('mousemove', doEvent, false); - document.addEventListener('mouseup', doEvent, false); - } - } - } else if (theEvtObj.type.match(/move$/i)) { - // clause handles mousemove, MSPointerMove, and touchmove - - if (lastXYById[pointerId] && !(lastXYById[pointerId].x === pageX && lastXYById[pointerId].y === pageY)) { - // only extend if the pointer is down and it's not the same as the last point - - if (moveEvent && prevent) { - prevent = moveEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - - // update last page positions for this pointer - lastXYById[pointerId].x = pageX; - lastXYById[pointerId].y = pageY; - } - } else if (lastXYById[pointerId] && theEvtObj.type.match(/(up|end|cancel)$/i)) { - // clause handles up/end/cancel - - if (endEvent && prevent) { - prevent = endEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - - // delete last page positions for this pointer - delete lastXYById[pointerId]; - - // in the Microsoft pointer model, release the capture for this pointer - // in the mouse model, release the capture or remove document-level event handlers if there are no down points - // nothing is required for the iOS touch model because capture is implied on touchstart - if (target.msReleasePointerCapture) { - target.msReleasePointerCapture(pointerId); - } else if (theEvtObj.type === 'mouseup' && numberOfKeys(lastXYById) === 0) { - if (useSetReleaseCapture) { - target.releaseCapture(); - } else { - document.removeEventListener('mousemove', doEvent, false); - document.removeEventListener('mouseup', doEvent, false); - } - } - } - } - - if (prevent) { - if (theEvtObj.preventDefault) { - theEvtObj.preventDefault(); - } - - if (theEvtObj.preventManipulation) { - theEvtObj.preventManipulation(); - } - - if (theEvtObj.preventMouseEvent) { - theEvtObj.preventMouseEvent(); - } - } - }; - - var useSetReleaseCapture = false; - // saving the settings for contentZooming and touchaction before activation - var contentZooming, msTouchAction; - - this.enable = function() { - - if (window.navigator.msPointerEnabled) { - // Microsoft pointer model - target.addEventListener('MSPointerDown', doEvent, false); - target.addEventListener('MSPointerMove', doEvent, false); - target.addEventListener('MSPointerUp', doEvent, false); - target.addEventListener('MSPointerCancel', doEvent, false); - - // css way to prevent panning in our target area - if (typeof target.style.msContentZooming !== 'undefined') { - contentZooming = target.style.msContentZooming; - target.style.msContentZooming = 'none'; - } - - // new in Windows Consumer Preview: css way to prevent all built-in touch actions on our target - // without this, you cannot touch draw on the element because IE will intercept the touch events - if (typeof target.style.msTouchAction !== 'undefined') { - msTouchAction = target.style.msTouchAction; - target.style.msTouchAction = 'none'; - } - } else if (target.addEventListener) { - // iOS touch model - target.addEventListener('touchstart', doEvent, false); - target.addEventListener('touchmove', doEvent, false); - target.addEventListener('touchend', doEvent, false); - target.addEventListener('touchcancel', doEvent, false); - - // mouse model - target.addEventListener('mousedown', doEvent, false); - - // mouse model with capture - // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target - if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) { - useSetReleaseCapture = true; - - target.addEventListener('mousemove', doEvent, false); - target.addEventListener('mouseup', doEvent, false); - } - } else if (target.attachEvent && target.setCapture) { - // legacy IE mode - mouse with capture - useSetReleaseCapture = true; - target.attachEvent('onmousedown', function() { - doEvent(window.event); - window.event.returnValue = false; - return false; - }); - target.attachEvent('onmousemove', function() { - doEvent(window.event); - window.event.returnValue = false; - return false; - }); - target.attachEvent('onmouseup', function() { - doEvent(window.event); - window.event.returnValue = false; - return false; - }); - } - }; - - this.disable = function() { - if (window.navigator.msPointerEnabled) { - // Microsoft pointer model - target.removeEventListener('MSPointerDown', doEvent, false); - target.removeEventListener('MSPointerMove', doEvent, false); - target.removeEventListener('MSPointerUp', doEvent, false); - target.removeEventListener('MSPointerCancel', doEvent, false); - - // reset zooming to saved value - if (contentZooming) { - target.style.msContentZooming = contentZooming; - } - - // reset touch action setting - if (msTouchAction) { - target.style.msTouchAction = msTouchAction; - } - } else if (target.removeEventListener) { - // iOS touch model - target.removeEventListener('touchstart', doEvent, false); - target.removeEventListener('touchmove', doEvent, false); - target.removeEventListener('touchend', doEvent, false); - target.removeEventListener('touchcancel', doEvent, false); - - // mouse model - target.removeEventListener('mousedown', doEvent, false); - - // mouse model with capture - // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target - if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) { - useSetReleaseCapture = true; - - target.removeEventListener('mousemove', doEvent, false); - target.removeEventListener('mouseup', doEvent, false); - } - } else if (target.detachEvent && target.setCapture) { - // legacy IE mode - mouse with capture - useSetReleaseCapture = true; - target.detachEvent('onmousedown'); - target.detachEvent('onmousemove'); - target.detachEvent('onmouseup'); - } - }; - - return this; - }; - }]) - - .factory('GridsterDraggable', ['$document', '$timeout', '$window', 'GridsterTouch', - function($document, $timeout, $window, GridsterTouch) { - function GridsterDraggable($el, scope, gridster, item, itemOptions) { - - var elmX, elmY, elmW, elmH, - - mouseX = 0, - mouseY = 0, - lastMouseX = 0, - lastMouseY = 0, - mOffX = 0, - mOffY = 0, - - minTop = 0, - maxTop = 9999, - minLeft = 0, - realdocument = $document[0]; - - var originalCol, originalRow; - var inputTags = ['select', 'input', 'textarea', 'button']; - - var gridsterItemDragElement = $el[0].querySelector('[gridster-item-drag]'); - //console.log(gridsterItemDragElement); - var isDraggableAreaDefined = gridsterItemDragElement?true:false; - //console.log(isDraggableAreaDefined); - - function mouseDown(e) { - - if(ie8){ - e.target = window.event.srcElement; - e.which = window.event.button; - } - - if(isDraggableAreaDefined && (!gridsterItemDragElement.contains(e.target))){ - return false; - } - - if (inputTags.indexOf(e.target.nodeName.toLowerCase()) !== -1) { - return false; - } - - var $target = angular.element(e.target); - - // exit, if a resize handle was hit - if ($target.hasClass('gridster-item-resizable-handler')) { - return false; - } - - // exit, if the target has it's own click event - if ($target.attr('onclick') || $target.attr('ng-click')) { - return false; - } - - // only works if you have jQuery - if ($target.closest && $target.closest('.gridster-no-drag').length) { - return false; - } - - switch (e.which) { - case 1: - // left mouse button - break; - case 2: - case 3: - // right or middle mouse button - return; - } - - lastMouseX = e.pageX; - lastMouseY = e.pageY; - - elmX = parseInt($el.css('left'), 10); - elmY = parseInt($el.css('top'), 10); - elmW = $el[0].offsetWidth; - elmH = $el[0].offsetHeight; - - originalCol = item.col; - originalRow = item.row; - - dragStart(e); - - return true; - } - - function mouseMove(e) { - if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) { - return false; - } - - var maxLeft = gridster.curWidth - 1; - - // Get the current mouse position. - mouseX = e.pageX; - mouseY = e.pageY; - - // Get the deltas - var diffX = mouseX - lastMouseX + mOffX; - var diffY = mouseY - lastMouseY + mOffY; - mOffX = mOffY = 0; - - // Update last processed mouse positions. - lastMouseX = mouseX; - lastMouseY = mouseY; - - var dX = diffX, - dY = diffY; - if (elmX + dX < minLeft) { - diffX = minLeft - elmX; - mOffX = dX - diffX; - } else if (elmX + elmW + dX > maxLeft) { - diffX = maxLeft - elmX - elmW; - mOffX = dX - diffX; - } - - if (elmY + dY < minTop) { - diffY = minTop - elmY; - mOffY = dY - diffY; - } else if (elmY + elmH + dY > maxTop) { - diffY = maxTop - elmY - elmH; - mOffY = dY - diffY; - } - elmX += diffX; - elmY += diffY; - - // set new position - $el.css({ - 'top': elmY + 'px', - 'left': elmX + 'px' - }); - - drag(e); - - return true; - } - - function mouseUp(e) { - if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) { - return false; - } - - mOffX = mOffY = 0; - - dragStop(e); - - return true; - } - - function dragStart(event) { - $el.addClass('gridster-item-moving'); - gridster.movingItem = item; - - gridster.updateHeight(item.sizeY); - scope.$apply(function() { - if (gridster.draggable && gridster.draggable.start) { - gridster.draggable.start(event, $el, itemOptions); - } - }); - } - - function drag(event) { - var oldRow = item.row, - oldCol = item.col, - hasCallback = gridster.draggable && gridster.draggable.drag, - scrollSensitivity = gridster.draggable.scrollSensitivity, - scrollSpeed = gridster.draggable.scrollSpeed; - - var row = gridster.pixelsToRows(elmY); - var col = gridster.pixelsToColumns(elmX); - - var itemsInTheWay = gridster.getItems(row, col, item.sizeX, item.sizeY, item); - var hasItemsInTheWay = itemsInTheWay.length !== 0; - - if (gridster.swapping === true && hasItemsInTheWay) { - var boundingBoxItem = gridster.getBoundingBox(itemsInTheWay), - sameSize = boundingBoxItem.sizeX === item.sizeX && boundingBoxItem.sizeY === item.sizeY, - sameRow = boundingBoxItem.row === oldRow, - sameCol = boundingBoxItem.col === oldCol, - samePosition = boundingBoxItem.row === row && boundingBoxItem.col === col, - inline = sameRow || sameCol; - - if (sameSize && itemsInTheWay.length === 1) { - if (samePosition) { - gridster.swapItems(item, itemsInTheWay[0]); - } else if (inline) { - return; - } - } else if (boundingBoxItem.sizeX <= item.sizeX && boundingBoxItem.sizeY <= item.sizeY && inline) { - var emptyRow = item.row <= row ? item.row : row + item.sizeY, - emptyCol = item.col <= col ? item.col : col + item.sizeX, - rowOffset = emptyRow - boundingBoxItem.row, - colOffset = emptyCol - boundingBoxItem.col; - - for (var i = 0, l = itemsInTheWay.length; i < l; ++i) { - var itemInTheWay = itemsInTheWay[i]; - - var itemsInFreeSpace = gridster.getItems( - itemInTheWay.row + rowOffset, - itemInTheWay.col + colOffset, - itemInTheWay.sizeX, - itemInTheWay.sizeY, - item - ); - - if (itemsInFreeSpace.length === 0) { - gridster.putItem(itemInTheWay, itemInTheWay.row + rowOffset, itemInTheWay.col + colOffset); - } - } - } - } - - if (gridster.pushing !== false || !hasItemsInTheWay) { - item.row = row; - item.col = col; - } - - if(($window.navigator.appName === 'Microsoft Internet Explorer' && !ie8) || $window.navigator.userAgent.indexOf("Firefox")!==-1){ - if (event.pageY - realdocument.documentElement.scrollTop < scrollSensitivity) { - realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop - scrollSpeed; - } else if ($window.innerHeight - (event.pageY - realdocument.documentElement.scrollTop) < scrollSensitivity) { - realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop + scrollSpeed; - } - } - else{ - if (event.pageY - realdocument.body.scrollTop < scrollSensitivity) { - realdocument.body.scrollTop = realdocument.body.scrollTop - scrollSpeed; - } else if ($window.innerHeight - (event.pageY - realdocument.body.scrollTop) < scrollSensitivity) { - realdocument.body.scrollTop = realdocument.body.scrollTop + scrollSpeed; - } - } - - - - if (event.pageX - realdocument.body.scrollLeft < scrollSensitivity) { - realdocument.body.scrollLeft = realdocument.body.scrollLeft - scrollSpeed; - } else if ($window.innerWidth - (event.pageX - realdocument.body.scrollLeft) < scrollSensitivity) { - realdocument.body.scrollLeft = realdocument.body.scrollLeft + scrollSpeed; - } - - if (hasCallback || oldRow !== item.row || oldCol !== item.col) { - scope.$apply(function() { - if (hasCallback) { - gridster.draggable.drag(event, $el, itemOptions); - } - }); - } - } - - function dragStop(event) { - $el.removeClass('gridster-item-moving'); - var row = gridster.pixelsToRows(elmY); - var col = gridster.pixelsToColumns(elmX); - if (gridster.pushing !== false || gridster.getItems(row, col, item.sizeX, item.sizeY, item).length === 0) { - item.row = row; - item.col = col; - } - gridster.movingItem = null; - item.setPosition(item.row, item.col); - - scope.$apply(function() { - if (gridster.draggable && gridster.draggable.stop) { - gridster.draggable.stop(event, $el, itemOptions); - } - }); - } - - var enabled = null; - var $dragHandles = null; - var unifiedInputs = []; - - this.enable = function() { - if (enabled === true) { - return; - } - - // disable and timeout required for some template rendering - $timeout(function() { - // disable any existing draghandles - for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) { - unifiedInputs[u].disable(); - } - unifiedInputs = []; - - if (gridster.draggable && gridster.draggable.handle) { - $dragHandles = angular.element($el[0].querySelectorAll(gridster.draggable.handle)); - if ($dragHandles.length === 0) { - // fall back to element if handle not found... - $dragHandles = $el; - } - } else { - $dragHandles = $el; - } - - for (var h = 0, hl = $dragHandles.length; h < hl; ++h) { - unifiedInputs[h] = new GridsterTouch($dragHandles[h], mouseDown, mouseMove, mouseUp); - unifiedInputs[h].enable(); - } - - enabled = true; - }); - }; - - this.disable = function() { - if (enabled === false) { - return; - } - - // timeout to avoid race contition with the enable timeout - $timeout(function() { - - for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) { - unifiedInputs[u].disable(); - } - - unifiedInputs = []; - enabled = false; - }); - }; - - this.toggle = function(enabled) { - if (enabled) { - this.enable(); - } else { - this.disable(); - } - }; - - this.destroy = function() { - this.disable(); - }; - } - - return GridsterDraggable; - } - ]) - - .factory('GridsterResizable', ['GridsterTouch', function(GridsterTouch) { - function GridsterResizable($el, scope, gridster, item, itemOptions) { - - function ResizeHandle(handleClass) { - - var hClass = handleClass; - - var elmX, elmY, elmW, elmH, - - mouseX = 0, - mouseY = 0, - lastMouseX = 0, - lastMouseY = 0, - mOffX = 0, - mOffY = 0, - - minTop = 0, - maxTop = 9999, - minLeft = 0; - - var getMinHeight = function() { - return (item.minSizeY ? item.minSizeY : 1) * gridster.curRowHeight - gridster.margins[0]; - }; - var getMinWidth = function() { - return (item.minSizeX ? item.minSizeX : 1) * gridster.curColWidth - gridster.margins[1]; - }; - - var originalWidth, originalHeight; - var savedDraggable; - - function mouseDown(e) { - switch (e.which) { - case 1: - // left mouse button - break; - case 2: - case 3: - // right or middle mouse button - return; - } - - // save the draggable setting to restore after resize - savedDraggable = gridster.draggable.enabled; - if (savedDraggable) { - gridster.draggable.enabled = false; - scope.$broadcast('gridster-draggable-changed', gridster); - } - - // Get the current mouse position. - lastMouseX = e.pageX; - lastMouseY = e.pageY; - - // Record current widget dimensions - elmX = parseInt($el.css('left'), 10); - elmY = parseInt($el.css('top'), 10); - elmW = $el[0].offsetWidth; - elmH = $el[0].offsetHeight; - - originalWidth = item.sizeX; - originalHeight = item.sizeY; - - resizeStart(e); - - return true; - } - - function resizeStart(e) { - $el.addClass('gridster-item-moving'); - $el.addClass('gridster-item-resizing'); - - gridster.movingItem = item; - - item.setElementSizeX(); - item.setElementSizeY(); - item.setElementPosition(); - gridster.updateHeight(1); - - scope.$apply(function() { - // callback - if (gridster.resizable && gridster.resizable.start) { - gridster.resizable.start(e, $el, itemOptions); // options is the item model - } - }); - } - - function mouseMove(e) { - var maxLeft = gridster.curWidth - 1; - - // Get the current mouse position. - mouseX = e.pageX; - mouseY = e.pageY; - - // Get the deltas - var diffX = mouseX - lastMouseX + mOffX; - var diffY = mouseY - lastMouseY + mOffY; - mOffX = mOffY = 0; - - // Update last processed mouse positions. - lastMouseX = mouseX; - lastMouseY = mouseY; - - var dY = diffY, - dX = diffX; - - if (hClass.indexOf('n') >= 0) { - if (elmH - dY < getMinHeight()) { - diffY = elmH - getMinHeight(); - mOffY = dY - diffY; - } else if (elmY + dY < minTop) { - diffY = minTop - elmY; - mOffY = dY - diffY; - } - elmY += diffY; - elmH -= diffY; - } - if (hClass.indexOf('s') >= 0) { - if (elmH + dY < getMinHeight()) { - diffY = getMinHeight() - elmH; - mOffY = dY - diffY; - } else if (elmY + elmH + dY > maxTop) { - diffY = maxTop - elmY - elmH; - mOffY = dY - diffY; - } - elmH += diffY; - } - if (hClass.indexOf('w') >= 0) { - if (elmW - dX < getMinWidth()) { - diffX = elmW - getMinWidth(); - mOffX = dX - diffX; - } else if (elmX + dX < minLeft) { - diffX = minLeft - elmX; - mOffX = dX - diffX; - } - elmX += diffX; - elmW -= diffX; - } - if (hClass.indexOf('e') >= 0) { - if (elmW + dX < getMinWidth()) { - diffX = getMinWidth() - elmW; - mOffX = dX - diffX; - } else if (elmX + elmW + dX > maxLeft) { - diffX = maxLeft - elmX - elmW; - mOffX = dX - diffX; - } - elmW += diffX; - } - - // set new position - $el.css({ - 'top': elmY + 'px', - 'left': elmX + 'px', - 'width': elmW + 'px', - 'height': elmH + 'px' - }); - - resize(e); - - return true; - } - - function mouseUp(e) { - // restore draggable setting to its original state - if (gridster.draggable.enabled !== savedDraggable) { - gridster.draggable.enabled = savedDraggable; - scope.$broadcast('gridster-draggable-changed', gridster); - } - - mOffX = mOffY = 0; - - resizeStop(e); - - return true; - } - - function resize(e) { - var oldRow = item.row, - oldCol = item.col, - oldSizeX = item.sizeX, - oldSizeY = item.sizeY, - hasCallback = gridster.resizable && gridster.resizable.resize; - - var col = item.col; - // only change column if grabbing left edge - if (['w', 'nw', 'sw'].indexOf(handleClass) !== -1) { - col = gridster.pixelsToColumns(elmX, false); - } - - var row = item.row; - // only change row if grabbing top edge - if (['n', 'ne', 'nw'].indexOf(handleClass) !== -1) { - row = gridster.pixelsToRows(elmY, false); - } - - var sizeX = item.sizeX; - // only change row if grabbing left or right edge - if (['n', 's'].indexOf(handleClass) === -1) { - sizeX = gridster.pixelsToColumns(elmW, true); - } - - var sizeY = item.sizeY; - // only change row if grabbing top or bottom edge - if (['e', 'w'].indexOf(handleClass) === -1) { - sizeY = gridster.pixelsToRows(elmH, true); - } - - if (gridster.pushing !== false || gridster.getItems(row, col, sizeX, sizeY, item).length === 0) { - item.row = row; - item.col = col; - item.sizeX = sizeX; - item.sizeY = sizeY; - } - var isChanged = item.row !== oldRow || item.col !== oldCol || item.sizeX !== oldSizeX || item.sizeY !== oldSizeY; - - if (hasCallback || isChanged) { - scope.$apply(function() { - if (hasCallback) { - gridster.resizable.resize(e, $el, itemOptions); // options is the item model - } - }); - } - } - - function resizeStop(e) { - $el.removeClass('gridster-item-moving'); - $el.removeClass('gridster-item-resizing'); - - gridster.movingItem = null; - - item.setPosition(item.row, item.col); - item.setSizeY(item.sizeY); - item.setSizeX(item.sizeX); - - scope.$apply(function() { - if (gridster.resizable && gridster.resizable.stop) { - gridster.resizable.stop(e, $el, itemOptions); // options is the item model - } - }); - } - - var $dragHandle = null; - var unifiedInput; - - this.enable = function() { - if (!$dragHandle) { - $dragHandle = angular.element('
    '); - $el.append($dragHandle); - } - - unifiedInput = new GridsterTouch($dragHandle[0], mouseDown, mouseMove, mouseUp); - unifiedInput.enable(); - }; - - this.disable = function() { - if ($dragHandle) { - $dragHandle.remove(); - $dragHandle = null; - } - - unifiedInput.disable(); - unifiedInput = undefined; - }; - - this.destroy = function() { - this.disable(); - }; - } - - var handles = []; - var handlesOpts = gridster.resizable.handles; - if (typeof handlesOpts === 'string') { - handlesOpts = gridster.resizable.handles.split(','); - } - var enabled = false; - - for (var c = 0, l = handlesOpts.length; c < l; c++) { - handles.push(new ResizeHandle(handlesOpts[c])); - } - - this.enable = function() { - if (enabled) { - return; - } - for (var c = 0, l = handles.length; c < l; c++) { - handles[c].enable(); - } - enabled = true; - }; - - this.disable = function() { - if (!enabled) { - return; - } - for (var c = 0, l = handles.length; c < l; c++) { - handles[c].disable(); - } - enabled = false; - }; - - this.toggle = function(enabled) { - if (enabled) { - this.enable(); - } else { - this.disable(); - } - }; - - this.destroy = function() { - for (var c = 0, l = handles.length; c < l; c++) { - handles[c].destroy(); - } - }; - } - return GridsterResizable; - }]) - - .factory('gridsterDebounce', function() { - return function gridsterDebounce(func, wait, immediate) { - var timeout; - return function() { - var context = this, - args = arguments; - var later = function() { - timeout = null; - if (!immediate) { - func.apply(context, args); - } - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) { - func.apply(context, args); - } - }; - }; - }) - - /** - * GridsterItem directive - * @param $parse - * @param GridsterDraggable - * @param GridsterResizable - * @param gridsterDebounce - */ - .directive('gridsterItem', ['$parse', 'GridsterDraggable', 'GridsterResizable', 'gridsterDebounce', - function($parse, GridsterDraggable, GridsterResizable, gridsterDebounce) { - return { - scope: true, - restrict: 'EA', - controller: 'GridsterItemCtrl', - controllerAs: 'gridsterItem', - require: ['^gridster', 'gridsterItem'], - link: function(scope, $el, attrs, controllers) { - var optionsKey = attrs.gridsterItem, - options; - - var gridster = controllers[0], - item = controllers[1]; - - scope.gridster = gridster; - - - // bind the item's position properties - // options can be an object specified by gridster-item="object" - // or the options can be the element html attributes object - if (optionsKey) { - var $optionsGetter = $parse(optionsKey); - options = $optionsGetter(scope) || {}; - if (!options && $optionsGetter.assign) { - options = { - row: item.row, - col: item.col, - sizeX: item.sizeX, - sizeY: item.sizeY, - minSizeX: 0, - minSizeY: 0, - maxSizeX: null, - maxSizeY: null - }; - $optionsGetter.assign(scope, options); - } - } else { - options = attrs; - } - - item.init($el, gridster); - - $el.addClass('gridster-item'); - - var aspects = ['minSizeX', 'maxSizeX', 'minSizeY', 'maxSizeY', 'sizeX', 'sizeY', 'row', 'col'], - $getters = {}; - - var expressions = []; - var aspectFn = function(aspect) { - var expression; - if (typeof options[aspect] === 'string') { - // watch the expression in the scope - expression = options[aspect]; - } else if (typeof options[aspect.toLowerCase()] === 'string') { - // watch the expression in the scope - expression = options[aspect.toLowerCase()]; - } else if (optionsKey) { - // watch the expression on the options object in the scope - expression = optionsKey + '.' + aspect; - } else { - return; - } - expressions.push('"' + aspect + '":' + expression); - $getters[aspect] = $parse(expression); - - // initial set - var val = $getters[aspect](scope); - if (typeof val === 'number') { - item[aspect] = val; - } - }; - - for (var i = 0, l = aspects.length; i < l; ++i) { - aspectFn(aspects[i]); - } - - var watchExpressions = '{' + expressions.join(',') + '}'; - - // when the value changes externally, update the internal item object - scope.$watchCollection(watchExpressions, function(newVals, oldVals) { - for (var aspect in newVals) { - var newVal = newVals[aspect]; - var oldVal = oldVals[aspect]; - if (oldVal === newVal) { - continue; - } - newVal = parseInt(newVal, 10); - if (!isNaN(newVal)) { - item[aspect] = newVal; - } - } - }); - - function positionChanged() { - // call setPosition so the element and gridster controller are updated - item.setPosition(item.row, item.col); - - // when internal item position changes, update externally bound values - if ($getters.row && $getters.row.assign) { - $getters.row.assign(scope, item.row); - } - if ($getters.col && $getters.col.assign) { - $getters.col.assign(scope, item.col); - } - } - scope.$watch(function() { - return item.row + ',' + item.col; - }, positionChanged); - - function sizeChanged() { - var changedX = item.setSizeX(item.sizeX, true); - if (changedX && $getters.sizeX && $getters.sizeX.assign) { - $getters.sizeX.assign(scope, item.sizeX); - } - var changedY = item.setSizeY(item.sizeY, true); - if (changedY && $getters.sizeY && $getters.sizeY.assign) { - $getters.sizeY.assign(scope, item.sizeY); - } - - if (changedX || changedY) { - item.gridster.moveOverlappingItems(item); - gridster.layoutChanged(); - scope.$broadcast('gridster-item-resized', item); - } - } - - scope.$watch(function() { - return item.sizeY + ',' + item.sizeX + ',' + item.minSizeX + ',' + item.maxSizeX + ',' + item.minSizeY + ',' + item.maxSizeY; - }, sizeChanged); - - var draggable = new GridsterDraggable($el, scope, gridster, item, options); - var resizable = new GridsterResizable($el, scope, gridster, item, options); - - var updateResizable = function() { - resizable.toggle(!gridster.isMobile && gridster.resizable && gridster.resizable.enabled); - }; - updateResizable(); - - var updateDraggable = function() { - draggable.toggle(!gridster.isMobile && gridster.draggable && gridster.draggable.enabled); - }; - updateDraggable(); - - scope.$on('gridster-draggable-changed', updateDraggable); - scope.$on('gridster-resizable-changed', updateResizable); - scope.$on('gridster-resized', updateResizable); - scope.$on('gridster-mobile-changed', function() { - updateResizable(); - updateDraggable(); - }); - - function whichTransitionEvent() { - var el = document.createElement('div'); - var transitions = { - 'transition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'MozTransition': 'transitionend', - 'WebkitTransition': 'webkitTransitionEnd' - }; - for (var t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - } - - var debouncedTransitionEndPublisher = gridsterDebounce(function() { - scope.$apply(function() { - scope.$broadcast('gridster-item-transition-end', item); - }); - }, 50); - - if(whichTransitionEvent()){ //check for IE8, as it evaluates to null - $el.on(whichTransitionEvent(), debouncedTransitionEndPublisher); - } - - scope.$broadcast('gridster-item-initialized', item); - - return scope.$on('$destroy', function() { - try { - resizable.destroy(); - draggable.destroy(); - } catch (e) {} - - try { - gridster.removeItem(item); - } catch (e) {} - - try { - item.destroy(); - } catch (e) {} - }); - } - }; - } - ]) - - .directive('gridsterNoDrag', function() { - return { - restrict: 'A', - link: function(scope, $element) { - $element.addClass('gridster-no-drag'); - } - }; - }) - - ; - -})); diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js deleted file mode 100644 index 3ca3db7d..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js +++ /dev/null @@ -1,168 +0,0 @@ -/** -* FileName ui-gridster -* Version 0.0.1 -* Build number ad58c6f4f8f8fd7f04ac457f95d76f09 -* Date 08/17/2015 -*/ - - -(function(angular, window){ -angular.module("att.gridster", ["att.gridster.tpls", "att.gridster.utilities","att.gridster.gridster"]); -angular.module("att.gridster.tpls", ["template/gridster/gridster.html","template/gridster/gridsterItem.html","template/gridster/gridsterItemBody.html","template/gridster/gridsterItemFooter.html","template/gridster/gridsterItemHeader.html"]); -angular.module('att.gridster.utilities', []) - .factory('$extendObj', [function() { - var _extendDeep = function(dst) { - angular.forEach(arguments, function(obj) { - if (obj !== dst) { - angular.forEach(obj, function(value, key) { - if (dst[key] && dst[key].constructor && dst[key].constructor === Object) { - _extendDeep(dst[key], value); - } else { - dst[key] = value; - } - }); - } - }); - return dst; - }; - return { - extendDeep: _extendDeep - }; - }]); - -angular.module('att.gridster.gridster', ['attGridsterLib', 'att.gridster.utilities']) - .config(['$compileProvider', function($compileProvider) { - $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/); - }]) - .constant('attGridsterConfig', - { - columns: 3, - margins: [10, 10], - outerMargin: true, - pushing: true, - floating: true, - swapping: true, - draggable: { - enabled: true - } - }) - .directive('attGridster', ['attGridsterConfig', '$extendObj', function(attGridsterConfig, $extendObj) { - return { - restrict: 'EA', - scope: { - attGridsterOptions: '=?' - }, - templateUrl: 'template/gridster/gridster.html', - replace: false, - transclude: true, - controller: [function() {}], - link: function(scope) { - if (angular.isDefined(scope.attGridsterOptions)) { - attGridsterConfig = $extendObj.extendDeep(attGridsterConfig, scope.attGridsterOptions); - } - scope.attGridsterConfig = attGridsterConfig; - } - }; - }]) - .directive('attGridsterItem', ['$timeout', function($timeout) { - return { - restrict: 'EA', - require: ['^attGridster'], - scope: { - attGridsterItem: '=' - }, - templateUrl: 'template/gridster/gridsterItem.html', - replace: false, - transclude: true, - controller: [function() {}] - }; - }]) - .directive('attGridsterItemHeader', [function() { - return { - restrict: 'EA', - require: ['^attGridsterItem'], - scope: { - headerText: '@', - subHeaderText: '@?' - }, - templateUrl: 'template/gridster/gridsterItemHeader.html', - replace: true, - transclude: true, - link: function(scope, element) { - if (angular.isDefined(scope.subHeaderText) && scope.subHeaderText) { - angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("tabindex", "0"); - angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("aria-label", scope.subHeaderText); - } - } - }; - }]) - .directive('attGridsterItemBody', [function() { - return { - restrict: 'EA', - require: ['^attGridsterItem'], - scope: {}, - templateUrl: 'template/gridster/gridsterItemBody.html', - replace: true, - transclude: true - }; - }]) - .directive('attGridsterItemFooter', ['$location', function($location) { - return { - restrict: 'EA', - require: ['^attGridsterItem'], - scope: { - attGridsterItemFooterLink: '@?' - }, - templateUrl: 'template/gridster/gridsterItemFooter.html', - replace: true, - transclude: true, - controller: ['$scope', function($scope) { - $scope.clickOnFooterLink = function(evt) { - evt.preventDefault(); - evt.stopPropagation(); - if ($scope.attGridsterItemFooterLink) { - $location.url($scope.attGridsterItemFooterLink); - } - }; - }], - link: function(scope, element) { - if (angular.isDefined(scope.attGridsterItemFooterLink) && scope.attGridsterItemFooterLink) { - element.attr("role", "link"); - } - } - }; - }]); -angular.module("template/gridster/gridster.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridster.html", - "
    "); -}]); - -angular.module("template/gridster/gridsterItem.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItem.html", - "
    "); -}]); - -angular.module("template/gridster/gridsterItemBody.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItemBody.html", - "
    "); -}]); - -angular.module("template/gridster/gridsterItemFooter.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItemFooter.html", - "
    \n" + - " \n" + - "
    "); -}]); - -angular.module("template/gridster/gridsterItemHeader.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItemHeader.html", - "
    \n" + - " \"||\"\n" + - " {{headerText}}\n" + - " {{subHeaderText}}\n" + - "
    \n" + - "
    "); -}]); - -return {} -})(angular, window); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/images/blank.gif b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/images/blank.gif deleted file mode 100644 index 75b945d2553848b8b6f41fe5e24599c0687b8472..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmZ?wbhEHbWMp7unE0RJ|Ns9C3=9Vj8~~DvKUo+V7?>DzfNY>Fh|Ltj$Y2csQN9XW diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/scribble.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/scribble.css deleted file mode 100644 index 9986f2ac..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/scribble.css +++ /dev/null @@ -1,40 +0,0 @@ -#scribble-pad { -/* margin-left:auto; - margin-right:auto; - height: 475px; - width: 475px;*/ - background:url(https://www.ibm.com/developerworks/mydeveloperworks/blogs/bobleah/resource/stickynote.jpg) no-repeat center center; - background-size: 110% 110%; -} - - - -#scribble { - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ - max-width: 300px; - padding: 120px 100px 100px 75px; - color: #486891; - border-color: #ff0000 #0000ff; - border-color: transparent; - background-color:rgba(0, 0, 0, 0); - font-family: Arial,sans-serif; - font-size: 120%; - font-style: italic; - font-weight:bold; - line-height: 1.5em; -} - -#scribble:focus { -outline-width: 0; -} -.c-link { - color: #486891; - font-family: Arial,sans-serif; - font-size: 95%; - font-weight:bold; - text-decoration: none; -} diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/slider.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/slider.css deleted file mode 100644 index f609403c..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/slider.css +++ /dev/null @@ -1,142 +0,0 @@ -div,span,p { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-style:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; } - - -#container { - width:580px; - padding:10px; - margin:0 auto; - position:relative; - z-index:0; -} - -#example { - width:600px; - height:350px; - position:relative; -} - -#ribbon { - position:absolute; - top:-3px; - left:-15px; - z-index:500; -} - -#frame { - position:absolute; - z-index:0; - width:739px; - height:341px; - top:-3px; - left:-80px; -} - -/* - Slideshow -*/ - -#slides { - position:absolute; - top:15px; - left:4px; - z-index:100; -} - -/* - Slides container - Important: - Set the width of your slides container - Set to display none, prevents content flash -*/ - -.slides_container { - width:570px; - overflow:hidden; - position:relative; - display:none; -} - -/* - Each slide - Important: - Set the width of your slides - If height not specified height will be set by the slide content - Set to display block -*/ - -.slides_container div.slide { - width:570px; - height:270px; - display:block; -} - - -/* - Next/prev buttons -*/ - -#slides .next,#slides .prev { - position:absolute; - top:107px; - left:-39px; - width:24px; - height:43px; - display:block; - z-index:101; -} - -#slides .next { - left:585px; -} - -/* - Pagination -*/ - -.pagination { - margin:26px auto 0; - width:100px; -} - -.pagination li { - float:left; - margin:0 1px; - list-style:none; -} - -.pagination li a { - display:block; - width:12px; - height:0; - padding-top:12px; - background-image:url(../images/pagination.png); - background-position:0 0; - float:left; - overflow:hidden; -} - -.pagination li.current a { - background-position:0 -12px; -} - -/* - Caption -*/ - -.caption { - z-index:500; - position:absolute; - bottom:-35px; - left:0; - height:30px; - padding:5px 20px 0 20px; - background:#000; - background:rgba(0,0,0,.5); - width:540px; - font-size:1.3em; - line-height:1.33; - color:#fff; - border-top:1px solid #000; - text-shadow:none; -} - diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/spacegallery.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/spacegallery.css deleted file mode 100644 index ce4fd57c..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/spacegallery.css +++ /dev/null @@ -1,18 +0,0 @@ -.spacegallery { - position: relative; - overflow: hidden; -} -.spacegallery img { - position: absolute; - left: 50%; -} -.spacegallery a { - position: absolute; - z-index: 1000; - display: block; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: url(images/blank.gif); -} diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/welcome.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/welcome.css deleted file mode 100644 index ea1af26e..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/css/welcome.css +++ /dev/null @@ -1,173 +0,0 @@ -/* Area Chart */ - -#areaChart { - overflow: hidden;} - -#lineChart { - overflow: hidden; -} - -#areaChart svg { - height: 200px; - width: 380px; - min-width: 100px; - min-height: 100px; -} - -#lineChart svg { - height: 200px; - width: 380px; - min-width: 100px; - min-height: 100px; -} - -#areaChart tr.z-row-over>td.z-row-inner, tr.z-row-over>.z-cell { - background-color: rgb(255, 255, 255); -} - -#lineChart tr.z-row-over>td.z-row-inner, tr.z-row-over>.z-cell { - background-color: rgb(255, 255, 255); -} - -#areaChart .nodatadiv { - display: table-cell; - width: 700px; - height: 370px; - text-align: center; - vertical-align: middle; -} - -#lineChart .nodatadiv { - display: table-cell; - width: 700px; - height: 370px; - text-align: center; - vertical-align: middle; -} - -#areaChart .nodatainner { - padding: 10px; -} - -#lineChart .nodatainner { - padding: 10px; -} - -/* Area Chart END */ - -.button--small, [class*=bg-] .button--small { - font-size: 14px; - }; - -/* Gridster (EBIZ) */ - -.gridster-item-container .gridster-item-body{ -bottom:0px; -} -.gridster-item-container{ -min-height:50px; -} -.att-accordion { - border-width: 0px; -} - -/* End Gridster */ - -#myGallery { - width: 100%; - height: 400px; -} - -#myGallery img { - border: 2px solid #52697E; -} - -a.loading { - background: #fff url(../images/ajax_small.gif) no-repeat center; -} - -.center { - margin-left: auto; - margin-right: auto; -} - - -#selectedTrafficDay ul { - list-style: none; - padding: 0; - margin: 0; -} - -#selectedTrafficDay li { - float: left; - border: 1px solid #000; - border-bottom-width: 0; - margin: 3px 3px 3px 3px; - padding: 5px 5px 5px 5px; - background-color: #F2F2F2; - color: #696969; -} - -#SelectedTrafficeDayView { - padding: 0 1em; -} - -#selectedTrafficDay .active1 { - background-color: #FFF; - color: #000; -} - -#BusyHourTraffic ul { - list-style: none; - padding: 0; - margin: 0; -} - -#BusyHourTraffic li { - float: left; - border: 1px solid #000; - border-bottom-width: 0; - margin: 3px 3px 3px 3px; - padding: 5px 5px 5px 5px; - background-color: #F2F2F2; - color: #696969; -} - -#BusyHourTrafficView { - padding: 0 1em; -} - -#BusyHourTraffic .active2 { - background-color: #FFF; - color: #000; -} - -#slider { - width: 600px; - margin: 0 auto; - clear: left; -} - -@media only screen and (device-width: 768px) { - #slider { - width: 400px; - } -} - -#container { - -} - -#title { - float:left; - width:100%; - height:30px; - margin:; - color:#222222; - text-shadow: 1px 1px 2px #A0A0A0; -} - -.content{ - margin-right:-230px; - top:50px; -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/area_chart.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/area_chart.html deleted file mode 100644 index 30ef2011..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/area_chart.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - -

    - - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/bar_chart.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/bar_chart.html deleted file mode 100644 index 0be16ec1..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/bar_chart.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -

    - - - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html deleted file mode 100644 index 94596e73..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - d3.js gauges - - - - - - - - - - - - - - -
    - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv deleted file mode 100644 index 406143ea..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv +++ /dev/null @@ -1,16 +0,0 @@ -"YEARMONTH","Bedminster","Piscataway","Middletown","Paramus" -"201401",8.27,4.89,2.36,2.17 -"201402",10.02,4.57,3.15,3.01 -"201403",11.16,5.00,4.27,4.06 -"201404",13.31,5.00,5.35,5.11 -"201405",12.82,5.00,5.01,4.74 -"201406",14.01,6.09,9.17,8.98 -"201407",14.66,7.00,8.84,8.41 -"201408",16.95,7.02,12.22,11.84 -"201409",21.56,8.12,16.09,15.50 -"201410",25.35,9.00,19.04,18.37 -"201411",21.93,9.00,17.61,17.13 -"201412",24.00,9.00,19.00,18.00 -"201501",25.14,2.01,15.19,12.13 -"201502",26.30,2.67,16.95,13.47 -"201503",26.5833333333333,45.63333333333333,16.1166666666667,12.40 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv deleted file mode 100644 index 046383e4..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv +++ /dev/null @@ -1,2 +0,0 @@ -"YEARMONTH","Bedminster","Piscataway","Middletown","Paramus" -"201401",8.27,4.89,2.36,2.17 \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/worddata.csv b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/worddata.csv deleted file mode 100644 index 13f0d020..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/data/worddata.csv +++ /dev/null @@ -1,127 +0,0 @@ -text,frequency -service,98 -portal,70 -management,70 -virtual,56 -design,56 -studio,42 -operations,42 -inventory,42 -router,28 -restart,28 -process,28 -platform,28 -manage,28 -loop,28 -licensing,28 -license,28 -integrated,28 -flow-through,28 -enable,28 -data,28 -controller,28 -control,28 -configure,28 -component,28 -common,28 -asset,28 -application,28 -ECOMP,28 -workflow,14 -waterfall,14 -visual,14 -view,14 -workflow,14 -waterfall,14 -visual,14 -view,14 -utilization,14 -user,14 -usage,14 -troubleshoot,14 -transformation,14 -track,14 -topolgies,14 -topics,14 -time,14 -tickets,14 -thresholds,14 -templates,14 -structures,14 -standards-based,14 -software,14 -reuse,14 -repository,14 -reports,14 -release,14 -recipes,14 -real-time,14 -provisioning,14 -properties,14 -project-based,14 -processes,14 -physical,14 -oversight,14 -openl-loop,14 -network,14 -monitor,14 -modeling,14 -model-driven,14 -model,14 -message,14 -maximize,14 -manually,14 -machine,14 -layer,14 -interact,14 -instances,14 -initiate,14 -increase,14 -imported,14 -impacts,14 -host,14 -function,14 -feeds,14 -features,14 -faults,14 -extended,14 -engines,14 -engine,14 -dynamic,14 -document-driven,14 -determine,14 -dashboard,14 -current,14 -creation,14 -created,14 -create,14 -configuration,14 -composer,14 -components,14 -collective,14 -certification,14 -bus,14 -basis,14 -available,14 -automation,14 -automated,14 -associated,14 -assignment,14 -appropriate,14 -against,14 -aervice,14 -adminstrators,14 -activation,14 -action,14 -VMs,14 -VM,14 -VLAN,14 -SDK,14 -SBG,14 -SAM,14 -RUBY,14 -Policy,14 -PODS,14 -Ops,14 -GFP,14 -F5FW,14 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/donut_d3.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/donut_d3.html deleted file mode 100644 index afcac359..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/donut_d3.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js deleted file mode 100644 index 9b3decb9..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js +++ /dev/null @@ -1 +0,0 @@ -function redrawAreaChart(){d3.select("#areaChart svg").datum(historicalBarChart).call(area_chart)}var area_chart;nv.addGraph(function(){return area_chart=nv.models.stackedAreaChart().showControls(!1).margin({top:30,right:60,bottom:50,left:100}).showLegend(!1).yAxisTooltipFormat(d3.format(",.1f")).x(function(a){return a.x}).y(function(a){return a.y}).color(d3.scale.category10().range()),area_chart.xAxis.axisLabel("").staggerLabels(!1).showMaxMin(!1).rotateLabels(90).tickFormat(function(a){return d3.time.format("%b %y")(new Date(a))}),area_chart.yAxis.axisLabel("").tickFormat(d3.format(",.1f")),d3.select("#areaChart svg").datum(historicalBarChart).call(area_chart),nv.utils.windowResize(area_chart.update),area_chart}),redrawAreaChart(),historicalBarChart.length<=0&&(document.getElementById("areaChart").innerHTML="
    No Data Available
    ",document.getElementById("areaChart").className="nodatadiv",document.getElementById("nodata").className="nodatainner"); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/donut.min.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/donut.min.js deleted file mode 100644 index 60c4fd4b..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/donut.min.js +++ /dev/null @@ -1 +0,0 @@ -function angle(t){var e=90*(t.startAngle+t.endAngle)/Math.PI-90;return e>90?e-180:e}function arcTween(t,e){return function(){d3.select(this).transition().delay(e).attrTween("d",function(e){var r=d3.interpolate(e.outerRadius,t);return function(t){return e.outerRadius=r(t),arc(e)}})}}var arc=d3.svg.arc().padRadius(outerRadius).innerRadius(innerRadius),pie=d3.layout.pie().sort(null).padAngle(.02).value(function(t){return t.performance});d3.csv(dataURL,function(t,e){color.domain(d3.keys(e[0]).filter(function(t){return"YEARMONTH"!==t})),e.forEach(function(t){t.performance=color.domain().map(function(e){return{name:e,performance:+t[e]}})});var r=d3.select("body").append("svg").attr("class","legend").attr("width",radius).attr("height",2*radius).selectAll("g").data(color.domain().slice().reverse()).enter().append("g").attr("transform",function(t,e){return"translate(0,"+20*e+")"});r.append("rect").attr("width",18).attr("height",18).style("fill",color),r.append("text").attr("x",24).attr("y",9).attr("dy",".35em").text(function(t){return t});var a=d3.select("body").append("svg").attr("width",width).attr("height",height).data(e).append("g").attr("transform","translate("+radius+","+height/2+")"),n=a.selectAll("g.slice").data(function(t){return pie(t.performance)}).enter().append("g").attr("class","slice");n.append("path").each(function(t){t.outerRadius=outerRadius-10}).attr("class","arc").attr("d",arc).style("fill",function(t){return color(t.data.name)}).on("mouseover",arcTween(outerRadius,0)).on("mouseout",arcTween(outerRadius-10,150)),n.append("text").attr("dy",".35em").attr("transform",function(t){return t.outerRadius=outerRadius,t.innerRadius=outerRadius/2,"translate("+arc.centroid(t)+")rotate("+angle(t)+")"}).attr("text-anchor","middle").style("fill","white").style("font","bold 12px Arial").text(function(t){return t.value}),a.append("text").attr("dy",".35em").style("text-anchor","middle").text(function(t){return t.YEARMONTH})}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/gauges.min.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/gauges.min.js deleted file mode 100644 index c0fd7484..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/gauges.min.js +++ /dev/null @@ -1 +0,0 @@ -function Gauge(t,i){this.placeholderName=t;var n=this;this.configure=function(t){this.config=t,this.config.size=.9*this.config.size,this.config.raduis=.97*this.config.size/2,this.config.cx=this.config.size/2,this.config.cy=this.config.size/2,this.config.min=void 0!=t.min?t.min:0,this.config.max=void 0!=t.max?t.max:100,this.config.range=this.config.max-this.config.min,this.config.majorTicks=t.majorTicks||5,this.config.minorTicks=t.minorTicks||2,this.config.greenColor=t.greenColor||"#109618",this.config.yellowColor=t.yellowColor||"#FF9900",this.config.redColor=t.redColor||"#DC3912",this.config.transitionDuration=t.transitionDuration||500},this.render=function(){this.body=d3.select("#"+this.placeholderName).append("svg:svg").attr("class","gauge").attr("width",this.config.size).attr("height",this.config.size),this.body.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",this.config.raduis).style("fill","#ccc").style("stroke","#000").style("stroke-width","0.5px"),this.body.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",.9*this.config.raduis).style("fill","#fff").style("stroke","#e0e0e0").style("stroke-width","2px");for(var t in this.config.greenZones)this.drawBand(this.config.greenZones[t].from,this.config.greenZones[t].to,n.config.greenColor);for(var t in this.config.yellowZones)this.drawBand(this.config.yellowZones[t].from,this.config.yellowZones[t].to,n.config.yellowColor);for(var t in this.config.redZones)this.drawBand(this.config.redZones[t].from,this.config.redZones[t].to,n.config.redColor);if(void 0!=this.config.label){var i=Math.round(this.config.size/12);this.body.append("svg:text").attr("x",this.config.cx).attr("y",this.config.cy/2+i/2).attr("dy",i/2).attr("text-anchor","middle").text(this.config.label).style("font-size",i+"px").style("fill","#333").style("stroke-width","0px")}for(var i=Math.round(this.config.size/16),e=this.config.range/(this.config.majorTicks-1),o=this.config.min;o<=this.config.max;o+=e){for(var a=e/this.config.minorTicks,r=o+a;r=i-t||this.body.append("svg:path").style("fill",e).attr("d",d3.svg.arc().startAngle(this.valueToRadians(t)).endAngle(this.valueToRadians(i)).innerRadius(.65*this.config.raduis).outerRadius(.85*this.config.raduis)).attr("transform",function(){return"translate("+n.config.cx+", "+n.config.cy+") rotate(270)"})},this.redraw=function(t,i,e){var o=this.body.select(".pointerContainer"),a=o.selectAll("text");y=a.attr("y"),dy=parseFloat(a.attr("dy")),a.selectAll("tspan").remove(),a.append("tspan").attr("x",45).attr("dy",0).text(Math.round(t)),a.append("tspan").attr("x",45).attr("dy",10).text(i),o.selectAll("text").style("fill",function(){var i=n.config.max-n.config.min;return Math.round(t)>.9*i?"#DC3912":Math.round(t)>.5*i&&Math.round(t)<.9*i?"#FF9900":"#000000"});var r=o.selectAll("path");r.transition().duration(void 0!=e?e:this.config.transitionDuration).attrTween("transform",function(){var i=t;t>n.config.max?i=n.config.max+.02*n.config.range:tNo Data Available",document.getElementById("lineChart").className="nodatadiv",document.getElementById("nodata2").className="nodatainner"); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js deleted file mode 100644 index f78eec70..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js +++ /dev/null @@ -1 +0,0 @@ -function redraw(){d3.select("#chart423 svg").datum(historicalBarChart).transition().duration(500).call(chart)}var chart;nv.addGraph(function(){return chart=nv.models.pieChart().margin({top:30,right:60,bottom:50,left:100}).x(function(t){return t.key}).y(function(t){return t.y}),chart.showLegend(!1),d3.select("#chart423 svg").datum(historicalBarChart).transition().duration(1200).call(chart),nv.utils.windowResize(chart.update),chart}),setInterval(function(){redraw()},1500),historicalBarChart.length<=0&&(document.getElementById("chart423").innerHTML="
    No Data Available
    ",document.getElementById("chart423").className="nodatadiv",document.getElementById("nodata").className="nodatainner"); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/worddata.min.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/worddata.min.js deleted file mode 100644 index 6b827460..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/js/worddata.min.js +++ /dev/null @@ -1 +0,0 @@ -function dataViz(t){function e(t){var e=d3.select("svg").append("g").attr("id","wordCloudG").attr("transform","translate(210,175)");e.selectAll("text").data(t).enter().append("text").style("font-size",function(t){return 1*t.size+"px"}).style("fill",function(t){return keywords.indexOf(t.text)>-1?"red":"black"}).style("opacity",.75).attr("text-anchor","middle").attr("transform",function(t){return"translate("+[t.x,t.y]+")rotate("+t.rotate+")"}).text(function(t){return t.text})}d3.layout.cloud().size([420,350]).words(t).rotate(function(t){return t.text.length>5?0:90}).fontSize(function(t){return wordScale(t.frequency)}).on("end",e).start()}d3.csv(dataURL,function(t){dataViz(t)}),wordScale=d3.scale.linear().domain([0,100]).range([0,70]).clamp(!0); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/line_chart.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/line_chart.html deleted file mode 100644 index d4ba57a4..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/line_chart.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - -

    - - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/pie_chart.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/pie_chart.html deleted file mode 100644 index ebbdd9c0..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/pie_chart.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
    - - - - - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/wordcloud.html b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/wordcloud.html deleted file mode 100644 index 6cf00079..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/html/wordcloud.html +++ /dev/null @@ -1,36 +0,0 @@ - - - Word Cloud Example - - - - - - - - - -
    - - -
    -
    - -
    - - - -
    - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_drive_test_map.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_drive_test_map.png deleted file mode 100644 index 78a8873bbfa7e99dbcd07844e2739beb35736238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202465 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⁡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 AegFUf diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_county.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_county.png deleted file mode 100644 index df471d7d8591af0fbedb1db3405d5d8e94443f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21222 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_regression.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_regression.png deleted file mode 100644 index e59fc189c0ea74340c764c2d356da7bb9487d33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11536 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 GnEwMu?xSD; diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map.png deleted file mode 100644 index 174ef9b8e8b47a2d09b02962270cf1d233acbb97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192031 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map_legend.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map_legend.png deleted file mode 100644 index f7f2719ae94b0d6440803f985ffd14ef441863b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3021 zcmb`J_dgVl1IDjt5e{*OvqzjLs&np)NY3ao(#IwoXYVdfDC6Ypz0c;dFETUA9-S*P zvOl)Wtb}}h{)g`m&+~pgzdS!auP0ph35tn7Uc|T((y)pSzHHw%R!^ zcUp5Ys-RT>07?wwiPfd^e9c|M*b4w)?)Xm^k|ddV002g7O*It*AB&Al z7v~$@T-|3c3(&fyEl{n=F5T}%@4pcdVm06i2VK#1MvAXj8CgT+*<8?qhNeNHF!28LnG6PNq#C6S@w-L~AkWp^Igntf`QozY4T)xgxzHvfc_IEn76E<}ju=9$Dt z4d^Z>>v@e|1R4q%fo@g~{905|FDGnQc_xarLy`r)eH3CZY5A;|@-RtJqC!@hOxz|W z!+CE}7LrU_6ne<{r_jMZ%=T{VkXuf#9%&JyAvr5$qh9*2saST$?+*;1kord5XVd?+ z@~%R4e1)Xh!8cAOA9^U%gv@9&mfi{rCFdlQFVV>iZb~%hzhM&2`w}88&WjmNsQ87E zWz;>Z@vG)R88he!8p<2)y%9M$?yoizO`y3b8>vzrWH!J`ukqS6o2c1!uDX=T!UzRr zccy0V(86Ml05Pfe?Yu1c_MFbT*^{`k*ku?pQhn}5qjfrWN@ZA!Js0ezE84q?aaKXa zYm*Ppa7`y_hM7r2S=G#obq3v(Q&P!t+b!nW^U4^P8i*TXP`kPo@8i zSeG|LFZJ(%#ogxdh)t zlaopy(zkHWfu8Wiysd)McSBvtpbVwg3C>sFxsjh!7!;;@`1W&^t<*7$YcNC@+kwdS z^2wMlKY)2uG+#q_ex(gjQL41x_dWWk)Q9o{f;xb>2M}0_EK*s1S8vJh2PyR{#aU#1 zzAIc@FRr7l*T+4k>$!WQ0)e--kQH@41-7ZLF*Zr>{OJ!%Eb*g(IbrSqoNz>k=m`!cShzVi6-kS?2=dgM03lz z$wCdb_ej+lRmBlZf`mCi(>3I8jBi24lr!BCME0@IOfiRi<5f!DidwZa1o>hdMv2dn zNmtUWXDBP$Iaz{pC#>RKbfFy>2^)kJvFz>X9C3~*{uSrgd+2W-k^O(N>LEExOA8rE zBQPm2A{1!+sdI^ckaT#r4&KFbOP~<+Arr33cX=0NMObBjuhI1 z3PTP$QTB?PJ(2*cnEqAwk1Fv#MN`PZLj9s!vnAAd{Jen;<0A3eF;o2UG-x>9w_@z0V}14vdL0H!{L8rjq?hY!pNH!Ad6 zd~qXv=I~F6x#pWE7ybilI|=e{MZ7tv$|UR11wp0%BvOG@zzzgbnE^@m{m1zwgZ6*`)te4k%TsoT8A|hXW|okpzc-X>{v!{G zucc-3?&bzGS9Q4i&50XZ1-a#pcoSugb+2eOrXVdxceO5>_ON+*#Og#&G6;JG>DO+6 zaaC5ff9TS5t;g64_MQpwALgv5!3_3Y9}v-zw_Sz(F!+^YzUZyjkqi$*hT2RKK4Lu| zKi^bX!lr{ohZBB=IcM1POKw@A&cG&|PM;)z6y+y9r_QR;63{0HpL5jQV$(DwYs0M_ zEqj|QQc7rr8uc~@Sco8wV1XVVKXAl%>~3f=IgJkbtR~jC!P3ek8gPY#vpYhMEOJIz zFI!_P2ggfUd6Vno%3XrlsNZ4^x(%Nrvcqcy_jX8xsGd(pd34sHS?_p%S z6Y{E~dhvF2@i-3)Cu8`;$EmYdo3HTNF4H{JO1AaF86l5DSwY0^_(oZYMMSP}YX|C= zx;V;D1dUO6ZkStqjPy|AkfW?c`R?)W&+JkYvvndBk%n>)cFMD|?9&xOB@b;cdRT&4 zM#>UABAQkvsQ8(~BtNcEO!OB4W|N~AD?`+NKi71U<8s8H=4KQ9o>KSVcaM{b+!k?^ zZ$zggt|Dnkq^fA2OeUtaJ{cylqYk);0ZHF}8s;RTt}dEg-jI2D1iaWNJbl!(6Ak35K zT=mBrKa-=t9clh;PwIAF%iRi3gr$A0GtY2m4E&CF8~P+ubBo>T>EAr^Ob2x|xZg9H zH7jrE&&N*Sna>}8@xvJ%r7pwP6=gnYhGy1$tVeDmQ|S~_{h3k`hGuuEuk^MRqC7S2 zSGC|9sj@oD+1A(f5t8jGG|V6K!HaKWnEzfLl_t%)I)2m&ngCUmtVRVIENai?$l} zD?8ELl%xd5r(FBcM#CdVD~~+b@V=cd8~he_SxEMbHoz1=FJuTXnsl0kYK^`fxau)^ z>Q~k3?F01lRx*Cy_-Eo>TI=M+2A#80Rub7PH1IEK$xeU`iL?$R?cnCf*yS*==_4Nl zrpCR94r;W~Ou^aKmeP=Rt3s^am$nSbp2lm#AI~%~*P|Ubxciv$+2yP9LR7@9bv8`rzzGc!eX2%}^~*)zi&$V* z#!%v-nll*9#DW3ih{3uY6+iq@(cOKCqPSu2dcox7xU_ytcUSqZwFaFPS^X`>1vh$A zU7pr%h~xg4*o7?8duk^tOVli1FZQoC+TlQ!fjCVrBa#XEQ}A_cTAVMkkYX69?|f{x zqrXi;D>hge@eED4$;h|_S1_X^?|>~szmCGbaY}Z{X?!nzx1*BF#~DYeu|_Q<=Vb`+ zV-&1W&4@sFM|24Fc1!!!4F~K`p>OS-MSL5Z-=R`Gpg59!(DgWtbznFuCeTMs5ve9b hc__m6e+1ocWsqRt=Asl`{`mz5Xg+$PR-yVl=zrto!Oj2x diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_nova_sdn_map.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/carousel/slide_b_nova_sdn_map.png deleted file mode 100644 index ee0ddef913d9203fb1dcd752a9748c25566bf0a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179361 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

    &`J;XCF}C}D@|&>9^xqb8BVpoGA;^#WWD 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 V3~|ceSquOG002ovPDHLkV1mEs$szy% diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/1_mon.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/1_mon.png deleted file mode 100644 index d46eee50533e46db5ed6c7579f887da1b552f996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22762 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 IH-CHdZ?zgZz5oCK diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/7_sun.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/7_sun.png deleted file mode 100644 index 9d579d680b5f1d25f0b6bc6de121e6be6c990fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22845 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 N{HfC6JE={)lc zpp{0Jfr7Ek*==q(pq)BSYBEm+I-4Qp-Nud=z%J(s2EU$t3BYS_x*n%cV2&Aab*VCS zo_kES?k^Gn_MVHBZMdBSruA78GtC#078uJx?M!@tN%x+=pxU|%gcCY|x3gXvz4P28 zOb0;WuF$gH{Orq2jZkqYa>_d%vxt#4KNX#-Op1%sae`t|P7<%|6Us$tfP>LE1tEaE zFq9be6sa5V@p8-R;HDQp$iq@kkFfI9!6g%$S!e4Z2_9*$?5W7ZuXi>$7`~?79qNh_g*=;U|$CdC4ZiuH}CrO>tp$kR9Y6Q`WoL+ zft^>gZLIatQ#z$;F|!^Cqan{c*C!UgZBN*jj+4uHIp}hjSg)fqM2mF507Oy+#M<@@ zg)j%QRIWDwX8>M%6Baf}g?RMnb!)UKGVowImw`jn8V$r=?o{pd2Eu@9bfiSmBGtMz=Z*_snDF0lS2~~5m7-;@Y!CHUfZ;@t%vG6dJhO1SHGJzsj!L~ z^&Rh?sdh|OtD|U<*h`F(Q-AghUiNPUKuJd@&Jnqt_r@-)kp*^S4VQpia}h1{aZi;T z0itPJ=leurH@6IFS@LN#siOZ40Q~4`xfoaW!y^<}5|$053l`c=6(jM@C3kSLkwfm_ zi9R=j$Lbx~yIx(~mlMDne+oTe{yVypKq()xT4ah8{h$k$<$1-5E1-XyZ;E6jmHc7K zgf()1{7fSQ*faR#7jL?hL*71+Bs9R3sw`M>Ye2C-wopS0-}sW}simdGPlda1>Bd;t z23BEXMlI=qXxzH9!iFs3`z=PNP>#cHA$QyFqCh22oI%hkZ0I_40u|`{^3vKCW*n!E z(!Rg?{92=VJU~ztc5)(I=;|nN52@fRAy@ID8-Q4))ch=eE#bt}y284-g1E<^*y^dl z^N|%>zGN6zKmH)tQz$n4+SfRU`lR1Ue+C6tp?+WX4SCc0>iid?AcPADq8pqeftH{4 zXaA(cATubQ_iQ|#yKkgZ){gS&VmTPK?ikSv%|hv zT9z;TULeFGD0SV9j-jF}0#o@T-PHAhyG_)4tS-4lfzKVK0{F=9JsnV^U$C6xgjj!GvaVBSSGR(7Uh?=> zg>pqyah4jFinaqe?gu@A;IaDn#SLtOunxOT1vye*7UNTv%7ss=SxR!mOOfX$Znbd* z^=B%t#s#V#KhNwNEj7b`bKTo~={ied%d}yg9iCD$*}I}M#hKF&3`MvRfD+n?0XJn_ zr9JK~?vUM+QTSEo{!GNi)VFjmyBDeA($a=Motl@D?DK2~bE;dL$Z?B|@VA#Fk!YyP zNQ!m3$9g9pLNEAy5KIp6+tu*~tPKl_wD6fEJEkWQ%2dNIZ8G~}lHRpCGvhXNrafx` znG7FzWyGSwQHoR@FyXorgjtzY3+ZgDuduP@A4bkzAZiIPHtf3Td&C@77o;tG-gx093(xl0Yq)- zD&2EOAZVils=rmf+0J3wxUDLjO{tv&!cjr37vFts(0x{zsT6g&S^8Dy#cAsl25i0< z2oe;G?w@-kmfW|1kn#~HW3g4Dg?n|)X;|K%LF#j3q-VBe+c^3W&begtB*2R(<+=cW740onDC0Av`%Jt| zwDO{?98AJ;UI4kh;#5Cb;YSardfh)ISt^J1^>ME4$67rkVd|{1Bt0KdA1N>^FYQ%= zP6p$d$}d3~?*XGMd)~k6Q#7+GfRx|=6H5T7>!fgvJiEi)_3kzWuUt->P`u^&162+H zHIT-b*6h}joBDA>X%|3*a7r2HzoOyxMNzgzD*$babw^e#$!)z8IA=G6B$N++1`)oK z9heQ~yl-%SFM=t{>~1`f3Y)3-a%LB^`M|fR@QB1EOpbuy&Ey9F8br6i?k;Ol{o`*` zl$^EqHLzz-E&ztI%M}<7Ql6``+>QVteuE&Qw|`by~{(nj=Of!Y%w?Lp0g8f&k|e*USJg~OGJ*%4k%q@)OzurA&ieEr2HJUseq-k1Hj z6yraGs~}V$XxiAQN6es!T&8eNW4*`_ga`sPVtXZ5bJbF!O9{$IU#+)M4yIeY$nDBU z&z?nYATNQY&4Rc`LyDquIy4z`g>MUUC~Hf6zO&&sVZ|;brg!A)+w&xR+Gqll;~bTJ zNo3LwK|=AOg3?eH)bV0AzfoUSsweLX^HM{JUPuA@)qvhdQn0HDIbv}jlq`m=h0fw_ zd1NY(Knwz!_r)M}+3DXK*SSH{)nO&l4~E}u%tsPviBhwls@!RLuQ)%GE} zf^;PHOToqXr?i2y`nGdwv5ALZuMG!U9KPwW1U<6fCqL@rqo|_LPW$oIOau+%TO@!h z7@Xk><_fQxhLKT{zOJv1`E23)!zdlDl9%e!CG>h8HfnbSS2pD( z4IbEPhMoF*3OExYO_ zxoxu2nf%OjKI6r3NZhYmyW!*YpL+qtY3yiGu6jC)&nKYg!ZH_$ghqP*8hi5O$;H-F zVAUC7=qlWQ@p>ZaCB?;u<%839J66++A^PF}}))&gSd4sBrWRg;2;}Xtq&FWbsdKHYF3jj5`0WSaNdH;8#7p}+# zbm&8^OM7r8_)uEba9>tIqgQ)%iLt*(F6a@I|K2YqCXoHA&v@-GRJPNl`z$@N#lEkFffMESxh7(L0=+x`MuyACW6EHr2XUXVol z({+M9XyX*nV`|80ADpR^yk@*ZJV#1PLk{}FNBh#Zy`(UdK`;?0ezK-P{4r%`HSjdq z&2H4w^r>kk6}|ToTgN=FdbRXB#Zp+~Pd;OZKmZQ}p`IhR!D}Z=$?!)N_@g0aeGKEJ zOJWFuO{(YefMU^;v+8$xYeTNSIywOO6flSE(oWgfy>-E>n=@Hwv z(!iEc;3V|wR-?7)uYaND$JB}ZQPQj~-zUe}VW`J{xGPn#5|b2B8J!ryWfZ4gS6|4)@cWb{1l$g$q>G za+Cl${`Ure2m+`GInXqk6ZJ`12H$Wmfb#5iV3!z>;Gm7?r@wMbZEMPhiv`fy#L5rd zY&bs^*0)pZWd6Pj?Irh{w^T}9chBTJ35HD8Vl_hSqNiq@)JT1xMDweu5q!3QN2y|Y zSV;W`+$>B&hUIU7NAsv1wD5cRLgh35d_;q>QX8;yKv*J!8$-R4c*Q2dxIquCKyZNY zxGX24N|CT8IV)D#OD(jiS-d_`bw$~!E9Hktd~n)mS>`I(+S&AJh$(XWSGX0Uu4Zc; z2`peHN1Ru@ZL-;=uqQ8ck$4JO2FenEVe8y3@P}zE)j;)M7z{PkF{~uU-dT14nvfQR z6gIqO{Uu3)5uiZ?fj^pber_4hf^!WQ1Z&RMDp=i7qX3qKdiFy-4M_%6lR+o=Her_B z^iuRH%%C`l_EorW-J5|FcJ(4RB0a`E-EV+-iJs%KrPTyEibl0~3;quAxS$_f|2(Z4 zs}9AYMVxQNM+uW5^`(*SoL-G#Le*uI8dnW~p(O>58q1PEyhZzf?wZdslUAv43cx!6 zUWO$ot;vn&W6r|kbbl+E^vIwM+k&vZ8woz#f#e7km2mYfc4%pM;gq6IZG_m&JM#Tn z+R$4}{gJHkSgHT?8KGr3RUEE~G z(JzeQ^NQG+5dr-F_M!|Ub&x^~5D#AzC}TvE2xXm^hoJD9r~Z6w%q znSrYI zWh4|kVB4H6-51RnAm7dF+?TwynQ&-4+^r7SLN zi`cnGLKX^90)4#siFFC;YKMCZF{W{h+HmMplMwv`m@L_BQtC3-IJjTRYd!<&ZsM47)`W-J9a_L(J1WdB|0 zFs3@7R+;fujiE6wnFN}}^y3Nzx-HlCzD8*V-%1{x`WW}iUY89w1^YE7rCqK2G5vYF z+QWxri%Ux?;~ExhF1!luYA{&ZlbA%`x?9>m3a5lYkc%-u9Uek~Td{d)WtHQ|VRx(9 z|Iiap6qwO?Sg3b!ygVB~i{!u^6K6{~dO4)s{)Ac&x1)iUAXwmUGQhm3F#?|PzWFsm zobH_I;WvmX>~7eK4nuF4i9}~_b$N!nb5gbK6=pL;zQ8-CKKC&48+3K`E8BhYr4$G1 z^2a&{+|2j}p!!ZAe%bC3op)gYLnTH3pp6^uJWqNIFtV*A39U#Nx^?vi>u#|$fBpig zFrk*lD29l>e2rG^tKU*V>}>!_`(AeHGbkGf(hJIK*YnR{#Ly zhewYdO{KlF&YIFZ(*aK31k&?Ji{oSq^@C6V=K$i5Zcv&V?jkb)-!iPc_dgg@qb((O z9xvyqvgvAfYPCbCsO(`lsgqiNr19W$L_&~u)BNRMeN_pC+DKW;99*)FM)y3Ytb*s(R3J`HI zXp}9z8R;S@9OXp{X^7TFr8) zDUiueTr=Axrclpmk5Nil%rLRAy;{DNy2NHCVY|MClXTYgUG8}$G-3@FfnRSR`%=LP zaz~pAtkZ7Wy)sXj^-I;{`CPQ{b5GpT)|xh3Xl0Pwugd`e>?S%{%yqhBHYci^goFb( zd*36{f*5~(e*k=RV#NWuC@aPX-$>*_bzytxS0MadC zsI?~lJ;-ST_ewar@ozhSo#S)==CI}?Eqtnaia~ZT`r91t zC8GT9n8gs#snSa9njDWTsj(e=i`ZGAB)tTRiL0CC*A0RI$u!ZlQ$19&Y{xatY>yx{ z+Po@H0q_%$@xd->D6QWeE!0amJKV7uJ8 z?K`i7eQY{MfKxTaKVmk?yj$M@NI@}(#Lr*q?Qy`w<^h1RIYl1Oz+%(Y_<`5K)3sdDHt(10*-et^j;%HsDYYFkn-7 z2bUKHlcCT!(?>gB)Xr|5y8H8rj#fnu!wO|MbvnvDH|QK=1(?ErZLExpmM}D3&qr#n z?DNeD3^d+7+tH3Qo3Gc6p2^t>x3I8)1YkGkS}Oxj15$;|noR!egfk1!$zvfMiGw+s z@2%tvd-!I(Z)H1<-(2cBJ;nzP0-A7Dfb6cG?f&+%^{1UH_fwz%$#Vfh+IN8l0Omxd z0_~S=R*18wl?Lfz-9>6BHRk8O&U7fsP~xc-Fqcoa?S5%vg9Gqi$5?(qE#7?swz*P zmUX_eM#fyA&5k>IAPkm|e?%R%v+N=Gy)G!Pi|uFBYf0T;w1$Lx^GCN(YYq+xhi{G{ z@w7Y?rtMUP2Xe0*Hi^S;b(PqRj!b}d>TqWX^{TFmP0KmSoWJWAKO6tttmQJcYr~2q zq5`+A`0e^1H5V5@q~Jf;(VxU;0huu1#wI`l5>kI007l-_VRPhu&8)O%mF1(qK7B^qs42hk%x+3OiWIH4s zG0^1i%X(4tx9-)X_%C0sn&$p4?-mkmG9)AOST?8Iu6C@$Vt2iCkcBWSJS5QKrS>D3y3M(-^$4L zHd?cB9QljH-%Ml);NGa}8v88`^QhHqXHZCmNCI+FG3n=eO$k1m*O{xG9MAupU+U%a z#a!>Ymkhg~X)=@Uv&4o1@b8~p{xcHRJBD)mf39$0>MW4HR@r{6Z1)1L9JF&}m#stI z(Eun$jadFI1zB>fai8K5K+-FzGCnsKxbe7aOat;{_Zy(UeC(~FRt>8NL$Ak2(g&~% z3jlpi_|LOtk@OywL8p2;u)<6sG77@p@|>8v{CzZ;%<&q~IguL6H__7$RGR zkeTc>CMHp1#vX$jq2E2|*YmvZzwbYD&gaZMXU@6r>$>jmwS6(%fx)p?pCP98xwdq_ z+;-g^v@8H_ft^(Z&Pv2dk*2yRKXi1}JG}(M!HW3Z-nH$kzNK;8W=>88Y&Gc8mr)!6 z-b4M<_t)(S3-H}#4_}<Le#IN=N6x#ixGj??c{o`KzRB&hwOhW?$ zc5+X0+V$R=Q>*<|3M@=W%SSBHUo&Gnur|6N&+_p@PFq_19=#nu?g~xwKG_rSX{*Ej zF<@Oc(Zr$cU>onh$=S_Hq3)mfdv!6x7<^cpxs0`E7yW$Cd&F`sL8<5huRjU%1};Vz zaX0D6dK4IJmq1UCSl|TdRi*4UuIu6NeEi&(&nkA{{--9QogoW`CTH9 zCdQ^##i(xVU>V97QUvoJI=wMhtSQr{TZ7I{GhAH;8=BWSYuAtavd%zO1WNOuAuP{61 znPT7X^DL@=FsRpFcg+(Mp(j&I`LtmFGl zV2L%uWMFNputX2$ENk0iIAo$zg>{95i)F)Zr6+N%y|N)YA)`7_MlG>6bJci2 zjH8FKWStAC2fpe={UE#M7JBqQ+m#8ZSMsKm3|eQ^>V>+yMwQ&9 zeq^emtYdUkbEBxF5M=0yAFV`@VPon2mF022jBaXVZKOjZ*A5Urcvd!4t{lcODf18z zSykg=g?BT~$cMVjSVG*{Y7Fv#>)ty(Se4k~wV4;-sIF-wfnc>fa!3kn6`T^P#fpID z$Adk?EJ95FD*y={+f~^V17D8%JExW9t7zp&2tnewMIS;#mv*`hFg0-3a1O6uNd>KZ z?*R!t(6wM&c^a#ZtAyS79NDMjE8gjRsfB}ND=_nxX$V)+0lT{7eMlv^?>)}g^^!%# zPK;Omk}jN4{zMeqd&Qe6N*plNKPsb$>+c4111uI6oYv2-$I7eGkZ9ON0dy$jaB zbc$Aaa;|%W8$!NteoIXa*E9%RXTX79x4zozhmd1i?62>25)S^SGW?OLb&qG$RQ=Bn zJZhlPNwT-VAWf(5UyLDJ`RPM%{HYmjIvO1Q6MavSckgaW=*BbWZ9xnFCE%U($3Ff0 zIiU!!@n&D(y!KG~xLU%)YhxCE-n{>uttg2>M?LeY4?VHU;hwU|cgU=0=WiVe$!pt4 zKP?gx=PjfIx>!-Q_4qC8u+>P5h1Uuju5NPwOw44d2P-bl4iD$cSYwZ_6Qr$}z2q}@ zhAt?_#bH=Um4NS4gH@@Zk$1EUMB3v&6{}J)N}=anW^NWujg*#>jycBF@19{22Cg`d zU>>qGY=ZZl6pRO!0q_h?b_D~33tql_1V`or7;?!i{2poO#JjOmq4WkM$*u^rpFm9= zzMcy8!Uvb6WVVf+N;PGI!5oA4%ksA*=NhTtn4&+A;Fvfscs4a&?YJp5a^2)FyC*j^zk=PdUdx>>XQE zQ1}M;zM|WQkBd)!D0u|R5YE$Xf=+_Snxqq5%&fjMMzxLknY8y=;?B|fyH3mLr-UnEE<`=wvl4Rg=yToOj_!T*wu&=n2H`g66WscT z+LXP+_;vM?9$7lyTbfcgnQ22Wgwum6hked2886Fwy}YE{tQOpDHaU9?7M8u=Ds1lWw8+->#)AX0n?~U2T=XMRSRJF?} zTBf|95a zus&YtsC3jWZ2nxB(Jc9B{Fp)|^i-K<`p(kwvq3ah> zoX?#}woF9}FsRffkn+i=d}Rw=pqX;A*eca^G2mC*Yk}T@d(rjSy+N+x!Q|5q@MQso zRAxoH@(s6QIS8#+(EMv%&)(|oG;VWxo^K_lNJ;?}@!;jVzJ#Ff?pZA6wt{)L@5MVG z)IU=8vtCXa=hp~-J*{p|eOp<*(3{(OeNYG@g-oFem|vYSOO<4+Dd!bD6JsSJZ%+@J z_-szi3JeX0=}`fSxoNG}o^EgQ-B#|ko=P#&-p9QPyjD?b81trUlLzxu+FvdN97NcK zh?Rs`5pcDBS6@tp9CvUbf{Ru}Z0*l!qyrlz_9Y~?e`2l}Gov6a9q1*AcNF)e37nUo z92XcnDott~#9JUVl6&x+PhXx$RpiDMm0m4NzmDXm^^6)=jJp}Z(eb-X1X>UPs9u0@S^d@nnG_(UUnxd^#|uRQCRW#vK*Wwu1NK z*=}9m#?!CwS@vdg7DSvIiioRK^r)N)sTl_Eguhxi6@qtsu~Jj+ zSO`9@zE}w%@|1&xV zKkxFT?;d)=QD@t#k4ZWbZFEl?hw8c}|n3~6_U$iaO=l8bPawbKce7()5#1=%z1p3R{`c|+y$&{ll% zFKGe8=l9g68ODOdoYJPH> zk}3Ck#w$~<7Be*<{raQd)vEQiV|+w&{duQuZB@0{{`YgmE>oAJFM5Mj>8a7Ra9=4d zL?ThHKeNswF&+l)q^zDa6?6J$H?Slz5j4LRbx&{K_`c8)OkGhhEJ!876r1ah*h+@e zxS@rGpFyp%$`a30#io4_*(4PatGb*5F1WsClGj(~>B0eDUVatCwsxDc%hhYqC9(Y; zOgZa3TiFc>GzlzDcTk#rW4j@Ni%0>m9-Av;NF^Cnm)ZpyAr)|}i{LHVR~4y(npKBp zQm(!TQGcHGvwr{aAeElA%nKGIF=WK!zEj=G!TuiZTknQG1Gun!%zLf z#Y_VKn_ACDJk=aI$)}UqD%Gslm=%^Cd{N6Hc2B_6tBG8#}^*Qr%Ci8g$&1a&X$4M2NsUH9R^I;yI2(7mbcRh=tQTuCzTZbu>|E1 z)ae8C2G3Fy89|`&S@Tpm+=gAFC|E?W$UlK8e|C41P4+)XWq%XE{h1sJ8JzgWc{ctxC5Kz_jgn zsI|~NQwhem&e9sBxHkT03m;vu4(>YJ&r}k8Q=?h>o|r<uwrGdd7f(Q$1jyUHbT(GUbT*o za7Qt|>(&^;O4$OUY0>K(yQ8U^syW(LQLZ~3Tygy(UG^FZ*;~KwF^HaZkDQsH3J099 zn+ZB!ek^Yi!m;^$o!Y7k3FyP#Tj|E8t_OshdLUiNI7m@zTde;B7GE!*U416fMQqak z&f#4}q6|$6&;?`3_IY~%0W09#HK#_-cym*B-H}fuUF;lG?xM7tg`UgS@3eR9Jh|_4 zpLBx=Am#;QL9v8jUU9aA>WW=$!VsmaIt{8?(TDRRX)WJ^BRJ$D7e)7hwc-V z(j7y6gpf_zR};dBo=d1&J=p^1i>p9GtPtu#l!3a;; z3NkFly@cOJ?$b`L%H~(r55w}8jmmX*%)KHIdYAvKI(}pK{!6jkd-fds_Z0sn=cd|_sTDJo`eP~YkD0~!-6m&^E$K#|h#v?Z`;r1^oALlY z+;x7Z)MIlIG8g+lHTrtX5Xlk>pt^=>=lEliT! zOXz9DrdQ@`vI``v=?+1tIgBRG6VhJ1matj}u{;pGTOKNWIF7~Z)B=07mhgc%7pJ$Q z(7nAXHl>5o@4h@$co-R}88Usk0|k#%(6sajVa2T+tRm#5Jx@<-jF4W}QnW_^AXz-w zxNhP^dqcYKK?Zc05&Lj9v9%zpoi7nY)a`+VIprCW#a8xGwf=nNSbS>D#sVPYO%8b= zusD}yY4_Q8y&a!!oaTQ2#Fel*1!BM2=Nnk>ak^BF=-5PCZ-r;C18XWdtnSK=xd|nM zwG-z$4n)0})CoK8bJ0b?ZC#(l)<+YM~P#!=R+DGmF6PWIT~l#>;JOUPi)qevJ5uqqCPEhRz7 zho}Lp@3t%^-X%pPFU-7ZuF8dQ=R^C731ogP!#T;OES8t;C61>9R7G6eFNA9^ERs5M z`;o(IYxKRw+Cc+sbHCEIt$(+O^tr57Y@5N_(wjO}&5OlUKTp#UT+f{zP7meKclxWS zQ=ohFC&`VmF)oYmb!P@=a!a^$hPxf|jQW|wuLa3&BJY7AkVeJ!$8X+md{M+KdMs?0e?6+si zaVj<~wu-m(dHnzV2$4{JbNvHXQ)}z?pLf9=z>sMkZthF>?x|&0Uq{Ny%7zP3){jY{ zY=_##__#O@2`uOT`6Fr@#B)S+NzS+Gp`u`1dotoh=YG{5M(T{Voj2c$Z?V^T)fz5= zs{9JKrUAXzFEAjySi|2C>ga#+{EBof{%~RHsA-_D1&c9!H^tS&hxVHiz&CZXMous* z4V!8-%4Ck5w62hp#TD?R7LEbbJX`<=p7c)~DKx8Wjh4_lrm5LuPkUBTTwL7QGIQ}| zW+vjbLDEd?Dk=zyN$`&~2t+hUD<^bufF~qka%@Q20$P?=gSIr2 zc#;$&^2x3ckkYT8h(^mzPp43E)QTk<9O*pLoJi0N{GM%XZS4;!(o;}yT7kTjgya(| z61Mx}E8z<;eSp)-RLG`q|l@*;?T+49P^cd9ajLt4FP7vP_yQl))$cK6LP z+G4c~CIzZa5C1&TIwiV$wRGeH%SlY6tkSL$i)XxM`1K6=iCPRwrVQYy8&hmQ;?nZG z38Zopcd2R$!5s0OLGq2Wr@wKdy-JaiJ&9R*IcG0;3 znq#lUbu)8y$hChvc)c4_ts>W;GU7tet7F}=9i&^~b4yn^S3L%Ir7SvyVUAKtf-qAv zzQZV^0u!^t29rOXK!{QT+bf&az)ZQJa+@Y#tXdD}Fl((6xT_vBPUos|U*%2_FL%&o zF*@N9la1p=CXTwG)qZJF;HjIZWA+RR+|kFZ z1%^NHs{5cc{9uQm+qx>v@nV%E`To&S&P}|5xVw43E@WVqG7Wk1Tx2dbc1eL|7^jDv zyQV%FJNw$U7!0d*s(W-DId$rk??l&I!*)N$oNsAGllkQ8^W45o@73@W+;ZhGYZq5n zQ+@sLy!`yFPoXVLOW>0o@>__q!q+GmsF$2WQ%S%uW)%hZf(X1rmaMsCFHi`BHFekh^25n}y zdetuyWNK=vik(x@+rE7}ofncG*!!L?8XI6k!3;43ms3u=YGOQIbk?t6;eJq?>}m)S z=J6sIK$LaB0x^K?5Kqq%uhGIcZ{A3pi{XzAxAlait#M%AQhsykAHL1pnmyn)##!$) zskvf~Y24#(9fzv@-U`?lagC!|;7NbC5_^=1!;PCaZ>F#Iz@jDfHV~ct8=B9elJ~ei zsID*v(hbzH=X^>+{MNol>isF{C5_jbs@e7f``6*0gVIB&+P?4!TYZR9A1N&2B#f|r`t%8FFpPop!rRix+kkWbG=>1uA-hR1N4gA+u2Cu=7gLV(Qdcb{&3Pp{ZP2}j(*;-P0; zn)lT|H+;?9{kr|=x-P(HD723%;v?)SL%6daa7lRGeq{YdB|k+C5b2(yE$D0TYYKS$ zE3kt8oT9(x&R@UoV-mzR>7eGOVOSL;i%(|cWIyJ?s1Y;!y+yV^(aE;C#vKq(KY0pD9M&shcG3~^6KTx)YZ3v z40MWn)s}5p{ue?`&hBr(>Nx^rZhHF8dc2u}Z zS%Afzna-F?xd%11X;B+>>vV6Pb;ihEh%ktd>Dnh9G@@#j@oUZz{LAEggZyeE@bvfZ zv0fy!@!EZG<0?Kr54)9OWNdcb$9GGiT=Yg1mn$xbzDilL*V4%FwX-Fwvx zcaYC!i&8XBRJ52wg=+?5t1(2==YfvP0yXB)%#rIgRWbANp$234wdvTmmf8@KTV4p| zp3=!&iD`0h|8mOTf21s2eEB6q)%3s)qsFg;e4dbR3VKaQkFI8f!mhgRb7mP{X%8QA zcfa$=MRjy`=9ib3+qhi7;xT0oy@jx^xkh3_3_TXr+>;i7du=g8$&G1#vRirsFDml^ zbB9F*{pajFOp$aOnzqZM^a!B&>_{{QbQXMB#kc)V44_Wq8hSqTDmwKA$-zHob?oBP z+y2$|SxAlw7E8pNs$3_k-lRlH8tZ~$Ohsm7rY5%2gLrIf6}N@XCaoBG3#YIMXGL*! zF#_WL@eB+dFNt^X@$oV8%Bkc)XY>|kUgpno0@wkD>yh0hA@LV z0su0)x~DTVNosH3zTLBD&&`q$=De|ujSbv{l-B)ccHJ@!UNUKge|hSb0M9bNat*cs zWE3r46mmzj2&esz;kn(?SA1X)DMWRv?L!ei=3QN)EAupFLqD6C_@wN(+q|SgcXeqn zKJ-3mOfFn8rY?P1zG|p7FhvWD0Adx}-Kld*!;^%}g-GI9Gc}HnN-BZZ>}6C1>S;OF zWQt4aAjRf$mo0M}B`Sq6-Go5aA1nB_>u`A0G2Pm-5(mN~g5vo3>9qY69Cbb9PF^Z1 z0irxU$4GiVv7CjCrbsQwCm(vs{9Z4d0h+31A|CfKsGS+BJ;&ppN-Yq?2Qm+xWI@OZ zl3@W$G_QInIFZS!BOIP`TnrC_hrA;_=mJr@@k+x$F(nnhd}5jSb5~}Kh&N5TvR@6P zr9XAS{vo?Y5)&QSm*%KnFyf{=oLRo&*KKtbrlZueG*E4{rL+E8SrI?igD92_%W^Wg!HJ1Sr_qXXmWO(oW4Ir?1* zt6GX?I?k4(nrA=D$oaqJRu)W*eWMx|lv5h&j$YAvdg{@?Q+zZt0-?)vlla2~2jNdF->UfBl5PMuY^PzzU0> z&8`M@NB%-c_K->rIe8B>`yi@?H}h#ygTD8>5EwZ9pz3Bw2uF}~@dq6Sw*;XLivH$6 zNd}t*{Ay0fGY=|uJ4|DX4^^HWo?N6`Z4up!PQpL*{PP}WTEDt-#9H<7R%+0FelxWH z>xt|AwtT0}HmexFWd?p!z>m1dkSDNJ??S=msNDQ}r$IttVWBO%pBbf(yuJzg>w`HM zOS5AwkN8CdEKcA4!sdhC*0(-A|5}?JWxf8`JK+q|IgP%FT;=bqbGr!ZE4 zU8Prslu4^Ro1}e;5<39`fmA|Q0u2&et>R!$Jzn|{y#lbDkd7C0T3$DZ)#~*L{K|a^(l$27^&O z78TdncuCOzabHyuv@l||=|ooJ3uz+(i_SuGwyjLXmU@sV)RtX8k`qkBAstBhz+?IT zP^RY=&8#e8F&Eqmr8UaV8yKL3zrt+b>#0d;Y3Y`QVsdL2@w<~IBgB8&G+2c~qutHC zVx}82TcPohqz_2t++wn6Yn7P=gu7w><_{b_cdUOLDCr;2%Iq$46?;{1IfaW7PPWVL ztr|)_Pdcst^E+BqxCYzf=9v==OOY`Pu&>ovh!zvYUVLEZJ?y8|F)MJN$@m{Wh7g26 z6G#5K38C%Ba*~#^#VARzP4Dv(gbcORsO?~XL3fE}vI z56GqZj0)TR8X%jvjl1(>niQ?*H%ds-tQkK>jn*bKWJoO>zYC_`tbsRd<>#8eWip#y z`M)^vv<&k*K-WLpB4~&E;48k5=NE!_iDOaBZ220`sW+cUTR0KLjcx_v4@tHCE)&)S zZ;eX*TWobiA0MPXaky&>+`Ni&`_f2e_#-bj+2}US!jj)Qz6Dg{)7fXCOae-3aa2!v zP4|lK+$?G}>`G8(vHGJ+cQ3u+PP=&wS@Wr=b8B2ISa$D(Rwei_B>veKob|p&7&dC= ztC6H#Vg8ST-;4QoCp8>LQ!LXpH}xlhMe?Bwxt)PzxdrRB&YjaO4$}dskr|gRz9vPu z7x#b8*4VYbk=Uf9f@e$AC!o0*awmM&WbV#VJq{1G8HbS}A+xROg1qR=q;Yom@kcp6 zd-hE0P9upch(BBMnur3E-vm`ukrm;?vk)(k*<-n?~7=Gd{n?V0oR zco+<3rrZ*FDMX5PgI$-NnVoHLRx!4)c+s-pW`__J6;uvf3nH#avQ^mT2_kODvMW2e15lEK-SHAC1yePjz8 z0|SED3A4>RrKolTK>c^0 z=)@^e73ZDVVN83iyNmL-UF5Oe`C>;HDBBIni$1KYY{MRA=_f>BqfD0Sdb2 z%@-GJRfyaV^MrgRmbL4`J?CJG0n#{j=Q)8+4wNKzvRO$$3Ho_u@lnFPNQrw694N>@ zumPrRoi2<+B+-XJ3pK&y)Bs6zz#(?^QS1Q%R#W3BzX5>B+ReWiWdJuC{qp(TqWZW7 zHCb70v*02`d8~O7(S+(N;c47*8?=wUxBn4wqxB@OTAD&DO`;vq5BP(f;X|Mg5YaUC zW{m}QVEm-fjQLtM_M;3inUoE8fhCn_Fy#?PHP;&oNWwL>3 zX!!lr9(SbZ=-~lQPR?+|xFX~6gW-2SSp(!V!D($7P%kl8GP#R~0y*ppcR+XYjXh{FwD>6AA6Wt6-6@oa|c07C>Z# z`~o&1ikE*vwFP3&Ce*bZ_*oU+AaDO0zm?l4>zi@In89Jronfcth{;^V9$Y;yE;%A{W-plQGa<+$M8Gw?vRZ0pH$plIGa{^vm`Ce?1{16652g zTauNNpFbDS=V3g?;Txk-EzZ+%*X<6zxpprvtMfQ9VXO&a^@KZ;+w_gB;Y_ppR+#Dq z$;il90)g}c7%ub!S;fB+AC0S&f3``Ee%3$H&@*J+8O&?0)NxouCbC7_>aR_dWm_?N zuNBb#_B1Ny#D@94?uNgsZH16s)(dscFx}#Z`=gE_jV6Uv&j!1d(m1E}`sISZX3j z5#uIi!sr?7%=4-!+wru%75i$r#Xx#OiH(xmvpQ*k_ zkJEw9zq^Q}(H_G3asa5y_|gEjE2C*bU`Z=f*ji|JZAi5PBQ+u6m_w!4cK?~7Qh%yt z_nR9J*lW;AC9e@ZV?s}#Ji#_gy!wG6yHE&N070TOX!bU*fPnuq(Ed^W0}6Mag0={= z1eSNp&8vfOCb?b*hJ>ER#3W~EfzcO{ZvDA(;3xJ4Zrx}D92!Qj13%FO9Z^#wC_-$Q zSRw+*|IeK@=Q)6%m)LbE|I^BJOpKE`hIS)UYmoIP`f?PxJ*G+BqUBg%w}?=C^=>^R z{Vk}vnfc9)#i=P-V3r}GKef1!ORXDd%Z4w(i^|qc2jrgtJev4C&&iH5zWmy!?nNm$ z4J*s5NyIKbQFgZbcJ%2Jos%Q|l1VlnOv|ktlOA5U^l4!vDpdKFY4OVgJjS?!eV(b1 z(8V}?ULl~@DockTY-KjM*4%M%lq&UOad8zj6063#mRIMY=TM+id-rAuw`bcOqHgZ1 zR}-OF#Td9!Mr_z4MYV-PM|0#~4O6PvB|7qlKwe-?m-gC+J?~ClQaheL!2s2z>KT~< zaF?!JG-H*XEQ#x(`KgR`;uYt=c4$|YYtOBQb~zL!ELc1X|unD)^I+I+|x;sPF`(gFS>8;lkCP?`MY zAkOjK%Dd&7#l=PAV$mp14H48B@C#Ya@4(+`%a~zFx$=IicAM_&p{q%I$HX$%>IlM} z(Tj?4!4<19_fwm>W@kghbc3Cqg$e>583&651$t}jFu6i}2i;6ig!S~`x@vQHFa~`*s{jq{_Kg${5bMDZT-kXw&t$wC0 zR#Q`v7#A4ibs2TQ&FRT>itFD_ku5~gsYkRD#K1p>H>VjYIWZT4%6!g{5THn`T*NY_ z6`Ukx;U$uv;c&(MlKpm3q2%w<<5NXr$ppvHT9@UjAs!bNdTvjp3}~>j>%67BydKk0 zDe2|gon1W|^<@Dl!soKqS>$1d=Fi}0HO%4#viT|N`GC~Ux|xxM&uWX4 zZrCqa-&*KQ%pB?&TI@PoWex28V=b})%r1&RO5*p=Mz|!d$a8frEUSc{WaHmBWuqF+LVP* zu1F?_Wl1?H2qnb687bAAoQa&G5LEZ<+Na=De8$*+Mfa&t>Ipb_m}p=Tcf9uWSW|vd zG{wi#R(U!(HW6ODmQ^Eb8IknTnKkM>9-Oqlz$EbQo2vd@b{?yCH``=9A(LcfnY*i8 zyaHK^ZXk@>tsGP^pE=H{M%(i6pfK_VBBq{G4rPiz;|Rt@(J0mDn@uX1o~VFEu2+jxK;6|7z}2gk7j!}EF;xB3_qzCa60{FLAMy)i+$I5K&T z;y_uzNc7Peqv{u3tVH7Y4c@AmSM^B9o&}r$Ip(9EZTV~JxDu1s5c?a_YAtxWbW=f zx9wyo?1wP$S31&UoAlkCy0Yv}#2%nyE0OPCb#PMu>5g9=TLL#8`CG?b4s~D*cE{n+ z{E%5s(t>?J+|p!u{&djG3nsn&{gk<{9uLuQ-j=lGsYm@jRC%?51>b4x#f!}o-?DS( zJ~I2t`f-I`SbCD(h`mk8Qk$i9YnX2sWpZDTvDiUeS)Jb3IFrin+kn^Km;ayIKga zMI2Q+D#hB*3@O82uC^joXFIqgq~O)GM@jU!)6F5vzG?J`mDC&`_XSI*vb371aoL(B z7PuH)Ik0AM4B~-!|MbP$dBV74RQQ-m*pZ`UPonBiw?+$y;lh`*_K1y)Sv$%lh1Xg7 zk0vC`m#tVEp3oR`xtE~ee2ybGIZprvf>hf>C=|)4m4=7;{uic@GN13MIip;jjfiXe z*_4%4K)Z}SEVjZu`g<;3918&r6+aRBhJRDm^48Ms8BaeSux_wJ)DO2%d{i&3_trAd z2LIsIj+4`$DXWE))pU&&qm{iC76jEk4Q^P&{9*qPbEV~0q;JOIF|j&SSvl&8Rr}&4 zo`C?Q{c3%L(&{O2%3h1!iqGtEsreyUv{cSmxYh;9g*o~+wHvAG+_1Mlhb|3eOJ+3r zPRK(OOqtIm$)o46BR*Fi);NToLt!!S9a5|K7Zgw2!C`myWS}6E;XY0b$?k}dE8tuH;l<&pNd4) zJF;p&m#S_V2%}g|BSoHQp*ja|+V(bGY>qP>JZ!x@k)b?U=2U_FzL!4_2++n*1h!g! zk(IV6C92?S0y^?YB1et@3OJ(W5gi}y8ad#%nBd=$uzIL|xlCF)ti_Z9$%zjiu7cW=>TL}TXMQw2di1CeWsZ)H<~bWM z8b40AkPqj^e4=YYXb(R!g1X7UOF#V>8n#wet~B)|35`Nh@briwrF{>AOMTb~rRND*isnToz|9J6 z3bAd+yjFI)G`3tZD*T6Ai$cZ{K79Q6QIMHf*eN8Caszz=H_^A7FH?BDdmLpZFNx;# zKg}I?t`M7@CG==|+MhkqEL+1f`17tPa}{nF1cDx?2Z|G1Sn8yt2=+_^0~Pm903Sl~ zEJ{jB0#E8BO6|uCMh^-DuZY>oZJ0}$6i*b|zR+0I4ca3nhQw7DfCpZgi8Q@!YHV!g zl?pwGv?{&c#B*-jxYNl-KWbhi3fB9KkOwKgdzUab9!TCREPUC)A+Pe2w`wVLpxCO5 zdEf?bE3qi1WomLBw*>ZxUaHbD<*D33Yuck_N9 zYUcKpDkl3im}bcB1Q3>X(~Jrx#jxfNkHG=(HL`S1wGe@w9!Hj#7C6l8Wd_ zmpL4<8j6*7pagasrw&eE8}kD5r+w*G#e{*NWp7jitMe-ba=}z@eK#>!#_hpBXVQ+? zU2m*tJQSyZ{PsAY3^H_OPK0_9ym(|4VT{H3eK|i4of7j8fDfkH1Xj&YUC8uzf!pQG z`NlEgGbB?*z3P2=7ZTJ4k6jeRYF2+d>Z>`8`S^fRkHV5U*4=RIOrTI-e*50c{bzIy z>Q+*mRrFB0ofRMs92B0d(HJ!IqHEfAM0G5Xtm^dku2m8R{qt# zYT=_HbWoNzajzp2vN6;aT$=An;$x256_L5it1HX79a)k}hoxZW@&v?XxFjWI_(Xe+ zt|JSP`WH&#$Su!f;NG*>vLR6eL7nkNc$As0wZsY?b|ul&6_dlpHrF+t}C?lWahs(ztm!B_-ZK7?nvJ&+pbRiZKz&l~n(i z824XM?_c*Y4$~q;*-Mo$lRhn^OXnA&Oehi@f4G^djSK z`1RwP!_)bhJ=dGp;?Sot*4on&g?YfnsMcCTQ|mH z#-`HlV5^NmV0~z%c@AapSVBTVsV-dVz@a8jJ6JbbX1DT*3Zp{oD0T{;_Vnoyx3>27 z9@N+X<%GPvk(~|IC47lw5msViS(Zr;JXl0n1dpm)wsmxnJS|nSYY7t*6Ov{{m}=aE z1@Z(O^r)}T7StZM;M6sX@WKV~PL}3R9YZ1ho`0UQUzY8QPkCmPq28aT6;dVS166Bk zJ*QU`GylUnVCkmWY*wvFlaR>0+)TPf#}-VDL{A zJcrpHh&;dbv{0GdVa}%+HzsiVCNp?Ivk0SHE$UT1zT6?1Zc%@?=3HrL^uX_i2bQwL z`MLDw90#-R=S{#$oND6goP{_52kK7RhReezZu>LImQUR?gD ztYLNIeV5n^!ZucIC&vcIS8{)Cl8+}bE^efNoR|DYKc;yZx>~fP;))e-k55Yx(mWOw zy(5)ZYQLOOgaUEWOa7->^gyUFcI;(gQ!Bvm+#xHWcT6jlZQT`ir6Lxs8t)gO6A%DRlXWFjg-w*e{CB_eTsIFDq+z zcQ8P%98;sri?j^wS7?aY(c3$WO49LcOC6KCRohT`yU$ydp`E8av|3x8)acvsXrQ$1 zX{QR56XPIc*Zti}e@c)D^8M|nu$roZ>af&^m!g9S{IZwpLxz&G7n$kpPYOCBlv*Fk zFAjXIi?AcQ)iIOXKfSEfCkjbvzo0aAkF{N!N3mArQLoMc%7u@L(e^Ig_cdd%Z5<7k zhXh>;n;TzmQT{rcbOg!gzKFoqVX~Y*7t3aWQxyRDS_<_>Fu` zOZ6i?e@3b47L1eb++Rx2-)wEpw{qW$G~THLCmajya=QzcSi-@lWbClHX$$EC{zDH1 zw>a8N@CIiyy7HCLim)3_?b2H5O@G!8HjW0U3W1&=)DMW=y_**Ay==s*(;_v^B zH(2QMu003It6v?)hwAGqZMuhDM)XaaD{mJ#ziucvBHcg>YNkLibSEzqdqCBW%p*|B zOeC{@Q8Dwh+a3fRq6B69p+f$$KkCLWM#HCL54pz)3l7g?y~M(V_JsW^%u) zFJ5sCwZ-_ERaK|?cIPS^uZ1rUo8D+CLG_uCBjR)55cpP>CSl zPrC@8pL1ar3$0dY-}3=-K8^?XRTX#Z&&$clO;2K{7OIRN|Dl%+kKH4?uv9w~GNtti z3sqX%ADCNBKJ?}}QE(Dek#OCWSWr+PP%dt1`l=F9Kig}keDkxesG3hsXWz&28!qjS zPxjU0Lmg&wN(e4(>08#88d@DQ$rGpu-%dTs0h$d>NUn72{AHixs46oE_hZ!QR)Md9 zHNx7$A}}O?+fZnxpzozq!wz0dU-Tq6cdBkC@r$lw`Sp8b2qE)S(@g{~FE4#`F*z>} zg`1-_)i{i{NEw6QUM(&uQHJCKI>}I{;m2#h2UYx3*ni+Gb57$C)!K`l&`p;YJv0oKmdq4o@ z=~=>(OxS<&948l7Sf4?{fp0Toq0=q0X!&tq+o8LtwCUpaldQ#7O?toIAL|gty=V?{u(`-Q^)A2X2lOX5Fo5}Qwu)kn2%uSSte?s9 z_VtkksW}V#HlGS3>8m;MZtN^h){Ku73BRjFIQxb_8-8!+15rOn@|HJ2mZ*KMkE zLRwndft;D1?s|sUlqk_(JoQ{BYZzMe65AR1b z>&)#n1TP1dPhRp~I2hyJt)Hb$gs_CE42W^J&JRFlH@<)0+EZ+v3m$%-;6OrzUl0{w z%ECh{%#$qj^9;B^%YV(NMy$-hU6|Ca=<(W;>L7+~8Qmfq6JIT$rJ&GGZ#oNmY`__| z^z#QM6TY+*%2+mE%{mK1nkV2P6xBc}d+piKZ`!eTJEilx-CCywbW~@FV`oFww7v&2 z535vIBXJ$NY#9htOyo|Sn0@8q<|bAVGijWV=-Ma^oh_?@m}H$cbO@h!(P!FnadDy5 zhlhu8r~uZ)r)a=FDy!OL_C}LCB1!aAq4|(m#OaHjkVO^)lPMc<8Z8KoKTmZEzkK;J zCa8JYzb0Q~^_9M$1%2muFhEF1wYWT2TbH4i}s3 zDRcAIaQXE0TCB}p`M5p!lwn9h2W~tIe&o~c!|5`@HqJIDnsP!)7hN~QACaxO5eomJ zF{wlZq=Wl?{asQa6DNa5Gu?j0%f%`WmPs9~S`5t)a`#OVWZDEXHE@Ylofzuz-ALFm!>O-q2%< zN|L-;>z2JG5Hv?5Wwyk>ylSDJ4w&Vw&(59On1ZNRg?|d&-zkq+oBl6@4LEU(amR#+ z+;w)qzW0rcIUAcVu!>9-m8`6vu7{I|Y$GrX4R$z@5ROe?O+?c_Cr!lDWbpESC zU*gR~{)*?h-#-2Vc=qa0&LF(Vde*nF4o(Tk(qE~W3j^14ta49bNzA%r|KW5;RmZpP zM|3AVr1hcPRSS!!)%@(z$f2dFIj|ElIyOd^V5Un$xoh_@(@(XO3vA#gV3QiOnd=H9{R}VF z#l=Ok22j`fci54p>izMLhTC|zPDvoP8=MWew4|lq(A7!XyWA1-6LqDhWMtmmWJlP0 zy1I~ry7MKXMx~3lKN;cvy&Ma&vS4c8|#)$ylyw$!#zn zA5?y_xiMp)P{cyjckl(a`vmI#8{hct_LPx3^0Purq3iI~!go zIfzbx)a}#=OcYZC*a$98&$_>@f0mdK^6J1^Q0@tY_)DXgDVN5CAD<0yEz+}|IeqK< zUzD0AsR(i6Y^4Csr85XUW7k&g4;F(7X=G@yAES!}MxZHJD80mlmulb@i9+HAlp+WB zC;>c_y;3MyA{<7O3!bbU3mocs&WE7;D9w!yVtP+b-Oe!OUV|6%o;5HktI0=xnT_Oc zDm`11uTk_nbl6Z5Qp=9#Ul&Xy5@m99cwn_7_{ze)w2n=z!Mrh9?xWdH@@Q&^uiveX zsOj64h#T0zErHsM5af-{PaFDh3*|43cV}y|9XWFLv~3Jl`D=EYuibe6dP9se5aO2+ z8OfnrCv)?uK;ay2{MB~!*v)TNJ65q~DrqlG#C8^SB^NbcW% z3`q7f9%33nFFN4?Jt;CKhfo1z~t4wuB$yRRe7FI<-UsZBp zKO_hn)bCT~wa_oi=0$*7X<>h};+?GuPJRFWy^n8jaByGDL4a+FuuG6Mb4UrSxLdrm zC^RUf4{Biw(OzAeiRRLhm2E;EKq8TVUYaB1$S5i*SOf{H%o2sB9ui-kaqGnNe5zD@ zluVpwzhz>=yHsSt9SBx`T2HZ$@A&vQK{8izw8_z!R7A7DsRMO=Y6k#>nHUpN5A-sr z#8WjOH#0L+>j^Jn=YkVjr*}>PFK}867vx8DV!&qD0_u2~Wrt*wM(^T)+U2VJL z6e?b%-yq<6!%j&MXS)HqQZUi!sOkSbuA^(EZE2sJ+1woGZ;&*gNKoW6%D1T;w&ZTa@INfudf5I`r~cVZr1+Jo06o+_yWMQHZ1+spm1Q`KEr0){y`_YMmx|nrr2AFiqXk%iH^5R@Q-T zvW=ac{Os&(VVU{zO*2F`&ID~@VW#s}yM56e``dZzH2;6M*1qmHzYy!c_q(8`u1=Ft z;vXX@!MXW-LG_KML=Q*_-RS>o5B}3a|C?=FEM*MUJNBYL@)s^#C|udi{;H4wXsoR8 zcdx>iVV^49lE&!+_%N*ZVBIGs#MRBs2oTcabcJKbi1-4SdQ_H9Usu6Jv^q(2m?QV+ zX@HL>7n>J()(dy!&}g2e1VGMoD|LVWesiAH?`!PncJ*p1I|j(L;C@v;0Rfe;+!FJA zd_hT!&nQqL_JX)NJMYH}Zzx-!!MW)cPeDDb9H0vAsbQ9RRz*d{HrMl+6YGU7`f`7? z59@i`pM}q!W#UcHr7GImgG@+?L;wleGm*=W?k*|m_C#~C&!qhNetZ4Yi`uoGL^0U? zKDp8v-p$7`Y*xFBEph7zDqtX)z%&3D#XrnFi{~= zeRu;?Zcv9^6mGb_7>DS%|LI#V2T*uBOr)S)?r5c%szarPyRSRb0oY&viNL@ zQri>ZR<`QqFBq1YI&X|@`c`UpIGsBs^(UlI)tI8=^CdL)fz1H(CxamL7)-92p06t$ z?}8fvly4~jRIM5oaqgA3X1ED9j7Gd1d!>B7^nGJvqoB^u#D0jIV2h5(3HOpyw%5~- zwBjGk^fA9`dF-zIORu}`V#`u+$~39>tq*c0+ot;)b)LuLjIUStYG<$Ejj(%HR=sQc z=b>t4lj-?`Lotcz-v}!5?<)Sdx*Jb;MO6+OP`oBJ#PogYla4IY?k+*q3L}I1kD&vZ zwf<^Jd7(+5p*Yb~WGYLG`h3!e1-rRF^NwMH`jw@7~@jV}G%Y zWDWPQ%)ouCHuD^(27L38)S8#X;zf{5KTX7k(P6lcOYxa?j!-v8%${E(+^1@z|lC$)R<^+7Ty&KH+<6cqD9P|o&+3=;R z#lQevqlZ@hjxN&t_O4CptJSBDUV)T>{k!)bDayugLtADNf^Al8o==o&4k=HBUQ_ke zc}_90OFQmH6SEuDa=fE|7*lS7Rmc>TX?vUDv1;^KR4%qs_%e>NyoAlRhPM4V#g4Oa zR9<3wIX#Stwhz;xIX~PqcvtVmNgC_v(Sjacs`^&k=&d}3I9mi*-*G4U1x1xvUE^gk z(jvk?YQ%i!f*Wx1WDW)p=?fg)!)#> zYlHv8{z-;nz>3Z=eQT_}dkRTTln|_Goh9REW@d~wXuDHb&!|v=&rdcdqLm|hy)&gq zr^CV@zE~`OWk=WS={XF?F?DAc`*taNjSt2V>aoF)njNz%+Et+RN!qx(D0c9oZySk> z5PO!Mm>z`EZyS|~Qsyb~?IcTXv>0mh3Lx>tmOHtHZg0zOJ5Q@Ycs@giO8rxEHRBIk; zh#`b?PHUcGNK$iKRER_oL1MUD2X*fK-TVLD=ehsq*<$aNwRhH9-}}Aq_kDXkylSk+ zzfWWz8yg$H{^g5iY;5dw;7@ihH_)O~ccGPy?PRe2#S0bzL)1~eYZlYEd2dnQr3Aw# zm2Q3XMCaTYw_wH$aiF>R7pK0F-_-(BF8U{A(9%&K2YY;n`aiiHN~KHv`s>+8clL6; zIN1|q84|E$Z5cj7N*=Om0T?Zxw=4X{|(afPpdJ-AjLvvVV;hy)l)atg7yKH7uxf zeR;*Cm2j@ci$8tL;Sg{Lt@TU&6>d($J+<;6O4S~HP7Vm<+?&M1;?*We=qR_2w) zTQ1&Im)!8GF;vcU|NO^f*qDFR$U>B+K|2MAEEH?%}(EI@9c z-04pg$r&;(YtzXI$z|HQ<7$_6TYmOqLbAgcMK3+No=)iTomdzhZ|@op{W4SZmJgoa zC$FT|dMO*Uu};uzJblLhSlnSf0mD9)x5ANVp z4E*bKo5t!Z+2~*s8ZN)F9y^%_!3U@CG_^G*)rBr&Wm)TdWn%3KPyg_rBvMMBSSQ4^ zE?92KZ+I~qt~@q*hEg3Yhh6w%M3X#x$CxcW?mDOaoY5j9qPoL>b86mk>CR-DO>a4K z(j_T+FvatD;LzV&nf?L^{=Pk`TVXVOogz8d3mHUfStE3B4X5-VnJBNVDtB)BR-#?m zvS%ngC)3S!wr<&%vewK9#W;|Or6A2S6gtSD-y#05l`FUTf=rg)3&2sn>&NsMo6ACq zpVdm+wrc%f*H_J5%gs!`w!)1*tR*8w*7E9@D*svd-4+80O5V2XqMd#G+=`#mAb_Wtm^99=6{!c$aqJ%evQUnh;{wiOuFO$Jz|TceX|wez$5++&Z|880!s>TWhij3v;CjA)@3#)Ob%FIL!`q>&1R7O90p0 zxjohLp2A&M{m}+b*)@0U^&|#mmAybk` z4f!v(#upY@VNmI?jZHa4&$Tjn3Ws}|$5gd8ovaEb#pRxLQah%` zLwz$D_3AQ1E2>ZuBcMNA(kyf_pqeEAeC^(T=4O9643g*!w?Abv3b??fBXp4p_YJDp zhjLKI+ZI}UxWDG<%(tCMUBlIv%`Bd;)50NB&5+2}@QyAGO0L>V@tTbbyhaX^EZ=i3 zHtXY44XGtbnsC)AC9;d?SR&wdc8>jhCmP?QWz(1~Re`tD*WvxAR2zo8uiB+Jf1)KR zwV6+5sflqT0IJ?|j(oasjOkXLX-RwdJXGl;^n_fUnRN7K^8N-EX{aZ+ zo(`#9ejqwkrPeUKfuYKkuSPKX|MIL`kq};qed?JTu{=->Ov3#ymuf=Ci`cD`I$@!W z`?214Mppjpap~Mjk-d*Gvd>uUV$K|x;e!?@3WVM$qam}@+-_}%?<65R2D426X z^=EX%H^WC%-utcPhJ~8tcg|M3?rgCqtUrQ{|)d*%* zv12oRX8KO3qL_$3QzxSCi!ncz`hEDD3!af$+x+MegOZl188$Y6JU#g{`DRHO7Q0bd z)!uGkPI9XlL@cS2Oa0asUEJVsf>9XTF+BVCgBQ&S{`U{(|99sg@o)zSMD#PUukVF@ z+hqaNg0-)mL|doQ=~m0x+1V@hxwh5>u=^*GBOIq^qw;lud#^^hw3ptdVtx*Vcvd)(1O<>lqht#K0NzSG89Jc$2%$lN(V z-hHTJ?%w5~s)Q#b9QxK(Kp9WC;Mm*S>+|s~uNEj^7~`H~<#h9=^tXlJ5hd?ax&P;1 z5j;D~^go|;4Lo}EsFL$2A0OY3j-z?h4u!^n#3>U-q^lfw{{Z>|1(x#@SISulf z-)(@MxzN+rc6OtD&wrWNf1T?8x`kdU1o4gbuuGGA_|W^1@Hr?WiR9J~5p8#gK4E(3 z&|#^+%5B?4Z8^c;;Q>r1`0`q!YWeX(obU28mP>nO)6j%YVsg1ku0gQfvx;lK%GR={ z?^<#7m&#jro`R~pxT@_`<+IEuFfC;_vdnr1$_OKf9C(nOR_+fF1u6J6$U+5m^*XxW zV1~AIbhKX%dXmJ3sa=N-DV{+0+gF6F`8@Qb6lPOL>#QO8a1Smnt|6XC0*pTZ%6wtG zte_-Pmydkr;ub^P40Hn_qZtQ;=y;*!DeX-3Fl4f$C*gz!{K?T$IKtQp(*CSlZpwg{ zKZ>7>AkB?8LKPJi)2OZSl0*9sIGdx)#E%9B2C~mbX+k_bORRDWNJUEE#8(A`&JMHD zr%iJmeP{P&>2`P4%O3GFGBV03F(u^A4(LE(Fc_UTXi8}5L|{*^XMgc2(*#@m*o=sK z!9_U?Hv+6f+h2QbvO7-g>&ci-mEQf1-1zt*_|M0RH*PKUmk%XKB|1lSRuskWn>Hnf zC+}L$w8&i-yJ7wBp9gu)260r}>`LhCGyCBzAee6mBad$n`@iM>?EeCdoRv;3F>ZQG zh1twqs7H5sL!59$rMt(s=Lg^X=(!7G|7Et(-in~O<}w~(7NCSi*+lu&xFUP5|06&Y<+XzA$Wzz_F@LdG&e7WD&ZwbLQYl+yaeM@Kb6 zt_jVDqgV{L4xgS3b!;G%NvY5acO{Bg`rav-Ep>f?11YZmfc9PsXw&d8YRem5}2L*xd#g;WWHyRl535N}-BITtoL& z4Kyb*tG<<@2XOA2Hz4Zt{|!V`19IH((|)U zA)6_)V~qI*mOSu?#tSRAe^<*b-u85C%!M#2hUDD-^wfiEiC(zn#C57y7+?*7pUAU+ zD;}NNVVe?vynV@m=`4QG41e#AM@G2vjlSI>1JD%J+_1A&V&^6?4+uHt27|$Ru_Emk zT=5bmLUgl5hCb+w$tcD=u7|;G-F0e<%A^dm9q&qAvoZ|SanHQ6V;_N`ej*rZ*Sz#w z$nszOhd}4-q>WMr);Mp$^3q_p;u9Y{IRsWRPW5Y5G#8wO1VceSn^V;ps3*KBSyy{{YI{7cvkQZ?*)CnTQV9q zHET+vT8AO`xA~7d&hKMBYgZqtjEnnet$g;8vRozAyJD1fG)I6pxlaa=CFiz7$;$AQ z3hEHXkfq%>T!mu!y$LVTIEl+Q#h7O63h$$<`hE(qce;4-Uj6!F#{>3_+UblXZ1am3 zzrG32NKT$XrhC;dJjl|rUV(qE(haKwf)scLq}a-y-U2lOgyoCJB9TZGS5Q(vslMhx zur*#NOhh_aW~d4u>uT^WH!2;12NaFGt!UIIGbL>u9sTlk33D7s+cZ8NLbdPmq1~-H}`9`FCY+C}6^~kB|3Yu|-AIO3Z8* zS64NXfI2Xet_6*&+tfiI5Kvr9k|w-sRD=G+o{jv9789mE;Mbt>%(YG%r zb2?ioXzOX0%U3LlI%6KiKMrXzrRBO{PUy?F2`0PRNFM3V?%z<`aXIz97yNw*DxR79 zzF=DHDt?7JoO|rdZ=NG6nHXz_z)Klnn}P7nZ9g-wJHn>^r%<9>%LwuvZbD1t$&0T5 z^xT6#eE6^n8J{KcG|0=VVJ)Xh)+FORFF73d`f(~>`z^hCUths5j!)ORyV)uk`^$@F zLZLM$R-+29ey5vizJqiAN&(z3F@W`3y^Vi1CzhpLPmM~4&4wUw)h*&-N52tYor6}h zuT!h~J1y%*_j}5YZ})y<6#)ht))h}6&PORUsUj%=?#z@K$iJ~2*(bSbzyhJ zM$k!5pWe!}Y4Au@hW9bEH5yTC*jXB!8z&Cds|8#`^aui(tBjksx|(#Hi~gS5UL8v1 zKG!FN@6lj&{((+i!fvzcUuSh(lUe`#xP??d{AG!*pcPaLSt)$?ym zIJ!fMv0CFb-q|#F4>(+joxFehcfKB?Y=~Iv7$;3gRP z(hXa+rCJ~}fOJ4=(wVoa8%WLg>Qb+!SBK5fZxb^WS_}P1rS5 zD?na6oMaQtjmjGh*9&_NXz|cBhP1^!3nIqWxwc1s48P2YO##7#o*XP;g8b&L0X-Vn z?BOp>exq*sY}*ASL!Q$C{`;#rKJPmnuCL<3SLOgcG5B$ma%#S2zX-53BUNbwx&z?t4DlsGQg$3T>g-< z9V+FaU*}0TY~#n7N@o= z$cSzLEX9uKL7Sv18yyhWC}JrG(Qo~jy+5fr=2+oIiD^ocw2;RUGSf z!K-oIy~Pc7Y(-Dpv#+p=4UA3|Mznx`1Nb6yUdGZ@JMU8=DR_OM1=HX;SkASLWfUhi zRjuUIK%|}_FIw$_HAEvwGu?f#+~tngBswW6$uK0O{_WehtCja7Bi)gqz`ekvCMTVX zd$xa>b`D?Xu!)&wy#z9;1cux5rLC%*igLFZj${zX*zuG66Z7a|>N#|l9r4vt~MgNSfbh~jw0?l)Zya`iPRmIvS?xSmNt@R9nb5?RZ%lH7} zs^EibUcr7S^<D+P7bH5a*rb^gG}K+oE?)CtIb#)oxd_zx z&ogG+tY?3h$2jJJ!b?q#bO74L&jE~m6Xw;pQI*wj3ve0$y(|HGcTymAKbGMuz|%ZP zRW2L!NY{$x<$E^w*y7>d%+tNz`sLKyuawoR;6aznTZo8$Vcv8Rl1x8}7ps}VygJa2 zSNUQ;1$lYmm}Y|qg;Yv{+12?K_dr>cIV(1V)_g@j(e8o(KX3d1>O>#DPpV}_A<5+C zE45tEFtz&zGcN8FN^w*P_NlM|JX8fA=4f!tlkf&c9@dq1J@1K&e)Oh+t!>H&EiX5> zh1r!^3Wc8s3odCN7UAb&&Q-}xbrc_aT}9Myoy^}>>uEv6t9uWc7;Okro&;H;VfF99 z0T3%nNP)W&&|UX44`v}~*2kV4<8(7*K~R_N#O4MIBSH`?N=|xZYu(i#OGvCNFqJb` zr|TX2?bh$x*+qRpS$TP1;9Ts%l0R~pDG3Q5Eu#U&4&9@Ux*Oo15(wlYOME40K(n2F zXYMm3sD~lx5Hc(Xb|IQk)0}eJ)UX((2=K~-5n&(DN?e_$$(lKIeHov5UBm}u);|~* zoCL|i_S@I#F$vQ(!H>?6i}{a~4=GwFBqT`P7*jk|`)=Uu24a{lRVD>-&TxsgP>D5O zncwm117s8R<);$B;O0?e`}Z_b&$@LKC%wV_)vH%Sud@iSuLLlSR>9G>8M@J`?sgUm z^f=l5->!mGgpY;#3R1OHTKH`S{_;8cGtc+n*z+hJ!$O~_x1WFAJWAZDeMRrVcGwfZ z5@Sod8n^Xt<#x5w4^AOb;_B{>@CLO!n|${p756O49;q8OCcOL>!;5m!Ykj9-8^UUS zMJB`F0`R`#*$y7G?~uqh+VFQKERrsSSz0`(uo zBB6!N8Y7Wo-p+O4)nX@TZI!_2Tar&{Uf$jSAjytwSS?i50{KP*G~##H^Ap(D*B1jO z2>nt)tnnJxC~gMG{W+l6LRY!4$s}vb%nTxl?dVkK5k$qf1_p}-zb}6E>XL}4D6&^5 zZ2NkF^j=jJ@7lg?ET$-msc3S`m_&|{JYLD!qB@5 zPlH)RY}E}Qju8GT$zNROmaj(^#RWyJK#^eqs8zxeF^z>!@82;IyZzQbGD}`9YoRCJ zVq2fi%WTXx{V*lF{R-M&W3{*+Gh&25s(eQy{XILbKm7J5ja{j#Ga9Pij_a?T-j%v} zzW$aWdouVs0JZrVnC(hwzc=j!Z96Ca8dzLrWL;76%4zQ%WByfff6P1X=(fs#8w!XS zSErr6>*1m(aj;P0j_A5>2e0avwW@846VlRT0XP5purKi!2v(SvhliaH+dTheXxPmd z9}vaztc-yr< zN&ks7GG%NiKsQkeMRa3+)u>nMCG9q{2NOp$c9-8sBjD02i>~-$M3r}WNEsG#GJe}Tm_%d;?Sq)~wq z&=AoA4RLob{9Q?D=7qv0%(}$R+Y^_9Q3Y~`RAMLc)6|rzg10+SgfJaZa8^xixKgQL zDi_w-)upt|EST-@U(SBCIVA_b-}B!C>4)w9zx7dQOFrkyG4?Zg zR>y4ng-Bh%!VBe|F1u{zXKPcaL#Lgqj!pz%$z*Kv(2yyJCrMrzA}lASpzui^E*d-tAWb(Q)Q-TI{30PjJjcO)qY zMKw9jibO?4VO(q=5cgTID^L+s^PBq(8NF|*we|8F((X4t#yiZ$o=yjgf;^w%f>%9m-WQj0O3DBu3d-A^1Zo7peSTKP`L$0WbF^_~&ZV#I2St$|z6mB!i zfv^JW&^hs}P%$1!asjm1Z$;Cb=l7I@6<)TSK)nHpzLBk}1aMNPk| zmqlvF`3d*Sr6e5G^3_0X3D~;uu?e@)5BukEW-?3 zUZwvYi&_~lG3hYrS^9HSvD2>FOm@M$9Dy>9?I14Hs7St|j;q+qnm~(N3UYoie8_lr z5?KSuJilB9nzttfo|SY=r+o^q3o5mYGSz^v+ef0qkhT1g#3*a=YP-0&xT`j#2d%_% z!=WYl^wzk~t;qCHh3SxNM(}LyY4_ob##*{|%aW#l31Ya~BQedF3gxybyu4bc^-x%8L+7h(8g68;F15fBvUSNT_j%(XX^+`qrdYv*`Qah)6WZx$mtNm>I}C^mnCXntrlIJ zaSmj{)UA{T)x<w>q?ugOlUqlZ5nlv%yN=Y)XtG`6_==5eR7)(jnq{ZQ_++TFMv23htSVyXiX~W0M z&Pkq7&VmPd-1QiPioFIK4p+5G3WX9j18gcg?E-3A8iHqYbEk5r1Mx`Vpn|5+awIAy z16cnHAcJGH#PBc3DO~9}?!U~)5tIz6;sDoTyWA@DEkjc-<_en1bfnnkMFd{|h-Dj{ zRQ10dA9Co~Ntu$$tH2kpuRQ0GF5&yK?cwm(-4FkQul^4=-vQhEzHHC?x*JbIeR_-2 Z@V+X@{$L&s*p0}hf64e_iT3ro{{iM&5-$J% diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Def.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Def.png deleted file mode 100644 index a8b516d9f5ad2034541797b8a165825acded69b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8941 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Priority.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Priority.png deleted file mode 100644 index 2cf814113ff2e323a0989e5c990eab340a53962c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10590 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 a_WPBf5I#}E3*4Ke(^dyvFT8dq=sy4^qgY`8 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/FusionCharts.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/FusionCharts.js deleted file mode 100644 index 4c174dfa..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/FusionCharts.js +++ /dev/null @@ -1,361 +0,0 @@ -/** - * FusionCharts: Flash Player detection and Chart embedding. - * Version 1.2.3F ( 22 November 2008) - Specialized for FusionChartsFREE - * Checking Flash Version >=6 and added updateChartXML() for FREE Charts. - * Version: 1.2.3 (1st September, 2008) - Added Fix for % and & characters, scaled dimensions, fixes in to properly handling of double quotes and single quotes in setDataXML() function. - * Version: 1.2.2 (10th July, 2008) - Added Fix for % scaled dimensions, fixes in setDataXML() and setDataURL() functions - * Version: 1.2.1 (21st December, 2007) - Added setting up Transparent/opaque mode: setTransparent() function - * Version: 1.2 (1st November, 2007) - Added FORM fixes for IE - * Version: 1.1 (29th June, 2007) - Added Player detection, New conditional fixes for IE - * - * Morphed from SWFObject (http://blog.deconcept.com/swfobject/) under MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ -if(typeof infosoftglobal == "undefined") var infosoftglobal = new Object(); -if(typeof infosoftglobal.FusionChartsUtil == "undefined") infosoftglobal.FusionChartsUtil = new Object(); -infosoftglobal.FusionCharts = function(swf, id, w, h, debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect){ - if (!document.getElementById) { return; } - - //Flag to see whether data has been set initially - this.initialDataSet = false; - - //Create container objects - this.params = new Object(); - this.variables = new Object(); - this.attributes = new Array(); - - //Set attributes for the SWF - if(swf) { this.setAttribute('swf', swf); } - if(id) { this.setAttribute('id', id); } - - w=w.toString().replace(/\%$/,"%25"); - if(w) { this.setAttribute('width', w); } - h=h.toString().replace(/\%$/,"%25"); - if(h) { this.setAttribute('height', h); } - - - //Set background color - if(c) { this.addParam('bgcolor', c); } - - //Set Quality - this.addParam('quality', 'high'); - - //Add scripting access parameter - this.addParam('allowScriptAccess', 'always'); - - //Pass width and height to be appended as chartWidth and chartHeight - this.addVariable('chartWidth', w); - this.addVariable('chartHeight', h); - - //Whether in debug mode - debugMode = debugMode ? debugMode : 0; - this.addVariable('debugMode', debugMode); - //Pass DOM ID to Chart - this.addVariable('DOMId', id); - //Whether to registed with JavaScript - registerWithJS = registerWithJS ? registerWithJS : 0; - this.addVariable('registerWithJS', registerWithJS); - - //Scale Mode of chart - scaleMode = scaleMode ? scaleMode : 'noScale'; - this.addVariable('scaleMode', scaleMode); - - //Application Message Language - lang = lang ? lang : 'EN'; - this.addVariable('lang', lang); - - //Whether to auto detect and re-direct to Flash Player installation - this.detectFlashVersion = detectFlashVersion?detectFlashVersion:1; - this.autoInstallRedirect = autoInstallRedirect?autoInstallRedirect:1; - - //Ger Flash Player version - this.installedVer = infosoftglobal.FusionChartsUtil.getPlayerVersion(); - - if (!window.opera && document.all && this.installedVer.major > 7) { - // Only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE - infosoftglobal.FusionCharts.doPrepUnload = true; - } -} - -infosoftglobal.FusionCharts.prototype = { - setAttribute: function(name, value){ - this.attributes[name] = value; - }, - getAttribute: function(name){ - return this.attributes[name]; - }, - addParam: function(name, value){ - this.params[name] = value; - }, - getParams: function(){ - return this.params; - }, - addVariable: function(name, value){ - this.variables[name] = value; - }, - getVariable: function(name){ - return this.variables[name]; - }, - getVariables: function(){ - return this.variables; - }, - getVariablePairs: function(){ - var variablePairs = new Array(); - var key; - var variables = this.getVariables(); - for(key in variables){ - variablePairs.push(key +"="+ variables[key]); - } - return variablePairs; - }, - getSWFHTML: function() { - var swfNode = ""; - if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { - // netscape plugin architecture - swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } - swfNode += '/>'; - } else { // PC IE - swfNode = ''; - swfNode += ''; - var params = this.getParams(); - for(var key in params) { - swfNode += ''; - } - var pairs = this.getVariablePairs().join("&"); - if(pairs.length > 0) {swfNode += '';} - swfNode += ""; - } - return swfNode; - }, - setDataURL: function(strDataURL){ - //This method sets the data URL for the chart. - //If being set initially - if (this.initialDataSet==false){ - this.addVariable('dataURL',strDataURL); - //Update flag - this.initialDataSet = true; - }else{ - //Else, we update the chart data using External Interface - //Get reference to chart object - var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this.getAttribute('id')); - - if (!chartObj.setDataURL) - { - __flash__addCallback(chartObj, "setDataURL"); - } - - chartObj.setDataURL(strDataURL); - } - }, - //This function : - //fixes the double quoted attributes to single quotes - //Encodes all quotes inside attribute values - //Encodes % to %25 and & to %26; - encodeDataXML: function(strDataXML){ - - var regExpReservedCharacters=["\\$","\\+"]; - var arrDQAtt=strDataXML.match(/=\s*\".*?\"/g); - if (arrDQAtt){ - for(var i=0;i compatibility - //Check if it's added in Mozilla embed array or if already exits - if(!document.embeds[this.getAttribute('id')] && !window[this.getAttribute('id')]) - window[this.getAttribute('id')]=document.getElementById(this.getAttribute('id')); - //or else document.forms[formName/formIndex][chartId] - return true; - } - } -} - -/* ---- detection functions ---- */ -infosoftglobal.FusionChartsUtil.getPlayerVersion = function(){ - var PlayerVersion = new infosoftglobal.PlayerVersion([0,0,0]); - if(navigator.plugins && navigator.mimeTypes.length){ - var x = navigator.plugins["Shockwave Flash"]; - if(x && x.description) { - PlayerVersion = new infosoftglobal.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); - } - }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ - //If Windows CE - var axo = 1; - var counter = 3; - while(axo) { - try { - counter++; - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); - PlayerVersion = new infosoftglobal.PlayerVersion([counter,0,0]); - } catch (e) { - axo = null; - } - } - } else { - // Win IE (non mobile) - // Do minor version lookup in IE, but avoid Flash Player 6 crashing issues - try{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - }catch(e){ - try { - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - PlayerVersion = new infosoftglobal.PlayerVersion([6,0,21]); - axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) - } catch(e) { - if (PlayerVersion.major == 6) { - return PlayerVersion; - } - } - try { - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - } catch(e) {} - } - if (axo != null) { - PlayerVersion = new infosoftglobal.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); - } - } - return PlayerVersion; -} -infosoftglobal.PlayerVersion = function(arrVersion){ - this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; - this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; - this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; -} -// ------------ Fix for Out of Memory Bug in IE in FP9 ---------------// -/* Fix for video streaming bug */ -infosoftglobal.FusionChartsUtil.cleanupSWFs = function() { - var objects = document.getElementsByTagName("OBJECT"); - for (var i = objects.length - 1; i >= 0; i--) { - objects[i].style.display = 'none'; - for (var x in objects[i]) { - if (typeof objects[i][x] == 'function') { - objects[i][x] = function(){}; - } - } - } -} -// Fixes bug in fp9 -if (infosoftglobal.FusionCharts.doPrepUnload) { - if (!infosoftglobal.unloadSet) { - infosoftglobal.FusionChartsUtil.prepUnload = function() { - __flash_unloadHandler = function(){}; - __flash_savedUnloadHandler = function(){}; - window.attachEvent("onunload", infosoftglobal.FusionChartsUtil.cleanupSWFs); - } - window.attachEvent("onbeforeunload", infosoftglobal.FusionChartsUtil.prepUnload); - infosoftglobal.unloadSet = true; - } -} -/* Add document.getElementById if needed (mobile IE < 5) */ -if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }} -/* Add Array.push if needed (ie5) */ -if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }} - -/* Function to return Flash Object from ID */ -infosoftglobal.FusionChartsUtil.getChartObject = function(id) -{ - var chartRef=null; - if (navigator.appName.indexOf("Microsoft Internet")==-1) { - if (document.embeds && document.embeds[id]) - chartRef = document.embeds[id]; - else - chartRef = window.document[id]; - } - else { - chartRef = window[id]; - } - if (!chartRef) - chartRef = document.getElementById(id); - - return chartRef; -} -/* - Function to update chart's data at client side (FOR FusionCharts vFREE and 2.x -*/ -infosoftglobal.FusionChartsUtil.updateChartXML = function(chartId, strXML){ - //Get reference to chart object - var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(chartId); - //Set dataURL to null - chartObj.SetVariable("_root.dataURL",""); - //Set the flag - chartObj.SetVariable("_root.isNewData","1"); - //Set the actual data - chartObj.SetVariable("_root.newData",strXML); - //Go to the required frame - chartObj.TGotoLabel("/", "JavaScriptHandler"); -} - - -/* Aliases for easy usage */ -var getChartFromId = infosoftglobal.FusionChartsUtil.getChartObject; -var updateChartXML = infosoftglobal.FusionChartsUtil.updateChartXML; -var FusionCharts = infosoftglobal.FusionCharts; \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/charts.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/charts.js deleted file mode 100644 index 4bebbd36..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/charts.js +++ /dev/null @@ -1,132 +0,0 @@ - -function drawSingleSeriesChart(tabId, chartId, chartWidth, chartHeight, chartType, chartData,mme,yyyyMo) { - // define, set the data for each chart, and render them (if indicated) - var myChart = new FusionCharts("static/fusion/inc/fusionchart/" + chartType, "myChartId" + chartId, chartWidth, chartHeight); - - var mmeLabel = "";//mme + ""; - - var chartCaptionId = tabId + "-chartdiv" + chartId + "-label"; - - document.getElementById(chartCaptionId).innerHTML = "Hosted Voice Usage in "+ yyyyMo; - - myChart.setDataXML("" + chartData + ""); - myChart.setTransparent(true); - myChart.render(tabId + "-"+ "chartdiv" + chartId); - - - } - - - // gauge charts - function drawGaugeChart(chartId, gaugeIndex, value) { - var myChart = new FusionCharts("static/fusion/inc/fusionchart/AngularGauge.swf", "myChartId" + chartId, "300", "300", "0", "0"); - //CPU for NYCMNYBWLT1 on 201301 : 12.63// - var chartData = - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - ""; - - myChart.setDataXML(chartData); - myChart.render("chartdiv" + chartId); - } - - - function updateGaugeChart(chartId, gaugeIndex, refreshCount) { - var myChart = getChartFromId("myChartId" + chartId); - var val = 0; - if (gaugeIndex == "10") val = 12; - else if (gaugeIndex == "20") val = 15; - else if (gaugeIndex == "30") val = 52; - else if (gaugeIndex == "40") val = 42; - myChart.setData(1, val); - myChart.setData(2, val+20); - } - - function updateGaugeChartWithMMEData(chartId, value) { - var myChart = getChartFromId("myChartId" + chartId); - myChart.setData(1, value); - } - - - function updateGaugeChartWithMMEData(chartId, value, yyyyMo, mme) { - var myChart = getChartFromId("myChartId" + chartId); - myChart.setData(1, value); - document.getElementById("cpuYyyyMm").innerHTML = "Hosted Voice Utilization in "+ yyyyMo; - - } - - function drawMultiSeriesChart(tabId,chartId, chartWidth, chartHeight, chartType) { - var myChart = new FusionCharts("static/fusion/inc/fusionchart/" + chartType, "myChartId" + chartId, chartWidth, chartHeight, "0", "0"); - - myChart.setTransparent(true); - - var chartData = - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - ""; - - myChart.setDataXML(chartData); - myChart.render(tabId + "-" + "chartdiv" + chartId); - } - diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/scribble.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/scribble.js deleted file mode 100644 index 5384b304..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/js/scribble.js +++ /dev/null @@ -1,19 +0,0 @@ - function storeUserScribble(id) { - var scribble = document.getElementById('scribble').innerHTML; - localStorage.setItem('userScribble',scribble); - } - - function getUserScribble() { - if ( localStorage.getItem('userScribble')) { - var scribble = localStorage.getItem('userScribble'); - } - else { - var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!'; - } - document.getElementById('scribble').innerHTML = scribble; - } - - function clearLocal() { - clear: localStorage.clear(); - return false; - } diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css deleted file mode 100644 index 3424a5f1..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css +++ /dev/null @@ -1,351 +0,0 @@ -html,body{margin:0;padding:0;} -h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;} -ol,ul{list-style:none;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted;} -a:hover,a:active{outline:0;} -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{border:0;-ms-interpolation-mode:bicubic;} -button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;} -button,input{line-height:normal;*overflow:visible;} -button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -body{background-color:#ffffff;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;color:#404040;} -.container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;} -.container:after{clear:both;} -.container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;} -.container-fluid:after{clear:both;} -.container-fluid>.sidebar{position:absolute;top:0;left:20px;width:220px;} -.container-fluid>.content{margin-left:240px;} -a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;} -.row:after{clear:both;} -.row>[class*="span"]{display:inline;float:left;margin-left:20px;} -.span1{width:40px;} -.span2{width:100px;} -.span3{width:160px;} -.span4{width:220px;} -.span5{width:280px;} -.span6{width:340px;} -.span7{width:400px;} -.span8{width:460px;} -.span9{width:520px;} -.span10{width:580px;} -.span11{width:640px;} -.span12{width:700px;} -.span13{width:760px;} -.span14{width:820px;} -.span15{width:880px;} -.span16{width:940px;} -.span17{width:1000px;} -.span18{width:1060px;} -.span19{width:1120px;} -.span20{width:1180px;} -.span21{width:1240px;} -.span22{width:1300px;} -.span23{width:1360px;} -.span24{width:1420px;} -.row>.offset1{margin-left:80px;} -.row>.offset2{margin-left:140px;} -.row>.offset3{margin-left:200px;} -.row>.offset4{margin-left:260px;} -.row>.offset5{margin-left:320px;} -.row>.offset6{margin-left:380px;} -.row>.offset7{margin-left:440px;} -.row>.offset8{margin-left:500px;} -.row>.offset9{margin-left:560px;} -.row>.offset10{margin-left:620px;} -.row>.offset11{margin-left:680px;} -.row>.offset12{margin-left:740px;} -.span-one-third{width:300px;} -.span-two-thirds{width:620px;} -.offset-one-third{margin-left:340px;} -.offset-two-thirds{margin-left:660px;} -p{font-size:13px;font-weight:normal;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;} -h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;} -h1{margin-bottom:18px;font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:14px;} -h3,h4,h5,h6{line-height:36px;} -h3{font-size:18px;}h3 small{font-size:14px;} -h4{font-size:16px;}h4 small{font-size:12px;} -h5{font-size:14px;} -h6{font-size:13px;color:#bfbfbf;text-transform:uppercase;} -ul,ol{margin:0 0 18px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;color:#808080;} -ul.unstyled{list-style:none;margin-left:0;} -dl{margin-bottom:18px;}dl dt,dl dd{line-height:18px;} -dl dt{font-weight:bold;} -dl dd{margin-left:9px;} -hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;} -strong{font-style:inherit;font-weight:bold;} -em{font-style:italic;font-weight:inherit;line-height:inherit;} -.muted{color:#bfbfbf;} -blockquote{margin-bottom:18px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:18px;margin-bottom:0;} -blockquote small{display:block;font-size:12px;font-weight:300;line-height:18px;color:#bfbfbf;}blockquote small:before{content:'\2014 \00A0';} -address{display:block;line-height:18px;margin-bottom:18px;} -code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{background-color:#fee9cc;color:rgba(0, 0, 0, 0.75);padding:1px 3px;} -pre{background-color:#f5f5f5;display:block;padding:8.5px;margin:0 0 18px;line-height:18px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;} -form{margin-bottom:18px;} -fieldset{margin-bottom:18px;padding-top:18px;}fieldset legend{display:block;padding-left:150px;font-size:19.5px;line-height:1;color:#404040;*padding:0 0 5px 145px;*line-height:1.5;} -form .clearfix{margin-bottom:18px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;} -form .clearfix:after{clear:both;} -label,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:normal;} -label{padding-top:6px;font-size:13px;line-height:18px;float:left;width:130px;text-align:right;color:#404040;} -form .input{margin-left:150px;} -input[type=checkbox],input[type=radio]{cursor:pointer;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;font-size:13px;line-height:18px;color:#808080;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -select{padding:initial;} -input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;} -input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;} -select,input[type=file]{height:27px;*height:auto;line-height:27px;*margin-top:4px;} -select[multiple]{height:inherit;background-color:#ffffff;} -textarea{height:auto;} -.uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#bfbfbf;} -::-webkit-input-placeholder{color:#bfbfbf;} -input,textarea{-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);} -input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);} -input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;} -form .clearfix.error>label,form .clearfix.error .help-block,form .clearfix.error .help-inline{color:#b94a48;} -form .clearfix.error input,form .clearfix.error textarea{color:#b94a48;border-color:#ee5f5b;}form .clearfix.error input:focus,form .clearfix.error textarea:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -form .clearfix.error .input-prepend .add-on,form .clearfix.error .input-append .add-on{color:#b94a48;background-color:#fce6e6;border-color:#b94a48;} -form .clearfix.warning>label,form .clearfix.warning .help-block,form .clearfix.warning .help-inline{color:#c09853;} -form .clearfix.warning input,form .clearfix.warning textarea{color:#c09853;border-color:#ccae64;}form .clearfix.warning input:focus,form .clearfix.warning textarea:focus{border-color:#be9a3f;-webkit-box-shadow:0 0 6px #e5d6b1;-moz-box-shadow:0 0 6px #e5d6b1;box-shadow:0 0 6px #e5d6b1;} -form .clearfix.warning .input-prepend .add-on,form .clearfix.warning .input-append .add-on{color:#c09853;background-color:#d2b877;border-color:#c09853;} -form .clearfix.success>label,form .clearfix.success .help-block,form .clearfix.success .help-inline{color:#468847;} -form .clearfix.success input,form .clearfix.success textarea{color:#468847;border-color:#57a957;}form .clearfix.success input:focus,form .clearfix.success textarea:focus{border-color:#458845;-webkit-box-shadow:0 0 6px #9acc9a;-moz-box-shadow:0 0 6px #9acc9a;box-shadow:0 0 6px #9acc9a;} -form .clearfix.success .input-prepend .add-on,form .clearfix.success .input-append .add-on{color:#468847;background-color:#bcddbc;border-color:#468847;} -.input-mini,input.mini,textarea.mini,select.mini{width:60px;} -.input-small,input.small,textarea.small,select.small{width:90px;} -.input-medium,input.medium,textarea.medium,select.medium{width:150px;} -.input-large,input.large,textarea.large,select.large{width:210px;} -.input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{width:270px;} -.input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{width:530px;} -textarea.xxlarge{overflow-y:auto;} -input.span1,textarea.span1{display:inline-block;float:none;width:30px;margin-left:0;} -input.span2,textarea.span2{display:inline-block;float:none;width:90px;margin-left:0;} -input.span3,textarea.span3{display:inline-block;float:none;width:150px;margin-left:0;} -input.span4,textarea.span4{display:inline-block;float:none;width:210px;margin-left:0;} -input.span5,textarea.span5{display:inline-block;float:none;width:270px;margin-left:0;} -input.span6,textarea.span6{display:inline-block;float:none;width:330px;margin-left:0;} -input.span7,textarea.span7{display:inline-block;float:none;width:390px;margin-left:0;} -input.span8,textarea.span8{display:inline-block;float:none;width:450px;margin-left:0;} -input.span9,textarea.span9{display:inline-block;float:none;width:510px;margin-left:0;} -input.span10,textarea.span10{display:inline-block;float:none;width:570px;margin-left:0;} -input.span11,textarea.span11{display:inline-block;float:none;width:630px;margin-left:0;} -input.span12,textarea.span12{display:inline-block;float:none;width:690px;margin-left:0;} -input.span13,textarea.span13{display:inline-block;float:none;width:750px;margin-left:0;} -input.span14,textarea.span14{display:inline-block;float:none;width:810px;margin-left:0;} -input.span15,textarea.span15{display:inline-block;float:none;width:870px;margin-left:0;} -input.span16,textarea.span16{display:inline-block;float:none;width:930px;margin-left:0;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} -.actions{background:#f5f5f5;margin-top:18px;margin-bottom:18px;padding:17px 20px 18px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;} -.help-inline,.help-block{font-size:13px;line-height:18px;color:#bfbfbf;} -.help-inline{padding-left:5px;*position:relative;*top:-5px;} -.help-block{display:block;max-width:600px;} -.inline-inputs{color:#808080;}.inline-inputs span{padding:0 2px 0 1px;} -.input-prepend input,.input-append input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-prepend .add-on,.input-append .add-on{position:relative;background:#f5f5f5;border:1px solid #ccc;z-index:2;float:left;display:block;width:auto;min-width:16px;height:18px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#bfbfbf;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background:#a9dba9;border-color:#46a546;} -.input-prepend .add-on{*margin-top:1px;} -.input-append input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .add-on{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-right:0;margin-left:-1px;} -.inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;} -.inputs-list label{display:block;float:none;width:auto;padding:0;margin-left:20px;line-height:18px;text-align:left;white-space:normal;}.inputs-list label strong{color:#808080;} -.inputs-list label small{font-size:11px;font-weight:normal;} -.inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;} -.inputs-list:first-child{padding-top:6px;} -.inputs-list li+li{padding-top:2px;} -.inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;margin-left:-20px;float:left;} -.form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:9px;} -.form-stacked legend{padding-left:0;} -.form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;} -.form-stacked .clearfix{margin-bottom:9px;}.form-stacked .clearfix div.input{margin-left:0;} -.form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;} -.form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;} -.form-stacked .actions{margin-left:-20px;padding-left:20px;} -.condensed-table th,.condensed-table td{padding:5px 5px 4px;} -.bordered-table{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.bordered-table th+th,.bordered-table td+td,.bordered-table th+td{border-left:1px solid #ddd;} -.bordered-table thead tr:first-child th:first-child,.bordered-table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.bordered-table thead tr:first-child th:last-child,.bordered-table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.bordered-table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.bordered-table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -table .span1{width:20px;} -table .span2{width:60px;} -table .span3{width:100px;} -table .span4{width:140px;} -table .span5{width:180px;} -table .span6{width:220px;} -table .span7{width:260px;} -table .span8{width:300px;} -table .span9{width:340px;} -table .span10{width:380px;} -table .span11{width:420px;} -table .span12{width:460px;} -table .span13{width:500px;} -table .span14{width:540px;} -table .span15{width:580px;} -table .span16{width:620px;} -.zebra-striped tbody tr:nth-child(odd) td,.zebra-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -.zebra-striped tbody tr:hover td,.zebra-striped tbody tr:hover th{background-color:#f5f5f5;} -table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;} -table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);} -table .header:hover:after{visibility:visible;} -table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} -table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} -table .blue{color:#049cdb;border-bottom-color:#049cdb;} -table .headerSortUp.blue,table .headerSortDown.blue{background-color:#ade6fe;} -table .green{color:#46a546;border-bottom-color:#46a546;} -table .headerSortUp.green,table .headerSortDown.green{background-color:#cdeacd;} -table .red{color:#9d261d;border-bottom-color:#9d261d;} -table .headerSortUp.red,table .headerSortDown.red{background-color:#f4c8c5;} -table .yellow{color:#ffc40d;border-bottom-color:#ffc40d;} -table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#fff6d9;} -table .orange{color:#f89406;border-bottom-color:#f89406;} -table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;} -table .purple{color:#7a43b6;border-bottom-color:#7a43b6;} -table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;} -.topbar{height:40px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#bfbfbf;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.topbar h3 a:hover,.topbar .brand:hover,.topbar ul .active>a{background-color:#333;background-color:rgba(255, 255, 255, 0.05);color:#ffffff;text-decoration:none;} -.topbar h3{position:relative;} -.topbar h3 a,.topbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;} -.topbar p{margin:0;line-height:40px;}.topbar p a:hover{background-color:transparent;color:#ffffff;} -.topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;} -.topbar form.pull-right{float:right;} -.topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e6e6e6;} -.topbar input::-webkit-input-placeholder{color:#e6e6e6;} -.topbar input:hover{background-color:#bfbfbf;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;} -.topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#404040;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);} -.topbar-inner,.topbar .fill{background-color:#222;background-color:#222222;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.topbar div>ul,.nav{display:block;float:left;margin:0 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;} -.topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;} -.topbar div>ul .active>a,.nav .active>a{background-color:#222;background-color:rgba(0, 0, 0, 0.5);} -.topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;} -.topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#444;background:rgba(255, 255, 255, 0.05);} -.topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#333;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#444;background:rgba(255, 255, 255, 0.05);} -.topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#999;text-shadow:0 1px 0 rgba(0, 0, 0, 0.5);}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{background-color:#191919;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));background-image:-moz-linear-gradient(top, #292929, #191919);background-image:-ms-linear-gradient(top, #292929, #191919);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));background-image:-webkit-linear-gradient(top, #292929, #191919);background-image:-o-linear-gradient(top, #292929, #191919);background-image:linear-gradient(top, #292929, #191919);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);color:#ffffff;} -.topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;} -.topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#222;border-color:#444;} -.topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;} -li.menu,.dropdown{position:relative;} -a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"↓";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;} -.menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:40px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#999;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:0 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;} -.menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;} -.topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#808080;text-shadow:0 1px 0 #ffffff;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover,.topbar .dropdown-menu a.hover,.dropdown-menu a.hover{background-color:#dddddd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));background-image:-moz-linear-gradient(top, #eeeeee, #dddddd);background-image:-ms-linear-gradient(top, #eeeeee, #dddddd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eeeeee, #dddddd);background-image:-o-linear-gradient(top, #eeeeee, #dddddd);background-image:linear-gradient(top, #eeeeee, #dddddd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);color:#404040;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);} -.open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;} -.tabs,.pills{margin:0 0 18px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;} -.tabs:after,.pills:after{clear:both;} -.tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;} -.tabs{border-color:#ddd;border-style:solid;border-width:0 0 1px;}.tabs>li{position:relative;margin-bottom:-1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:34px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;} -.tabs .active>a,.tabs .active>a:hover{color:#808080;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.tabs .menu-dropdown,.tabs .dropdown-menu{top:35px;border-width:1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} -.tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#999;margin-top:15px;margin-left:5px;} -.tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#999;} -.tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;} -.pills a{margin:5px 3px 5px 0;padding:0 15px;line-height:30px;text-shadow:0 1px 1px #ffffff;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#00438a;} -.pills .active a{color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#0069d6;} -.pills-vertical>li{float:none;} -.tab-content>.tab-pane,.pill-content>.pill-pane,.tab-content>div,.pill-content>div{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#bfbfbf;} -.breadcrumb .active a{color:#404040;} -.hero-unit{background-color:#f5f5f5;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} -footer{margin-top:17px;padding-top:17px;border-top:1px solid #eee;} -.page-header{margin-bottom:17px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:8px;} -.btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#ffffff;} -.btn .close,.alert-message .close{font-family:Arial,sans-serif;line-height:18px;} -.btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn.success,.alert-message.success{background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn.info,.alert-message.info{background-color:#339bb9;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#339bb9 #339bb9 #22697d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;} -.btn:focus{outline:1px dotted #666;} -.btn.primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn.active,.btn :active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn.disabled{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn[disabled]{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn.large{font-size:15px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.btn.small{padding:7px 9px 7px;font-size:11px;} -:root .alert-message,:root .btn{border-radius:0 \0;} -button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;} -.close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:13.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;} -.alert-message{position:relative;padding:7px 15px;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{margin-top:1px;*margin-top:0;} -.alert-message a{font-weight:bold;color:#404040;} -.alert-message.danger p a,.alert-message.error p a,.alert-message.success p a,.alert-message.info p a{color:#ffffff;} -.alert-message h5{line-height:18px;} -.alert-message p{margin-bottom:0;} -.alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;} -.alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);} -.alert-message.block-message{background-image:none;background-color:#fdf5d9;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;border-color:#fceec1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;} -.alert-message.block-message ul{margin-bottom:0;} -.alert-message.block-message li{color:#404040;} -.alert-message.block-message .alert-actions{margin-top:5px;} -.alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#404040;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.alert-message.block-message.error{background-color:#fddfde;border-color:#fbc7c6;} -.alert-message.block-message.success{background-color:#d1eed1;border-color:#bfe7bf;} -.alert-message.block-message.info{background-color:#ddf4fb;border-color:#c6edf9;} -.alert-message.block-message.danger p a,.alert-message.block-message.error p a,.alert-message.block-message.success p a,.alert-message.block-message.info p a{color:#404040;} -.pagination{height:36px;margin:18px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;} -.pagination a:hover,.pagination .active a{background-color:#c7eefe;} -.pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#bfbfbf;} -.pagination .next a{border:0;} -.well{background-color:#f5f5f5;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} -.modal{position:fixed;top:50%;left:50%;z-index:11000;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;} -.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{border-bottom:1px solid #eee;padding:5px 15px;} -.modal-body{padding:15px;} -.modal-body form{margin-bottom:0;} -.modal-footer{background-color:#f5f5f5;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;} -.modal-footer:after{clear:both;} -.modal-footer .btn{float:right;margin-left:5px;} -.modal .popover,.modal .twipsy{z-index:12000;} -.twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} -.twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.twipsy-inner{padding:3px 8px;background-color:#000000;color:white;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.twipsy-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.below .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover .inner{background:#000000;background:rgba(0, 0, 0, 0.8);padding:3px;overflow:hidden;width:280px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover .title{background-color:#f5f5f5;padding:9px 15px;line-height:1;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;border-bottom:1px solid #eee;} -.popover .content{background-color:#ffffff;padding:14px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;background-color:#bfbfbf;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}.label.important{background-color:#c43c35;} -.label.warning{background-color:#f89406;} -.label.success{background-color:#46a546;} -.label.notice{background-color:#62cffc;} -.media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;} -.media-grid:after{clear:both;} -.media-grid li{display:inline;} -.media-grid a{float:left;padding:4px;margin:0 0 18px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;} -.media-grid a:hover{border-color:#0069d6;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/custom.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/custom.css deleted file mode 100644 index b7df8c25..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/custom.css +++ /dev/null @@ -1,97 +0,0 @@ -body, html, div, p, span, a, h1, h2, h3, h4, h5{ - margin : 0; - padding : 0; -} - -body, html{ - width : 100%; -} - -body{ - color : white; - font-family : tahoma; - font-weight : lighter; - padding-top : 40px; -} - - body p{ - font-size : 14px; - } - - body p a{ - font-size : 16px; - } - -h1 { - color : #E05E00; - font-style : italic; -} - -a{ - color : #E05E00; - text-decoration : none; -} - -a:hover{ - text-decoration : underline; -} - -/* general */ -.clear { - clear: both; -} - -/* Header */ -.brand{ - color : #E05E00 !important; - font-family : georgia; - font-style : italic; -} - -/* list stuff */ -#org{ - background-color : white; - margin : 10px; - padding : 10px; -} - -#show-list{ - cursor : pointer; -} - -/* bootstrap overrides */ -.alert-message{ - margin: 2px 0; -} - -.topbar{ - position : absolute; -} - -/* Custom chart styling */ -.jOrgChart { - margin : 10px; - padding : 20px; -} - -/* Custom node styling */ -.jOrgChart .node { - font-weight : bold; - font-size : 14px; - background-color : #D5D6DB; - border-radius : 8px; - border : 5px solid gray; - color : #793a06; - -moz-border-radius : 8px; -} - .node p{ - font-family : tahoma; - font-size : 10px; - line-height : 11px; - padding : 2px; - } - -table { - margin-left: auto; - margin-right: auto; -} diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css deleted file mode 100644 index d44b3a22..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/prettify.js b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/prettify.js deleted file mode 100644 index eef5ad7e..00000000 --- a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/org_chart/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p 0) { - className += (i > 0) ? ' ' : ''; - className += isPrefix ? fix + klass - : klass + fix; - } - }); - return className; -} - -function removeFromArray(arr, val) { - var index = arr.indexOf(val); - if (val >= 0) { - arr.splice(index, 1); - } -} - -function stripCommentsFromElement(element) { - if (element instanceof jqLite) { - switch (element.length) { - case 0: - return element; - break; - - case 1: - // there is no point of stripping anything if the element - // is the only element within the jqLite wrapper. - // (it's important that we retain the element instance.) - if (element[0].nodeType === ELEMENT_NODE) { - return element; - } - break; - - default: - return jqLite(extractElementNode(element)); - break; - } - } - - if (element.nodeType === ELEMENT_NODE) { - return jqLite(element); - } -} - -function extractElementNode(element) { - if (!element[0]) return element; - for (var i = 0; i < element.length; i++) { - var elm = element[i]; - if (elm.nodeType == ELEMENT_NODE) { - return elm; - } - } -} - -function $$addClass($$jqLite, element, className) { - forEach(element, function(elm) { - $$jqLite.addClass(elm, className); - }); -} - -function $$removeClass($$jqLite, element, className) { - forEach(element, function(elm) { - $$jqLite.removeClass(elm, className); - }); -} - -function applyAnimationClassesFactory($$jqLite) { - return function(element, options) { - if (options.addClass) { - $$addClass($$jqLite, element, options.addClass); - options.addClass = null; - } - if (options.removeClass) { - $$removeClass($$jqLite, element, options.removeClass); - options.removeClass = null; - } - } -} - -function prepareAnimationOptions(options) { - options = options || {}; - if (!options.$$prepared) { - var domOperation = options.domOperation || noop; - options.domOperation = function() { - options.$$domOperationFired = true; - domOperation(); - domOperation = noop; - }; - options.$$prepared = true; - } - return options; -} - -function applyAnimationStyles(element, options) { - applyAnimationFromStyles(element, options); - applyAnimationToStyles(element, options); -} - -function applyAnimationFromStyles(element, options) { - if (options.from) { - element.css(options.from); - options.from = null; - } -} - -function applyAnimationToStyles(element, options) { - if (options.to) { - element.css(options.to); - options.to = null; - } -} - -function mergeAnimationDetails(element, oldAnimation, newAnimation) { - var target = oldAnimation.options || {}; - var newOptions = newAnimation.options || {}; - - var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || ''); - 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 { - target.addClass = null; - } - - if (classes.removeClass) { - target.removeClass = classes.removeClass; - } else { - target.removeClass = null; - } - - oldAnimation.addClass = target.addClass; - oldAnimation.removeClass = target.removeClass; - - return target; -} - -function resolveElementClasses(existing, toAdd, toRemove) { - var ADD_CLASS = 1; - var REMOVE_CLASS = -1; - - var flags = {}; - existing = splitClassesToLookup(existing); - - toAdd = splitClassesToLookup(toAdd); - forEach(toAdd, function(value, key) { - flags[key] = ADD_CLASS; - }); - - toRemove = splitClassesToLookup(toRemove); - forEach(toRemove, function(value, key) { - flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS; - }); - - var classes = { - addClass: '', - removeClass: '' - }; - - forEach(flags, function(val, klass) { - var prop, allow; - if (val === ADD_CLASS) { - prop = 'addClass'; - allow = !existing[klass]; - } else if (val === REMOVE_CLASS) { - prop = 'removeClass'; - allow = existing[klass]; - } - if (allow) { - if (classes[prop].length) { - classes[prop] += ' '; - } - classes[prop] += klass; - } - }); - - function splitClassesToLookup(classes) { - if (isString(classes)) { - classes = classes.split(' '); - } - - var obj = {}; - forEach(classes, function(klass) { - // sometimes the split leaves empty string values - // incase extra spaces were applied to the options - if (klass.length) { - obj[klass] = true; - } - }); - return obj; - } - - return classes; -} - -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; -} - -var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) { - 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 - 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. - * - * The motivation here is that animation code can request more time from the scheduler - * before the next wave runs. This allows for certain DOM properties such as classes to - * be resolved in time for the next animation to run. - */ - scheduler.waitUntilQuiet = function(fn) { - if (cancelFn) cancelFn(); - - cancelFn = $$rAF(function() { - cancelFn = null; - fn(); - nextTick(); - }); - }; - - return scheduler; - - function nextTick() { - if (!queue.length) return; - - var items = queue.shift(); - for (var i = 0; i < items.length; i++) { - items[i](); - } - - if (!cancelFn) { - $$rAF(function() { - if (!cancelFn) nextTick(); - }); - } - } -}]; - -/** - * @ngdoc directive - * @name ngAnimateChildren - * @restrict AE - * @element ANY - * - * @description - * - * ngAnimateChildren allows you to specify that children of this element should animate even if any - * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move` - * (structural) animation, child elements that also have an active structural animation are not animated. - * - * Note that even if `ngAnimteChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation). - * - * - * @param {string} ngAnimateChildren If the value is empty, `true` or `on`, - * then child animations are allowed. If the value is `false`, child animations are not allowed. - * - * @example - * - -
    - - -
    -
    -
    - List of items: -
    Item {{item}}
    -
    -
    -
    -
    - - - .container.ng-enter, - .container.ng-leave { - transition: all ease 1.5s; - } - - .container.ng-enter, - .container.ng-leave-active { - opacity: 0; - } - - .container.ng-leave, - .container.ng-enter-active { - opacity: 1; - } - - .item { - background: firebrick; - color: #FFF; - margin-bottom: 10px; - } - - .item.ng-enter, - .item.ng-leave { - transition: transform 1.5s ease; - } - - .item.ng-enter { - transform: translateX(50px); - } - - .item.ng-enter-active { - transform: translateX(0); - } - - - angular.module('ngAnimateChildren', ['ngAnimate']) - .controller('mainController', function() { - this.animateChildren = false; - this.enterElement = false; - }); - -
    - */ -var $$AnimateChildrenDirective = ['$interpolate', function($interpolate) { - return { - link: function(scope, element, attrs) { - var val = attrs.ngAnimateChildren; - if (angular.isString(val) && val.length === 0) { //empty attribute - element.data(NG_ANIMATE_CHILDREN_DATA, true); - } else { - // Interpolate and set the value, so that it is available to - // animations that run right after compilation - setData($interpolate(val)(scope)); - attrs.$observe('ngAnimateChildren', setData); - } - - function setData(value) { - value = value === 'on' || value === 'true'; - element.data(NG_ANIMATE_CHILDREN_DATA, value); - } - } - }; -}]; - -var ANIMATE_TIMER_KEY = '$$animateCss'; - -/** - * @ngdoc service - * @name $animateCss - * @kind object - * - * @description - * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes - * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT - * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or - * directives to create more complex animations that can be purely driven using CSS code. - * - * Note that only browsers that support CSS transitions and/or keyframe animations are capable of - * rendering animations triggered via `$animateCss` (bad news for IE9 and lower). - * - * ## Usage - * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that - * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however, - * any automatic control over cancelling animations and/or preventing animations from being run on - * child elements will not be handled by Angular. For this to work as expected, please use `$animate` to - * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger - * the CSS animation. - * - * The example below shows how we can create a folding animation on an element using `ng-if`: - * - * ```html - * - *
    - * This element will go BOOM - *
    - * - * ``` - * - * Now we create the **JavaScript animation** that will trigger the CSS transition: - * - * ```js - * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) { - * return { - * enter: function(element, doneFn) { - * var height = element[0].offsetHeight; - * return $animateCss(element, { - * from: { height:'0px' }, - * to: { height:height + 'px' }, - * duration: 1 // one second - * }); - * } - * } - * }]); - * ``` - * - * ## More Advanced Uses - * - * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks - * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code. - * - * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation, - * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with - * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order - * to provide a working animation that will run in CSS. - * - * The example below showcases a more advanced version of the `.fold-animation` from the example above: - * - * ```js - * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) { - * return { - * enter: function(element, doneFn) { - * var height = element[0].offsetHeight; - * return $animateCss(element, { - * addClass: 'red large-text pulse-twice', - * easing: 'ease-out', - * from: { height:'0px' }, - * to: { height:height + 'px' }, - * duration: 1 // one second - * }); - * } - * } - * }]); - * ``` - * - * Since we're adding/removing CSS classes then the CSS transition will also pick those up: - * - * ```css - * /* since a hardcoded duration value of 1 was provided in the JavaScript animation code, - * the CSS classes below will be transitioned despite them being defined as regular CSS classes */ - * .red { background:red; } - * .large-text { font-size:20px; } - * - * /* we can also use a keyframe animation and $animateCss will make it work alongside the transition */ - * .pulse-twice { - * animation: 0.5s pulse linear 2; - * -webkit-animation: 0.5s pulse linear 2; - * } - * - * @keyframes pulse { - * from { transform: scale(0.5); } - * to { transform: scale(1.5); } - * } - * - * @-webkit-keyframes pulse { - * from { -webkit-transform: scale(0.5); } - * to { -webkit-transform: scale(1.5); } - * } - * ``` - * - * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen. - * - * ## How the Options are handled - * - * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation - * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline - * styles using the `from` and `to` properties. - * - * ```js - * var animator = $animateCss(element, { - * from: { background:'red' }, - * to: { background:'blue' } - * }); - * animator.start(); - * ``` - * - * ```css - * .rotating-animation { - * animation:0.5s rotate linear; - * -webkit-animation:0.5s rotate linear; - * } - * - * @keyframes rotate { - * from { transform: rotate(0deg); } - * to { transform: rotate(360deg); } - * } - * - * @-webkit-keyframes rotate { - * from { -webkit-transform: rotate(0deg); } - * to { -webkit-transform: rotate(360deg); } - * } - * ``` - * - * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is - * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition - * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition - * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied - * and spread across the transition and keyframe animation. - * - * ## What is returned - * - * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually - * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are - * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties: - * - * ```js - * var animator = $animateCss(element, { ... }); - * ``` - * - * Now what do the contents of our `animator` variable look like: - * - * ```js - * { - * // starts the animation - * start: Function, - * - * // ends (aborts) the animation - * end: Function - * } - * ``` - * - * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends. - * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and stlyes may have been - * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties - * and that changing them will not reconfigure the parameters of the animation. - * - * ### runner.done() vs runner.then() - * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the - * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**. - * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()` - * unless you really need a digest to kick off afterwards. - * - * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss - * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code). - * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works. - * - * @param {DOMElement} element the element that will be animated - * @param {object} options the animation-related options that will be applied during the animation - * - * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied - * 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.) - * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and - * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted. - * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both). - * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`). - * * `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. - * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation. - * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0` - * is provided then the animation will be skipped entirely. - * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is - * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value - * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same - * CSS delay value. - * * `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.) - * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once - * the animation is closed. This is useful for when the styles are used purely for the sake of - * the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation). - * By default this value is set to `false`. - * - * @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. - */ -var ONE_SECOND = 1000; -var BASE_TEN = 10; - -var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3; -var CLOSING_TIME_BUFFER = 1.5; - -var DETECT_CSS_PROPERTIES = { - transitionDuration: TRANSITION_DURATION_PROP, - transitionDelay: TRANSITION_DELAY_PROP, - transitionProperty: TRANSITION_PROP + PROPERTY_KEY, - animationDuration: ANIMATION_DURATION_PROP, - animationDelay: ANIMATION_DELAY_PROP, - animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY -}; - -var DETECT_STAGGER_CSS_PROPERTIES = { - transitionDuration: TRANSITION_DURATION_PROP, - transitionDelay: TRANSITION_DELAY_PROP, - animationDuration: ANIMATION_DURATION_PROP, - 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) || {}; - forEach(properties, function(formalStyleName, actualStyleName) { - var val = detectedStyles[formalStyleName]; - if (val) { - var c = val.charAt(0); - - // only numerical-based values have a negative sign or digit as the first value - if (c === '-' || c === '+' || c >= 0) { - val = parseMaxTime(val); - } - - // by setting this to null in the event that the delay is not set or is set directly as 0 - // then we can still allow for zegative values to be used later on and not mistake this - // value for being greater than any other negative value. - if (val === 0) { - val = null; - } - styles[actualStyleName] = val; - } - }); - - return styles; -} - -function parseMaxTime(str) { - var maxValue = 0; - var values = str.split(/\s*,\s*/); - forEach(values, function(value) { - // it's always safe to consider only second values and omit `ms` values since - // getComputedStyle will always handle the conversion for us - if (value.charAt(value.length - 1) == 's') { - value = value.substring(0, value.length - 1); - } - value = parseFloat(value) || 0; - maxValue = maxValue ? Math.max(value, maxValue) : value; - }); - return maxValue; -} - -function truthyTimingValue(val) { - return val === 0 || val != null; -} - -function getCssTransitionDurationStyle(duration, applyOnlyDuration) { - var style = TRANSITION_PROP; - var value = duration + 's'; - if (applyOnlyDuration) { - style += DURATION_KEY; - } else { - value += ' linear all'; - } - return [style, value]; -} - -function createLocalCacheLookup() { - var cache = Object.create(null); - return { - flush: function() { - cache = Object.create(null); - }, - - count: function(key) { - var entry = cache[key]; - return entry ? entry.total : 0; - }, - - get: function(key) { - var entry = cache[key]; - return entry && entry.value; - }, - - put: function(key, value) { - if (!cache[key]) { - cache[key] = { total: 1, value: value }; - } else { - cache[key].total++; - } - } - }; -} - -// we do not reassign an already present style value since -// if we detect the style property value again we may be -// detecting styles that were added via the `from` styles. -// We make use of `isDefined` here since an empty string -// or null value (which is what getPropertyValue will return -// for a non-existing style) will still be marked as a valid -// value for the style (a falsy value implies that the style -// is to be removed at the end of the animation). If we had a simple -// "OR" statement then it would not be enough to catch that. -function registerRestorableStyles(backup, node, properties) { - forEach(properties, function(prop) { - backup[prop] = isDefined(backup[prop]) - ? backup[prop] - : node.style.getPropertyValue(prop); - }); -} - -var $AnimateCssProvider = ['$animateProvider', function($animateProvider) { - var gcsLookup = createLocalCacheLookup(); - var gcsStaggerLookup = createLocalCacheLookup(); - - this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout', - '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue', - function($window, $$jqLite, $$AnimateRunner, $timeout, - $$forceReflow, $sniffer, $$rAFScheduler, $$animateQueue) { - - var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - - var parentCounter = 0; - function gcsHashFn(node, extraClasses) { - var KEY = "$$ngAnimateParentKey"; - var parentNode = node.parentNode; - var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter); - return parentID + '-' + node.getAttribute('class') + '-' + extraClasses; - } - - function computeCachedCssStyles(node, className, cacheKey, properties) { - var timings = gcsLookup.get(cacheKey); - - if (!timings) { - timings = computeCssStyles($window, node, properties); - if (timings.animationIterationCount === 'infinite') { - timings.animationIterationCount = 1; - } - } - - // we keep putting this in multiple times even though the value and the cacheKey are the same - // because we're keeping an interal tally of how many duplicate animations are detected. - gcsLookup.put(cacheKey, timings); - return timings; - } - - function computeCachedCssStaggerStyles(node, className, cacheKey, properties) { - var stagger; - - // if we have one or more existing matches of matching elements - // containing the same parent + CSS styles (which is how cacheKey works) - // then staggering is possible - if (gcsLookup.count(cacheKey) > 0) { - stagger = gcsStaggerLookup.get(cacheKey); - - if (!stagger) { - var staggerClassName = pendClasses(className, '-stagger'); - - $$jqLite.addClass(node, staggerClassName); - - stagger = computeCssStyles($window, node, properties); - - // force the conversion of a null value to zero incase not set - stagger.animationDuration = Math.max(stagger.animationDuration, 0); - stagger.transitionDuration = Math.max(stagger.transitionDuration, 0); - - $$jqLite.removeClass(node, staggerClassName); - - gcsStaggerLookup.put(cacheKey, stagger); - } - } - - return stagger || {}; - } - - var cancelLastRAFRequest; - var rafWaitQueue = []; - function waitUntilQuiet(callback) { - rafWaitQueue.push(callback); - $$rAFScheduler.waitUntilQuiet(function() { - gcsLookup.flush(); - gcsStaggerLookup.flush(); - - // 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](pageWidth); - } - rafWaitQueue.length = 0; - }); - } - - function computeTimings(node, className, cacheKey) { - var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES); - var aD = timings.animationDelay; - var tD = timings.transitionDelay; - timings.maxDelay = aD && tD - ? Math.max(aD, tD) - : (aD || tD); - timings.maxDuration = Math.max( - timings.animationDuration * timings.animationIterationCount, - timings.transitionDuration); - - return timings; - } - - return function init(element, initialOptions) { - // all of the animation functions should create - // a copy of the options data, however, if a - // parent service has already created a copy then - // we should stick to using that - var options = initialOptions || {}; - if (!options.$$prepared) { - options = prepareAnimationOptions(copy(options)); - } - - var restoreStyles = {}; - var node = getDomNode(element); - if (!node - || !node.parentNode - || !$$animateQueue.enabled()) { - return closeAndReturnNoopAnimator(); - } - - var temporaryStyles = []; - var classes = element.attr('class'); - var styles = packageStyles(options); - var animationClosed; - var animationPaused; - var animationCompleted; - var runner; - var runnerHost; - var maxDelay; - var maxDelayTime; - var maxDuration; - var maxDurationTime; - var startTime; - var events = []; - - if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) { - return closeAndReturnNoopAnimator(); - } - - var method = options.event && isArray(options.event) - ? options.event.join(' ') - : options.event; - - var isStructural = method && options.structural; - var structuralClassName = ''; - var addRemoveClassName = ''; - - if (isStructural) { - structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true); - } else if (method) { - structuralClassName = method; - } - - if (options.addClass) { - addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX); - } - - if (options.removeClass) { - if (addRemoveClassName.length) { - addRemoveClassName += ' '; - } - addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX); - } - - // there may be a situation where a structural animation is combined together - // with CSS classes that need to resolve before the animation is computed. - // However this means that there is no explicit CSS code to block the animation - // from happening (by setting 0s none in the class name). If this is the case - // we need to apply the classes before the first rAF so we know to continue if - // there actually is a detected transition or keyframe animation - if (options.applyClassesEarly && addRemoveClassName.length) { - applyAnimationClasses(element, options); - } - - 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; - 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(); - } - - var cacheKey, stagger; - if (options.stagger > 0) { - var staggerVal = parseFloat(options.stagger); - stagger = { - transitionDelay: staggerVal, - animationDelay: staggerVal, - transitionDuration: 0, - animationDuration: 0 - }; - } else { - cacheKey = gcsHashFn(node, fullClassName); - stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES); - } - - if (!options.$$skipPreparationClasses) { - $$jqLite.addClass(element, preparationClasses); - } - - var applyOnlyDuration; - - if (options.transitionStyle) { - var transitionStyle = [TRANSITION_PROP, options.transitionStyle]; - applyInlineStyle(node, transitionStyle); - temporaryStyles.push(transitionStyle); - } - - if (options.duration >= 0) { - applyOnlyDuration = node.style[TRANSITION_PROP].length > 0; - var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration); - - // we set the duration so that it will be picked up by getComputedStyle later - applyInlineStyle(node, durationStyle); - temporaryStyles.push(durationStyle); - } - - if (options.keyframeStyle) { - var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle]; - applyInlineStyle(node, keyframeStyle); - temporaryStyles.push(keyframeStyle); - } - - var itemIndex = stagger - ? options.staggerIndex >= 0 - ? options.staggerIndex - : gcsLookup.count(cacheKey) - : 0; - - var isFirst = itemIndex === 0; - - // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY - // without causing any combination of transitions to kick in. By adding a negative delay value - // it forces the setup class' transition to end immediately. We later then remove the negative - // 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 && !options.skipBlocking) { - blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE); - } - - var timings = computeTimings(node, fullClassName, cacheKey); - var relativeDelay = timings.maxDelay; - maxDelay = Math.max(relativeDelay, 0); - maxDuration = timings.maxDuration; - - var flags = {}; - flags.hasTransitions = timings.transitionDuration > 0; - flags.hasAnimations = timings.animationDuration > 0; - flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty == 'all'; - flags.applyTransitionDuration = hasToStyles && ( - (flags.hasTransitions && !flags.hasTransitionAll) - || (flags.hasAnimations && !flags.hasTransitions)); - flags.applyAnimationDuration = options.duration && flags.hasAnimations; - flags.applyTransitionDelay = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions); - flags.applyAnimationDelay = truthyTimingValue(options.delay) && flags.hasAnimations; - flags.recalculateTimingStyles = addRemoveClassName.length > 0; - - if (flags.applyTransitionDuration || flags.applyAnimationDuration) { - maxDuration = options.duration ? parseFloat(options.duration) : maxDuration; - - if (flags.applyTransitionDuration) { - flags.hasTransitions = true; - timings.transitionDuration = maxDuration; - applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0; - temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration)); - } - - if (flags.applyAnimationDuration) { - flags.hasAnimations = true; - timings.animationDuration = maxDuration; - temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration)); - } - } - - if (maxDuration === 0 && !flags.recalculateTimingStyles) { - return closeAndReturnNoopAnimator(); - } - - if (options.delay != null) { - var delayStyle; - if (typeof options.delay !== "boolean") { - delayStyle = parseFloat(options.delay); - // number in options.delay means we have to recalculate the delay for the closing timeout - maxDelay = Math.max(delayStyle, 0); - } - - 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. - if (options.duration == null && timings.transitionDuration > 0) { - flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst; - } - - maxDelayTime = maxDelay * ONE_SECOND; - maxDurationTime = maxDuration * ONE_SECOND; - if (!options.skipBlocking) { - flags.blockTransition = timings.transitionDuration > 0; - flags.blockKeyframeAnimation = timings.animationDuration > 0 && - stagger.animationDelay > 0 && - stagger.animationDuration === 0; - } - - if (options.from) { - if (options.cleanupStyles) { - registerRestorableStyles(restoreStyles, node, Object.keys(options.from)); - } - applyAnimationFromStyles(element, options); - } - - if (flags.blockTransition || flags.blockKeyframeAnimation) { - applyBlocking(maxDuration); - } else if (!options.skipBlocking) { - blockTransitions(node, false); - } - - // TODO(matsko): for 1.5 change this code to have an animator object for better debugging - return { - $$willAnimate: true, - end: endFn, - start: function() { - if (animationClosed) return; - - runnerHost = { - end: endFn, - cancel: cancelFn, - resume: null, //this will be set during the start() phase - pause: null - }; - - runner = new $$AnimateRunner(runnerHost); - - waitUntilQuiet(start); - - // we don't have access to pause/resume the animation - // since it hasn't run yet. AnimateRunner will therefore - // set noop functions for resume and pause and they will - // later be overridden once the animation is triggered - return runner; - } - }; - - function endFn() { - close(); - } - - function cancelFn() { - close(true); - } - - function close(rejected) { // jshint ignore:line - // if the promise has been called already then we shouldn't close - // the animation again - if (animationClosed || (animationCompleted && animationPaused)) return; - animationClosed = true; - animationPaused = false; - - if (!options.$$skipPreparationClasses) { - $$jqLite.removeClass(element, preparationClasses); - } - $$jqLite.removeClass(element, activeClasses); - - blockKeyframeAnimations(node, false); - blockTransitions(node, false); - - forEach(temporaryStyles, function(entry) { - // There is only one way to remove inline style properties entirely from elements. - // By using `removeProperty` this works, but we need to convert camel-cased CSS - // styles down to hyphenated values. - node.style[entry[0]] = ''; - }); - - applyAnimationClasses(element, options); - applyAnimationStyles(element, options); - - if (Object.keys(restoreStyles).length) { - forEach(restoreStyles, function(value, prop) { - value ? node.style.setProperty(prop, value) - : node.style.removeProperty(prop); - }); - } - - // the reason why we have this option is to allow a synchronous closing callback - // that is fired as SOON as the animation ends (when the CSS is removed) or if - // the animation never takes off at all. A good example is a leave animation since - // the element must be removed just after the animation is over or else the element - // will appear on screen for one animation frame causing an overbearing flicker. - if (options.onDone) { - options.onDone(); - } - - if (events && events.length) { - // Remove the transitionend / animationend listener(s) - element.off(events.join(' '), onAnimationProgress); - } - - //Cancel the fallback closing timeout and remove the timer data - var animationTimerData = element.data(ANIMATE_TIMER_KEY); - if (animationTimerData) { - $timeout.cancel(animationTimerData[0].timer); - element.removeData(ANIMATE_TIMER_KEY); - } - - // if the preparation function fails then the promise is not setup - if (runner) { - runner.complete(!rejected); - } - } - - function applyBlocking(duration) { - if (flags.blockTransition) { - blockTransitions(node, duration); - } - - if (flags.blockKeyframeAnimation) { - blockKeyframeAnimations(node, !!duration); - } - } - - function closeAndReturnNoopAnimator() { - runner = new $$AnimateRunner({ - end: endFn, - cancel: cancelFn - }); - - // should flush the cache animation - waitUntilQuiet(noop); - close(); - - return { - $$willAnimate: false, - start: function() { - return runner; - }, - end: endFn - }; - } - - function onAnimationProgress(event) { - event.stopPropagation(); - var ev = event.originalEvent || event; - - // we now always use `Date.now()` due to the recent changes with - // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info) - var timeStamp = ev.$manualTimeStamp || Date.now(); - - /* Firefox (or possibly just Gecko) likes to not round values up - * when a ms measurement is used for the animation */ - var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)); - - /* $manualTimeStamp is a mocked timeStamp value which is set - * within browserTrigger(). This is only here so that tests can - * mock animations properly. Real events fallback to event.timeStamp, - * or, if they don't, then a timeStamp is automatically created for them. - * We're checking to see if the timeStamp surpasses the expected delay, - * but we're using elapsedTime instead of the timeStamp on the 2nd - * pre-condition since animationPauseds sometimes close off early */ - if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) { - // we set this flag to ensure that if the transition is paused then, when resumed, - // the animation will automatically close itself since transitions cannot be paused. - animationCompleted = true; - close(); - } - } - - function start() { - if (animationClosed) return; - if (!node.parentNode) { - close(); - return; - } - - // even though we only pause keyframe animations here the pause flag - // will still happen when transitions are used. Only the transition will - // not be paused since that is not possible. If the animation ends when - // paused then it will not complete until unpaused or cancelled. - var playPause = function(playAnimation) { - if (!animationCompleted) { - animationPaused = !playAnimation; - if (timings.animationDuration) { - var value = blockKeyframeAnimations(node, animationPaused); - animationPaused - ? temporaryStyles.push(value) - : removeFromArray(temporaryStyles, value); - } - } else if (animationPaused && playAnimation) { - animationPaused = false; - close(); - } - }; - - // checking the stagger duration prevents an accidently cascade of the CSS delay style - // being inherited from the parent. If the transition duration is zero then we can safely - // rely that the delay value is an intential stagger delay style. - var maxStagger = itemIndex > 0 - && ((timings.transitionDuration && stagger.transitionDuration === 0) || - (timings.animationDuration && stagger.animationDuration === 0)) - && Math.max(stagger.animationDelay, stagger.transitionDelay); - if (maxStagger) { - $timeout(triggerAnimationStart, - Math.floor(maxStagger * itemIndex * ONE_SECOND), - false); - } else { - triggerAnimationStart(); - } - - // this will decorate the existing promise runner with pause/resume methods - runnerHost.resume = function() { - playPause(true); - }; - - runnerHost.pause = function() { - playPause(false); - }; - - function triggerAnimationStart() { - // just incase a stagger animation kicks in when the animation - // itself was cancelled entirely - if (animationClosed) return; - - applyBlocking(false); - - forEach(temporaryStyles, function(entry) { - var key = entry[0]; - var value = entry[1]; - node.style[key] = value; - }); - - applyAnimationClasses(element, options); - $$jqLite.addClass(element, activeClasses); - - if (flags.recalculateTimingStyles) { - fullClassName = node.className + ' ' + preparationClasses; - cacheKey = gcsHashFn(node, fullClassName); - - timings = computeTimings(node, fullClassName, cacheKey); - relativeDelay = timings.maxDelay; - maxDelay = Math.max(relativeDelay, 0); - maxDuration = timings.maxDuration; - - if (maxDuration === 0) { - close(); - return; - } - - flags.hasTransitions = timings.transitionDuration > 0; - flags.hasAnimations = timings.animationDuration > 0; - } - - if (flags.applyAnimationDelay) { - relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay) - ? parseFloat(options.delay) - : relativeDelay; - - maxDelay = Math.max(relativeDelay, 0); - timings.animationDelay = relativeDelay; - delayStyle = getCssDelayStyle(relativeDelay, true); - temporaryStyles.push(delayStyle); - node.style[delayStyle[0]] = delayStyle[1]; - } - - maxDelayTime = maxDelay * ONE_SECOND; - maxDurationTime = maxDuration * ONE_SECOND; - - if (options.easing) { - var easeProp, easeVal = options.easing; - if (flags.hasTransitions) { - easeProp = TRANSITION_PROP + TIMING_KEY; - temporaryStyles.push([easeProp, easeVal]); - node.style[easeProp] = easeVal; - } - if (flags.hasAnimations) { - easeProp = ANIMATION_PROP + TIMING_KEY; - temporaryStyles.push([easeProp, easeVal]); - node.style[easeProp] = easeVal; - } - } - - if (timings.transitionDuration) { - events.push(TRANSITIONEND_EVENT); - } - - if (timings.animationDuration) { - events.push(ANIMATIONEND_EVENT); - } - - startTime = Date.now(); - 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); - } - - if (events.length) { - element.on(events.join(' '), onAnimationProgress); - } - - if (options.to) { - if (options.cleanupStyles) { - registerRestorableStyles(restoreStyles, node, Object.keys(options.to)); - } - applyAnimationToStyles(element, options); - } - } - - function onAnimationExpired() { - 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); - } - } - } - }; - }]; -}]; - -var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) { - $$animationProvider.drivers.push('$$animateCssDriver'); - - var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim'; - var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor'; - - var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out'; - var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in'; - - function isDocumentFragment(node) { - return node.parentNode && node.parentNode.nodeType === 11; - } - - this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document', - function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) { - - // only browsers that support these properties can render animations - if (!$sniffer.animations && !$sniffer.transitions) return noop; - - var bodyNode = $document[0].body; - var rootNode = getDomNode($rootElement); - - var rootBodyElement = jqLite( - // this is to avoid using something that exists outside of the body - // we also special case the doc fragement case because our unit test code - // appends the $rootElement to the body after the app has been bootstrapped - isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode - ); - - var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - - return function initDriverFn(animationDetails) { - return animationDetails.from && animationDetails.to - ? prepareFromToAnchorAnimation(animationDetails.from, - animationDetails.to, - animationDetails.classes, - animationDetails.anchors) - : prepareRegularAnimation(animationDetails); - }; - - function filterCssClasses(classes) { - //remove all the `ng-` stuff - return classes.replace(/\bng-\S+\b/g, ''); - } - - function getUniqueValues(a, b) { - if (isString(a)) a = a.split(' '); - if (isString(b)) b = b.split(' '); - return a.filter(function(val) { - return b.indexOf(val) === -1; - }).join(' '); - } - - function prepareAnchoredAnimation(classes, outAnchor, inAnchor) { - var clone = jqLite(getDomNode(outAnchor).cloneNode(true)); - var startingClasses = filterCssClasses(getClassVal(clone)); - - outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME); - inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME); - - clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME); - - rootBodyElement.append(clone); - - var animatorIn, animatorOut = prepareOutAnimation(); - - // the user may not end up using the `out` animation and - // only making use of the `in` animation or vice-versa. - // In either case we should allow this and not assume the - // animation is over unless both animations are not used. - if (!animatorOut) { - animatorIn = prepareInAnimation(); - if (!animatorIn) { - return end(); - } - } - - var startingAnimator = animatorOut || animatorIn; - - return { - start: function() { - var runner; - - var currentAnimation = startingAnimator.start(); - currentAnimation.done(function() { - currentAnimation = null; - if (!animatorIn) { - animatorIn = prepareInAnimation(); - if (animatorIn) { - currentAnimation = animatorIn.start(); - currentAnimation.done(function() { - currentAnimation = null; - end(); - runner.complete(); - }); - return currentAnimation; - } - } - // in the event that there is no `in` animation - end(); - runner.complete(); - }); - - runner = new $$AnimateRunner({ - end: endFn, - cancel: endFn - }); - - return runner; - - function endFn() { - if (currentAnimation) { - currentAnimation.end(); - } - } - } - }; - - function calculateAnchorStyles(anchor) { - var styles = {}; - - var coords = getDomNode(anchor).getBoundingClientRect(); - - // we iterate directly since safari messes up and doesn't return - // all the keys for the coods object when iterated - forEach(['width','height','top','left'], function(key) { - var value = coords[key]; - switch (key) { - case 'top': - value += bodyNode.scrollTop; - break; - case 'left': - value += bodyNode.scrollLeft; - break; - } - styles[key] = Math.floor(value) + 'px'; - }); - return styles; - } - - function prepareOutAnimation() { - var animator = $animateCss(clone, { - addClass: NG_OUT_ANCHOR_CLASS_NAME, - delay: true, - from: calculateAnchorStyles(outAnchor) - }); - - // read the comment within `prepareRegularAnimation` to understand - // why this check is necessary - return animator.$$willAnimate ? animator : null; - } - - function getClassVal(element) { - return element.attr('class') || ''; - } - - function prepareInAnimation() { - var endingClasses = filterCssClasses(getClassVal(inAnchor)); - var toAdd = getUniqueValues(endingClasses, startingClasses); - var toRemove = getUniqueValues(startingClasses, endingClasses); - - var animator = $animateCss(clone, { - to: calculateAnchorStyles(inAnchor), - addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd, - removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove, - delay: true - }); - - // read the comment within `prepareRegularAnimation` to understand - // why this check is necessary - return animator.$$willAnimate ? animator : null; - } - - function end() { - clone.remove(); - outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME); - inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME); - } - } - - function prepareFromToAnchorAnimation(from, to, classes, anchors) { - var fromAnimation = prepareRegularAnimation(from, noop); - var toAnimation = prepareRegularAnimation(to, noop); - - var anchorAnimations = []; - forEach(anchors, function(anchor) { - var outElement = anchor['out']; - var inElement = anchor['in']; - var animator = prepareAnchoredAnimation(classes, outElement, inElement); - if (animator) { - anchorAnimations.push(animator); - } - }); - - // no point in doing anything when there are no elements to animate - if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return; - - return { - start: function() { - var animationRunners = []; - - if (fromAnimation) { - animationRunners.push(fromAnimation.start()); - } - - if (toAnimation) { - animationRunners.push(toAnimation.start()); - } - - forEach(anchorAnimations, function(animation) { - animationRunners.push(animation.start()); - }); - - var runner = new $$AnimateRunner({ - end: endFn, - cancel: endFn // CSS-driven animations cannot be cancelled, only ended - }); - - $$AnimateRunner.all(animationRunners, function(status) { - runner.complete(status); - }); - - return runner; - - function endFn() { - forEach(animationRunners, function(runner) { - runner.end(); - }); - } - } - }; - } - - function prepareRegularAnimation(animationDetails) { - var element = animationDetails.element; - var options = animationDetails.options || {}; - - if (animationDetails.structural) { - 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 - if (animationDetails.event === 'leave') { - options.onDone = options.domOperation; - } - } - - // 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); - - // the driver lookup code inside of $$animation attempts to spawn a - // driver one by one until a driver returns a.$$willAnimate animator object. - // $animateCss will always return an object, however, it will pass in - // a flag as a hint as to whether an animation was detected or not - return animator.$$willAnimate ? animator : null; - } - }]; -}]; - -// TODO(matsko): use caching here to speed things up for detection -// TODO(matsko): add documentation -// by the time... - -var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) { - this.$get = ['$injector', '$$AnimateRunner', '$$jqLite', - function($injector, $$AnimateRunner, $$jqLite) { - - var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - // $animateJs(element, 'enter'); - return function(element, event, classes, options) { - var animationClosed = false; - - // the `classes` argument is optional and if it is not used - // then the classes will be resolved from the element's className - // property as well as options.addClass/options.removeClass. - if (arguments.length === 3 && isObject(classes)) { - options = classes; - classes = null; - } - - options = prepareAnimationOptions(options); - if (!classes) { - classes = element.attr('class') || ''; - if (options.addClass) { - classes += ' ' + options.addClass; - } - if (options.removeClass) { - classes += ' ' + options.removeClass; - } - } - - var classesToAdd = options.addClass; - var classesToRemove = options.removeClass; - - // the lookupAnimations function returns a series of animation objects that are - // matched up with one or more of the CSS classes. These animation objects are - // defined via the module.animation factory function. If nothing is detected then - // we don't return anything which then makes $animation query the next driver. - var animations = lookupAnimations(classes); - var before, after; - if (animations.length) { - var afterFn, beforeFn; - if (event == 'leave') { - beforeFn = 'leave'; - afterFn = 'afterLeave'; // TODO(matsko): get rid of this - } else { - beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1); - afterFn = event; - } - - if (event !== 'enter' && event !== 'move') { - before = packageAnimations(element, event, options, animations, beforeFn); - } - after = packageAnimations(element, event, options, animations, afterFn); - } - - // no matching animations - if (!before && !after) return; - - function applyOptions() { - options.domOperation(); - applyAnimationClasses(element, options); - } - - function close() { - animationClosed = true; - applyOptions(); - applyAnimationStyles(element, options); - } - - var runner; - - return { - $$willAnimate: true, - end: function() { - if (runner) { - runner.end(); - } else { - close(); - runner = new $$AnimateRunner(); - runner.complete(true); - } - return runner; - }, - start: function() { - if (runner) { - return runner; - } - - runner = new $$AnimateRunner(); - var closeActiveAnimations; - var chain = []; - - if (before) { - chain.push(function(fn) { - closeActiveAnimations = before(fn); - }); - } - - if (chain.length) { - chain.push(function(fn) { - applyOptions(); - fn(true); - }); - } else { - applyOptions(); - } - - if (after) { - chain.push(function(fn) { - closeActiveAnimations = after(fn); - }); - } - - runner.setHost({ - end: function() { - endAnimations(); - }, - cancel: function() { - endAnimations(true); - } - }); - - $$AnimateRunner.chain(chain, onComplete); - return runner; - - function onComplete(success) { - close(success); - runner.complete(success); - } - - function endAnimations(cancelled) { - if (!animationClosed) { - (closeActiveAnimations || noop)(cancelled); - onComplete(cancelled); - } - } - } - }; - - function executeAnimationFn(fn, element, event, options, onDone) { - var args; - switch (event) { - case 'animate': - args = [element, options.from, options.to, onDone]; - break; - - case 'setClass': - args = [element, classesToAdd, classesToRemove, onDone]; - break; - - case 'addClass': - args = [element, classesToAdd, onDone]; - break; - - case 'removeClass': - args = [element, classesToRemove, onDone]; - break; - - default: - args = [element, onDone]; - break; - } - - args.push(options); - - var value = fn.apply(fn, args); - if (value) { - if (isFunction(value.start)) { - value = value.start(); - } - - if (value instanceof $$AnimateRunner) { - value.done(onDone); - } else if (isFunction(value)) { - // optional onEnd / onCancel callback - return value; - } - } - - return noop; - } - - function groupEventedAnimations(element, event, options, animations, fnName) { - var operations = []; - forEach(animations, function(ani) { - var animation = ani[fnName]; - if (!animation) return; - - // note that all of these animations will run in parallel - operations.push(function() { - var runner; - var endProgressCb; - - var resolved = false; - var onAnimationComplete = function(rejected) { - if (!resolved) { - resolved = true; - (endProgressCb || noop)(rejected); - runner.complete(!rejected); - } - }; - - runner = new $$AnimateRunner({ - end: function() { - onAnimationComplete(); - }, - cancel: function() { - onAnimationComplete(true); - } - }); - - endProgressCb = executeAnimationFn(animation, element, event, options, function(result) { - var cancelled = result === false; - onAnimationComplete(cancelled); - }); - - return runner; - }); - }); - - return operations; - } - - function packageAnimations(element, event, options, animations, fnName) { - var operations = groupEventedAnimations(element, event, options, animations, fnName); - if (operations.length === 0) { - var a,b; - if (fnName === 'beforeSetClass') { - a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass'); - b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass'); - } else if (fnName === 'setClass') { - a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass'); - b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass'); - } - - if (a) { - operations = operations.concat(a); - } - if (b) { - operations = operations.concat(b); - } - } - - if (operations.length === 0) return; - - // TODO(matsko): add documentation - return function startAnimation(callback) { - var runners = []; - if (operations.length) { - forEach(operations, function(animateFn) { - runners.push(animateFn()); - }); - } - - runners.length ? $$AnimateRunner.all(runners, callback) : callback(); - - return function endFn(reject) { - forEach(runners, function(runner) { - reject ? runner.cancel() : runner.end(); - }); - }; - }; - } - }; - - function lookupAnimations(classes) { - classes = isArray(classes) ? classes : classes.split(' '); - var matches = [], flagMap = {}; - for (var i=0; i < classes.length; i++) { - var klass = classes[i], - animationFactory = $animateProvider.$$registeredAnimations[klass]; - if (animationFactory && !flagMap[klass]) { - matches.push($injector.get(animationFactory)); - flagMap[klass] = true; - } - } - return matches; - } - }]; -}]; - -var $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) { - $$animationProvider.drivers.push('$$animateJsDriver'); - this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) { - return function initDriverFn(animationDetails) { - if (animationDetails.from && animationDetails.to) { - var fromAnimation = prepareAnimation(animationDetails.from); - var toAnimation = prepareAnimation(animationDetails.to); - if (!fromAnimation && !toAnimation) return; - - return { - start: function() { - var animationRunners = []; - - if (fromAnimation) { - animationRunners.push(fromAnimation.start()); - } - - if (toAnimation) { - animationRunners.push(toAnimation.start()); - } - - $$AnimateRunner.all(animationRunners, done); - - var runner = new $$AnimateRunner({ - end: endFnFactory(), - cancel: endFnFactory() - }); - - return runner; - - function endFnFactory() { - return function() { - forEach(animationRunners, function(runner) { - // at this point we cannot cancel animations for groups just yet. 1.5+ - runner.end(); - }); - }; - } - - function done(status) { - runner.complete(status); - } - } - }; - } else { - return prepareAnimation(animationDetails); - } - }; - - function prepareAnimation(animationDetails) { - // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations - var element = animationDetails.element; - var event = animationDetails.event; - var options = animationDetails.options; - var classes = animationDetails.classes; - return $$animateJs(element, event, classes, options); - } - }]; -}]; - -var NG_ANIMATE_ATTR_NAME = 'data-ng-animate'; -var NG_ANIMATE_PIN_DATA = '$ngAnimatePin'; -var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) { - var PRE_DIGEST_STATE = 1; - var RUNNING_STATE = 2; - var ONE_SPACE = ' '; - - var rules = this.rules = { - skip: [], - cancel: [], - join: [] - }; - - function makeTruthyCssClassMap(classString) { - if (!classString) { - return null; - } - - var keys = classString.split(ONE_SPACE); - var map = Object.create(null); - - forEach(keys, function(key) { - map[key] = true; - }); - return map; - } - - function hasMatchingClasses(newClassString, currentClassString) { - if (newClassString && currentClassString) { - var currentClassMap = makeTruthyCssClassMap(currentClassString); - return newClassString.split(ONE_SPACE).some(function(className) { - return currentClassMap[className]; - }); - } - } - - function isAllowed(ruleType, element, currentAnimation, previousAnimation) { - return rules[ruleType].some(function(fn) { - return fn(element, currentAnimation, previousAnimation); - }); - } - - function hasAnimationClasses(animation, and) { - var a = (animation.addClass || '').length > 0; - var b = (animation.removeClass || '').length > 0; - return and ? a && b : a || b; - } - - rules.join.push(function(element, newAnimation, currentAnimation) { - // if the new animation is class-based then we can just tack that on - return !newAnimation.structural && hasAnimationClasses(newAnimation); - }); - - rules.skip.push(function(element, newAnimation, currentAnimation) { - // there is no need to animate anything if no classes are being added and - // there is no structural animation that will be triggered - return !newAnimation.structural && !hasAnimationClasses(newAnimation); - }); - - rules.skip.push(function(element, newAnimation, currentAnimation) { - // why should we trigger a new structural animation if the element will - // be removed from the DOM anyway? - return currentAnimation.event == 'leave' && newAnimation.structural; - }); - - rules.skip.push(function(element, newAnimation, currentAnimation) { - // 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) { - // there can never be two structural animations running at the same time - return currentAnimation.structural && newAnimation.structural; - }); - - rules.cancel.push(function(element, newAnimation, currentAnimation) { - // if the previous animation is already running, but the new animation will - // be triggered, but the new animation is structural - return currentAnimation.state === RUNNING_STATE && newAnimation.structural; - }); - - rules.cancel.push(function(element, newAnimation, currentAnimation) { - var nA = newAnimation.addClass; - var nR = newAnimation.removeClass; - var cA = currentAnimation.addClass; - var cR = currentAnimation.removeClass; - - // early detection to save the global CPU shortage :) - if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) { - return false; - } - - return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA); - }); - - this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap', - '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow', - function($$rAF, $rootScope, $rootElement, $document, $$HashMap, - $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) { - - var activeAnimationsLookup = new $$HashMap(); - var disabledElementsLookup = new $$HashMap(); - var animationsEnabled = null; - // $document might be mocked out in tests and won't include a real document. - // Providing an empty object with hidden = true will prevent animations from running - var rawDocument = $document[0] || {hidden: true}; - - function postDigestTaskFactory() { - var postDigestCalled = false; - return function(fn) { - // we only issue a call to postDigest before - // it has first passed. This prevents any callbacks - // from not firing once the animation has completed - // since it will be out of the digest cycle. - if (postDigestCalled) { - fn(); - } else { - $rootScope.$$postDigest(function() { - postDigestCalled = true; - fn(); - }); - } - }; - } - - // Wait until all directive and route-related templates are downloaded and - // compiled. The $templateRequest.totalPendingRequests variable keeps track of - // all of the remote templates being currently downloaded. If there are no - // templates currently downloading then the watcher will still fire anyway. - var deregisterWatch = $rootScope.$watch( - function() { return $templateRequest.totalPendingRequests === 0; }, - function(isEmpty) { - if (!isEmpty) return; - deregisterWatch(); - - // Now that all templates have been downloaded, $animate will wait until - // the post digest queue is empty before enabling animations. By having two - // calls to $postDigest calls we can ensure that the flag is enabled at the - // very end of the post digest queue. Since all of the animations in $animate - // use $postDigest, it's important that the code below executes at the end. - // This basically means that the page is fully downloaded and compiled before - // any animations are triggered. - $rootScope.$$postDigest(function() { - $rootScope.$$postDigest(function() { - // we check for null directly in the event that the application already called - // .enabled() with whatever arguments that it provided it with - if (animationsEnabled === null) { - animationsEnabled = true; - } - }); - }); - } - ); - - var callbackRegistry = {}; - - // remember that the classNameFilter is set during the provider/config - // stage therefore we can optimize here and setup a helper function - var classNameFilter = $animateProvider.classNameFilter(); - var isAnimatableClassName = !classNameFilter - ? function() { return true; } - : function(className) { - return classNameFilter.test(className); - }; - - var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - - function normalizeAnimationDetails(element, animation) { - return mergeAnimationDetails(element, animation, {}); - } - - // IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259. - var contains = Node.prototype.contains || function(arg) { - // jshint bitwise: false - return this === arg || !!(this.compareDocumentPosition(arg) & 16); - // jshint bitwise: true - }; - - function findCallbacks(parent, element, event) { - var targetNode = getDomNode(element); - var targetParentNode = getDomNode(parent); - - var matches = []; - var entries = callbackRegistry[event]; - if (entries) { - forEach(entries, function(entry) { - if (contains.call(entry.node, targetNode)) { - matches.push(entry.callback); - } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) { - matches.push(entry.callback); - } - }); - } - - return matches; - } - - return { - on: function(event, container, callback) { - var node = extractElementNode(container); - callbackRegistry[event] = callbackRegistry[event] || []; - callbackRegistry[event].push({ - node: node, - callback: callback - }); - }, - - off: function(event, container, callback) { - var entries = callbackRegistry[event]; - if (!entries) return; - - callbackRegistry[event] = arguments.length === 1 - ? null - : filterFromRegistry(entries, container, callback); - - function filterFromRegistry(list, matchContainer, matchCallback) { - var containerNode = extractElementNode(matchContainer); - return list.filter(function(entry) { - var isMatch = entry.node === containerNode && - (!matchCallback || entry.callback === matchCallback); - return !isMatch; - }); - } - }, - - pin: function(element, parentElement) { - assertArg(isElement(element), 'element', 'not an element'); - assertArg(isElement(parentElement), 'parentElement', 'not an element'); - element.data(NG_ANIMATE_PIN_DATA, parentElement); - }, - - push: function(element, event, options, domOperation) { - options = options || {}; - options.domOperation = domOperation; - return queueAnimation(element, event, options); - }, - - // this method has four signatures: - // () - global getter - // (bool) - global setter - // (element) - element getter - // (element, bool) - element setter - enabled: function(element, bool) { - var argCount = arguments.length; - - if (argCount === 0) { - // () - Global getter - bool = !!animationsEnabled; - } else { - var hasElement = isElement(element); - - if (!hasElement) { - // (bool) - Global setter - bool = animationsEnabled = !!element; - } else { - var node = getDomNode(element); - var recordExists = disabledElementsLookup.get(node); - - if (argCount === 1) { - // (element) - Element getter - bool = !recordExists; - } else { - // (element, bool) - Element setter - disabledElementsLookup.put(node, !bool); - } - } - } - - return bool; - } - }; - - function queueAnimation(element, event, initialOptions) { - // we always make a copy of the options since - // there should never be any side effects on - // the input data when running `$animateCss`. - var options = copy(initialOptions); - - var node, parent; - element = stripCommentsFromElement(element); - if (element) { - node = getDomNode(element); - parent = element.parent(); - } - - options = prepareAnimationOptions(options); - - // we create a fake runner with a working promise. - // These methods will become available after the digest has passed - var runner = new $$AnimateRunner(); - - // this is used to trigger callbacks in postDigest mode - var runInNextPostDigestOrNow = postDigestTaskFactory(); - - 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; - } - - if (options.to && !isObject(options.to)) { - 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(); - return runner; - } - - var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0; - - var documentHidden = rawDocument.hidden; - - // this is a hard disable of all animations for the application or on - // the element itself, therefore there is no need to continue further - // past this point if not enabled - // Animations are also disabled if the document is currently hidden (page is not visible - // to the user), because browsers slow down or do not flush calls to requestAnimationFrame - var skipAnimations = !animationsEnabled || documentHidden || disabledElementsLookup.get(node); - var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {}; - var hasExistingAnimation = !!existingAnimation.state; - - // there is no point in traversing the same collection of parent ancestors if a followup - // animation will be run on the same element that already did all that checking work - if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state != PRE_DIGEST_STATE)) { - skipAnimations = !areAnimationsAllowed(element, parent, event); - } - - if (skipAnimations) { - // Callbacks should fire even if the document is hidden (regression fix for issue #14120) - if (documentHidden) notifyProgress(runner, event, 'start'); - close(); - if (documentHidden) notifyProgress(runner, event, 'close'); - return runner; - } - - if (isStructural) { - closeChildAnimations(element); - } - - var newAnimation = { - structural: isStructural, - element: element, - event: event, - addClass: options.addClass, - removeClass: options.removeClass, - close: close, - options: options, - runner: runner - }; - - if (hasExistingAnimation) { - var skipAnimationFlag = isAllowed('skip', element, newAnimation, existingAnimation); - if (skipAnimationFlag) { - if (existingAnimation.state === RUNNING_STATE) { - close(); - return runner; - } else { - mergeAnimationDetails(element, existingAnimation, newAnimation); - return existingAnimation.runner; - } - } - var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation); - if (cancelAnimationFlag) { - if (existingAnimation.state === RUNNING_STATE) { - // this will end the animation right away and it is safe - // to do so since the animation is already running and the - // runner callback code will run in async - existingAnimation.runner.end(); - } else if (existingAnimation.structural) { - // this means that the animation is queued into a digest, but - // hasn't started yet. Therefore it is safe to run the close - // method which will call the runner methods in async. - existingAnimation.close(); - } else { - // this will merge the new animation options into existing animation options - mergeAnimationDetails(element, existingAnimation, newAnimation); - - return existingAnimation.runner; - } - } else { - // a joined animation means that this animation will take over the existing one - // so an example would involve a leave animation taking over an enter. Then when - // the postDigest kicks in the enter will be ignored. - var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation); - if (joinAnimationFlag) { - if (existingAnimation.state === RUNNING_STATE) { - normalizeAnimationDetails(element, newAnimation); - } else { - applyGeneratedPreparationClasses(element, isStructural ? event : null, options); - - event = newAnimation.event = existingAnimation.event; - options = mergeAnimationDetails(element, existingAnimation, newAnimation); - - //we return the same runner since only the option values of this animation will - //be fed into the `existingAnimation`. - return existingAnimation.runner; - } - } - } - } else { - // normalization in this case means that it removes redundant CSS classes that - // already exist (addClass) or do not exist (removeClass) on the element - normalizeAnimationDetails(element, newAnimation); - } - - // when the options are merged and cleaned up we may end up not having to do - // an animation at all, therefore we should check this before issuing a post - // digest callback. Structural animations will always run no matter what. - var isValidAnimation = newAnimation.structural; - if (!isValidAnimation) { - // animate (from/to) can be quickly checked first, otherwise we check if any classes are present - isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0) - || hasAnimationClasses(newAnimation); - } - - if (!isValidAnimation) { - close(); - clearElementAnimationState(element); - return runner; - } - - // the counter keeps track of cancelled animations - var counter = (existingAnimation.counter || 0) + 1; - newAnimation.counter = counter; - - markElementAnimationState(element, PRE_DIGEST_STATE, newAnimation); - - $rootScope.$$postDigest(function() { - var animationDetails = activeAnimationsLookup.get(node); - var animationCancelled = !animationDetails; - animationDetails = animationDetails || {}; - - // if addClass/removeClass is called before something like enter then the - // registered parent element may not be present. The code below will ensure - // that a final value for parent element is obtained - var parentElement = element.parent() || []; - - // animate/structural/class-based animations all have requirements. Otherwise there - // is no point in performing an animation. The parent node must also be set. - var isValidAnimation = parentElement.length > 0 - && (animationDetails.event === 'animate' - || animationDetails.structural - || hasAnimationClasses(animationDetails)); - - // this means that the previous animation was cancelled - // even if the follow-up animation is the same event - if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) { - // if another animation did not take over then we need - // to make sure that the domOperation and options are - // handled accordingly - if (animationCancelled) { - applyAnimationClasses(element, options); - applyAnimationStyles(element, options); - } - - // if the event changed from something like enter to leave then we do - // it, otherwise if it's the same then the end result will be the same too - if (animationCancelled || (isStructural && animationDetails.event !== event)) { - options.domOperation(); - runner.end(); - } - - // in the event that the element animation was not cancelled or a follow-up animation - // isn't allowed to animate from here then we need to clear the state of the element - // so that any future animations won't read the expired animation data. - if (!isValidAnimation) { - clearElementAnimationState(element); - } - - return; - } - - // this combined multiple class to addClass / removeClass into a setClass event - // so long as a structural event did not take over the animation - event = !animationDetails.structural && hasAnimationClasses(animationDetails, true) - ? 'setClass' - : animationDetails.event; - - markElementAnimationState(element, RUNNING_STATE); - var realRunner = $$animation(element, event, animationDetails.options); - - // this will update the runner's flow-control events based on - // the `realRunner` object. - runner.setHost(realRunner); - notifyProgress(runner, event, 'start', {}); - - realRunner.done(function(status) { - close(!status); - var animationDetails = activeAnimationsLookup.get(node); - if (animationDetails && animationDetails.counter === counter) { - clearElementAnimationState(getDomNode(element)); - } - notifyProgress(runner, event, 'close', {}); - }); - }); - - return runner; - - function notifyProgress(runner, event, phase, data) { - runInNextPostDigestOrNow(function() { - var callbacks = findCallbacks(parent, element, event); - if (callbacks.length) { - // do not optimize this call here to RAF because - // we don't know how heavy the callback code here will - // be and if this code is buffered then this can - // lead to a performance regression. - $$rAF(function() { - forEach(callbacks, function(callback) { - callback(element, phase, data); - }); - }); - } - }); - runner.progress(event, phase, data); - } - - function close(reject) { // jshint ignore:line - clearGeneratedClasses(element, options); - applyAnimationClasses(element, options); - applyAnimationStyles(element, options); - options.domOperation(); - runner.complete(!reject); - } - } - - function closeChildAnimations(element) { - var node = getDomNode(element); - var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']'); - forEach(children, function(child) { - var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME)); - var animationDetails = activeAnimationsLookup.get(child); - if (animationDetails) { - switch (state) { - case RUNNING_STATE: - animationDetails.runner.end(); - /* falls through */ - case PRE_DIGEST_STATE: - activeAnimationsLookup.remove(child); - break; - } - } - }); - } - - function clearElementAnimationState(element) { - var node = getDomNode(element); - node.removeAttribute(NG_ANIMATE_ATTR_NAME); - activeAnimationsLookup.remove(node); - } - - function isMatchingElement(nodeOrElmA, nodeOrElmB) { - return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB); - } - - /** - * This fn returns false if any of the following is true: - * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed - * b) a parent element has an ongoing structural animation, and animateChildren is false - * c) the element is not a child of the body - * d) the element is not a child of the $rootElement - */ - function areAnimationsAllowed(element, parentElement, event) { - var bodyElement = jqLite(rawDocument.body); - var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML'; - var rootElementDetected = isMatchingElement(element, $rootElement); - var parentAnimationDetected = false; - var animateChildren; - var elementDisabled = disabledElementsLookup.get(getDomNode(element)); - - var parentHost = jqLite.data(element[0], NG_ANIMATE_PIN_DATA); - if (parentHost) { - parentElement = parentHost; - } - - parentElement = getDomNode(parentElement); - - while (parentElement) { - if (!rootElementDetected) { - // angular doesn't want to attempt to animate elements outside of the application - // therefore we need to ensure that the rootElement is an ancestor of the current element - rootElementDetected = isMatchingElement(parentElement, $rootElement); - } - - if (parentElement.nodeType !== ELEMENT_NODE) { - // no point in inspecting the #document element - break; - } - - var details = activeAnimationsLookup.get(parentElement) || {}; - // either an enter, leave or move animation will commence - // therefore we can't allow any animations to take place - // but if a parent animation is class-based then that's ok - if (!parentAnimationDetected) { - var parentElementDisabled = disabledElementsLookup.get(parentElement); - - if (parentElementDisabled === true && elementDisabled !== false) { - // disable animations if the user hasn't explicitly enabled animations on the - // current element - elementDisabled = true; - // element is disabled via parent element, no need to check anything else - break; - } else if (parentElementDisabled === false) { - elementDisabled = false; - } - parentAnimationDetected = details.structural; - } - - if (isUndefined(animateChildren) || animateChildren === true) { - var value = jqLite.data(parentElement, NG_ANIMATE_CHILDREN_DATA); - if (isDefined(value)) { - animateChildren = value; - } - } - - // there is no need to continue traversing at this point - if (parentAnimationDetected && animateChildren === false) break; - - if (!bodyElementDetected) { - // we also need to ensure that the element is or will be a part of the body element - // otherwise it is pointless to even issue an animation to be rendered - bodyElementDetected = isMatchingElement(parentElement, bodyElement); - } - - if (bodyElementDetected && rootElementDetected) { - // If both body and root have been found, any other checks are pointless, - // as no animation data should live outside the application - break; - } - - if (!rootElementDetected) { - // If no rootElement is detected, check if the parentElement is pinned to another element - parentHost = jqLite.data(parentElement, NG_ANIMATE_PIN_DATA); - if (parentHost) { - // The pin target element becomes the next parent element - parentElement = getDomNode(parentHost); - continue; - } - } - - parentElement = parentElement.parentNode; - } - - var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true; - return allowAnimation && rootElementDetected && bodyElementDetected; - } - - function markElementAnimationState(element, state, details) { - details = details || {}; - details.state = state; - - var node = getDomNode(element); - node.setAttribute(NG_ANIMATE_ATTR_NAME, state); - - var oldValue = activeAnimationsLookup.get(node); - var newValue = oldValue - ? extend(oldValue, details) - : details; - activeAnimationsLookup.put(node, newValue); - } - }]; -}]; - -var $$AnimationProvider = ['$animateProvider', function($animateProvider) { - var NG_ANIMATE_REF_ATTR = 'ng-animate-ref'; - - var drivers = this.drivers = []; - - var RUNNER_STORAGE_KEY = '$$animationRunner'; - - function setRunner(element, runner) { - element.data(RUNNER_STORAGE_KEY, runner); - } - - function removeRunner(element) { - element.removeData(RUNNER_STORAGE_KEY); - } - - function getRunner(element) { - return element.data(RUNNER_STORAGE_KEY); - } - - this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler', - function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) { - - var animationQueue = []; - var applyAnimationClasses = applyAnimationClassesFactory($$jqLite); - - 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) { - options = prepareAnimationOptions(options); - var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0; - - // there is no animation at the current moment, however - // these runner methods will get later updated with the - // methods leading into the driver's end/cancel methods - // for now they just stop the animation from starting - var runner = new $$AnimateRunner({ - end: function() { close(); }, - cancel: function() { close(true); } - }); - - if (!drivers.length) { - close(); - return runner; - } - - setRunner(element, runner); - - var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass)); - var tempClasses = options.tempClasses; - if (tempClasses) { - classes += ' ' + tempClasses; - options.tempClasses = null; - } - - var prepareClassName; - if (isStructural) { - prepareClassName = 'ng-' + event + PREPARE_CLASS_SUFFIX; - $$jqLite.addClass(element, prepareClassName); - } - - animationQueue.push({ - // this data is used by the postDigest code and passed into - // the driver step function - element: element, - classes: classes, - event: event, - structural: isStructural, - options: options, - beforeStart: beforeStart, - close: close - }); - - element.on('$destroy', handleDestroyedElement); - - // we only want there to be one function called within the post digest - // block. This way we can group animations for all the animations that - // were apart of the same postDigest flush call. - if (animationQueue.length > 1) return runner; - - $rootScope.$$postDigest(function() { - var animations = []; - forEach(animationQueue, function(entry) { - // the element was destroyed early on which removed the runner - // form its storage. This means we can't animate this element - // 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; - - 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); - } - } - }); - }); - - // 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; - - // TODO(matsko): change to reference nodes - function getAnchorNodes(node) { - var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']'; - var items = node.hasAttribute(NG_ANIMATE_REF_ATTR) - ? [node] - : node.querySelectorAll(SELECTOR); - var anchors = []; - forEach(items, function(node) { - var attr = node.getAttribute(NG_ANIMATE_REF_ATTR); - if (attr && attr.length) { - anchors.push(node); - } - }); - return anchors; - } - - function groupAnimations(animations) { - var preparedAnimations = []; - var refLookup = {}; - forEach(animations, function(animation, index) { - var element = animation.element; - var node = getDomNode(element); - var event = animation.event; - var enterOrMove = ['enter', 'move'].indexOf(event) >= 0; - var anchorNodes = animation.structural ? getAnchorNodes(node) : []; - - if (anchorNodes.length) { - var direction = enterOrMove ? 'to' : 'from'; - - forEach(anchorNodes, function(anchor) { - var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR); - refLookup[key] = refLookup[key] || {}; - refLookup[key][direction] = { - animationID: index, - element: jqLite(anchor) - }; - }); - } else { - preparedAnimations.push(animation); - } - }); - - var usedIndicesLookup = {}; - var anchorGroups = {}; - forEach(refLookup, function(operations, key) { - var from = operations.from; - var to = operations.to; - - if (!from || !to) { - // only one of these is set therefore we can't have an - // anchor animation since all three pieces are required - var index = from ? from.animationID : to.animationID; - var indexKey = index.toString(); - if (!usedIndicesLookup[indexKey]) { - usedIndicesLookup[indexKey] = true; - preparedAnimations.push(animations[index]); - } - return; - } - - var fromAnimation = animations[from.animationID]; - var toAnimation = animations[to.animationID]; - var lookupKey = from.animationID.toString(); - if (!anchorGroups[lookupKey]) { - var group = anchorGroups[lookupKey] = { - structural: true, - beforeStart: function() { - fromAnimation.beforeStart(); - toAnimation.beforeStart(); - }, - close: function() { - fromAnimation.close(); - toAnimation.close(); - }, - classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes), - from: fromAnimation, - to: toAnimation, - anchors: [] // TODO(matsko): change to reference nodes - }; - - // the anchor animations require that the from and to elements both have at least - // one shared CSS class which effictively marries the two elements together to use - // the same animation driver and to properly sequence the anchor animation. - if (group.classes.length) { - preparedAnimations.push(group); - } else { - preparedAnimations.push(fromAnimation); - preparedAnimations.push(toAnimation); - } - } - - anchorGroups[lookupKey].anchors.push({ - 'out': from.element, 'in': to.element - }); - }); - - return preparedAnimations; - } - - function cssClassesIntersection(a,b) { - a = a.split(' '); - b = b.split(' '); - var matches = []; - - for (var i = 0; i < a.length; i++) { - var aa = a[i]; - if (aa.substring(0,3) === 'ng-') continue; - - for (var j = 0; j < b.length; j++) { - if (aa === b[j]) { - matches.push(aa); - break; - } - } - } - - return matches.join(' '); - } - - function invokeFirstDriver(animationDetails) { - // we loop in reverse order since the more general drivers (like CSS and JS) - // may attempt more elements, but custom drivers are more particular - for (var i = drivers.length - 1; i >= 0; i--) { - var driverName = drivers[i]; - if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check - - var factory = $injector.get(driverName); - var driver = factory(animationDetails); - if (driver) { - return driver; - } - } - } - - function beforeStart() { - element.addClass(NG_ANIMATE_CLASSNAME); - if (tempClasses) { - $$jqLite.addClass(element, tempClasses); - } - if (prepareClassName) { - $$jqLite.removeClass(element, prepareClassName); - prepareClassName = null; - } - } - - function updateAnimationRunners(animation, newRunner) { - if (animation.from && animation.to) { - update(animation.from.element); - update(animation.to.element); - } else { - update(animation.element); - } - - function update(element) { - getRunner(element).setHost(newRunner); - } - } - - function handleDestroyedElement() { - var runner = getRunner(element); - if (runner && (event !== 'leave' || !options.$$domOperationFired)) { - runner.end(); - } - } - - function close(rejected) { // jshint ignore:line - element.off('$destroy', handleDestroyedElement); - removeRunner(element); - - applyAnimationClasses(element, options); - applyAnimationStyles(element, options); - options.domOperation(); - - if (tempClasses) { - $$jqLite.removeClass(element, tempClasses); - } - - element.removeClass(NG_ANIMATE_CLASSNAME); - runner.complete(!rejected); - } - }; - }]; -}]; - -/* global angularAnimateModule: true, - - $$AnimateAsyncRunFactory, - $$rAFSchedulerFactory, - $$AnimateChildrenDirective, - $$AnimateQueueProvider, - $$AnimationProvider, - $AnimateCssProvider, - $$AnimateCssDriverProvider, - $$AnimateJsProvider, - $$AnimateJsDriverProvider, -*/ - -/** - * @ngdoc module - * @name ngAnimate - * @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` the animation hooks are enabled for an Angular app. - * - *
    - * - * # Usage - * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based - * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For - * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within - * the HTML element that the animation will be triggered on. - * - * ## Directive Support - * The following directives are "animation aware": - * - * | Directive | Supported Animations | - * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------| - * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move | - * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave | - * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave | - * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave | - * | {@link ng.directive:ngIf#animations ngIf} | enter and leave | - * | {@link ng.directive:ngClass#animations ngClass} | add and remove (the CSS class(es) present) | - * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide} | add and remove (the ng-hide class value) | - * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) | - * | {@link module:ngMessages#animations ngMessages} | add and remove (ng-active & ng-inactive) | - * | {@link module:ngMessages#animations ngMessage} | enter and leave | - * - * (More information can be found by visiting each the documentation associated with each directive.) - * - * ## CSS-based Animations - * - * 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 an element using `ng-if`: - * - * ```html - *
    - * Fade me in out - *
    - * - * - * ``` - * - * Notice the CSS class **fade**? We can now create the CSS transition code that references this class: - * - * ```css - * /* The starting CSS styles for the enter animation */ - * .fade.ng-enter { - * transition:0.5s linear all; - * opacity:0; - * } - * - * /* The finishing CSS styles for the enter animation */ - * .fade.ng-enter.ng-enter-active { - * opacity:1; - * } - * ``` - * - * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two - * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition - * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards. - * - * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions: - * - * ```css - * /* now the element will fade out before it is removed from the DOM */ - * .fade.ng-leave { - * transition:0.5s linear all; - * opacity:1; - * } - * .fade.ng-leave.ng-leave-active { - * opacity:0; - * } - * ``` - * - * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class: - * - * ```css - * /* there is no need to define anything inside of the destination - * CSS class since the keyframe will take charge of the animation */ - * .fade.ng-leave { - * animation: my_fade_animation 0.5s linear; - * -webkit-animation: my_fade_animation 0.5s linear; - * } - * - * @keyframes my_fade_animation { - * from { opacity:1; } - * to { opacity:0; } - * } - * - * @-webkit-keyframes my_fade_animation { - * from { opacity:1; } - * to { opacity:0; } - * } - * ``` - * - * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element. - * - * ### CSS Class-based Animations - * - * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different - * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added - * and removed. - * - * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class: - * - * ```html - *
    - * Show and hide me - *
    - * - * - * - * ``` - * - * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since - * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest. - * - * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation - * with CSS styles. - * - * ```html - *
    - * Highlight this box - *
    - * - * - * - * ``` - * - * We can also make use of CSS keyframes by placing them within the CSS classes. - * - * - * ### CSS Staggering Animations - * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a - * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be - * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for - * the animation. The style property expected within the stagger class can either be a **transition-delay** or an - * **animation-delay** property (or both if your animation contains both transitions and keyframe animations). - * - * ```css - * .my-animation.ng-enter { - * /* standard transition code */ - * transition: 1s linear all; - * opacity:0; - * } - * .my-animation.ng-enter-stagger { - * /* this will have a 100ms delay between each successive leave animation */ - * transition-delay: 0.1s; - * - * /* 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 { - * /* standard transition styles */ - * opacity:1; - * } - * ``` - * - * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations - * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this - * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation - * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired. - * - * The following code will issue the **ng-leave-stagger** event on the element provided: - * - * ```js - * var kids = parent.children(); - * - * $animate.leave(kids[0]); //stagger index=0 - * $animate.leave(kids[1]); //stagger index=1 - * $animate.leave(kids[2]); //stagger index=2 - * $animate.leave(kids[3]); //stagger index=3 - * $animate.leave(kids[4]); //stagger index=4 - * - * window.requestAnimationFrame(function() { - * //stagger has reset itself - * $animate.leave(kids[5]); //stagger index=0 - * $animate.leave(kids[6]); //stagger index=1 - * - * $scope.$digest(); - * }); - * ``` - * - * Stagger animations are currently only supported within CSS-defined animations. - * - * ### The `ng-animate` CSS class - * - * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation. - * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations). - * - * Therefore, animations can be applied to an element using this temporary class directly via CSS. - * - * ```css - * .zipper.ng-animate { - * transition:0.5s linear all; - * } - * .zipper.ng-enter { - * opacity:0; - * } - * .zipper.ng-enter.ng-enter-active { - * opacity:1; - * } - * .zipper.ng-leave { - * opacity:1; - * } - * .zipper.ng-leave.ng-leave-active { - * opacity:0; - * } - * ``` - * - * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove - * the CSS class once an animation has completed.) - * - * - * ### The `ng-[event]-prepare` class - * - * This is a special class that can be used to prevent unwanted flickering / flash of content before - * the actual animation starts. The class is added as soon as an animation is initialized, but removed - * before the actual animation starts (after waiting for a $digest). - * It is also only added for *structural* animations (`enter`, `move`, and `leave`). - * - * In practice, flickering can appear when nesting elements with structural animations such as `ngIf` - * into elements that have class-based animations such as `ngClass`. - * - * ```html - *
    - *
    - *
    - *
    - *
    - * ``` - * - * It is possible that during the `enter` animation, the `.message` div will be briefly visible before it starts animating. - * In that case, you can add styles to the CSS that make sure the element stays hidden before the animation starts: - * - * ```css - * .message.ng-enter-prepare { - * opacity: 0; - * } - * - * ``` - * - * ## JavaScript-based Animations - * - * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared - * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the - * `module.animation()` module function we can register the ainmation. - * - * Let's see an example of a enter/leave animation using `ngRepeat`: - * - * ```html - *
    - * {{ item }} - *
    - * ``` - * - * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`: - * - * ```js - * myModule.animation('.slide', [function() { - * return { - * // make note that other events (like addClass/removeClass) - * // have different function input parameters - * enter: function(element, doneFn) { - * jQuery(element).fadeIn(1000, doneFn); - * - * // remember to call doneFn so that angular - * // knows that the animation has concluded - * }, - * - * move: function(element, doneFn) { - * jQuery(element).fadeIn(1000, doneFn); - * }, - * - * leave: function(element, doneFn) { - * jQuery(element).fadeOut(1000, doneFn); - * } - * } - * }]); - * ``` - * - * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as - * greensock.js and velocity.js. - * - * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define - * our animations inside of the same registered animation, however, the function input arguments are a bit different: - * - * ```html - *
    - * this box is moody - *
    - * - * - * - * ``` - * - * ```js - * myModule.animation('.colorful', [function() { - * return { - * addClass: function(element, className, doneFn) { - * // do some cool animation and call the doneFn - * }, - * removeClass: function(element, className, doneFn) { - * // do some cool animation and call the doneFn - * }, - * setClass: function(element, addedClass, removedClass, doneFn) { - * // do some cool animation and call the doneFn - * } - * } - * }]); - * ``` - * - * ## CSS + JS Animations Together - * - * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of Angular, - * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore the example below will only result in **JS animations taking - * charge of the animation**: - * - * ```html - *
    - * Slide in and out - *
    - * ``` - * - * ```js - * myModule.animation('.slide', [function() { - * return { - * enter: function(element, doneFn) { - * jQuery(element).slideIn(1000, doneFn); - * } - * } - * }]); - * ``` - * - * ```css - * .slide.ng-enter { - * transition:0.5s linear all; - * transform:translateY(-100px); - * } - * .slide.ng-enter.ng-enter-active { - * transform:translateY(0); - * } - * ``` - * - * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can make up for the - * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from - * our own JS-based animation code: - * - * ```js - * myModule.animation('.slide', ['$animateCss', function($animateCss) { - * return { - * enter: function(element) { -* // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`. - * return $animateCss(element, { - * event: 'enter', - * structural: true - * }); - * } - * } - * }]); - * ``` - * - * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework. - * - * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or - * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that - * data into `$animateCss` directly: - * - * ```js - * myModule.animation('.slide', ['$animateCss', function($animateCss) { - * return { - * enter: function(element) { - * return $animateCss(element, { - * event: 'enter', - * structural: true, - * addClass: 'maroon-setting', - * from: { height:0 }, - * to: { height: 200 } - * }); - * } - * } - * }]); - * ``` - * - * Now we can fill in the rest via our transition CSS code: - * - * ```css - * /* the transition tells ngAnimate to make the animation happen */ - * .slide.ng-enter { transition:0.5s linear all; } - * - * /* this extra CSS class will be absorbed into the transition - * since the $animateCss code is adding the class */ - * .maroon-setting { background:red; } - * ``` - * - * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over. - * - * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}. - * - * ## Animation Anchoring (via `ng-animate-ref`) - * - * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between - * structural areas of an application (like views) by pairing up elements using an attribute - * called `ng-animate-ref`. - * - * Let's say for example we have two views that are managed by `ng-view` and we want to show - * that there is a relationship between two components situated in within these views. By using the - * `ng-animate-ref` attribute we can identify that the two components are paired together and we - * can then attach an animation, which is triggered when the view changes. - * - * Say for example we have the following template code: - * - * ```html - * - *
    - *
    - * - * - *
    - * - * - * - * - * - * ``` - * - * Now, when the view changes (once the link is clicked), ngAnimate will examine the - * HTML contents to see if there is a match reference between any components in the view - * that is leaving and the view that is entering. It will scan both the view which is being - * removed (leave) and inserted (enter) to see if there are any paired DOM elements that - * contain a matching ref value. - * - * The two images match since they share the same ref value. ngAnimate will now create a - * transport element (which is a clone of the first image element) and it will then attempt - * to animate to the position of the second image element in the next view. For the animation to - * work a special CSS class called `ng-anchor` will be added to the transported element. - * - * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then - * ngAnimate will handle the entire transition for us as well as the addition and removal of - * any changes of CSS classes between the elements: - * - * ```css - * .banner.ng-anchor { - * /* this animation will last for 1 second since there are - * two phases to the animation (an `in` and an `out` phase) */ - * transition:0.5s linear all; - * } - * ``` - * - * We also **must** include animations for the views that are being entered and removed - * (otherwise anchoring wouldn't be possible since the new view would be inserted right away). - * - * ```css - * .view-animation.ng-enter, .view-animation.ng-leave { - * transition:0.5s linear all; - * position:fixed; - * left:0; - * top:0; - * width:100%; - * } - * .view-animation.ng-enter { - * transform:translateX(100%); - * } - * .view-animation.ng-leave, - * .view-animation.ng-enter.ng-enter-active { - * transform:translateX(0%); - * } - * .view-animation.ng-leave.ng-leave-active { - * transform:translateX(-100%); - * } - * ``` - * - * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur: - * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away - * from its origin. Once that animation is over then the `in` stage occurs which animates the - * element to its destination. The reason why there are two animations is to give enough time - * for the enter animation on the new element to be ready. - * - * The example above sets up a transition for both the in and out phases, but we can also target the out or - * in phases directly via `ng-anchor-out` and `ng-anchor-in`. - * - * ```css - * .banner.ng-anchor-out { - * transition: 0.5s linear all; - * - * /* the scale will be applied during the out animation, - * but will be animated away when the in animation runs */ - * transform: scale(1.2); - * } - * - * .banner.ng-anchor-in { - * transition: 1s linear all; - * } - * ``` - * - * - * - * - * ### Anchoring Demo - * - - - Home -
    -
    -
    -
    -
    - - angular.module('anchoringExample', ['ngAnimate', 'ngRoute']) - .config(['$routeProvider', function($routeProvider) { - $routeProvider.when('/', { - templateUrl: 'home.html', - controller: 'HomeController as home' - }); - $routeProvider.when('/profile/:id', { - templateUrl: 'profile.html', - controller: 'ProfileController as profile' - }); - }]) - .run(['$rootScope', function($rootScope) { - $rootScope.records = [ - { id:1, title: "Miss Beulah Roob" }, - { id:2, title: "Trent Morissette" }, - { id:3, title: "Miss Ava Pouros" }, - { id:4, title: "Rod Pouros" }, - { id:5, title: "Abdul Rice" }, - { id:6, title: "Laurie Rutherford Sr." }, - { id:7, title: "Nakia McLaughlin" }, - { id:8, title: "Jordon Blanda DVM" }, - { id:9, title: "Rhoda Hand" }, - { id:10, title: "Alexandrea Sauer" } - ]; - }]) - .controller('HomeController', [function() { - //empty - }]) - .controller('ProfileController', ['$rootScope', '$routeParams', function($rootScope, $routeParams) { - var index = parseInt($routeParams.id, 10); - var record = $rootScope.records[index - 1]; - - this.title = record.title; - this.id = record.id; - }]); - - -

    Welcome to the home page

    -

    Please click on an element

    - - {{ record.title }} - -
    - -
    - {{ profile.title }} -
    -
    - - .record { - display:block; - font-size:20px; - } - .profile { - background:black; - color:white; - font-size:100px; - } - .view-container { - position:relative; - } - .view-container > .view.ng-animate { - position:absolute; - top:0; - left:0; - width:100%; - min-height:500px; - } - .view.ng-enter, .view.ng-leave, - .record.ng-anchor { - transition:0.5s linear all; - } - .view.ng-enter { - transform:translateX(100%); - } - .view.ng-enter.ng-enter-active, .view.ng-leave { - transform:translateX(0%); - } - .view.ng-leave.ng-leave-active { - transform:translateX(-100%); - } - .record.ng-anchor-out { - background:red; - } - -
    - * - * ### How is the element transported? - * - * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting - * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element - * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The - * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match - * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied - * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class - * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element - * will become visible since the shim class will be removed. - * - * ### How is the morphing handled? - * - * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out - * what CSS classes differ between the starting element and the destination element. These different CSS classes - * will be added/removed on the anchor element and a transition will be applied (the transition that is provided - * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will - * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that - * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since - * the cloned element is placed inside of root element which is likely close to the body element). - * - * Note that if the root element is on the `` element then the cloned node will be placed inside of body. - * - * - * ## Using $animate in your directive code - * - * So far we've explored how to feed in animations into an Angular application, but how do we trigger animations within our own directives in our application? - * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's - * imagine we have a greeting box that shows and hides itself when the data changes - * - * ```html - * Hi there - * ``` - * - * ```js - * ngModule.directive('greetingBox', ['$animate', function($animate) { - * return function(scope, element, attrs) { - * attrs.$observe('active', function(value) { - * value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on'); - * }); - * }); - * }]); - * ``` - * - * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element - * in our HTML code then we can trigger a CSS or JS animation to happen. - * - * ```css - * /* normally we would create a CSS class to reference on the element */ - * greeting-box.on { transition:0.5s linear all; background:green; color:white; } - * ``` - * - * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's - * possible be sure to visit the {@link ng.$animate $animate service API page}. - * - * - * ### Preventing Collisions With Third Party Libraries - * - * Some third-party frameworks place animation duration defaults across many element or className - * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which - * is expecting actual animations on these elements and has to wait for their completion. - * - * You can prevent this unwanted behavior by using a prefix on all your animation classes: - * - * ```css - * /* prefixed with animate- */ - * .animate-fade-add.animate-fade-add-active { - * transition:1s linear all; - * opacity:0; - * } - * ``` - * - * You then configure `$animate` to enforce this prefix: - * - * ```js - * $animateProvider.classNameFilter(/animate-/); - * ``` - * - * This also may provide your application with a speed boost since only specific elements containing CSS class prefix - * will be evaluated for animation when any DOM changes occur in the application. - * - * ## Callbacks and Promises - * - * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger - * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has - * ended by chaining onto the returned promise that animation method returns. - * - * ```js - * // somewhere within the depths of the directive - * $animate.enter(element, parent).then(function() { - * //the animation has completed - * }); - * ``` - * - * (Note that earlier versions of Angular prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case - * anymore.) - * - * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering - * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view - * routing controller to hook into that: - * - * ```js - * ngModule.controller('HomePageController', ['$animate', function($animate) { - * $animate.on('enter', ngViewElement, function(element) { - * // the animation for this route has completed - * }]); - * }]) - * ``` - * - * (Note that you will need to trigger a digest within the callback to get angular to notice any scope-related changes.) - */ - -/** - * @ngdoc service - * @name $animate - * @kind object - * - * @description - * The ngAnimate `$animate` service documentation is the same for the core `$animate` service. - * - * Click here {@link ng.$animate to learn more about animations with `$animate`}. - */ -angular.module('ngAnimate', []) - .directive('ngAnimateChildren', $$AnimateChildrenDirective) - .factory('$$rAFScheduler', $$rAFSchedulerFactory) - - .provider('$$animateQueue', $$AnimateQueueProvider) - .provider('$$animation', $$AnimationProvider) - - .provider('$animateCss', $AnimateCssProvider) - .provider('$$animateCssDriver', $$AnimateCssDriverProvider) - - .provider('$$animateJs', $$AnimateJsProvider) - .provider('$$animateJsDriver', $$AnimateJsDriverProvider); - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-animate.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-animate.min.js deleted file mode 100644 index 50600c92..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-animate.min.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(D,n,Va){'use strict';function za(a,b,c){if(!a)throw Ka("areq",b||"?",c||"required");return a}function Aa(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;da(a)&&(a=a.join(" "));da(b)&&(b=b.join(" "));return a+" "+b}function La(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function X(a,b,c){var d="";a=da(a)?a:a&&E(a)&&a.length?a.split(/\s+/):[];s(a,function(a,f){a&&0=a&&(a=g,g=0,b.push(e),e=[]);e.push(f.fn);f.children.forEach(function(a){g++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var v=[],n=Q(a);return function(t,y,m){function g(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];s(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b} -function P(a){var b=[],c={};s(a,function(a,d){var h=x(a.element),k=0<=["enter","move"].indexOf(a.event),h=a.structural?g(h):[];if(h.length){var e=k?"to":"from";s(h,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][e]={animationID:d,element:G(a)}})}else b.push(a)});var d={},k={};s(c,function(c,g){var e=c.from,l=c.to;if(e&&l){var f=a[e.animationID],B=a[l.animationID],p=e.animationID.toString();if(!k[p]){var C=k[p]={structural:!0,beforeStart:function(){f.beforeStart();B.beforeStart()}, -close:function(){f.close();B.close()},classes:H(f.classes,B.classes),from:f,to:B,anchors:[]};C.classes.length?b.push(C):(b.push(f),b.push(B))}k[p].anchors.push({out:e.element,"in":l.element})}else e=e?e.animationID:l.animationID,l=e.toString(),d[l]||(d[l]=!0,b.push(a[e]))});return b}function H(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d=Q&&b>=M&&(K=!0,p())}function F(){function b(){if(!P){C(!1);s(u,function(a){l.style[a[0]]=a[1]});g(a,h);e.addClass(a,ha);if(q.recalculateTimingStyles){oa=l.className+" "+ga;ja=G(l,oa);z=m(l,oa,ja);ba=z.maxDelay;E=Math.max(ba,0);M=z.maxDuration;if(0===M){p();return}q.hasTransitions=0r.expectedEndTime)? -L.cancel(r.timer):f.push(p)}w&&(F=L(c,F,!1),f[0]={timer:F,expectedEndTime:d},f.push(p),a.data("$$animateCss",f));if(fa.length)a.on(fa.join(" "),B);h.to&&(h.cleanupStyles&&Ha(H,l,Object.keys(h.to)),Ca(a,h))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=1;dARIA](http://www.w3.org/TR/wai-aria/) - * attributes that convey state or semantic information about the application for users - * of assistive technologies, such as screen readers. - * - *
    - * - * ## Usage - * - * For ngAria to do its magic, simply include the module `ngAria` as a dependency. The following - * directives are supported: - * `ngModel`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`, `ngDblClick`, and `ngMessages`. - * - * Below is a more detailed breakdown of the attributes handled by ngAria: - * - * | Directive | Supported Attributes | - * |---------------------------------------------|----------------------------------------------------------------------------------------| - * | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled | - * | {@link ng.directive:ngShow ngShow} | aria-hidden | - * | {@link ng.directive:ngHide ngHide} | aria-hidden | - * | {@link ng.directive:ngDblclick ngDblclick} | tabindex | - * | {@link module:ngMessages ngMessages} | aria-live | - * | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles | - * | {@link ng.directive:ngClick ngClick} | tabindex, keypress event, button role | - * - * Find out more information about each directive by reading the - * {@link guide/accessibility ngAria Developer Guide}. - * - * ##Example - * Using ngDisabled with ngAria: - * ```html - * - * ``` - * Becomes: - * ```html - * - * ``` - * - * ##Disabling Attributes - * It's possible to disable individual attributes added by ngAria with the - * {@link ngAria.$ariaProvider#config config} method. For more details, see the - * {@link guide/accessibility Developer Guide}. - */ - /* global -ngAriaModule */ -var ngAriaModule = angular.module('ngAria', ['ng']). - provider('$aria', $AriaProvider); - -/** -* Internal Utilities -*/ -var nodeBlackList = ['BUTTON', 'A', 'INPUT', 'TEXTAREA', 'SELECT', 'DETAILS', 'SUMMARY']; - -var isNodeOneOf = function(elem, nodeTypeArray) { - if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) { - return true; - } -}; -/** - * @ngdoc provider - * @name $ariaProvider - * - * @description - * - * Used for configuring the ARIA attributes injected and managed by ngAria. - * - * ```js - * angular.module('myApp', ['ngAria'], function config($ariaProvider) { - * $ariaProvider.config({ - * ariaValue: true, - * tabindex: false - * }); - * }); - *``` - * - * ## Dependencies - * Requires the {@link ngAria} module to be installed. - * - */ -function $AriaProvider() { - var config = { - ariaHidden: true, - ariaChecked: true, - ariaDisabled: true, - ariaRequired: true, - ariaInvalid: true, - ariaMultiline: true, - ariaValue: true, - tabindex: true, - bindKeypress: true, - bindRoleForClick: true - }; - - /** - * @ngdoc method - * @name $ariaProvider#config - * - * @param {object} config object to enable/disable specific ARIA attributes - * - * - **ariaHidden** – `{boolean}` – Enables/disables aria-hidden tags - * - **ariaChecked** – `{boolean}` – Enables/disables aria-checked tags - * - **ariaDisabled** – `{boolean}` – Enables/disables aria-disabled tags - * - **ariaRequired** – `{boolean}` – Enables/disables aria-required tags - * - **ariaInvalid** – `{boolean}` – Enables/disables aria-invalid tags - * - **ariaMultiline** – `{boolean}` – Enables/disables aria-multiline tags - * - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags - * - **tabindex** – `{boolean}` – Enables/disables tabindex tags - * - **bindKeypress** – `{boolean}` – Enables/disables keypress event binding on `<div>` and - * `<li>` elements with ng-click - * - **bindRoleForClick** – `{boolean}` – Adds role=button to non-interactive elements like `div` - * using ng-click, making them more accessible to users of assistive technologies - * - * @description - * Enables/disables various ARIA attributes - */ - this.config = function(newConfig) { - config = angular.extend(config, newConfig); - }; - - function watchExpr(attrName, ariaAttr, nodeBlackList, negate) { - return function(scope, elem, attr) { - var ariaCamelName = attr.$normalize(ariaAttr); - if (config[ariaCamelName] && !isNodeOneOf(elem, nodeBlackList) && !attr[ariaCamelName]) { - scope.$watch(attr[attrName], function(boolVal) { - // ensure boolean value - boolVal = negate ? !boolVal : !!boolVal; - elem.attr(ariaAttr, boolVal); - }); - } - }; - } - /** - * @ngdoc service - * @name $aria - * - * @description - * @priority 200 - * - * The $aria service contains helper methods for applying common - * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives. - * - * ngAria injects common accessibility attributes that tell assistive technologies when HTML - * elements are enabled, selected, hidden, and more. To see how this is performed with ngAria, - * let's review a code snippet from ngAria itself: - * - *```js - * ngAriaModule.directive('ngDisabled', ['$aria', function($aria) { - * return $aria.$$watchExpr('ngDisabled', 'aria-disabled'); - * }]) - *``` - * Shown above, the ngAria module creates a directive with the same signature as the - * traditional `ng-disabled` directive. But this ngAria version is dedicated to - * solely managing accessibility attributes. The internal `$aria` service is used to watch the - * boolean attribute `ngDisabled`. If it has not been explicitly set by the developer, - * `aria-disabled` is injected as an attribute with its value synchronized to the value in - * `ngDisabled`. - * - * Because ngAria hooks into the `ng-disabled` directive, developers do not have to do - * anything to enable this feature. The `aria-disabled` attribute is automatically managed - * simply as a silent side-effect of using `ng-disabled` with the ngAria module. - * - * The full list of directives that interface with ngAria: - * * **ngModel** - * * **ngShow** - * * **ngHide** - * * **ngClick** - * * **ngDblclick** - * * **ngMessages** - * * **ngDisabled** - * - * Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each - * directive. - * - * - * ## Dependencies - * Requires the {@link ngAria} module to be installed. - */ - this.$get = function() { - return { - config: function(key) { - return config[key]; - }, - $$watchExpr: watchExpr - }; - }; -} - - -ngAriaModule.directive('ngShow', ['$aria', function($aria) { - return $aria.$$watchExpr('ngShow', 'aria-hidden', [], true); -}]) -.directive('ngHide', ['$aria', function($aria) { - return $aria.$$watchExpr('ngHide', 'aria-hidden', [], false); -}]) -.directive('ngModel', ['$aria', function($aria) { - - function shouldAttachAttr(attr, normalizedAttr, elem) { - return $aria.config(normalizedAttr) && !elem.attr(attr); - } - - function shouldAttachRole(role, elem) { - return !elem.attr('role') && (elem.attr('type') === role) && (elem[0].nodeName !== 'INPUT'); - } - - function getShape(attr, elem) { - var type = attr.type, - role = attr.role; - - return ((type || role) === 'checkbox' || role === 'menuitemcheckbox') ? 'checkbox' : - ((type || role) === 'radio' || role === 'menuitemradio') ? 'radio' : - (type === 'range' || role === 'progressbar' || role === 'slider') ? 'range' : - (type || role) === 'textbox' || elem[0].nodeName === 'TEXTAREA' ? 'multiline' : ''; - } - - return { - restrict: 'A', - require: '?ngModel', - priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value - compile: function(elem, attr) { - var shape = getShape(attr, elem); - - return { - pre: function(scope, elem, attr, ngModel) { - if (shape === 'checkbox' && attr.type !== 'checkbox') { - //Use the input[checkbox] $isEmpty implementation for elements with checkbox roles - ngModel.$isEmpty = function(value) { - return value === false; - }; - } - }, - post: function(scope, elem, attr, ngModel) { - var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem) - && !isNodeOneOf(elem, nodeBlackList); - - function ngAriaWatchModelValue() { - return ngModel.$modelValue; - } - - function getRadioReaction() { - if (needsTabIndex) { - needsTabIndex = false; - return function ngAriaRadioReaction(newVal) { - var boolVal = (attr.value == ngModel.$viewValue); - elem.attr('aria-checked', boolVal); - elem.attr('tabindex', 0 - !boolVal); - }; - } else { - return function ngAriaRadioReaction(newVal) { - elem.attr('aria-checked', (attr.value == ngModel.$viewValue)); - }; - } - } - - function ngAriaCheckboxReaction() { - elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue)); - } - - switch (shape) { - case 'radio': - case 'checkbox': - if (shouldAttachRole(shape, elem)) { - elem.attr('role', shape); - } - if (shouldAttachAttr('aria-checked', 'ariaChecked', elem)) { - scope.$watch(ngAriaWatchModelValue, shape === 'radio' ? - getRadioReaction() : ngAriaCheckboxReaction); - } - if (needsTabIndex) { - elem.attr('tabindex', 0); - } - break; - case 'range': - if (shouldAttachRole(shape, elem)) { - elem.attr('role', 'slider'); - } - if ($aria.config('ariaValue')) { - var needsAriaValuemin = !elem.attr('aria-valuemin') && - (attr.hasOwnProperty('min') || attr.hasOwnProperty('ngMin')); - var needsAriaValuemax = !elem.attr('aria-valuemax') && - (attr.hasOwnProperty('max') || attr.hasOwnProperty('ngMax')); - var needsAriaValuenow = !elem.attr('aria-valuenow'); - - if (needsAriaValuemin) { - attr.$observe('min', function ngAriaValueMinReaction(newVal) { - elem.attr('aria-valuemin', newVal); - }); - } - if (needsAriaValuemax) { - attr.$observe('max', function ngAriaValueMinReaction(newVal) { - elem.attr('aria-valuemax', newVal); - }); - } - if (needsAriaValuenow) { - scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) { - elem.attr('aria-valuenow', newVal); - }); - } - } - if (needsTabIndex) { - elem.attr('tabindex', 0); - } - break; - case 'multiline': - if (shouldAttachAttr('aria-multiline', 'ariaMultiline', elem)) { - elem.attr('aria-multiline', true); - } - break; - } - - if (ngModel.$validators.required && shouldAttachAttr('aria-required', 'ariaRequired', elem)) { - scope.$watch(function ngAriaRequiredWatch() { - return ngModel.$error.required; - }, function ngAriaRequiredReaction(newVal) { - elem.attr('aria-required', !!newVal); - }); - } - - if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem)) { - scope.$watch(function ngAriaInvalidWatch() { - return ngModel.$invalid; - }, function ngAriaInvalidReaction(newVal) { - elem.attr('aria-invalid', !!newVal); - }); - } - } - }; - } - }; -}]) -.directive('ngDisabled', ['$aria', function($aria) { - return $aria.$$watchExpr('ngDisabled', 'aria-disabled', []); -}]) -.directive('ngMessages', function() { - return { - restrict: 'A', - require: '?ngMessages', - link: function(scope, elem, attr, ngMessages) { - if (!elem.attr('aria-live')) { - elem.attr('aria-live', 'assertive'); - } - } - }; -}) -.directive('ngClick',['$aria', '$parse', function($aria, $parse) { - return { - restrict: 'A', - compile: function(elem, attr) { - var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true); - return function(scope, elem, attr) { - - if (!isNodeOneOf(elem, nodeBlackList)) { - - if ($aria.config('bindRoleForClick') && !elem.attr('role')) { - elem.attr('role', 'button'); - } - - if ($aria.config('tabindex') && !elem.attr('tabindex')) { - elem.attr('tabindex', 0); - } - - if ($aria.config('bindKeypress') && !attr.ngKeypress) { - elem.on('keypress', function(event) { - var keyCode = event.which || event.keyCode; - if (keyCode === 32 || keyCode === 13) { - scope.$apply(callback); - } - - function callback() { - fn(scope, { $event: event }); - } - }); - } - } - }; - } - }; -}]) -.directive('ngDblclick', ['$aria', function($aria) { - return function(scope, elem, attr) { - if ($aria.config('tabindex') && !elem.attr('tabindex') && !isNodeOneOf(elem, nodeBlackList)) { - elem.attr('tabindex', 0); - } - }; -}]); - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js deleted file mode 100644 index 493617c8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(u,n,v){'use strict';var r="BUTTON A INPUT TEXTAREA SELECT DETAILS SUMMARY".split(" "),p=function(a,c){if(-1!==c.indexOf(a[0].nodeName))return!0};n.module("ngAria",["ng"]).provider("$aria",function(){function a(a,f,l,m){return function(d,e,b){var g=b.$normalize(f);!c[g]||p(e,l)||b[g]||d.$watch(b[a],function(b){b=m?!b:!!b;e.attr(f,b)})}}var c={ariaHidden:!0,ariaChecked:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaMultiline:!0,ariaValue:!0,tabindex:!0,bindKeypress:!0,bindRoleForClick:!0}; -this.config=function(a){c=n.extend(c,a)};this.$get=function(){return{config:function(a){return c[a]},$$watchExpr:a}}}).directive("ngShow",["$aria",function(a){return a.$$watchExpr("ngShow","aria-hidden",[],!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",[],!1)}]).directive("ngModel",["$aria",function(a){function c(c,m,d){return a.config(m)&&!d.attr(c)}function k(a,c){return!c.attr("role")&&c.attr("type")===a&&"INPUT"!==c[0].nodeName}function f(a,c){var d= -a.type,e=a.role;return"checkbox"===(d||e)||"menuitemcheckbox"===e?"checkbox":"radio"===(d||e)||"menuitemradio"===e?"radio":"range"===d||"progressbar"===e||"slider"===e?"range":"textbox"===(d||e)||"TEXTAREA"===c[0].nodeName?"multiline":""}return{restrict:"A",require:"?ngModel",priority:200,compile:function(l,m){var d=f(m,l);return{pre:function(a,b,c,h){"checkbox"===d&&"checkbox"!==c.type&&(h.$isEmpty=function(b){return!1===b})},post:function(e,b,g,h){function f(){return h.$modelValue}function m(){return q? -(q=!1,function(a){a=g.value==h.$viewValue;b.attr("aria-checked",a);b.attr("tabindex",0-!a)}):function(a){b.attr("aria-checked",g.value==h.$viewValue)}}function l(){b.attr("aria-checked",!h.$isEmpty(h.$viewValue))}var q=c("tabindex","tabindex",b)&&!p(b,r);switch(d){case "radio":case "checkbox":k(d,b)&&b.attr("role",d);c("aria-checked","ariaChecked",b)&&e.$watch(f,"radio"===d?m():l);q&&b.attr("tabindex",0);break;case "range":k(d,b)&&b.attr("role","slider");if(a.config("ariaValue")){var n=!b.attr("aria-valuemin")&& -(g.hasOwnProperty("min")||g.hasOwnProperty("ngMin")),s=!b.attr("aria-valuemax")&&(g.hasOwnProperty("max")||g.hasOwnProperty("ngMax")),t=!b.attr("aria-valuenow");n&&g.$observe("min",function(a){b.attr("aria-valuemin",a)});s&&g.$observe("max",function(a){b.attr("aria-valuemax",a)});t&&e.$watch(f,function(a){b.attr("aria-valuenow",a)})}q&&b.attr("tabindex",0);break;case "multiline":c("aria-multiline","ariaMultiline",b)&&b.attr("aria-multiline",!0)}h.$validators.required&&c("aria-required","ariaRequired", -b)&&e.$watch(function(){return h.$error.required},function(a){b.attr("aria-required",!!a)});c("aria-invalid","ariaInvalid",b)&&e.$watch(function(){return h.$invalid},function(a){b.attr("aria-invalid",!!a)})}}}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled",[])}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,c,k,f){c.attr("aria-live")||c.attr("aria-live","assertive")}}}).directive("ngClick",["$aria","$parse", -function(a,c){return{restrict:"A",compile:function(k,f){var l=c(f.ngClick,null,!0);return function(c,d,e){if(!p(d,r)&&(a.config("bindRoleForClick")&&!d.attr("role")&&d.attr("role","button"),a.config("tabindex")&&!d.attr("tabindex")&&d.attr("tabindex",0),a.config("bindKeypress")&&!e.ngKeypress))d.on("keypress",function(a){function d(){l(c,{$event:a})}var e=a.which||a.keyCode;32!==e&&13!==e||c.$apply(d)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(c,k,f){!a.config("tabindex")|| -k.attr("tabindex")||p(k,r)||k.attr("tabindex",0)}}])})(window,window.angular); -//# sourceMappingURL=angular-aria.min.js.map diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js.map b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js.map deleted file mode 100644 index 13000e15..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-aria.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-aria.min.js", -"lineCount":13, -"mappings":"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", -"sources":["angular-aria.js"], -"names":["window","angular","undefined","nodeBlackList","isNodeOneOf","elem","nodeTypeArray","indexOf","nodeName","module","provider","ngAriaModule","$AriaProvider","watchExpr","attrName","ariaAttr","negate","scope","attr","ariaCamelName","$normalize","config","$watch","boolVal","ariaHidden","ariaChecked","ariaDisabled","ariaRequired","ariaInvalid","ariaMultiline","ariaValue","tabindex","bindKeypress","bindRoleForClick","this.config","newConfig","extend","$get","this.$get","key","$$watchExpr","directive","$aria","shouldAttachAttr","normalizedAttr","shouldAttachRole","role","getShape","type","restrict","require","priority","compile","shape","pre","ngModel","$isEmpty","ngModel.$isEmpty","value","post","ngAriaWatchModelValue","$modelValue","getRadioReaction","needsTabIndex","ngAriaRadioReaction","newVal","$viewValue","ngAriaCheckboxReaction","needsAriaValuemin","hasOwnProperty","needsAriaValuemax","needsAriaValuenow","$observe","ngAriaValueMinReaction","ngAriaValueNowReaction","$validators","required","ngAriaRequiredWatch","$error","ngAriaRequiredReaction","ngAriaInvalidWatch","$invalid","ngAriaInvalidReaction","link","ngMessages","$parse","fn","ngClick","ngKeypress","on","event","callback","$event","keyCode","which","$apply"] -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.js deleted file mode 100644 index bc472b34..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.js +++ /dev/null @@ -1,322 +0,0 @@ -/** - * @license AngularJS v1.4.13 - * (c) 2010-2015 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -/** - * @ngdoc module - * @name ngCookies - * @description - * - * # ngCookies - * - * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies. - * - * - *
    - * - * See {@link ngCookies.$cookies `$cookies`} for usage. - */ - - -angular.module('ngCookies', ['ng']). - /** - * @ngdoc provider - * @name $cookiesProvider - * @description - * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service. - * */ - provider('$cookies', [function $CookiesProvider() { - /** - * @ngdoc property - * @name $cookiesProvider#defaults - * @description - * - * Object containing default options to pass when setting cookies. - * - * The object may have following properties: - * - * - **path** - `{string}` - The cookie will be available only for this path and its - * sub-paths. By default, this is the URL that appears in your `` tag. - * - **domain** - `{string}` - The cookie will be available only for this domain and - * its sub-domains. For security reasons the user agent will not accept the cookie - * if the current domain is not a sub-domain of this domain or equal to it. - * - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT" - * or a Date object indicating the exact date/time this cookie will expire. - * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a - * secured connection. - * - * Note: By default, the address that appears in your `` tag will be used as the path. - * This is important so that cookies will be visible for all routes when html5mode is enabled. - * - **/ - var defaults = this.defaults = {}; - - function calcOptions(options) { - return options ? angular.extend({}, defaults, options) : defaults; - } - - /** - * @ngdoc service - * @name $cookies - * - * @description - * Provides read/write access to browser's cookies. - * - *
    - * Up until Angular 1.3, `$cookies` exposed properties that represented the - * current browser cookie values. In version 1.4, this behavior has changed, and - * `$cookies` now provides a standard api of getters, setters etc. - *
    - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - * @example - * - * ```js - * angular.module('cookiesExample', ['ngCookies']) - * .controller('ExampleController', ['$cookies', function($cookies) { - * // Retrieving a cookie - * var favoriteCookie = $cookies.get('myFavorite'); - * // Setting a cookie - * $cookies.put('myFavorite', 'oatmeal'); - * }]); - * ``` - */ - this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) { - return { - /** - * @ngdoc method - * @name $cookies#get - * - * @description - * Returns the value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {string} Raw cookie value. - */ - get: function(key) { - return $$cookieReader()[key]; - }, - - /** - * @ngdoc method - * @name $cookies#getObject - * - * @description - * Returns the deserialized value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {Object} Deserialized cookie value. - */ - getObject: function(key) { - var value = this.get(key); - return value ? angular.fromJson(value) : value; - }, - - /** - * @ngdoc method - * @name $cookies#getAll - * - * @description - * Returns a key value object with all the cookies - * - * @returns {Object} All cookies - */ - getAll: function() { - return $$cookieReader(); - }, - - /** - * @ngdoc method - * @name $cookies#put - * - * @description - * Sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {string} value Raw value to be stored. - * @param {Object=} options Options object. - * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults} - */ - put: function(key, value, options) { - $$cookieWriter(key, value, calcOptions(options)); - }, - - /** - * @ngdoc method - * @name $cookies#putObject - * - * @description - * Serializes and sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {Object} value Value to be stored. - * @param {Object=} options Options object. - * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults} - */ - putObject: function(key, value, options) { - this.put(key, angular.toJson(value), options); - }, - - /** - * @ngdoc method - * @name $cookies#remove - * - * @description - * Remove given cookie - * - * @param {string} key Id of the key-value pair to delete. - * @param {Object=} options Options object. - * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults} - */ - remove: function(key, options) { - $$cookieWriter(key, undefined, calcOptions(options)); - } - }; - }]; - }]); - -angular.module('ngCookies'). -/** - * @ngdoc service - * @name $cookieStore - * @deprecated - * @requires $cookies - * - * @description - * Provides a key-value (string-object) storage, that is backed by session cookies. - * Objects put or retrieved from this storage are automatically serialized or - * deserialized by angular's toJson/fromJson. - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - *
    - * **Note:** The $cookieStore service is **deprecated**. - * Please use the {@link ngCookies.$cookies `$cookies`} service instead. - *
    - * - * @example - * - * ```js - * angular.module('cookieStoreExample', ['ngCookies']) - * .controller('ExampleController', ['$cookieStore', function($cookieStore) { - * // Put cookie - * $cookieStore.put('myFavorite','oatmeal'); - * // Get cookie - * var favoriteCookie = $cookieStore.get('myFavorite'); - * // Removing a cookie - * $cookieStore.remove('myFavorite'); - * }]); - * ``` - */ - factory('$cookieStore', ['$cookies', function($cookies) { - - return { - /** - * @ngdoc method - * @name $cookieStore#get - * - * @description - * Returns the value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist. - */ - get: function(key) { - return $cookies.getObject(key); - }, - - /** - * @ngdoc method - * @name $cookieStore#put - * - * @description - * Sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {Object} value Value to be stored. - */ - put: function(key, value) { - $cookies.putObject(key, value); - }, - - /** - * @ngdoc method - * @name $cookieStore#remove - * - * @description - * Remove given cookie - * - * @param {string} key Id of the key-value pair to delete. - */ - remove: function(key) { - $cookies.remove(key); - } - }; - - }]); - -/** - * @name $$cookieWriter - * @requires $document - * - * @description - * This is a private service for writing cookies - * - * @param {string} name Cookie name - * @param {string=} value Cookie value (if undefined, cookie will be deleted) - * @param {Object=} options Object with options that need to be stored for the cookie. - */ -function $$CookieWriter($document, $log, $browser) { - var cookiePath = $browser.baseHref(); - var rawDocument = $document[0]; - - function buildCookieString(name, value, options) { - var path, expires; - options = options || {}; - expires = options.expires; - path = angular.isDefined(options.path) ? options.path : cookiePath; - if (angular.isUndefined(value)) { - expires = 'Thu, 01 Jan 1970 00:00:00 GMT'; - value = ''; - } - if (angular.isString(expires)) { - expires = new Date(expires); - } - - var str = encodeURIComponent(name) + '=' + encodeURIComponent(value); - str += path ? ';path=' + path : ''; - str += options.domain ? ';domain=' + options.domain : ''; - str += expires ? ';expires=' + expires.toUTCString() : ''; - str += options.secure ? ';secure' : ''; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - var cookieLength = str.length + 1; - if (cookieLength > 4096) { - $log.warn("Cookie '" + name + - "' possibly not set or overflowed because it was too large (" + - cookieLength + " > 4096 bytes)!"); - } - - return str; - } - - return function(name, value, options) { - rawDocument.cookie = buildCookieString(name, value, options); - }; -} - -$$CookieWriter.$inject = ['$document', '$log', '$browser']; - -angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() { - this.$get = $$CookieWriter; -}); - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js deleted file mode 100644 index d2cc5e74..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(p,c,n){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,n,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore", -["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular); -//# sourceMappingURL=angular-cookies.min.js.map diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js.map b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js.map deleted file mode 100644 index 555b5103..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-cookies.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-cookies.min.js", -"lineCount":8, -"mappings":"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", -"sources":["angular-cookies.js"], -"names":["window","angular","undefined","$$CookieWriter","$document","$log","$browser","cookiePath","baseHref","rawDocument","name","value","options","path","expires","isDefined","isUndefined","isString","Date","str","encodeURIComponent","domain","toUTCString","secure","cookieLength","length","warn","cookie","module","provider","$CookiesProvider","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","extend","putObject","toJson","remove","factory","$cookies","$inject","$$CookieWriterProvider"] -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-csp.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-csp.css deleted file mode 100644 index f3cd926c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-csp.css +++ /dev/null @@ -1,21 +0,0 @@ -/* Include this file in your html if you are using the CSP mode. */ - -@charset "UTF-8"; - -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], -.ng-cloak, .x-ng-cloak, -.ng-hide:not(.ng-hide-animate) { - display: none !important; -} - -ng\:form { - display: block; -} - -.ng-animate-shim { - visibility:hidden; -} - -.ng-anchor { - position:absolute; -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.js deleted file mode 100644 index 189fe2dc..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.js +++ /dev/null @@ -1,471 +0,0 @@ -/** - * @license AngularJS v1.4.13 - * (c) 2010-2015 Google, Inc. http://angularjs.org - * License: MIT - */ - -(function() {'use strict'; - function isFunction(value) {return typeof value === 'function';}; - -/* global: toDebugString: true */ - -function serializeObject(obj) { - var seen = []; - - return JSON.stringify(obj, function(key, val) { - val = toJsonReplacer(key, val); - if (isObject(val)) { - - if (seen.indexOf(val) >= 0) return '...'; - - seen.push(val); - } - return val; - }); -} - -function toDebugString(obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (isUndefined(obj)) { - return 'undefined'; - } else if (typeof obj !== 'string') { - return serializeObject(obj); - } - return obj; -} - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning - * error from returned function, for cases when a particular type of error is useful. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module, ErrorConstructor) { - ErrorConstructor = ErrorConstructor || Error; - return function() { - var SKIP_INDEXES = 2; - - var templateArgs = arguments, - code = templateArgs[0], - message = '[' + (module ? module + ':' : '') + code + '] ', - template = templateArgs[1], - paramPrefix, i; - - message += template.replace(/\{\d+\}/g, function(match) { - var index = +match.slice(1, -1), - shiftedIndex = index + SKIP_INDEXES; - - if (shiftedIndex < templateArgs.length) { - return toDebugString(templateArgs[shiftedIndex]); - } - - return match; - }); - - message += '\nhttp://errors.angularjs.org/1.4.13/' + - (module ? module + '/' : '') + code; - - for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') { - message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' + - encodeURIComponent(toDebugString(templateArgs[i])); - } - - return new ErrorConstructor(message); - }; -} - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * Passing one argument retrieves an existing {@link angular.Module}, - * whereas passing more than one argument creates a new {@link angular.Module} - * - * - * # Module - * - * A module is a collection of services, directives, controllers, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. - * @param {!Array.=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. - * @param {Function=} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {angular.Module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.>} */ - var invokeQueue = []; - - /** @type {!Array.} */ - var configBlocks = []; - - /** @type {!Array.} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _configBlocks: configBlocks, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * - * @description - * Name of the module. - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLaterAndSetModuleName('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLaterAndSetModuleName('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLaterAndSetModuleName('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constants are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#decorator - * @module ng - * @param {string} name The name of the service to decorate. - * @param {Function} decorFn This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. - * @description - * See {@link auto.$provide#decorator $provide.decorator()}. - */ - decorator: invokeLaterAndSetModuleName('$provide', 'decorator'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link $animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ng.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLaterAndSetModuleName('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name - this must be a valid angular expression identifier - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - * - *
    - * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
    - */ - filter: invokeLaterAndSetModuleName('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - * For more about how to configure services, see - * {@link providers#provider-recipe Provider Recipe}. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; - return function() { - queue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - - /** - * @param {string} provider - * @param {string} method - * @returns {angular.Module} - */ - function invokeLaterAndSetModuleName(provider, method) { - return function(recipeName, factoryFunction) { - if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name; - invokeQueue.push([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -setupModuleLoader(window); -})(window); - -/** - * Closure compiler type information - * - * @typedef { { - * requires: !Array., - * invokeQueue: !Array.>, - * - * service: function(string, Function):angular.Module, - * factory: function(string, Function):angular.Module, - * value: function(string, *):angular.Module, - * - * filter: function(string, Function):angular.Module, - * - * init: function(Function):angular.Module - * } } - */ -angular.Module; - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.min.js deleted file mode 100644 index 605d22f4..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-loader.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(){'use strict';function d(b){return function(){var a=arguments[0],e;e="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.13/"+(b?b+"/":"")+a;for(a=1;a= line.length) { - index -= line.length; - } else { - return { line: i + 1, column: index + 1 }; - } - } -} -var PARSE_CACHE_FOR_TEXT_LITERALS = Object.create(null); - -function parseTextLiteral(text) { - var cachedFn = PARSE_CACHE_FOR_TEXT_LITERALS[text]; - if (cachedFn != null) { - return cachedFn; - } - function parsedFn(context) { return text; } - parsedFn['$$watchDelegate'] = function watchDelegate(scope, listener, objectEquality) { - var unwatch = scope['$watch'](noop, - function textLiteralWatcher() { - if (isFunction(listener)) { listener.call(null, text, text, scope); } - unwatch(); - }, - objectEquality); - return unwatch; - }; - PARSE_CACHE_FOR_TEXT_LITERALS[text] = parsedFn; - parsedFn['exp'] = text; // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js - parsedFn['expressions'] = []; // Require this to call $compile.$$addBindingInfo() which allows Protractor to find elements by binding. - return parsedFn; -} - -function subtractOffset(expressionFn, offset) { - if (offset === 0) { - return expressionFn; - } - function minusOffset(value) { - return (value == void 0) ? value : value - offset; - } - function parsedFn(context) { return minusOffset(expressionFn(context)); } - var unwatch; - parsedFn['$$watchDelegate'] = function watchDelegate(scope, listener, objectEquality) { - unwatch = scope['$watch'](expressionFn, - function pluralExpressionWatchListener(newValue, oldValue) { - if (isFunction(listener)) { listener.call(null, minusOffset(newValue), minusOffset(oldValue), scope); } - }, - objectEquality); - return unwatch; - }; - return parsedFn; -} - -// NOTE: ADVANCED_OPTIMIZATIONS mode. -// -// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using -// constructs incompatible with that mode. - -/* global $interpolateMinErr: false */ -/* global isFunction: false */ -/* global noop: false */ - -/** - * @constructor - * @private - */ -function MessageSelectorBase(expressionFn, choices) { - var self = this; - this.expressionFn = expressionFn; - this.choices = choices; - if (choices["other"] === void 0) { - throw $interpolateMinErr('reqother', '“other” is a required option.'); - } - this.parsedFn = function(context) { return self.getResult(context); }; - this.parsedFn['$$watchDelegate'] = function $$watchDelegate(scope, listener, objectEquality) { - return self.watchDelegate(scope, listener, objectEquality); - }; - this.parsedFn['exp'] = expressionFn['exp']; - this.parsedFn['expressions'] = expressionFn['expressions']; -} - -MessageSelectorBase.prototype.getMessageFn = function getMessageFn(value) { - return this.choices[this.categorizeValue(value)]; -}; - -MessageSelectorBase.prototype.getResult = function getResult(context) { - return this.getMessageFn(this.expressionFn(context))(context); -}; - -MessageSelectorBase.prototype.watchDelegate = function watchDelegate(scope, listener, objectEquality) { - var watchers = new MessageSelectorWatchers(this, scope, listener, objectEquality); - return function() { watchers.cancelWatch(); }; -}; - -/** - * @constructor - * @private - */ -function MessageSelectorWatchers(msgSelector, scope, listener, objectEquality) { - var self = this; - this.scope = scope; - this.msgSelector = msgSelector; - this.listener = listener; - this.objectEquality = objectEquality; - this.lastMessage = void 0; - this.messageFnWatcher = noop; - var expressionFnListener = function(newValue, oldValue) { return self.expressionFnListener(newValue, oldValue); }; - this.expressionFnWatcher = scope['$watch'](msgSelector.expressionFn, expressionFnListener, objectEquality); -} - -MessageSelectorWatchers.prototype.expressionFnListener = function expressionFnListener(newValue, oldValue) { - var self = this; - this.messageFnWatcher(); - var messageFnListener = function(newMessage, oldMessage) { return self.messageFnListener(newMessage, oldMessage); }; - var messageFn = this.msgSelector.getMessageFn(newValue); - this.messageFnWatcher = this.scope['$watch'](messageFn, messageFnListener, this.objectEquality); -}; - -MessageSelectorWatchers.prototype.messageFnListener = function messageFnListener(newMessage, oldMessage) { - if (isFunction(this.listener)) { - this.listener.call(null, newMessage, newMessage === oldMessage ? newMessage : this.lastMessage, this.scope); - } - this.lastMessage = newMessage; -}; - -MessageSelectorWatchers.prototype.cancelWatch = function cancelWatch() { - this.expressionFnWatcher(); - this.messageFnWatcher(); -}; - -/** - * @constructor - * @extends MessageSelectorBase - * @private - */ -function SelectMessage(expressionFn, choices) { - MessageSelectorBase.call(this, expressionFn, choices); -} - -function SelectMessageProto() {} -SelectMessageProto.prototype = MessageSelectorBase.prototype; - -SelectMessage.prototype = new SelectMessageProto(); -SelectMessage.prototype.categorizeValue = function categorizeSelectValue(value) { - return (this.choices[value] !== void 0) ? value : "other"; -}; - -/** - * @constructor - * @extends MessageSelectorBase - * @private - */ -function PluralMessage(expressionFn, choices, offset, pluralCat) { - MessageSelectorBase.call(this, expressionFn, choices); - this.offset = offset; - this.pluralCat = pluralCat; -} - -function PluralMessageProto() {} -PluralMessageProto.prototype = MessageSelectorBase.prototype; - -PluralMessage.prototype = new PluralMessageProto(); -PluralMessage.prototype.categorizeValue = function categorizePluralValue(value) { - if (isNaN(value)) { - return "other"; - } else if (this.choices[value] !== void 0) { - return value; - } else { - var category = this.pluralCat(value - this.offset); - return (this.choices[category] !== void 0) ? category : "other"; - } -}; - -// NOTE: ADVANCED_OPTIMIZATIONS mode. -// -// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using -// constructs incompatible with that mode. - -/* global $interpolateMinErr: false */ -/* global isFunction: false */ -/* global parseTextLiteral: false */ - -/** - * @constructor - * @private - */ -function InterpolationParts(trustedContext, allOrNothing) { - this.trustedContext = trustedContext; - this.allOrNothing = allOrNothing; - this.textParts = []; - this.expressionFns = []; - this.expressionIndices = []; - this.partialText = ''; - this.concatParts = null; -} - -InterpolationParts.prototype.flushPartialText = function flushPartialText() { - if (this.partialText) { - if (this.concatParts == null) { - this.textParts.push(this.partialText); - } else { - this.textParts.push(this.concatParts.join('')); - this.concatParts = null; - } - this.partialText = ''; - } -}; - -InterpolationParts.prototype.addText = function addText(text) { - if (text.length) { - if (!this.partialText) { - this.partialText = text; - } else if (this.concatParts) { - this.concatParts.push(text); - } else { - this.concatParts = [this.partialText, text]; - } - } -}; - -InterpolationParts.prototype.addExpressionFn = function addExpressionFn(expressionFn) { - this.flushPartialText(); - this.expressionIndices.push(this.textParts.length); - this.expressionFns.push(expressionFn); - this.textParts.push(''); -}; - -InterpolationParts.prototype.getExpressionValues = function getExpressionValues(context) { - var expressionValues = new Array(this.expressionFns.length); - for (var i = 0; i < this.expressionFns.length; i++) { - expressionValues[i] = this.expressionFns[i](context); - } - return expressionValues; -}; - -InterpolationParts.prototype.getResult = function getResult(expressionValues) { - for (var i = 0; i < this.expressionIndices.length; i++) { - var expressionValue = expressionValues[i]; - if (this.allOrNothing && expressionValue === void 0) return; - this.textParts[this.expressionIndices[i]] = expressionValue; - } - return this.textParts.join(''); -}; - - -InterpolationParts.prototype.toParsedFn = function toParsedFn(mustHaveExpression, originalText) { - var self = this; - this.flushPartialText(); - if (mustHaveExpression && this.expressionFns.length === 0) { - return void 0; - } - if (this.textParts.length === 0) { - return parseTextLiteral(''); - } - if (this.trustedContext && this.textParts.length > 1) { - $interpolateMinErr['throwNoconcat'](originalText); - } - if (this.expressionFns.length === 0) { - if (this.textParts.length != 1) { this.errorInParseLogic(); } - return parseTextLiteral(this.textParts[0]); - } - var parsedFn = function(context) { - return self.getResult(self.getExpressionValues(context)); - }; - parsedFn['$$watchDelegate'] = function $$watchDelegate(scope, listener, objectEquality) { - return self.watchDelegate(scope, listener, objectEquality); - }; - - parsedFn['exp'] = originalText; // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js - parsedFn['expressions'] = new Array(this.expressionFns.length); // Require this to call $compile.$$addBindingInfo() which allows Protractor to find elements by binding. - for (var i = 0; i < this.expressionFns.length; i++) { - parsedFn['expressions'][i] = this.expressionFns[i]['exp']; - } - - return parsedFn; -}; - -InterpolationParts.prototype.watchDelegate = function watchDelegate(scope, listener, objectEquality) { - var watcher = new InterpolationPartsWatcher(this, scope, listener, objectEquality); - return function() { watcher.cancelWatch(); }; -}; - -function InterpolationPartsWatcher(interpolationParts, scope, listener, objectEquality) { - this.interpolationParts = interpolationParts; - this.scope = scope; - this.previousResult = (void 0); - this.listener = listener; - var self = this; - this.expressionFnsWatcher = scope['$watchGroup'](interpolationParts.expressionFns, function(newExpressionValues, oldExpressionValues) { - self.watchListener(newExpressionValues, oldExpressionValues); - }); -} - -InterpolationPartsWatcher.prototype.watchListener = function watchListener(newExpressionValues, oldExpressionValues) { - var result = this.interpolationParts.getResult(newExpressionValues); - if (isFunction(this.listener)) { - this.listener.call(null, result, newExpressionValues === oldExpressionValues ? result : this.previousResult, this.scope); - } - this.previousResult = result; -}; - -InterpolationPartsWatcher.prototype.cancelWatch = function cancelWatch() { - this.expressionFnsWatcher(); -}; - -// NOTE: ADVANCED_OPTIMIZATIONS mode. -// -// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using -// constructs incompatible with that mode. - -/* global $interpolateMinErr: false */ -/* global indexToLineAndColumn: false */ -/* global InterpolationParts: false */ -/* global PluralMessage: false */ -/* global SelectMessage: false */ -/* global subtractOffset: false */ - -// The params src and dst are exactly one of two types: NestedParserState or MessageFormatParser. -// This function is fully optimized by V8. (inspect via IRHydra or --trace-deopt.) -// The idea behind writing it this way is to avoid repeating oneself. This is the ONE place where -// the parser state that is saved/restored when parsing nested mustaches is specified. -function copyNestedParserState(src, dst) { - dst.expressionFn = src.expressionFn; - dst.expressionMinusOffsetFn = src.expressionMinusOffsetFn; - dst.pluralOffset = src.pluralOffset; - dst.choices = src.choices; - dst.choiceKey = src.choiceKey; - dst.interpolationParts = src.interpolationParts; - dst.ruleChoiceKeyword = src.ruleChoiceKeyword; - dst.msgStartIndex = src.msgStartIndex; - dst.expressionStartIndex = src.expressionStartIndex; -} - -function NestedParserState(parser) { - copyNestedParserState(parser, this); -} - -/** - * @constructor - * @private - */ -function MessageFormatParser(text, startIndex, $parse, pluralCat, stringifier, - mustHaveExpression, trustedContext, allOrNothing) { - this.text = text; - this.index = startIndex || 0; - this.$parse = $parse; - this.pluralCat = pluralCat; - this.stringifier = stringifier; - this.mustHaveExpression = !!mustHaveExpression; - this.trustedContext = trustedContext; - this.allOrNothing = !!allOrNothing; - this.expressionFn = null; - this.expressionMinusOffsetFn = null; - this.pluralOffset = null; - this.choices = null; - this.choiceKey = null; - this.interpolationParts = null; - this.msgStartIndex = null; - this.nestedStateStack = []; - this.parsedFn = null; - this.rule = null; - this.ruleStack = null; - this.ruleChoiceKeyword = null; - this.interpNestLevel = null; - this.expressionStartIndex = null; - this.stringStartIndex = null; - this.stringQuote = null; - this.stringInterestsRe = null; - this.angularOperatorStack = null; - this.textPart = null; -} - -// preserve v8 optimization. -var EMPTY_STATE = new NestedParserState(new MessageFormatParser( - /* text= */ '', /* startIndex= */ 0, /* $parse= */ null, /* pluralCat= */ null, /* stringifier= */ null, - /* mustHaveExpression= */ false, /* trustedContext= */ null, /* allOrNothing */ false)); - -MessageFormatParser.prototype.pushState = function pushState() { - this.nestedStateStack.push(new NestedParserState(this)); - copyNestedParserState(EMPTY_STATE, this); -}; - -MessageFormatParser.prototype.popState = function popState() { - if (this.nestedStateStack.length === 0) { - this.errorInParseLogic(); - } - var previousState = this.nestedStateStack.pop(); - copyNestedParserState(previousState, this); -}; - -// Oh my JavaScript! Who knew you couldn't match a regex at a specific -// location in a string but will always search forward?! -// Apparently you'll be growing this ability via the sticky flag (y) in -// ES6. I'll just to work around you for now. -MessageFormatParser.prototype.matchRe = function matchRe(re, search) { - re.lastIndex = this.index; - var match = re.exec(this.text); - if (match != null && (search === true || (match.index == this.index))) { - this.index = re.lastIndex; - return match; - } - return null; -}; - -MessageFormatParser.prototype.searchRe = function searchRe(re) { - return this.matchRe(re, true); -}; - - -MessageFormatParser.prototype.consumeRe = function consumeRe(re) { - // Without the sticky flag, we can't use the .test() method to consume a - // match at the current index. Instead, we'll use the slower .exec() method - // and verify match.index. - return !!this.matchRe(re); -}; - -// Run through our grammar avoiding deeply nested function call chains. -MessageFormatParser.prototype.run = function run(initialRule) { - this.ruleStack = [initialRule]; - do { - this.rule = this.ruleStack.pop(); - while (this.rule) { - this.rule(); - } - this.assertRuleOrNull(this.rule); - } while (this.ruleStack.length > 0); -}; - -MessageFormatParser.prototype.errorInParseLogic = function errorInParseLogic() { - throw $interpolateMinErr('logicbug', - 'The messageformat parser has encountered an internal error. Please file a github issue against the AngularJS project and provide this message text that triggers the bug. Text: “{0}”', - this.text); -}; - -MessageFormatParser.prototype.assertRuleOrNull = function assertRuleOrNull(rule) { - if (rule === void 0) { - this.errorInParseLogic(); - } -}; - -var NEXT_WORD_RE = /\s*(\w+)\s*/g; -MessageFormatParser.prototype.errorExpecting = function errorExpecting() { - // What was wrong with the syntax? Unsupported type, missing comma, or something else? - var match = this.matchRe(NEXT_WORD_RE), position; - if (match == null) { - position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('reqarg', - 'Expected one of “plural” or “select” at line {0}, column {1} of text “{2}”', - position.line, position.column, this.text); - } - var word = match[1]; - if (word == "select" || word == "plural") { - position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('reqcomma', - 'Expected a comma after the keyword “{0}” at line {1}, column {2} of text “{3}”', - word, position.line, position.column, this.text); - } else { - position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('unknarg', - 'Unsupported keyword “{0}” at line {0}, column {1}. Only “plural” and “select” are currently supported. Text: “{3}”', - word, position.line, position.column, this.text); - } -}; - -var STRING_START_RE = /['"]/g; -MessageFormatParser.prototype.ruleString = function ruleString() { - var match = this.matchRe(STRING_START_RE); - if (match == null) { - var position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('wantstring', - 'Expected the beginning of a string at line {0}, column {1} in text “{2}”', - position.line, position.column, this.text); - } - this.startStringAtMatch(match); -}; - -MessageFormatParser.prototype.startStringAtMatch = function startStringAtMatch(match) { - this.stringStartIndex = match.index; - this.stringQuote = match[0]; - this.stringInterestsRe = this.stringQuote == "'" ? SQUOTED_STRING_INTEREST_RE : DQUOTED_STRING_INTEREST_RE; - this.rule = this.ruleInsideString; -}; - -var SQUOTED_STRING_INTEREST_RE = /\\(?:\\|'|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2}|[0-7]{3}|\r\n|\n|[\s\S])|'/g; -var DQUOTED_STRING_INTEREST_RE = /\\(?:\\|"|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{2}|[0-7]{3}|\r\n|\n|[\s\S])|"/g; -MessageFormatParser.prototype.ruleInsideString = function ruleInsideString() { - var match = this.searchRe(this.stringInterestsRe); - if (match == null) { - var position = indexToLineAndColumn(this.text, this.stringStartIndex); - throw $interpolateMinErr('untermstr', - 'The string beginning at line {0}, column {1} is unterminated in text “{2}”', - position.line, position.column, this.text); - } - var chars = match[0]; - if (match == this.stringQuote) { - this.rule = null; - } -}; - -var PLURAL_OR_SELECT_ARG_TYPE_RE = /\s*(plural|select)\s*,\s*/g; -MessageFormatParser.prototype.rulePluralOrSelect = function rulePluralOrSelect() { - var match = this.searchRe(PLURAL_OR_SELECT_ARG_TYPE_RE); - if (match == null) { - this.errorExpecting(); - } - var argType = match[1]; - switch (argType) { - case "plural": this.rule = this.rulePluralStyle; break; - case "select": this.rule = this.ruleSelectStyle; break; - default: this.errorInParseLogic(); - } -}; - -MessageFormatParser.prototype.rulePluralStyle = function rulePluralStyle() { - this.choices = Object.create(null); - this.ruleChoiceKeyword = this.rulePluralValueOrKeyword; - this.rule = this.rulePluralOffset; -}; - -MessageFormatParser.prototype.ruleSelectStyle = function ruleSelectStyle() { - this.choices = Object.create(null); - this.ruleChoiceKeyword = this.ruleSelectKeyword; - this.rule = this.ruleSelectKeyword; -}; - -var NUMBER_RE = /[0]|(?:[1-9][0-9]*)/g; -var PLURAL_OFFSET_RE = new RegExp("\\s*offset\\s*:\\s*(" + NUMBER_RE.source + ")", "g"); - -MessageFormatParser.prototype.rulePluralOffset = function rulePluralOffset() { - var match = this.matchRe(PLURAL_OFFSET_RE); - this.pluralOffset = (match == null) ? 0 : parseInt(match[1], 10); - this.expressionMinusOffsetFn = subtractOffset(this.expressionFn, this.pluralOffset); - this.rule = this.rulePluralValueOrKeyword; -}; - -MessageFormatParser.prototype.assertChoiceKeyIsNew = function assertChoiceKeyIsNew(choiceKey, index) { - if (this.choices[choiceKey] !== void 0) { - var position = indexToLineAndColumn(this.text, index); - throw $interpolateMinErr('dupvalue', - 'The choice “{0}” is specified more than once. Duplicate key is at line {1}, column {2} in text “{3}”', - choiceKey, position.line, position.column, this.text); - } -}; - -var SELECT_KEYWORD = /\s*(\w+)/g; -MessageFormatParser.prototype.ruleSelectKeyword = function ruleSelectKeyword() { - var match = this.matchRe(SELECT_KEYWORD); - if (match == null) { - this.parsedFn = new SelectMessage(this.expressionFn, this.choices).parsedFn; - this.rule = null; - return; - } - this.choiceKey = match[1]; - this.assertChoiceKeyIsNew(this.choiceKey, match.index); - this.rule = this.ruleMessageText; -}; - -var EXPLICIT_VALUE_OR_KEYWORD_RE = new RegExp("\\s*(?:(?:=(" + NUMBER_RE.source + "))|(\\w+))", "g"); -MessageFormatParser.prototype.rulePluralValueOrKeyword = function rulePluralValueOrKeyword() { - var match = this.matchRe(EXPLICIT_VALUE_OR_KEYWORD_RE); - if (match == null) { - this.parsedFn = new PluralMessage(this.expressionFn, this.choices, this.pluralOffset, this.pluralCat).parsedFn; - this.rule = null; - return; - } - if (match[1] != null) { - this.choiceKey = parseInt(match[1], 10); - } else { - this.choiceKey = match[2]; - } - this.assertChoiceKeyIsNew(this.choiceKey, match.index); - this.rule = this.ruleMessageText; -}; - -var BRACE_OPEN_RE = /\s*{/g; -var BRACE_CLOSE_RE = /}/g; -MessageFormatParser.prototype.ruleMessageText = function ruleMessageText() { - if (!this.consumeRe(BRACE_OPEN_RE)) { - var position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('reqopenbrace', - 'The plural choice “{0}” must be followed by a message in braces at line {1}, column {2} in text “{3}”', - this.choiceKey, position.line, position.column, this.text); - } - this.msgStartIndex = this.index; - this.interpolationParts = new InterpolationParts(this.trustedContext, this.allOrNothing); - this.rule = this.ruleInInterpolationOrMessageText; -}; - -// Note: Since "\" is used as an escape character, don't allow it to be part of the -// startSymbol/endSymbol when I add the feature to allow them to be redefined. -var INTERP_OR_END_MESSAGE_RE = /\\.|{{|}/g; -var INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE = /\\.|{{|#|}/g; -var ESCAPE_OR_MUSTACHE_BEGIN_RE = /\\.|{{/g; -MessageFormatParser.prototype.advanceInInterpolationOrMessageText = function advanceInInterpolationOrMessageText() { - var currentIndex = this.index, match, re; - if (this.ruleChoiceKeyword == null) { // interpolation - match = this.searchRe(ESCAPE_OR_MUSTACHE_BEGIN_RE); - if (match == null) { // End of interpolation text. Nothing more to process. - this.textPart = this.text.substring(currentIndex); - this.index = this.text.length; - return null; - } - } else { - match = this.searchRe(this.ruleChoiceKeyword == this.rulePluralValueOrKeyword ? - INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE : INTERP_OR_END_MESSAGE_RE); - if (match == null) { - var position = indexToLineAndColumn(this.text, this.msgStartIndex); - throw $interpolateMinErr('reqendbrace', - 'The plural/select choice “{0}” message starting at line {1}, column {2} does not have an ending closing brace. Text “{3}”', - this.choiceKey, position.line, position.column, this.text); - } - } - // match is non-null. - var token = match[0]; - this.textPart = this.text.substring(currentIndex, match.index); - return token; -}; - -MessageFormatParser.prototype.ruleInInterpolationOrMessageText = function ruleInInterpolationOrMessageText() { - var currentIndex = this.index; - var token = this.advanceInInterpolationOrMessageText(); - if (token == null) { - // End of interpolation text. Nothing more to process. - this.index = this.text.length; - this.interpolationParts.addText(this.text.substring(currentIndex)); - this.rule = null; - return; - } - if (token[0] == "\\") { - // unescape next character and continue - this.interpolationParts.addText(this.textPart + token[1]); - return; - } - this.interpolationParts.addText(this.textPart); - if (token == "{{") { - this.pushState(); - this.ruleStack.push(this.ruleEndMustacheInInterpolationOrMessage); - this.rule = this.ruleEnteredMustache; - } else if (token == "}") { - this.choices[this.choiceKey] = this.interpolationParts.toParsedFn(/*mustHaveExpression=*/false, this.text); - this.rule = this.ruleChoiceKeyword; - } else if (token == "#") { - this.interpolationParts.addExpressionFn(this.expressionMinusOffsetFn); - } else { - this.errorInParseLogic(); - } -}; - -MessageFormatParser.prototype.ruleInterpolate = function ruleInterpolate() { - this.interpolationParts = new InterpolationParts(this.trustedContext, this.allOrNothing); - this.rule = this.ruleInInterpolation; -}; - -MessageFormatParser.prototype.ruleInInterpolation = function ruleInInterpolation() { - var currentIndex = this.index; - var match = this.searchRe(ESCAPE_OR_MUSTACHE_BEGIN_RE); - if (match == null) { - // End of interpolation text. Nothing more to process. - this.index = this.text.length; - this.interpolationParts.addText(this.text.substring(currentIndex)); - this.parsedFn = this.interpolationParts.toParsedFn(this.mustHaveExpression, this.text); - this.rule = null; - return; - } - var token = match[0]; - if (token[0] == "\\") { - // unescape next character and continue - this.interpolationParts.addText(this.text.substring(currentIndex, match.index) + token[1]); - return; - } - this.interpolationParts.addText(this.text.substring(currentIndex, match.index)); - this.pushState(); - this.ruleStack.push(this.ruleInterpolationEndMustache); - this.rule = this.ruleEnteredMustache; -}; - -MessageFormatParser.prototype.ruleInterpolationEndMustache = function ruleInterpolationEndMustache() { - var expressionFn = this.parsedFn; - this.popState(); - this.interpolationParts.addExpressionFn(expressionFn); - this.rule = this.ruleInInterpolation; -}; - -MessageFormatParser.prototype.ruleEnteredMustache = function ruleEnteredMustache() { - this.parsedFn = null; - this.ruleStack.push(this.ruleEndMustache); - this.rule = this.ruleAngularExpression; -}; - -MessageFormatParser.prototype.ruleEndMustacheInInterpolationOrMessage = function ruleEndMustacheInInterpolationOrMessage() { - var expressionFn = this.parsedFn; - this.popState(); - this.interpolationParts.addExpressionFn(expressionFn); - this.rule = this.ruleInInterpolationOrMessageText; -}; - - - -var INTERP_END_RE = /\s*}}/g; -MessageFormatParser.prototype.ruleEndMustache = function ruleEndMustache() { - var match = this.matchRe(INTERP_END_RE); - if (match == null) { - var position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('reqendinterp', - 'Expecting end of interpolation symbol, “{0}”, at line {1}, column {2} in text “{3}”', - '}}', position.line, position.column, this.text); - } - if (this.parsedFn == null) { - // If we parsed a MessageFormat extension, (e.g. select/plural today, maybe more some other - // day), then the result *has* to be a string and those rules would have already set - // this.parsedFn. If there was no MessageFormat extension, then there is no requirement to - // stringify the result and parsedFn isn't set. We set it here. While we could have set it - // unconditionally when exiting the Angular expression, I intend for us to not just replace - // $interpolate, but also to replace $parse in a future version (so ng-bind can work), and in - // such a case we do not want to unnecessarily stringify something if it's not going to be used - // in a string context. - this.parsedFn = this.$parse(this.expressionFn, this.stringifier); - this.parsedFn['exp'] = this.expressionFn['exp']; // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js - this.parsedFn['expressions'] = this.expressionFn['expressions']; // Require this to call $compile.$$addBindingInfo() which allows Protractor to find elements by binding. - } - this.rule = null; -}; - -MessageFormatParser.prototype.ruleAngularExpression = function ruleAngularExpression() { - this.angularOperatorStack = []; - this.expressionStartIndex = this.index; - this.rule = this.ruleInAngularExpression; -}; - -function getEndOperator(opBegin) { - switch (opBegin) { - case "{": return "}"; - case "[": return "]"; - case "(": return ")"; - default: return null; - } -} - -function getBeginOperator(opEnd) { - switch (opEnd) { - case "}": return "{"; - case "]": return "["; - case ")": return "("; - default: return null; - } -} - -// TODO(chirayu): The interpolation endSymbol must also be accounted for. It -// just so happens that "}" is an operator so it's in the list below. But we -// should support any other type of start/end interpolation symbol. -var INTERESTING_OPERATORS_RE = /[[\]{}()'",]/g; -MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularExpression() { - var startIndex = this.index; - var match = this.searchRe(INTERESTING_OPERATORS_RE); - var position; - if (match == null) { - if (this.angularOperatorStack.length === 0) { - // This is the end of the Angular expression so this is actually a - // success. Note that when inside an interpolation, this means we even - // consumed the closing interpolation symbols if they were curlies. This - // is NOT an error at this point but will become an error further up the - // stack when the part that saw the opening curlies is unable to find the - // closing ones. - this.index = this.text.length; - this.expressionFn = this.$parse(this.text.substring(this.expressionStartIndex, this.index)); - // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js - this.expressionFn['exp'] = this.text.substring(this.expressionStartIndex, this.index); - this.expressionFn['expressions'] = this.expressionFn['expressions']; - this.rule = null; - return; - } - var innermostOperator = this.angularOperatorStack[0]; - throw $interpolateMinErr('badexpr', - 'Unexpected end of Angular expression. Expecting operator “{0}” at the end of the text “{1}”', - this.getEndOperator(innermostOperator), this.text); - } - var operator = match[0]; - if (operator == "'" || operator == '"') { - this.ruleStack.push(this.ruleInAngularExpression); - this.startStringAtMatch(match); - return; - } - if (operator == ",") { - if (this.trustedContext) { - position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('unsafe', - 'Use of select/plural MessageFormat syntax is currently disallowed in a secure context ({0}). At line {1}, column {2} of text “{3}”', - this.trustedContext, position.line, position.column, this.text); - } - // only the top level comma has relevance. - if (this.angularOperatorStack.length === 0) { - // todo: does this need to be trimmed? - this.expressionFn = this.$parse(this.text.substring(this.expressionStartIndex, match.index)); - // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js - this.expressionFn['exp'] = this.text.substring(this.expressionStartIndex, match.index); - this.expressionFn['expressions'] = this.expressionFn['expressions']; - this.rule = null; - this.rule = this.rulePluralOrSelect; - } - return; - } - if (getEndOperator(operator) != null) { - this.angularOperatorStack.unshift(operator); - return; - } - var beginOperator = getBeginOperator(operator); - if (beginOperator == null) { - this.errorInParseLogic(); - } - if (this.angularOperatorStack.length > 0) { - if (beginOperator == this.angularOperatorStack[0]) { - this.angularOperatorStack.shift(); - return; - } - position = indexToLineAndColumn(this.text, this.index); - throw $interpolateMinErr('badexpr', - 'Unexpected operator “{0}” at line {1}, column {2} in text. Was expecting “{3}”. Text: “{4}”', - operator, position.line, position.column, getEndOperator(this.angularOperatorStack[0]), this.text); - } - // We are trying to pop off the operator stack but there really isn't anything to pop off. - this.index = match.index; - this.expressionFn = this.$parse(this.text.substring(this.expressionStartIndex, this.index)); - // Needed to pretend to be $interpolate for tests copied from interpolateSpec.js - this.expressionFn['exp'] = this.text.substring(this.expressionStartIndex, this.index); - this.expressionFn['expressions'] = this.expressionFn['expressions']; - this.rule = null; -}; - -// NOTE: ADVANCED_OPTIMIZATIONS mode. -// -// This file is compiled with Closure compiler's ADVANCED_OPTIMIZATIONS flag! Be wary of using -// constructs incompatible with that mode. - -/* global $interpolateMinErr: false */ -/* global MessageFormatParser: false */ -/* global stringify: false */ - -/** - * @ngdoc service - * @name $$messageFormat - * - * @description - * Angular internal service to recognize MessageFormat extensions in interpolation expressions. - * For more information, see: - * https://docs.google.com/a/google.com/document/d/1pbtW2yvtmFBikfRrJd8VAsabiFkKezmYZ_PbgdjQOVU/edit - * - * ## Example - * - * - * - *
    - *
    - * {{recipients.length, plural, offset:1 - * =0 {{{sender.name}} gave no gifts (\#=#)} - * =1 {{{sender.name}} gave one gift to {{recipients[0].name}} (\#=#)} - * one {{{sender.name}} gave {{recipients[0].name}} and one other person a gift (\#=#)} - * other {{{sender.name}} gave {{recipients[0].name}} and # other people a gift (\#=#)} - * }} - *
    - *
    - * - * - * function Person(name, gender) { - * this.name = name; - * this.gender = gender; - * } - * - * var alice = new Person("Alice", "female"), - * bob = new Person("Bob", "male"), - * charlie = new Person("Charlie", "male"), - * harry = new Person("Harry Potter", "male"); - * - * angular.module('msgFmtExample', ['ngMessageFormat']) - * .controller('AppController', ['$scope', function($scope) { - * $scope.recipients = [alice, bob, charlie]; - * $scope.sender = harry; - * $scope.decreaseRecipients = function() { - * --$scope.recipients.length; - * }; - * }]); - * - * - * - * describe('MessageFormat plural', function() { - * it('should pluralize initial values', function() { - * var messageElem = element(by.binding('recipients.length')), decreaseRecipientsBtn = element(by.id('decreaseRecipients')); - * expect(messageElem.getText()).toEqual('Harry Potter gave Alice and 2 other people a gift (#=2)'); - * decreaseRecipientsBtn.click(); - * expect(messageElem.getText()).toEqual('Harry Potter gave Alice and one other person a gift (#=1)'); - * decreaseRecipientsBtn.click(); - * expect(messageElem.getText()).toEqual('Harry Potter gave one gift to Alice (#=0)'); - * decreaseRecipientsBtn.click(); - * expect(messageElem.getText()).toEqual('Harry Potter gave no gifts (#=-1)'); - * }); - * }); - * - *
    - */ -var $$MessageFormatFactory = ['$parse', '$locale', '$sce', '$exceptionHandler', function $$messageFormat( - $parse, $locale, $sce, $exceptionHandler) { - - function getStringifier(trustedContext, allOrNothing, text) { - return function stringifier(value) { - try { - value = trustedContext ? $sce['getTrusted'](trustedContext, value) : $sce['valueOf'](value); - return allOrNothing && (value === void 0) ? value : stringify(value); - } catch (err) { - $exceptionHandler($interpolateMinErr['interr'](text, err)); - } - }; - } - - function interpolate(text, mustHaveExpression, trustedContext, allOrNothing) { - var stringifier = getStringifier(trustedContext, allOrNothing, text); - var parser = new MessageFormatParser(text, 0, $parse, $locale['pluralCat'], stringifier, - mustHaveExpression, trustedContext, allOrNothing); - parser.run(parser.ruleInterpolate); - return parser.parsedFn; - } - - return { - 'interpolate': interpolate - }; -}]; - -var $$interpolateDecorator = ['$$messageFormat', '$delegate', function $$interpolateDecorator($$messageFormat, $interpolate) { - if ($interpolate['startSymbol']() != "{{" || $interpolate['endSymbol']() != "}}") { - throw $interpolateMinErr('nochgmustache', 'angular-message-format.js currently does not allow you to use custom start and end symbols for interpolation.'); - } - var interpolate = $$messageFormat['interpolate']; - interpolate['startSymbol'] = $interpolate['startSymbol']; - interpolate['endSymbol'] = $interpolate['endSymbol']; - return interpolate; -}]; - - -/** - * @ngdoc module - * @name ngMessageFormat - * @packageName angular-message-format - * @description - */ -var module = window['angular']['module']('ngMessageFormat', ['ng']); -module['factory']('$$messageFormat', $$MessageFormatFactory); -module['config'](['$provide', function($provide) { - $provide['decorator']('$interpolate', $$interpolateDecorator); -}]); - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-message-format.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-message-format.min.js deleted file mode 100644 index 95621e35..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-message-format.min.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(h){'use strict';function C(a){if(null==a)return"";switch(typeof a){case "string":return a;case "number":return""+a;default:return D(a)}}function f(a,b){for(var d=a.split(/\n/g),k=0;k=c.length)b-=c.length;else return{h:k+1,f:b+1}}}function t(a){function b(){return a}var d=u[a];if(null!=d)return d;b.$$watchDelegate=function(b,d,c){var e=b.$watch(v,function(){m(d)&&d.call(null,a,a,b);e()},c);return e};u[a]=b;b.exp=a;b.expressions=[];return b}function F(a,b){function d(a){return void 0== -a?a:a-b}function c(b){return d(a(b))}if(0===b)return a;var e;c.$$watchDelegate=function(b,c,k){return e=b.$watch(a,function(a,k){m(c)&&c.call(null,d(a),d(k),b)},k)};return c}function l(a,b){var d=this;this.b=a;this.e=b;if(void 0===b.other)throw e("reqother");this.d=function(a){return d.D(a)};this.d.$$watchDelegate=function(a,b,c){return d.P(a,b,c)};this.d.exp=a.exp;this.d.expressions=a.expressions}function n(a,b,d,c){var e=this;this.scope=b;this.oa=a;this.v=d;this.qa=c;this.U=void 0;this.K=v;this.ka= -b.$watch(a.b,function(a){return e.ja(a)},c)}function p(a,b){l.call(this,a,b)}function w(){}function q(a,b,d,c){l.call(this,a,b);this.offset=d;this.M=c}function x(){}function g(a,b){this.u=a;this.B=b;this.i=[];this.g=[];this.J=[];this.s="";this.q=null}function r(a,b,d){this.c=a;this.scope=b;this.W=void 0;this.v=d;var c=this;this.la=b.$watchGroup(a.g,function(a,b){c.Ea(a,b)})}function s(a,b){b.b=a.b;b.C=a.C;b.w=a.w;b.e=a.e;b.k=a.k;b.c=a.c;b.n=a.n;b.F=a.F;b.l=a.l}function y(a){s(a,this)}function c(a, -b,d,c,e,E,f,g){this.text=a;this.index=b||0;this.A=d;this.M=c;this.Da=e;this.pa=!!E;this.u=f;this.B=!!g;this.F=this.c=this.k=this.e=this.w=this.C=this.b=null;this.L=[];this.G=this.j=this.ca=this.O=this.da=this.l=this.n=this.o=this.a=this.d=null}function z(a){switch(a){case "{":return"}";case "[":return"]";case "(":return")";default:return null}}function G(a){switch(a){case "}":return"{";case "]":return"[";case ")":return"(";default:return null}}var e=h.angular.$interpolateMinErr,v=h.angular.noop,m= -h.angular.isFunction,D=h.angular.toJson,u=Object.create(null);l.prototype.T=function(a){return this.e[this.R(a)]};l.prototype.D=function(a){return this.T(this.b(a))(a)};l.prototype.P=function(a,b,d){var c=new n(this,a,b,d);return function(){c.I()}};n.prototype.ja=function(a){var b=this;this.K();a=this.oa.T(a);this.K=this.scope.$watch(a,function(a,c){return b.na(a,c)},this.qa)};n.prototype.na=function(a,b){m(this.v)&&this.v.call(null,a,a===b?a:this.U,this.scope);this.U=a};n.prototype.I=function(){this.ka(); -this.K()};w.prototype=l.prototype;p.prototype=new w;p.prototype.R=function(a){return void 0!==this.e[a]?a:"other"};x.prototype=l.prototype;q.prototype=new x;q.prototype.R=function(a){if(isNaN(a))return"other";if(void 0!==this.e[a])return a;a=this.M(a-this.offset);return void 0!==this.e[a]?a:"other"};g.prototype.S=function(){this.s&&(null==this.q?this.i.push(this.s):(this.i.push(this.q.join("")),this.q=null),this.s="")};g.prototype.p=function(a){a.length&&(this.s?this.q?this.q.push(a):this.q=[this.s, -a]:this.s=a)};g.prototype.H=function(a){this.S();this.J.push(this.i.length);this.g.push(a);this.i.push("")};g.prototype.ma=function(a){for(var b=Array(this.g.length),d=0;d - * - *
    - *
    Please enter a value for this field.
    - *
    This field must be a valid email address.
    - *
    This field can be at most 15 characters long.
    - *
    - * - * ``` - * - * In order to show error messages corresponding to `myField` we first create an element with an `ngMessages` attribute - * set to the `$error` object owned by the `myField` input in our `myForm` form. - * - * Within this element we then create separate elements for each of the possible errors that `myField` could have. - * The `ngMessage` attribute is used to declare which element(s) will appear for which error - for example, - * setting `ng-message="required"` specifies that this particular element should be displayed when there - * is no value present for the required field `myField` (because the key `required` will be `true` in the object - * `myForm.myField.$error`). - * - * ### Message order - * - * By default, `ngMessages` will only display one message for a particular key/value collection at any time. If more - * than one message (or error) key is currently true, then which message is shown is determined by the order of messages - * in the HTML template code (messages declared first are prioritised). This mechanism means the developer does not have - * to prioritise messages using custom JavaScript code. - * - * Given the following error object for our example (which informs us that the field `myField` currently has both the - * `required` and `email` errors): - * - * ```javascript - * - * myField.$error = { required : true, email: true, maxlength: false }; - * ``` - * The `required` message will be displayed to the user since it appears before the `email` message in the DOM. - * Once the user types a single character, the `required` message will disappear (since the field now has a value) - * but the `email` message will be visible because it is still applicable. - * - * ### Displaying multiple messages at the same time - * - * While `ngMessages` will by default only display one error element at a time, the `ng-messages-multiple` attribute can - * be applied to the `ngMessages` container element to cause it to display all applicable error messages at once: - * - * ```html - * - *
    ...
    - * - * - * ... - * ``` - * - * ## Reusing and Overriding Messages - * In addition to prioritization, ngMessages also allows for including messages from a remote or an inline - * template. This allows for generic collection of messages to be reused across multiple parts of an - * application. - * - * ```html - * - * - *
    - *
    - *
    - * ``` - * - * However, including generic messages may not be useful enough to match all input fields, therefore, - * `ngMessages` provides the ability to override messages defined in the remote template by redefining - * them within the directive container. - * - * ```html - * - * - * - *
    - * - * - *
    - * - *
    You did not enter your email address
    - * - * - *
    Your email address is invalid
    - * - * - *
    - *
    - *
    - * ``` - * - * In the example HTML code above the message that is set on required will override the corresponding - * required message defined within the remote template. Therefore, with particular input fields (such - * email addresses, date fields, autocomplete inputs, etc...), specialized error messages can be applied - * while more generic messages can be used to handle other, more general input errors. - * - * ## Dynamic Messaging - * ngMessages also supports using expressions to dynamically change key values. Using arrays and - * repeaters to list messages is also supported. This means that the code below will be able to - * fully adapt itself and display the appropriate message when any of the expression data changes: - * - * ```html - *
    - * - *
    - *
    You did not enter your email address
    - *
    - * - *
    {{ errorMessage.text }}
    - *
    - *
    - *
    - * ``` - * - * The `errorMessage.type` expression can be a string value or it can be an array so - * that multiple errors can be associated with a single error message: - * - * ```html - * - *
    - *
    You did not enter your email address
    - *
    - * Your email must be between 5 and 100 characters long - *
    - *
    - * ``` - * - * Feel free to use other structural directives such as ng-if and ng-switch to further control - * what messages are active and when. Be careful, if you place ng-message on the same element - * as these structural directives, Angular may not be able to determine if a message is active - * or not. Therefore it is best to place the ng-message on a child element of the structural - * directive. - * - * ```html - *
    - *
    - *
    Please enter something
    - *
    - *
    - * ``` - * - * ## Animations - * If the `ngAnimate` module is active within the application then the `ngMessages`, `ngMessage` and - * `ngMessageExp` directives will trigger animations whenever any messages are added and removed from - * the DOM by the `ngMessages` directive. - * - * Whenever the `ngMessages` directive contains one or more visible messages then the `.ng-active` CSS - * class will be added to the element. The `.ng-inactive` CSS class will be applied when there are no - * messages present. Therefore, CSS transitions and keyframes as well as JavaScript animations can - * hook into the animations whenever these classes are added/removed. - * - * Let's say that our HTML code for our messages container looks like so: - * - * ```html - * - * ``` - * - * Then the CSS animation code for the message container looks like so: - * - * ```css - * .my-messages { - * transition:1s linear all; - * } - * .my-messages.ng-active { - * // messages are visible - * } - * .my-messages.ng-inactive { - * // messages are hidden - * } - * ``` - * - * Whenever an inner message is attached (becomes visible) or removed (becomes hidden) then the enter - * and leave animation is triggered for each particular element bound to the `ngMessage` directive. - * - * Therefore, the CSS code for the inner messages looks like so: - * - * ```css - * .some-message { - * transition:1s linear all; - * } - * - * .some-message.ng-enter {} - * .some-message.ng-enter.ng-enter-active {} - * - * .some-message.ng-leave {} - * .some-message.ng-leave.ng-leave-active {} - * ``` - * - * {@link ngAnimate Click here} to learn how to use JavaScript animations or to learn more about ngAnimate. - */ -angular.module('ngMessages', []) - - /** - * @ngdoc directive - * @module ngMessages - * @name ngMessages - * @restrict AE - * - * @description - * `ngMessages` is a directive that is designed to show and hide messages based on the state - * of a key/value object that it listens on. The directive itself complements error message - * reporting with the `ngModel` $error object (which stores a key/value state of validation errors). - * - * `ngMessages` manages the state of internal messages within its container element. The internal - * messages use the `ngMessage` directive and will be inserted/removed from the page depending - * on if they're present within the key/value object. By default, only one message will be displayed - * at a time and this depends on the prioritization of the messages within the template. (This can - * be changed by using the `ng-messages-multiple` or `multiple` attribute on the directive container.) - * - * A remote template can also be used to promote message reusability and messages can also be - * overridden. - * - * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`. - * - * @usage - * ```html - * - * - * ... - * ... - * ... - * - * - * - * - * ... - * ... - * ... - * - * ``` - * - * @param {string} ngMessages an angular expression evaluating to a key/value object - * (this is typically the $error object on an ngModel instance). - * @param {string=} ngMessagesMultiple|multiple when set, all messages will be displayed with true - * - * @example - * - * - *
    - * - *
    myForm.myName.$error = {{ myForm.myName.$error | json }}
    - * - *
    - *
    You did not enter a field
    - *
    Your field is too short
    - *
    Your field is too long
    - *
    - *
    - *
    - * - * angular.module('ngMessagesExample', ['ngMessages']); - * - *
    - */ - .directive('ngMessages', ['$animate', function($animate) { - var ACTIVE_CLASS = 'ng-active'; - var INACTIVE_CLASS = 'ng-inactive'; - - return { - require: 'ngMessages', - restrict: 'AE', - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var ctrl = this; - var latestKey = 0; - var nextAttachId = 0; - - this.getAttachId = function getAttachId() { return nextAttachId++; }; - - var messages = this.messages = {}; - var renderLater, cachedCollection; - - this.render = function(collection) { - collection = collection || {}; - - renderLater = false; - cachedCollection = collection; - - // this is true if the attribute is empty or if the attribute value is truthy - var multiple = isAttrTruthy($scope, $attrs.ngMessagesMultiple) || - isAttrTruthy($scope, $attrs.multiple); - - var unmatchedMessages = []; - var matchedKeys = {}; - var messageItem = ctrl.head; - var messageFound = false; - var totalMessages = 0; - - // we use != instead of !== to allow for both undefined and null values - while (messageItem != null) { - totalMessages++; - var messageCtrl = messageItem.message; - - var messageUsed = false; - if (!messageFound) { - forEach(collection, function(value, key) { - if (!messageUsed && truthy(value) && messageCtrl.test(key)) { - // this is to prevent the same error name from showing up twice - if (matchedKeys[key]) return; - matchedKeys[key] = true; - - messageUsed = true; - messageCtrl.attach(); - } - }); - } - - if (messageUsed) { - // unless we want to display multiple messages then we should - // set a flag here to avoid displaying the next message in the list - messageFound = !multiple; - } else { - unmatchedMessages.push(messageCtrl); - } - - messageItem = messageItem.next; - } - - forEach(unmatchedMessages, function(messageCtrl) { - messageCtrl.detach(); - }); - - unmatchedMessages.length !== totalMessages - ? $animate.setClass($element, ACTIVE_CLASS, INACTIVE_CLASS) - : $animate.setClass($element, INACTIVE_CLASS, ACTIVE_CLASS); - }; - - $scope.$watchCollection($attrs.ngMessages || $attrs['for'], ctrl.render); - - // If the element is destroyed, proactively destroy all the currently visible messages - $element.on('$destroy', function() { - forEach(messages, function(item) { - item.message.detach(); - }); - }); - - this.reRender = function() { - if (!renderLater) { - renderLater = true; - $scope.$evalAsync(function() { - if (renderLater) { - cachedCollection && ctrl.render(cachedCollection); - } - }); - } - }; - - this.register = function(comment, messageCtrl) { - var nextKey = latestKey.toString(); - messages[nextKey] = { - message: messageCtrl - }; - insertMessageNode($element[0], comment, nextKey); - comment.$$ngMessageNode = nextKey; - latestKey++; - - ctrl.reRender(); - }; - - this.deregister = function(comment) { - var key = comment.$$ngMessageNode; - delete comment.$$ngMessageNode; - removeMessageNode($element[0], comment, key); - delete messages[key]; - ctrl.reRender(); - }; - - function findPreviousMessage(parent, comment) { - var prevNode = comment; - var parentLookup = []; - - while (prevNode && prevNode !== parent) { - var prevKey = prevNode.$$ngMessageNode; - if (prevKey && prevKey.length) { - return messages[prevKey]; - } - - // dive deeper into the DOM and examine its children for any ngMessage - // comments that may be in an element that appears deeper in the list - if (prevNode.childNodes.length && parentLookup.indexOf(prevNode) == -1) { - parentLookup.push(prevNode); - prevNode = prevNode.childNodes[prevNode.childNodes.length - 1]; - } else if (prevNode.previousSibling) { - prevNode = prevNode.previousSibling; - } else { - prevNode = prevNode.parentNode; - parentLookup.push(prevNode); - } - } - } - - function insertMessageNode(parent, comment, key) { - var messageNode = messages[key]; - if (!ctrl.head) { - ctrl.head = messageNode; - } else { - var match = findPreviousMessage(parent, comment); - if (match) { - messageNode.next = match.next; - match.next = messageNode; - } else { - messageNode.next = ctrl.head; - ctrl.head = messageNode; - } - } - } - - function removeMessageNode(parent, comment, key) { - var messageNode = messages[key]; - - var match = findPreviousMessage(parent, comment); - if (match) { - match.next = messageNode.next; - } else { - ctrl.head = messageNode.next; - } - } - }] - }; - - function isAttrTruthy(scope, attr) { - return (isString(attr) && attr.length === 0) || //empty attribute - truthy(scope.$eval(attr)); - } - - function truthy(val) { - return isString(val) ? val.length : !!val; - } - }]) - - /** - * @ngdoc directive - * @name ngMessagesInclude - * @restrict AE - * @scope - * - * @description - * `ngMessagesInclude` is a directive with the purpose to import existing ngMessage template - * code from a remote template and place the downloaded template code into the exact spot - * that the ngMessagesInclude directive is placed within the ngMessages container. This allows - * for a series of pre-defined messages to be reused and also allows for the developer to - * determine what messages are overridden due to the placement of the ngMessagesInclude directive. - * - * @usage - * ```html - * - * - * ... - * - * - * - * - * ... - * - * ``` - * - * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`. - * - * @param {string} ngMessagesInclude|src a string value corresponding to the remote template. - */ - .directive('ngMessagesInclude', - ['$templateRequest', '$document', '$compile', function($templateRequest, $document, $compile) { - - return { - restrict: 'AE', - require: '^^ngMessages', // we only require this for validation sake - link: function($scope, element, attrs) { - var src = attrs.ngMessagesInclude || attrs.src; - $templateRequest(src).then(function(html) { - $compile(html)($scope, function(contents) { - element.after(contents); - - // the anchor is placed for debugging purposes - var anchor = jqLite($document[0].createComment(' ngMessagesInclude: ' + src + ' ')); - element.after(anchor); - - // we don't want to pollute the DOM anymore by keeping an empty directive element - element.remove(); - }); - }); - } - }; - }]) - - /** - * @ngdoc directive - * @name ngMessage - * @restrict AE - * @scope - * - * @description - * `ngMessage` is a directive with the purpose to show and hide a particular message. - * For `ngMessage` to operate, a parent `ngMessages` directive on a parent DOM element - * must be situated since it determines which messages are visible based on the state - * of the provided key/value map that `ngMessages` listens on. - * - * More information about using `ngMessage` can be found in the - * {@link module:ngMessages `ngMessages` module documentation}. - * - * @usage - * ```html - * - * - * ... - * ... - * - * - * - * - * ... - * ... - * - * ``` - * - * @param {expression} ngMessage|when a string value corresponding to the message key. - */ - .directive('ngMessage', ngMessageDirectiveFactory('AE')) - - - /** - * @ngdoc directive - * @name ngMessageExp - * @restrict AE - * @scope - * - * @description - * `ngMessageExp` is a directive with the purpose to show and hide a particular message. - * For `ngMessageExp` to operate, a parent `ngMessages` directive on a parent DOM element - * must be situated since it determines which messages are visible based on the state - * of the provided key/value map that `ngMessages` listens on. - * - * @usage - * ```html - * - * - * ... - * - * - * - * - * ... - * - * ``` - * - * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`. - * - * @param {expression} ngMessageExp|whenExp an expression value corresponding to the message key. - */ - .directive('ngMessageExp', ngMessageDirectiveFactory('A')); - -function ngMessageDirectiveFactory(restrict) { - return ['$animate', function($animate) { - return { - restrict: 'AE', - transclude: 'element', - terminal: true, - require: '^^ngMessages', - link: function(scope, element, attrs, ngMessagesCtrl, $transclude) { - var commentNode = element[0]; - - var records; - var staticExp = attrs.ngMessage || attrs.when; - var dynamicExp = attrs.ngMessageExp || attrs.whenExp; - var assignRecords = function(items) { - records = items - ? (isArray(items) - ? items - : items.split(/[\s,]+/)) - : null; - ngMessagesCtrl.reRender(); - }; - - if (dynamicExp) { - assignRecords(scope.$eval(dynamicExp)); - scope.$watchCollection(dynamicExp, assignRecords); - } else { - assignRecords(staticExp); - } - - var currentElement, messageCtrl; - ngMessagesCtrl.register(commentNode, messageCtrl = { - test: function(name) { - return contains(records, name); - }, - attach: function() { - if (!currentElement) { - $transclude(scope, function(elm) { - $animate.enter(elm, null, element); - currentElement = elm; - - // Each time we attach this node to a message we get a new id that we can match - // when we are destroying the node later. - var $$attachId = currentElement.$$attachId = ngMessagesCtrl.getAttachId(); - - // in the event that the element or a parent element is destroyed - // by another structural directive then it's time - // to deregister the message from the controller - currentElement.on('$destroy', function() { - if (currentElement && currentElement.$$attachId === $$attachId) { - ngMessagesCtrl.deregister(commentNode); - messageCtrl.detach(); - } - }); - }); - } - }, - detach: function() { - if (currentElement) { - var elm = currentElement; - currentElement = null; - $animate.leave(elm); - } - } - }); - } - }; - }]; - - function contains(collection, key) { - if (collection) { - return isArray(collection) - ? collection.indexOf(key) >= 0 - : collection.hasOwnProperty(key); - } - } -} - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js deleted file mode 100644 index f25f94d8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(z,b,A){'use strict';function m(b){return["$animate",function(r){return{restrict:"AE",transclude:"element",terminal:!0,require:"^^ngMessages",link:function(n,e,a,f,l){var g=e[0],p,b=a.ngMessage||a.when;a=a.ngMessageExp||a.whenExp;var k=function(d){p=d?w(d)?d:d.split(/[\s,]+/):null;f.reRender()};a?(k(n.$eval(a)),n.$watchCollection(a,k)):k(b);var h,q;f.register(g,q={test:function(d){var a=p;d=a?w(a)?0<=a.indexOf(d):a.hasOwnProperty(d):void 0;return d},attach:function(){h||l(n,function(d){r.enter(d, -null,e);h=d;var a=h.$$attachId=f.getAttachId();h.on("$destroy",function(){h&&h.$$attachId===a&&(f.deregister(g),q.detach())})})},detach:function(){if(h){var d=h;h=null;r.leave(d)}}})}}}]}var w=b.isArray,t=b.forEach,x=b.isString,y=b.element;b.module("ngMessages",[]).directive("ngMessages",["$animate",function(b){function r(e,a){return x(a)&&0===a.length||n(e.$eval(a))}function n(e){return x(e)?e.length:!!e}return{require:"ngMessages",restrict:"AE",controller:["$element","$scope","$attrs",function(e, -a,f){function l(d,a){for(var c=a,e=[];c&&c!==d;){var g=c.$$ngMessageNode;if(g&&g.length)return k[g];c.childNodes.length&&-1==e.indexOf(c)?(e.push(c),c=c.childNodes[c.childNodes.length-1]):c.previousSibling?c=c.previousSibling:(c=c.parentNode,e.push(c))}}var g=this,p=0,m=0;this.getAttachId=function(){return m++};var k=this.messages={},h,q;this.render=function(d){d=d||{};h=!1;q=d;for(var k=r(a,f.ngMessagesMultiple)||r(a,f.multiple),c=[],p={},s=g.head,l=!1,m=0;null!=s;){m++;var u=s.message,v=!1;l||t(d, -function(d,a){!v&&n(d)&&u.test(a)&&!p[a]&&(v=p[a]=!0,u.attach())});v?l=!k:c.push(u);s=s.next}t(c,function(a){a.detach()});c.length!==m?b.setClass(e,"ng-active","ng-inactive"):b.setClass(e,"ng-inactive","ng-active")};a.$watchCollection(f.ngMessages||f["for"],g.render);e.on("$destroy",function(){t(k,function(a){a.message.detach()})});this.reRender=function(){h||(h=!0,a.$evalAsync(function(){h&&q&&g.render(q)}))};this.register=function(a,h){var c=p.toString();k[c]={message:h};var f=e[0],b=k[c];g.head? -(f=l(f,a))?(b.next=f.next,f.next=b):(b.next=g.head,g.head=b):g.head=b;a.$$ngMessageNode=c;p++;g.reRender()};this.deregister=function(a){var b=a.$$ngMessageNode;delete a.$$ngMessageNode;var c=k[b];(a=l(e[0],a))?a.next=c.next:g.head=c.next;delete k[b];g.reRender()}}]}}]).directive("ngMessagesInclude",["$templateRequest","$document","$compile",function(b,m,n){return{restrict:"AE",require:"^^ngMessages",link:function(e,a,f){var l=f.ngMessagesInclude||f.src;b(l).then(function(b){n(b)(e,function(b){a.after(b); -b=y(m[0].createComment(" ngMessagesInclude: "+l+" "));a.after(b);a.remove()})})}}}]).directive("ngMessage",m("AE")).directive("ngMessageExp",m("A"))})(window,window.angular); -//# sourceMappingURL=angular-messages.min.js.map diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js.map b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js.map deleted file mode 100644 index 670e6ec3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-messages.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-messages.min.js", -"lineCount":11, -"mappings":"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", -"sources":["angular-messages.js"], -"names":["window","angular","undefined","ngMessageDirectiveFactory","restrict","$animate","transclude","terminal","require","link","scope","element","attrs","ngMessagesCtrl","$transclude","commentNode","records","staticExp","ngMessage","when","dynamicExp","ngMessageExp","whenExp","assignRecords","items","isArray","split","reRender","$eval","$watchCollection","currentElement","messageCtrl","register","test","name","collection","indexOf","hasOwnProperty","attach","elm","enter","$$attachId","getAttachId","on","deregister","detach","leave","forEach","isString","jqLite","module","directive","isAttrTruthy","attr","length","truthy","val","controller","$element","$scope","$attrs","findPreviousMessage","parent","comment","prevNode","parentLookup","prevKey","$$ngMessageNode","messages","childNodes","push","previousSibling","parentNode","ctrl","latestKey","nextAttachId","this.getAttachId","renderLater","cachedCollection","render","this.render","multiple","ngMessagesMultiple","unmatchedMessages","matchedKeys","messageItem","head","messageFound","totalMessages","message","messageUsed","value","key","next","setClass","ACTIVE_CLASS","INACTIVE_CLASS","ngMessages","item","this.reRender","$evalAsync","this.register","nextKey","toString","messageNode","match","this.deregister","$templateRequest","$document","$compile","src","ngMessagesInclude","then","html","contents","after","anchor","createComment","remove"] -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-mocks.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-mocks.js deleted file mode 100644 index 36314268..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-mocks.js +++ /dev/null @@ -1,2556 +0,0 @@ -/** - * @license AngularJS v1.4.13 - * (c) 2010-2015 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) { - -'use strict'; - -/** - * @ngdoc object - * @name angular.mock - * @description - * - * Namespace from 'angular-mocks.js' which contains testing related code. - */ -angular.mock = {}; - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * - * @description - * This service is a mock implementation of {@link ng.$browser}. It provides fake - * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr, - * cookies, etc... - * - * The api of this service is the same as that of the real {@link ng.$browser $browser}, except - * that there are several helper methods available which can be used in tests. - */ -angular.mock.$BrowserProvider = function() { - this.$get = function() { - return new angular.mock.$Browser(); - }; -}; - -angular.mock.$Browser = function() { - var self = this; - - this.isMock = true; - self.$$url = "http://server/"; - self.$$lastUrl = self.$$url; // used by url polling fn - self.pollFns = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = angular.noop; - self.$$incOutstandingRequestCount = angular.noop; - - - // register url polling fn - - self.onUrlChange = function(listener) { - self.pollFns.push( - function() { - if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) { - self.$$lastUrl = self.$$url; - self.$$lastState = self.$$state; - listener(self.$$url, self.$$state); - } - } - ); - - return listener; - }; - - self.$$applicationDestroyed = angular.noop; - self.$$checkUrlChange = angular.noop; - - self.deferredFns = []; - self.deferredNextId = 0; - - self.defer = function(fn, delay) { - delay = delay || 0; - self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId}); - self.deferredFns.sort(function(a, b) { return a.time - b.time;}); - return self.deferredNextId++; - }; - - - /** - * @name $browser#defer.now - * - * @description - * Current milliseconds mock time. - */ - self.defer.now = 0; - - - self.defer.cancel = function(deferId) { - var fnIndex; - - angular.forEach(self.deferredFns, function(fn, index) { - if (fn.id === deferId) fnIndex = index; - }); - - if (angular.isDefined(fnIndex)) { - self.deferredFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - - /** - * @name $browser#defer.flush - * - * @description - * Flushes all pending requests and executes the defer callbacks. - * - * @param {number=} number of milliseconds to flush. See {@link #defer.now} - */ - self.defer.flush = function(delay) { - if (angular.isDefined(delay)) { - self.defer.now += delay; - } else { - if (self.deferredFns.length) { - self.defer.now = self.deferredFns[self.deferredFns.length - 1].time; - } else { - throw new Error('No deferred tasks to be flushed'); - } - } - - while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { - self.deferredFns.shift().fn(); - } - }; - - self.$$baseHref = '/'; - self.baseHref = function() { - return this.$$baseHref; - }; -}; -angular.mock.$Browser.prototype = { - -/** - * @name $browser#poll - * - * @description - * run all fns in pollFns - */ - poll: function poll() { - angular.forEach(this.pollFns, function(pollFn) { - pollFn(); - }); - }, - - url: function(url, replace, state) { - if (angular.isUndefined(state)) { - state = null; - } - if (url) { - this.$$url = url; - // Native pushState serializes & copies the object; simulate it. - this.$$state = angular.copy(state); - return this; - } - - return this.$$url; - }, - - state: function() { - return this.$$state; - }, - - notifyWhenNoOutstandingRequests: function(fn) { - fn(); - } -}; - - -/** - * @ngdoc provider - * @name $exceptionHandlerProvider - * - * @description - * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors - * passed to the `$exceptionHandler`. - */ - -/** - * @ngdoc service - * @name $exceptionHandler - * - * @description - * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed - * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration - * information. - * - * - * ```js - * describe('$exceptionHandlerProvider', function() { - * - * it('should capture log messages and exceptions', function() { - * - * module(function($exceptionHandlerProvider) { - * $exceptionHandlerProvider.mode('log'); - * }); - * - * inject(function($log, $exceptionHandler, $timeout) { - * $timeout(function() { $log.log(1); }); - * $timeout(function() { $log.log(2); throw 'banana peel'; }); - * $timeout(function() { $log.log(3); }); - * expect($exceptionHandler.errors).toEqual([]); - * expect($log.assertEmpty()); - * $timeout.flush(); - * expect($exceptionHandler.errors).toEqual(['banana peel']); - * expect($log.log.logs).toEqual([[1], [2], [3]]); - * }); - * }); - * }); - * ``` - */ - -angular.mock.$ExceptionHandlerProvider = function() { - var handler; - - /** - * @ngdoc method - * @name $exceptionHandlerProvider#mode - * - * @description - * Sets the logging mode. - * - * @param {string} mode Mode of operation, defaults to `rethrow`. - * - * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` - * mode stores an array of errors in `$exceptionHandler.errors`, to allow later - * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and - * {@link ngMock.$log#reset reset()} - * - `rethrow`: If any errors are passed to the handler in tests, it typically means that there - * is a bug in the application or test, so this mock will make these tests fail. - * For any implementations that expect exceptions to be thrown, the `rethrow` mode - * will also maintain a log of thrown errors. - */ - this.mode = function(mode) { - - switch (mode) { - case 'log': - case 'rethrow': - var errors = []; - handler = function(e) { - if (arguments.length == 1) { - errors.push(e); - } else { - errors.push([].slice.call(arguments, 0)); - } - if (mode === "rethrow") { - throw e; - } - }; - handler.errors = errors; - break; - default: - throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); - } - }; - - this.$get = function() { - return handler; - }; - - this.mode('rethrow'); -}; - - -/** - * @ngdoc service - * @name $log - * - * @description - * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays - * (one array per logging level). These arrays are exposed as `logs` property of each of the - * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`. - * - */ -angular.mock.$LogProvider = function() { - var debug = true; - - function concat(array1, array2, index) { - return array1.concat(Array.prototype.slice.call(array2, index)); - } - - this.debugEnabled = function(flag) { - if (angular.isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = function() { - var $log = { - log: function() { $log.log.logs.push(concat([], arguments, 0)); }, - warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, - info: function() { $log.info.logs.push(concat([], arguments, 0)); }, - error: function() { $log.error.logs.push(concat([], arguments, 0)); }, - debug: function() { - if (debug) { - $log.debug.logs.push(concat([], arguments, 0)); - } - } - }; - - /** - * @ngdoc method - * @name $log#reset - * - * @description - * Reset all of the logging arrays to empty. - */ - $log.reset = function() { - /** - * @ngdoc property - * @name $log#log.logs - * - * @description - * Array of messages logged using {@link ng.$log#log `log()`}. - * - * @example - * ```js - * $log.log('Some Log'); - * var first = $log.log.logs.unshift(); - * ``` - */ - $log.log.logs = []; - /** - * @ngdoc property - * @name $log#info.logs - * - * @description - * Array of messages logged using {@link ng.$log#info `info()`}. - * - * @example - * ```js - * $log.info('Some Info'); - * var first = $log.info.logs.unshift(); - * ``` - */ - $log.info.logs = []; - /** - * @ngdoc property - * @name $log#warn.logs - * - * @description - * Array of messages logged using {@link ng.$log#warn `warn()`}. - * - * @example - * ```js - * $log.warn('Some Warning'); - * var first = $log.warn.logs.unshift(); - * ``` - */ - $log.warn.logs = []; - /** - * @ngdoc property - * @name $log#error.logs - * - * @description - * Array of messages logged using {@link ng.$log#error `error()`}. - * - * @example - * ```js - * $log.error('Some Error'); - * var first = $log.error.logs.unshift(); - * ``` - */ - $log.error.logs = []; - /** - * @ngdoc property - * @name $log#debug.logs - * - * @description - * Array of messages logged using {@link ng.$log#debug `debug()`}. - * - * @example - * ```js - * $log.debug('Some Error'); - * var first = $log.debug.logs.unshift(); - * ``` - */ - $log.debug.logs = []; - }; - - /** - * @ngdoc method - * @name $log#assertEmpty - * - * @description - * Assert that all of the logging methods have no logged messages. If any messages are present, - * an exception is thrown. - */ - $log.assertEmpty = function() { - var errors = []; - angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { - angular.forEach($log[logLevel].logs, function(log) { - angular.forEach(log, function(logItem) { - errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + - (logItem.stack || '')); - }); - }); - }); - if (errors.length) { - errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " + - "an expected log message was not checked and removed:"); - errors.push(''); - throw new Error(errors.join('\n---------\n')); - } - }; - - $log.reset(); - return $log; - }; -}; - - -/** - * @ngdoc service - * @name $interval - * - * @description - * Mock implementation of the $interval service. - * - * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @param {...*=} Pass additional parameters to the executed function. - * @returns {promise} A promise which will be notified on each iteration. - */ -angular.mock.$IntervalProvider = function() { - this.$get = ['$browser', '$rootScope', '$q', '$$q', - function($browser, $rootScope, $q, $$q) { - var repeatFns = [], - nextRepeatId = 0, - now = 0; - - var $interval = function(fn, delay, count, invokeApply) { - var hasParams = arguments.length > 4, - args = hasParams ? Array.prototype.slice.call(arguments, 4) : [], - iteration = 0, - skipApply = (angular.isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise; - - count = (angular.isDefined(count)) ? count : 0; - promise.then(null, null, (!hasParams) ? fn : function() { - fn.apply(null, args); - }); - - promise.$$intervalId = nextRepeatId; - - function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - var fnIndex; - deferred.resolve(iteration); - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (angular.isDefined(fnIndex)) { - repeatFns.splice(fnIndex, 1); - } - } - - if (skipApply) { - $browser.defer.flush(); - } else { - $rootScope.$apply(); - } - } - - repeatFns.push({ - nextTime:(now + delay), - delay: delay, - fn: tick, - id: nextRepeatId, - deferred: deferred - }); - repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;}); - - nextRepeatId++; - return promise; - }; - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise A promise from calling the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully cancelled. - */ - $interval.cancel = function(promise) { - if (!promise) return false; - var fnIndex; - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (angular.isDefined(fnIndex)) { - repeatFns[fnIndex].deferred.reject('canceled'); - repeatFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - /** - * @ngdoc method - * @name $interval#flush - * @description - * - * Runs interval tasks scheduled to be run in the next `millis` milliseconds. - * - * @param {number=} millis maximum timeout amount to flush up until. - * - * @return {number} The amount of time moved forward. - */ - $interval.flush = function(millis) { - now += millis; - while (repeatFns.length && repeatFns[0].nextTime <= now) { - var task = repeatFns[0]; - task.fn(); - task.nextTime += task.delay; - repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;}); - } - return millis; - }; - - return $interval; - }]; -}; - - -/* jshint -W101 */ -/* The R_ISO8061_STR regex is never going to fit into the 100 char limit! - * This directive should go inside the anonymous function but a bug in JSHint means that it would - * not be enacted early enough to prevent the warning. - */ -var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; - -function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8061_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0; - if (match[9]) { - tzHour = toInt(match[9] + match[10]); - tzMin = toInt(match[9] + match[11]); - } - date.setUTCFullYear(toInt(match[1]), toInt(match[2]) - 1, toInt(match[3])); - date.setUTCHours(toInt(match[4] || 0) - tzHour, - toInt(match[5] || 0) - tzMin, - toInt(match[6] || 0), - toInt(match[7] || 0)); - return date; - } - return string; -} - -function toInt(str) { - return parseInt(str, 10); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while (num.length < digits) num = '0' + num; - if (trim) { - num = num.substr(num.length - digits); - } - return neg + num; -} - - -/** - * @ngdoc type - * @name angular.mock.TzDate - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`. - * - * Mock of the Date type which has its timezone specified via constructor arg. - * - * The main purpose is to create Date-like instances with timezone fixed to the specified timezone - * offset, so that we can test code that depends on local timezone settings without dependency on - * the time zone settings of the machine where the code is running. - * - * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored) - * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC* - * - * @example - * !!!! WARNING !!!!! - * This is not a complete Date object so only methods that were implemented can be called safely. - * To make matters worse, TzDate instances inherit stuff from Date via a prototype. - * - * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is - * incomplete we might be missing some non-standard methods. This can result in errors like: - * "Date.prototype.foo called on incompatible Object". - * - * ```js - * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z'); - * newYearInBratislava.getTimezoneOffset() => -60; - * newYearInBratislava.getFullYear() => 2010; - * newYearInBratislava.getMonth() => 0; - * newYearInBratislava.getDate() => 1; - * newYearInBratislava.getHours() => 0; - * newYearInBratislava.getMinutes() => 0; - * newYearInBratislava.getSeconds() => 0; - * ``` - * - */ -angular.mock.TzDate = function(offset, timestamp) { - var self = new Date(0); - if (angular.isString(timestamp)) { - var tsStr = timestamp; - - self.origDate = jsonStringToDate(timestamp); - - timestamp = self.origDate.getTime(); - if (isNaN(timestamp)) { - throw { - name: "Illegal Argument", - message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string" - }; - } - } else { - self.origDate = new Date(timestamp); - } - - var localOffset = new Date(timestamp).getTimezoneOffset(); - self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60; - self.date = new Date(timestamp + self.offsetDiff); - - self.getTime = function() { - return self.date.getTime() - self.offsetDiff; - }; - - self.toLocaleDateString = function() { - return self.date.toLocaleDateString(); - }; - - self.getFullYear = function() { - return self.date.getFullYear(); - }; - - self.getMonth = function() { - return self.date.getMonth(); - }; - - self.getDate = function() { - return self.date.getDate(); - }; - - self.getHours = function() { - return self.date.getHours(); - }; - - self.getMinutes = function() { - return self.date.getMinutes(); - }; - - self.getSeconds = function() { - return self.date.getSeconds(); - }; - - self.getMilliseconds = function() { - return self.date.getMilliseconds(); - }; - - self.getTimezoneOffset = function() { - return offset * 60; - }; - - self.getUTCFullYear = function() { - return self.origDate.getUTCFullYear(); - }; - - self.getUTCMonth = function() { - return self.origDate.getUTCMonth(); - }; - - self.getUTCDate = function() { - return self.origDate.getUTCDate(); - }; - - self.getUTCHours = function() { - return self.origDate.getUTCHours(); - }; - - self.getUTCMinutes = function() { - return self.origDate.getUTCMinutes(); - }; - - self.getUTCSeconds = function() { - return self.origDate.getUTCSeconds(); - }; - - self.getUTCMilliseconds = function() { - return self.origDate.getUTCMilliseconds(); - }; - - self.getDay = function() { - return self.date.getDay(); - }; - - // provide this method only on browsers that already have it - if (self.toISOString) { - self.toISOString = function() { - return padNumber(self.origDate.getUTCFullYear(), 4) + '-' + - padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' + - padNumber(self.origDate.getUTCDate(), 2) + 'T' + - padNumber(self.origDate.getUTCHours(), 2) + ':' + - padNumber(self.origDate.getUTCMinutes(), 2) + ':' + - padNumber(self.origDate.getUTCSeconds(), 2) + '.' + - padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'; - }; - } - - //hide all methods not implemented in this mock that the Date prototype exposes - var unimplementedMethods = ['getUTCDay', - 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', - 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', - 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', - 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString', - 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf']; - - angular.forEach(unimplementedMethods, function(methodName) { - self[methodName] = function() { - throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock"); - }; - }); - - return self; -}; - -//make "tzDateInstance instanceof Date" return true -angular.mock.TzDate.prototype = Date.prototype; -/* jshint +W101 */ - - -/** - * @ngdoc service - * @name $animate - * - * @description - * Mock implementation of the {@link ng.$animate `$animate`} service. Exposes two additional methods - * for testing animations. - */ -angular.mock.animate = angular.module('ngAnimateMock', ['ng']) - - .config(['$provide', function($provide) { - - $provide.factory('$$forceReflow', function() { - function reflowFn() { - reflowFn.totalReflows++; - } - reflowFn.totalReflows = 0; - return reflowFn; - }); - - $provide.factory('$$animateAsyncRun', function() { - var queue = []; - var queueFn = function() { - return function(fn) { - queue.push(fn); - }; - }; - queueFn.flush = function() { - if (queue.length === 0) return false; - - for (var i = 0; i < queue.length; i++) { - queue[i](); - } - queue = []; - - return true; - }; - return queueFn; - }); - - $provide.decorator('$$animateJs', ['$delegate', function($delegate) { - var runners = []; - - var animateJsConstructor = function() { - var animator = $delegate.apply($delegate, arguments); - // If no javascript animation is found, animator is undefined - if (animator) { - runners.push(animator); - } - return animator; - }; - - animateJsConstructor.$closeAndFlush = function() { - runners.forEach(function(runner) { - runner.end(); - }); - runners = []; - }; - - return animateJsConstructor; - }]); - - $provide.decorator('$animateCss', ['$delegate', function($delegate) { - var runners = []; - - var animateCssConstructor = function(element, options) { - var animator = $delegate(element, options); - runners.push(animator); - return animator; - }; - - animateCssConstructor.$closeAndFlush = function() { - runners.forEach(function(runner) { - runner.end(); - }); - runners = []; - }; - - return animateCssConstructor; - }]); - - $provide.decorator('$animate', ['$delegate', '$timeout', '$browser', '$$rAF', '$animateCss', '$$animateJs', - '$$forceReflow', '$$animateAsyncRun', '$rootScope', - function($delegate, $timeout, $browser, $$rAF, $animateCss, $$animateJs, - $$forceReflow, $$animateAsyncRun, $rootScope) { - var animate = { - queue: [], - cancel: $delegate.cancel, - on: $delegate.on, - off: $delegate.off, - pin: $delegate.pin, - get reflows() { - return $$forceReflow.totalReflows; - }, - enabled: $delegate.enabled, - /** - * @ngdoc method - * @name $animate#closeAndFlush - * @description - * - * This method will close all pending animations (both {@link ngAnimate#javascript-based-animations Javascript} - * and {@link ngAnimate.$animateCss CSS}) and it will also flush any remaining animation frames and/or callbacks. - */ - closeAndFlush: function() { - // we allow the flush command to swallow the errors - // because depending on whether CSS or JS animations are - // used, there may not be a RAF flush. The primary flush - // at the end of this function must throw an exception - // because it will track if there were pending animations - this.flush(true); - $animateCss.$closeAndFlush(); - $$animateJs.$closeAndFlush(); - this.flush(); - }, - /** - * @ngdoc method - * @name $animate#flush - * @description - * - * This method is used to flush the pending callbacks and animation frames to either start - * an animation or conclude an animation. Note that this will not actually close an - * actively running animation (see {@link ngMock.$animate#closeAndFlush `closeAndFlush()`} for that). - */ - flush: function(hideErrors) { - $rootScope.$digest(); - - var doNextRun, somethingFlushed = false; - do { - doNextRun = false; - - if ($$rAF.queue.length) { - $$rAF.flush(); - doNextRun = somethingFlushed = true; - } - - if ($$animateAsyncRun.flush()) { - doNextRun = somethingFlushed = true; - } - } while (doNextRun); - - if (!somethingFlushed && !hideErrors) { - throw new Error('No pending animations ready to be closed or flushed'); - } - - $rootScope.$digest(); - } - }; - - angular.forEach( - ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) { - animate[method] = function() { - animate.queue.push({ - event: method, - element: arguments[0], - options: arguments[arguments.length - 1], - args: arguments - }); - return $delegate[method].apply($delegate, arguments); - }; - }); - - return animate; - }]); - - }]); - - -/** - * @ngdoc function - * @name angular.mock.dump - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available function. - * - * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for - * debugging. - * - * This method is also available on window, where it can be used to display objects on debug - * console. - * - * @param {*} object - any object to turn into string. - * @return {string} a serialized string of the argument - */ -angular.mock.dump = function(object) { - return serialize(object); - - function serialize(object) { - var out; - - if (angular.isElement(object)) { - object = angular.element(object); - out = angular.element('
    '); - angular.forEach(object, function(element) { - out.append(angular.element(element).clone()); - }); - out = out.html(); - } else if (angular.isArray(object)) { - out = []; - angular.forEach(object, function(o) { - out.push(serialize(o)); - }); - out = '[ ' + out.join(', ') + ' ]'; - } else if (angular.isObject(object)) { - if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { - out = serializeScope(object); - } else if (object instanceof Error) { - out = object.stack || ('' + object.name + ': ' + object.message); - } else { - // TODO(i): this prevents methods being logged, - // we should have a better way to serialize objects - out = angular.toJson(object, true); - } - } else { - out = String(object); - } - - return out; - } - - function serializeScope(scope, offset) { - offset = offset || ' '; - var log = [offset + 'Scope(' + scope.$id + '): {']; - for (var key in scope) { - if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) { - log.push(' ' + key + ': ' + angular.toJson(scope[key])); - } - } - var child = scope.$$childHead; - while (child) { - log.push(serializeScope(child, offset + ' ')); - child = child.$$nextSibling; - } - log.push('}'); - return log.join('\n' + offset); - } -}; - -/** - * @ngdoc service - * @name $httpBackend - * @description - * Fake HTTP backend implementation suitable for unit testing applications that use the - * {@link ng.$http $http service}. - * - * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less - * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}. - * - * During unit testing, we want our unit tests to run quickly and have no external dependencies so - * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or - * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is - * to verify whether a certain request has been sent or not, or alternatively just let the - * application make requests, respond with pre-trained responses and assert that the end result is - * what we expect it to be. - * - * This mock implementation can be used to respond with static or dynamic responses via the - * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc). - * - * When an Angular application needs some data from a server, it calls the $http service, which - * sends the request to a real server using $httpBackend service. With dependency injection, it is - * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify - * the requests and respond with some testing data without sending a request to a real server. - * - * There are two ways to specify what test data should be returned as http responses by the mock - * backend when the code under test makes http requests: - * - * - `$httpBackend.expect` - specifies a request expectation - * - `$httpBackend.when` - specifies a backend definition - * - * - * # Request Expectations vs Backend Definitions - * - * Request expectations provide a way to make assertions about requests made by the application and - * to define responses for those requests. The test will fail if the expected requests are not made - * or they are made in the wrong order. - * - * Backend definitions allow you to define a fake backend for your application which doesn't assert - * if a particular request was made or not, it just returns a trained response if a request is made. - * The test will pass whether or not the request gets made during testing. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
    Request expectationsBackend definitions
    Syntax.expect(...).respond(...).when(...).respond(...)
    Typical usagestrict unit testsloose (black-box) unit testing
    Fulfills multiple requestsNOYES
    Order of requests mattersYESNO
    Request requiredYESNO
    Response requiredoptional (see below)YES
    - * - * In cases where both backend definitions and request expectations are specified during unit - * testing, the request expectations are evaluated first. - * - * If a request expectation has no response specified, the algorithm will search your backend - * definitions for an appropriate response. - * - * If a request didn't match any expectation or if the expectation doesn't have the response - * defined, the backend definitions are evaluated in sequential order to see if any of them match - * the request. The response from the first matched definition is returned. - * - * - * # Flushing HTTP requests - * - * The $httpBackend used in production always responds to requests asynchronously. If we preserved - * this behavior in unit testing, we'd have to create async unit tests, which are hard to write, - * to follow and to maintain. But neither can the testing mock respond synchronously; that would - * change the execution of the code under test. For this reason, the mock $httpBackend has a - * `flush()` method, which allows the test to explicitly flush pending requests. This preserves - * the async api of the backend, while allowing the test to execute synchronously. - * - * - * # Unit testing with mock $httpBackend - * The following code shows how to setup and use the mock backend when unit testing a controller. - * First we create the controller under test: - * - ```js - // The module code - angular - .module('MyApp', []) - .controller('MyController', MyController); - - // The controller code - function MyController($scope, $http) { - var authToken; - - $http.get('/auth.py').success(function(data, status, headers) { - authToken = headers('A-Token'); - $scope.user = data; - }); - - $scope.saveMessage = function(message) { - var headers = { 'Authorization': authToken }; - $scope.status = 'Saving...'; - - $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) { - $scope.status = ''; - }).error(function() { - $scope.status = 'Failed...'; - }); - }; - } - ``` - * - * Now we setup the mock backend and create the test specs: - * - ```js - // testing controller - describe('MyController', function() { - var $httpBackend, $rootScope, createController, authRequestHandler; - - // Set up the module - beforeEach(module('MyApp')); - - beforeEach(inject(function($injector) { - // Set up the mock http service responses - $httpBackend = $injector.get('$httpBackend'); - // backend definition common for all tests - authRequestHandler = $httpBackend.when('GET', '/auth.py') - .respond({userId: 'userX'}, {'A-Token': 'xxx'}); - - // Get hold of a scope (i.e. the root scope) - $rootScope = $injector.get('$rootScope'); - // The $controller service is used to create instances of controllers - var $controller = $injector.get('$controller'); - - createController = function() { - return $controller('MyController', {'$scope' : $rootScope }); - }; - })); - - - afterEach(function() { - $httpBackend.verifyNoOutstandingExpectation(); - $httpBackend.verifyNoOutstandingRequest(); - }); - - - it('should fetch authentication token', function() { - $httpBackend.expectGET('/auth.py'); - var controller = createController(); - $httpBackend.flush(); - }); - - - it('should fail authentication', function() { - - // Notice how you can change the response even after it was set - authRequestHandler.respond(401, ''); - - $httpBackend.expectGET('/auth.py'); - var controller = createController(); - $httpBackend.flush(); - expect($rootScope.status).toBe('Failed...'); - }); - - - it('should send msg to server', function() { - var controller = createController(); - $httpBackend.flush(); - - // now you don’t care about the authentication, but - // the controller will still send the request and - // $httpBackend will respond without you having to - // specify the expectation and response for this request - - $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, ''); - $rootScope.saveMessage('message content'); - expect($rootScope.status).toBe('Saving...'); - $httpBackend.flush(); - expect($rootScope.status).toBe(''); - }); - - - it('should send auth header', function() { - var controller = createController(); - $httpBackend.flush(); - - $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) { - // check if the header was sent, if it wasn't the expectation won't - // match the request and the test will fail - return headers['Authorization'] == 'xxx'; - }).respond(201, ''); - - $rootScope.saveMessage('whatever'); - $httpBackend.flush(); - }); - }); - ``` - */ -angular.mock.$HttpBackendProvider = function() { - this.$get = ['$rootScope', '$timeout', createHttpBackendMock]; -}; - -/** - * General factory function for $httpBackend mock. - * Returns instance for unit testing (when no arguments specified): - * - passing through is disabled - * - auto flushing is disabled - * - * Returns instance for e2e testing (when `$delegate` and `$browser` specified): - * - passing through (delegating request to real backend) is enabled - * - auto flushing is enabled - * - * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified) - * @param {Object=} $browser Auto-flushing enabled if specified - * @return {Object} Instance of $httpBackend mock - */ -function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) { - var definitions = [], - expectations = [], - responses = [], - responsesPush = angular.bind(responses, responses.push), - copy = angular.copy; - - function createResponse(status, data, headers, statusText) { - if (angular.isFunction(status)) return status; - - return function() { - return angular.isNumber(status) - ? [status, data, headers, statusText] - : [200, status, data, headers]; - }; - } - - // TODO(vojta): change params to: method, url, data, headers, callback - function $httpBackend(method, url, data, callback, headers, timeout, withCredentials, responseType) { - - var xhr = new MockXhr(), - expectation = expectations[0], - wasExpected = false; - - function prettyPrint(data) { - return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp) - ? data - : angular.toJson(data); - } - - function wrapResponse(wrapped) { - if (!$browser && timeout) { - timeout.then ? timeout.then(handleTimeout) : $timeout(handleTimeout, timeout); - } - - return handleResponse; - - function handleResponse() { - var response = wrapped.response(method, url, data, headers); - xhr.$$respHeaders = response[2]; - callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(), - copy(response[3] || '')); - } - - function handleTimeout() { - for (var i = 0, ii = responses.length; i < ii; i++) { - if (responses[i] === handleResponse) { - responses.splice(i, 1); - callback(-1, undefined, ''); - break; - } - } - } - } - - if (expectation && expectation.match(method, url)) { - if (!expectation.matchData(data)) { - throw new Error('Expected ' + expectation + ' with different data\n' + - 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); - } - - if (!expectation.matchHeaders(headers)) { - throw new Error('Expected ' + expectation + ' with different headers\n' + - 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + - prettyPrint(headers)); - } - - expectations.shift(); - - if (expectation.response) { - responses.push(wrapResponse(expectation)); - return; - } - wasExpected = true; - } - - var i = -1, definition; - while ((definition = definitions[++i])) { - if (definition.match(method, url, data, headers || {})) { - if (definition.response) { - // if $browser specified, we do auto flush all requests - ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); - } else if (definition.passThrough) { - $delegate(method, url, data, callback, headers, timeout, withCredentials, responseType); - } else throw new Error('No response defined !'); - return; - } - } - throw wasExpected ? - new Error('No response defined !') : - new Error('Unexpected request: ' + method + ' ' + url + '\n' + - (expectation ? 'Expected ' + expectation : 'No more request expected')); - } - - /** - * @ngdoc method - * @name $httpBackend#when - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). The respond method returns the - * `requestHandler` object for possible overrides. - */ - $httpBackend.when = function(method, url, data, headers) { - var definition = new MockHttpExpectation(method, url, data, headers), - chain = { - respond: function(status, data, headers, statusText) { - definition.passThrough = undefined; - definition.response = createResponse(status, data, headers, statusText); - return chain; - } - }; - - if ($browser) { - chain.passThrough = function() { - definition.response = undefined; - definition.passThrough = true; - return chain; - }; - } - - definitions.push(definition); - return chain; - }; - - /** - * @ngdoc method - * @name $httpBackend#whenGET - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPOST - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPUT - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - createShortMethods('when'); - - - /** - * @ngdoc method - * @name $httpBackend#expect - * @description - * Creates a new request expectation. - * - * @param {string} method HTTP method. - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current expectation. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). The respond method returns the - * `requestHandler` object for possible overrides. - */ - $httpBackend.expect = function(method, url, data, headers) { - var expectation = new MockHttpExpectation(method, url, data, headers), - chain = { - respond: function(status, data, headers, statusText) { - expectation.response = createResponse(status, data, headers, statusText); - return chain; - } - }; - - expectations.push(expectation); - return chain; - }; - - - /** - * @ngdoc method - * @name $httpBackend#expectGET - * @description - * Creates a new request expectation for GET requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. See #expect for more info. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectHEAD - * @description - * Creates a new request expectation for HEAD requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectDELETE - * @description - * Creates a new request expectation for DELETE requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPOST - * @description - * Creates a new request expectation for POST requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPUT - * @description - * Creates a new request expectation for PUT requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPATCH - * @description - * Creates a new request expectation for PATCH requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectJSONP - * @description - * Creates a new request expectation for JSONP requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives an url - * and returns true if the url matches the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - createShortMethods('expect'); - - - /** - * @ngdoc method - * @name $httpBackend#flush - * @description - * Flushes all pending requests using the trained responses. - * - * @param {number=} count Number of responses to flush (in the order they arrived). If undefined, - * all pending requests will be flushed. If there are no pending requests when the flush method - * is called an exception is thrown (as this typically a sign of programming error). - */ - $httpBackend.flush = function(count, digest) { - if (digest !== false) $rootScope.$digest(); - if (!responses.length) throw new Error('No pending request to flush !'); - - if (angular.isDefined(count) && count !== null) { - while (count--) { - if (!responses.length) throw new Error('No more pending request to flush !'); - responses.shift()(); - } - } else { - while (responses.length) { - responses.shift()(); - } - } - $httpBackend.verifyNoOutstandingExpectation(digest); - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingExpectation - * @description - * Verifies that all of the requests defined via the `expect` api were made. If any of the - * requests were not made, verifyNoOutstandingExpectation throws an exception. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingExpectation); - * ``` - */ - $httpBackend.verifyNoOutstandingExpectation = function(digest) { - if (digest !== false) $rootScope.$digest(); - if (expectations.length) { - throw new Error('Unsatisfied requests: ' + expectations.join(', ')); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingRequest - * @description - * Verifies that there are no outstanding requests that need to be flushed. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingRequest); - * ``` - */ - $httpBackend.verifyNoOutstandingRequest = function() { - if (responses.length) { - throw new Error('Unflushed requests: ' + responses.length); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#resetExpectations - * @description - * Resets all request expectations, but preserves all backend definitions. Typically, you would - * call resetExpectations during a multiple-phase test when you want to reuse the same instance of - * $httpBackend mock. - */ - $httpBackend.resetExpectations = function() { - expectations.length = 0; - responses.length = 0; - }; - - return $httpBackend; - - - function createShortMethods(prefix) { - angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) { - $httpBackend[prefix + method] = function(url, headers) { - return $httpBackend[prefix](method, url, undefined, headers); - }; - }); - - angular.forEach(['PUT', 'POST', 'PATCH'], function(method) { - $httpBackend[prefix + method] = function(url, data, headers) { - return $httpBackend[prefix](method, url, data, headers); - }; - }); - } -} - -function MockHttpExpectation(method, url, data, headers) { - - this.data = data; - this.headers = headers; - - this.match = function(m, u, d, h) { - if (method != m) return false; - if (!this.matchUrl(u)) return false; - if (angular.isDefined(d) && !this.matchData(d)) return false; - if (angular.isDefined(h) && !this.matchHeaders(h)) return false; - return true; - }; - - this.matchUrl = function(u) { - if (!url) return true; - if (angular.isFunction(url.test)) return url.test(u); - if (angular.isFunction(url)) return url(u); - return url == u; - }; - - this.matchHeaders = function(h) { - if (angular.isUndefined(headers)) return true; - if (angular.isFunction(headers)) return headers(h); - return angular.equals(headers, h); - }; - - this.matchData = function(d) { - if (angular.isUndefined(data)) return true; - if (data && angular.isFunction(data.test)) return data.test(d); - if (data && angular.isFunction(data)) return data(d); - if (data && !angular.isString(data)) { - return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d)); - } - return data == d; - }; - - this.toString = function() { - return method + ' ' + url; - }; -} - -function createMockXhr() { - return new MockXhr(); -} - -function MockXhr() { - - // hack for testing $http, $httpBackend - MockXhr.$$lastInstance = this; - - this.open = function(method, url, async) { - this.$$method = method; - this.$$url = url; - this.$$async = async; - this.$$reqHeaders = {}; - this.$$respHeaders = {}; - }; - - this.send = function(data) { - this.$$data = data; - }; - - this.setRequestHeader = function(key, value) { - this.$$reqHeaders[key] = value; - }; - - this.getResponseHeader = function(name) { - // the lookup must be case insensitive, - // that's why we try two quick lookups first and full scan last - var header = this.$$respHeaders[name]; - if (header) return header; - - name = angular.lowercase(name); - header = this.$$respHeaders[name]; - if (header) return header; - - header = undefined; - angular.forEach(this.$$respHeaders, function(headerVal, headerName) { - if (!header && angular.lowercase(headerName) == name) header = headerVal; - }); - return header; - }; - - this.getAllResponseHeaders = function() { - var lines = []; - - angular.forEach(this.$$respHeaders, function(value, key) { - lines.push(key + ': ' + value); - }); - return lines.join('\n'); - }; - - this.abort = angular.noop; -} - - -/** - * @ngdoc service - * @name $timeout - * @description - * - * This service is just a simple decorator for {@link ng.$timeout $timeout} service - * that adds a "flush" and "verifyNoPendingTasks" methods. - */ - -angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) { - - /** - * @ngdoc method - * @name $timeout#flush - * @description - * - * Flushes the queue of pending tasks. - * - * @param {number=} delay maximum timeout amount to flush up until - */ - $delegate.flush = function(delay) { - $browser.defer.flush(delay); - }; - - /** - * @ngdoc method - * @name $timeout#verifyNoPendingTasks - * @description - * - * Verifies that there are no pending tasks that need to be flushed. - */ - $delegate.verifyNoPendingTasks = function() { - if ($browser.deferredFns.length) { - throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + - formatPendingTasksAsString($browser.deferredFns)); - } - }; - - function formatPendingTasksAsString(tasks) { - var result = []; - angular.forEach(tasks, function(task) { - result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); - }); - - return result.join(', '); - } - - return $delegate; -}]; - -angular.mock.$RAFDecorator = ['$delegate', function($delegate) { - var rafFn = function(fn) { - var index = rafFn.queue.length; - rafFn.queue.push(fn); - return function() { - rafFn.queue.splice(index, 1); - }; - }; - - rafFn.queue = []; - rafFn.supported = $delegate.supported; - - rafFn.flush = function() { - if (rafFn.queue.length === 0) { - throw new Error('No rAF callbacks present'); - } - - var length = rafFn.queue.length; - for (var i = 0; i < length; i++) { - rafFn.queue[i](); - } - - rafFn.queue = rafFn.queue.slice(i); - }; - - return rafFn; -}]; - -/** - * - */ -angular.mock.$RootElementProvider = function() { - this.$get = function() { - return angular.element('
    '); - }; -}; - -/** - * @ngdoc service - * @name $controller - * @description - * A decorator for {@link ng.$controller} with additional `bindings` parameter, useful when testing - * controllers of directives that use {@link $compile#-bindtocontroller- `bindToController`}. - * - * - * ## Example - * - * ```js - * - * // Directive definition ... - * - * myMod.directive('myDirective', { - * controller: 'MyDirectiveController', - * bindToController: { - * name: '@' - * } - * }); - * - * - * // Controller definition ... - * - * myMod.controller('MyDirectiveController', ['$log', function($log) { - * $log.info(this.name); - * }]); - * - * - * // In a test ... - * - * describe('myDirectiveController', function() { - * it('should write the bound name to the log', inject(function($controller, $log) { - * var ctrl = $controller('MyDirectiveController', { /* no locals */ }, { name: 'Clark Kent' }); - * expect(ctrl.name).toEqual('Clark Kent'); - * expect($log.info.logs).toEqual(['Clark Kent']); - * })); - * }); - * - * ``` - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global - * `window` object (not recommended) - * - * The string can use the `controller as property` syntax, where the controller instance is published - * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this - * to work correctly. - * - * @param {Object} locals Injection locals for Controller. - * @param {Object=} bindings Properties to add to the controller before invoking the constructor. This is used - * to simulate the `bindToController` feature and simplify certain kinds of tests. - * @return {Object} Instance of given controller. - */ -angular.mock.$ControllerDecorator = ['$delegate', function($delegate) { - return function(expression, locals, later, ident) { - if (later && typeof later === 'object') { - var create = $delegate(expression, locals, true, ident); - angular.extend(create.instance, later); - return create(); - } - return $delegate(expression, locals, later, ident); - }; -}]; - - -/** - * @ngdoc module - * @name ngMock - * @packageName angular-mocks - * @description - * - * # ngMock - * - * The `ngMock` module provides support to inject and mock Angular services into unit tests. - * In addition, ngMock also extends various core ng services such that they can be - * inspected and controlled in a synchronous manner within test code. - * - * - *
    - * - */ -angular.module('ngMock', ['ng']).provider({ - $browser: angular.mock.$BrowserProvider, - $exceptionHandler: angular.mock.$ExceptionHandlerProvider, - $log: angular.mock.$LogProvider, - $interval: angular.mock.$IntervalProvider, - $httpBackend: angular.mock.$HttpBackendProvider, - $rootElement: angular.mock.$RootElementProvider -}).config(['$provide', function($provide) { - $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); - $provide.decorator('$$rAF', angular.mock.$RAFDecorator); - $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator); - $provide.decorator('$controller', angular.mock.$ControllerDecorator); -}]); - -/** - * @ngdoc module - * @name ngMockE2E - * @module ngMockE2E - * @packageName angular-mocks - * @description - * - * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing. - * Currently there is only one mock present in this module - - * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock. - */ -angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) { - $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); -}]); - -/** - * @ngdoc service - * @name $httpBackend - * @module ngMockE2E - * @description - * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of - * applications that use the {@link ng.$http $http service}. - * - * *Note*: For fake http backend implementation suitable for unit testing please see - * {@link ngMock.$httpBackend unit-testing $httpBackend mock}. - * - * This implementation can be used to respond with static or dynamic responses via the `when` api - * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the - * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch - * templates from a webserver). - * - * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application - * is being developed with the real backend api replaced with a mock, it is often desirable for - * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch - * templates or static files from the webserver). To configure the backend with this behavior - * use the `passThrough` request handler of `when` instead of `respond`. - * - * Additionally, we don't want to manually have to flush mocked out requests like we do during unit - * testing. For this reason the e2e $httpBackend flushes mocked out requests - * automatically, closely simulating the behavior of the XMLHttpRequest object. - * - * To setup the application to run with this http backend, you have to create a module that depends - * on the `ngMockE2E` and your application modules and defines the fake backend: - * - * ```js - * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']); - * myAppDev.run(function($httpBackend) { - * phones = [{name: 'phone1'}, {name: 'phone2'}]; - * - * // returns the current list of phones - * $httpBackend.whenGET('/phones').respond(phones); - * - * // adds a new phone to the phones array - * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { - * var phone = angular.fromJson(data); - * phones.push(phone); - * return [200, phone, {}]; - * }); - * $httpBackend.whenGET(/^\/templates\//).passThrough(); - * //... - * }); - * ``` - * - * Afterwards, bootstrap your app with this new module. - */ - -/** - * @ngdoc method - * @name $httpBackend#when - * @module ngMockE2E - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can return - * an array containing response status (number), response data (string), response headers - * (Object), and the text for the status (string). - * - passThrough – `{function()}` – Any request matching a backend definition with - * `passThrough` handler will be passed through to the real backend (an XHR request will be made - * to the server.) - * - Both methods return the `requestHandler` object for possible overrides. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenGET - * @module ngMockE2E - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @module ngMockE2E - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @module ngMockE2E - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPOST - * @module ngMockE2E - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPUT - * @module ngMockE2E - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPATCH - * @module ngMockE2E - * @description - * Creates a new backend definition for PATCH requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @module ngMockE2E - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives a url - * and returns true if the url matches the current definition. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ -angular.mock.e2e = {}; -angular.mock.e2e.$httpBackendDecorator = - ['$rootScope', '$timeout', '$delegate', '$browser', createHttpBackendMock]; - - -/** - * @ngdoc type - * @name $rootScope.Scope - * @module ngMock - * @description - * {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These - * methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when - * `ngMock` module is loaded. - * - * In addition to all the regular `Scope` methods, the following helper methods are available: - */ -angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) { - - var $rootScopePrototype = Object.getPrototypeOf($delegate); - - $rootScopePrototype.$countChildScopes = countChildScopes; - $rootScopePrototype.$countWatchers = countWatchers; - - return $delegate; - - // ------------------------------------------------------------------------------------------ // - - /** - * @ngdoc method - * @name $rootScope.Scope#$countChildScopes - * @module ngMock - * @description - * Counts all the direct and indirect child scopes of the current scope. - * - * The current scope is excluded from the count. The count includes all isolate child scopes. - * - * @returns {number} Total number of child scopes. - */ - function countChildScopes() { - // jshint validthis: true - var count = 0; // exclude the current scope - var pendingChildHeads = [this.$$childHead]; - var currentScope; - - while (pendingChildHeads.length) { - currentScope = pendingChildHeads.shift(); - - while (currentScope) { - count += 1; - pendingChildHeads.push(currentScope.$$childHead); - currentScope = currentScope.$$nextSibling; - } - } - - return count; - } - - - /** - * @ngdoc method - * @name $rootScope.Scope#$countWatchers - * @module ngMock - * @description - * Counts all the watchers of direct and indirect child scopes of the current scope. - * - * The watchers of the current scope are included in the count and so are all the watchers of - * isolate child scopes. - * - * @returns {number} Total number of watchers. - */ - function countWatchers() { - // jshint validthis: true - var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope - var pendingChildHeads = [this.$$childHead]; - var currentScope; - - while (pendingChildHeads.length) { - currentScope = pendingChildHeads.shift(); - - while (currentScope) { - count += currentScope.$$watchers ? currentScope.$$watchers.length : 0; - pendingChildHeads.push(currentScope.$$childHead); - currentScope = currentScope.$$nextSibling; - } - } - - return count; - } -}]; - - -if (window.jasmine || window.mocha) { - - var currentSpec = null, - annotatedFunctions = [], - isSpecRunning = function() { - return !!currentSpec; - }; - - angular.mock.$$annotate = angular.injector.$$annotate; - angular.injector.$$annotate = function(fn) { - if (typeof fn === 'function' && !fn.$inject) { - annotatedFunctions.push(fn); - } - return angular.mock.$$annotate.apply(this, arguments); - }; - - - (window.beforeEach || window.setup)(function() { - annotatedFunctions = []; - currentSpec = this; - }); - - (window.afterEach || window.teardown)(function() { - var injector = currentSpec.$injector; - - annotatedFunctions.forEach(function(fn) { - delete fn.$inject; - }); - - angular.forEach(currentSpec.$modules, function(module) { - if (module && module.$$hashKey) { - module.$$hashKey = undefined; - } - }); - - currentSpec.$injector = null; - currentSpec.$modules = null; - currentSpec = null; - - if (injector) { - injector.get('$rootElement').off(); - } - - // clean up jquery's fragment cache - angular.forEach(angular.element.fragments, function(val, key) { - delete angular.element.fragments[key]; - }); - - MockXhr.$$lastInstance = null; - - angular.forEach(angular.callbacks, function(val, key) { - delete angular.callbacks[key]; - }); - angular.callbacks.counter = 0; - }); - - /** - * @ngdoc function - * @name angular.mock.module - * @description - * - * *NOTE*: This function is also published on window for easy access.
    - * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha - * - * This function registers a module configuration code. It collects the configuration information - * which will be used when the injector is created by {@link angular.mock.inject inject}. - * - * See {@link angular.mock.inject inject} for usage example - * - * @param {...(string|Function|Object)} fns any number of modules which are represented as string - * aliases or as anonymous module initialization functions. The modules are used to - * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an - * object literal is passed each key-value pair will be registered on the module via - * {@link auto.$provide $provide}.value, the key being the string name (or token) to associate - * with the value on the injector. - */ - window.module = angular.mock.module = function() { - var moduleFns = Array.prototype.slice.call(arguments, 0); - return isSpecRunning() ? workFn() : workFn; - ///////////////////// - function workFn() { - if (currentSpec.$injector) { - throw new Error('Injector already created, can not register a module!'); - } else { - var modules = currentSpec.$modules || (currentSpec.$modules = []); - angular.forEach(moduleFns, function(module) { - if (angular.isObject(module) && !angular.isArray(module)) { - modules.push(function($provide) { - angular.forEach(module, function(value, key) { - $provide.value(key, value); - }); - }); - } else { - modules.push(module); - } - }); - } - } - }; - - /** - * @ngdoc function - * @name angular.mock.inject - * @description - * - * *NOTE*: This function is also published on window for easy access.
    - * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha - * - * The inject function wraps a function into an injectable function. The inject() creates new - * instance of {@link auto.$injector $injector} per test, which is then used for - * resolving references. - * - * - * ## Resolving References (Underscore Wrapping) - * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this - * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable - * that is declared in the scope of the `describe()` block. Since we would, most likely, want - * the variable to have the same name of the reference we have a problem, since the parameter - * to the `inject()` function would hide the outer variable. - * - * To help with this, the injected parameters can, optionally, be enclosed with underscores. - * These are ignored by the injector when the reference name is resolved. - * - * For example, the parameter `_myService_` would be resolved as the reference `myService`. - * Since it is available in the function body as _myService_, we can then assign it to a variable - * defined in an outer scope. - * - * ``` - * // Defined out reference variable outside - * var myService; - * - * // Wrap the parameter in underscores - * beforeEach( inject( function(_myService_){ - * myService = _myService_; - * })); - * - * // Use myService in a series of tests. - * it('makes use of myService', function() { - * myService.doStuff(); - * }); - * - * ``` - * - * See also {@link angular.mock.module angular.mock.module} - * - * ## Example - * Example of what a typical jasmine tests looks like with the inject method. - * ```js - * - * angular.module('myApplicationModule', []) - * .value('mode', 'app') - * .value('version', 'v1.0.1'); - * - * - * describe('MyApp', function() { - * - * // You need to load modules that you want to test, - * // it loads only the "ng" module by default. - * beforeEach(module('myApplicationModule')); - * - * - * // inject() is used to inject arguments of all given functions - * it('should provide a version', inject(function(mode, version) { - * expect(version).toEqual('v1.0.1'); - * expect(mode).toEqual('app'); - * })); - * - * - * // The inject and module method can also be used inside of the it or beforeEach - * it('should override a version and test the new version is injected', function() { - * // module() takes functions or strings (module aliases) - * module(function($provide) { - * $provide.value('version', 'overridden'); // override version here - * }); - * - * inject(function(version) { - * expect(version).toEqual('overridden'); - * }); - * }); - * }); - * - * ``` - * - * @param {...Function} fns any number of functions which will be injected using the injector. - */ - - - - var ErrorAddingDeclarationLocationStack = function(e, errorForStack) { - this.message = e.message; - this.name = e.name; - if (e.line) this.line = e.line; - if (e.sourceId) this.sourceId = e.sourceId; - if (e.stack && errorForStack) - this.stack = e.stack + '\n' + errorForStack.stack; - if (e.stackArray) this.stackArray = e.stackArray; - }; - ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString; - - window.inject = angular.mock.inject = function() { - var blockFns = Array.prototype.slice.call(arguments, 0); - var errorForStack = new Error('Declaration Location'); - // IE10+ and PhanthomJS do not set stack trace information, until the error is thrown - if (!errorForStack.stack) { - try { - throw errorForStack; - } catch (e) {} - } - return isSpecRunning() ? workFn.call(currentSpec) : workFn; - ///////////////////// - function workFn() { - var modules = currentSpec.$modules || []; - var strictDi = !!currentSpec.$injectorStrict; - modules.unshift('ngMock'); - modules.unshift('ng'); - var injector = currentSpec.$injector; - if (!injector) { - if (strictDi) { - // If strictDi is enabled, annotate the providerInjector blocks - angular.forEach(modules, function(moduleFn) { - if (typeof moduleFn === "function") { - angular.injector.$$annotate(moduleFn); - } - }); - } - injector = currentSpec.$injector = angular.injector(modules, strictDi); - currentSpec.$injectorStrict = strictDi; - } - for (var i = 0, ii = blockFns.length; i < ii; i++) { - if (currentSpec.$injectorStrict) { - // If the injector is strict / strictDi, and the spec wants to inject using automatic - // annotation, then annotate the function here. - injector.annotate(blockFns[i]); - } - try { - /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */ - injector.invoke(blockFns[i] || angular.noop, this); - /* jshint +W040 */ - } catch (e) { - if (e.stack && errorForStack) { - throw new ErrorAddingDeclarationLocationStack(e, errorForStack); - } - throw e; - } finally { - errorForStack = null; - } - } - } - }; - - - angular.mock.inject.strictDi = function(value) { - value = arguments.length ? !!value : true; - return isSpecRunning() ? workFn() : workFn; - - function workFn() { - if (value !== currentSpec.$injectorStrict) { - if (currentSpec.$injector) { - throw new Error('Injector already created, can not modify strict annotations'); - } else { - currentSpec.$injectorStrict = value; - } - } - } - }; -} - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.js deleted file mode 100644 index acada0c5..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.js +++ /dev/null @@ -1,694 +0,0 @@ -/** - * @license AngularJS v1.4.13 - * (c) 2010-2015 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -var $resourceMinErr = angular.$$minErr('$resource'); - -// Helper functions and regex to lookup a dotted path on an object -// stopping at undefined/null. The path must be composed of ASCII -// identifiers (just like $parse) -var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/; - -function isValidDottedPath(path) { - return (path != null && path !== '' && path !== 'hasOwnProperty' && - MEMBER_NAME_REGEX.test('.' + path)); -} - -function lookupDottedPath(obj, path) { - if (!isValidDottedPath(path)) { - throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path); - } - var keys = path.split('.'); - for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) { - var key = keys[i]; - obj = (obj !== null) ? obj[key] : undefined; - } - return obj; -} - -/** - * Create a shallow copy of an object and clear other fields from the destination - */ -function shallowClearAndCopy(src, dst) { - dst = dst || {}; - - angular.forEach(dst, function(value, key) { - delete dst[key]; - }); - - for (var key in src) { - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - -/** - * @ngdoc module - * @name ngResource - * @description - * - * # ngResource - * - * The `ngResource` module provides interaction support with RESTful services - * via the $resource service. - * - * - *
    - * - * See {@link ngResource.$resource `$resource`} for usage. - */ - -/** - * @ngdoc service - * @name $resource - * @requires $http - * - * @description - * A factory which creates a resource object that lets you interact with - * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. - * - * The returned resource object has action methods which provide high-level behaviors without - * the need to interact with the low level {@link ng.$http $http} service. - * - * Requires the {@link ngResource `ngResource`} module to be installed. - * - * By default, trailing slashes will be stripped from the calculated URLs, - * which can pose problems with server backends that do not expect that - * behavior. This can be disabled by configuring the `$resourceProvider` like - * this: - * - * ```js - app.config(['$resourceProvider', function($resourceProvider) { - // Don't strip trailing slashes from calculated URLs - $resourceProvider.defaults.stripTrailingSlashes = false; - }]); - * ``` - * - * @param {string} url A parameterized URL template with parameters prefixed by `:` as in - * `/user/:username`. If you are using a URL with a port number (e.g. - * `http://example.com:8080/api`), it will be respected. - * - * If you are using a url with a suffix, just add the suffix, like this: - * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')` - * or even `$resource('http://example.com/resource/:resource_id.:format')` - * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be - * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you - * can escape it with `/\.`. - * - * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in - * `actions` methods. If a parameter value is a function, it will be executed every time - * when a param value needs to be obtained for a request (unless the param was overridden). - * - * Each key value in the parameter object is first bound to url template if present and then any - * excess keys are appended to the url search query after the `?`. - * - * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in - * URL `/path/greet?salutation=Hello`. - * - * If the parameter value is prefixed with `@` then the value for that parameter will be extracted - * from the corresponding property on the `data` object (provided when calling an action method). For - * example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam` - * will be `data.someProp`. - * - * @param {Object.=} actions Hash with declaration of custom actions that should extend - * the default set of resource actions. The declaration should be created in the format of {@link - * ng.$http#usage $http.config}: - * - * {action1: {method:?, params:?, isArray:?, headers:?, ...}, - * action2: {method:?, params:?, isArray:?, headers:?, ...}, - * ...} - * - * Where: - * - * - **`action`** – {string} – The name of action. This name becomes the name of the method on - * your resource object. - * - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`, - * `DELETE`, `JSONP`, etc). - * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of - * the parameter value is a function, it will be executed every time when a param value needs to - * be obtained for a request (unless the param was overridden). - * - **`url`** – {string} – action specific `url` override. The url templating is supported just - * like for the resource-level urls. - * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, - * see `returns` section. - * - **`transformRequest`** – - * `{function(data, headersGetter)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * By default, transformRequest will contain one function that checks if the request data is - * an object and serializes to using `angular.toJson`. To prevent this behavior, set - * `transformRequest` to an empty array: `transformRequest: []` - * - **`transformResponse`** – - * `{function(data, headersGetter)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * By default, transformResponse will contain one function that checks if the response looks like - * a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set - * `transformResponse` to an empty array: `transformResponse: []` - * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **`timeout`** – `{number}` – timeout in milliseconds.
    - * **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are - * **not** supported in $resource, because the same value would be used for multiple requests. - * If you need support for cancellable $resource actions, you should upgrade to version 1.5 or - * higher. - * - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See - * [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5) - * for more information. - * - **`responseType`** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods - - * `response` and `responseError`. Both `response` and `responseError` interceptors get called - * with `http response` object. See {@link ng.$http $http interceptors}. - * - * @param {Object} options Hash with custom settings that should extend the - * default `$resourceProvider` behavior. The only supported option is - * - * Where: - * - * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing - * slashes from any calculated URL will be stripped. (Defaults to true.) - * - * @returns {Object} A resource "class" object with methods for the default set of resource actions - * optionally extended with custom `actions`. The default set contains these actions: - * ```js - * { 'get': {method:'GET'}, - * 'save': {method:'POST'}, - * 'query': {method:'GET', isArray:true}, - * 'remove': {method:'DELETE'}, - * 'delete': {method:'DELETE'} }; - * ``` - * - * Calling these methods invoke an {@link ng.$http} with the specified http method, - * destination and parameters. When the data is returned from the server then the object is an - * instance of the resource class. The actions `save`, `remove` and `delete` are available on it - * as methods with the `$` prefix. This allows you to easily perform CRUD operations (create, - * read, update, delete) on server-side data like this: - * ```js - * var User = $resource('/user/:userId', {userId:'@id'}); - * var user = User.get({userId:123}, function() { - * user.abc = true; - * user.$save(); - * }); - * ``` - * - * It is important to realize that invoking a $resource object method immediately returns an - * empty reference (object or array depending on `isArray`). Once the data is returned from the - * server the existing reference is populated with the actual data. This is a useful trick since - * usually the resource is assigned to a model which is then rendered by the view. Having an empty - * object results in no rendering, once the data arrives from the server then the object is - * populated with the data and the view automatically re-renders itself showing the new data. This - * means that in most cases one never has to write a callback function for the action methods. - * - * The action methods on the class object or instance object can be invoked with the following - * parameters: - * - * - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])` - * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])` - * - non-GET instance actions: `instance.$action([parameters], [success], [error])` - * - * - * Success callback is called with (value, responseHeaders) arguments, where the value is - * the populated resource instance or collection object. The error callback is called - * with (httpResponse) argument. - * - * Class actions return empty instance (with additional properties below). - * Instance actions return promise of the action. - * - * The Resource instances and collection have these additional properties: - * - * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this - * instance or collection. - * - * On success, the promise is resolved with the same resource instance or collection object, - * updated with data from server. This makes it easy to use in - * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view - * rendering until the resource(s) are loaded. - * - * On failure, the promise is rejected with the {@link ng.$http http response} object, without - * the `resource` property. - * - * If an interceptor object was provided, the promise will instead be resolved with the value - * returned by the interceptor. - * - * - `$resolved`: `true` after first server interaction is completed (either with success or - * rejection), `false` before that. Knowing if the Resource has been resolved is useful in - * data-binding. - * - * @example - * - * # Credit card resource - * - * ```js - // Define CreditCard class - var CreditCard = $resource('/user/:userId/card/:cardId', - {userId:123, cardId:'@id'}, { - charge: {method:'POST', params:{charge:true}} - }); - - // We can retrieve a collection from the server - var cards = CreditCard.query(function() { - // GET: /user/123/card - // server returns: [ {id:456, number:'1234', name:'Smith'} ]; - - var card = cards[0]; - // each item is an instance of CreditCard - expect(card instanceof CreditCard).toEqual(true); - card.name = "J. Smith"; - // non GET methods are mapped onto the instances - card.$save(); - // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'} - // server returns: {id:456, number:'1234', name: 'J. Smith'}; - - // our custom method is mapped as well. - card.$charge({amount:9.99}); - // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'} - }); - - // we can create an instance as well - var newCard = new CreditCard({number:'0123'}); - newCard.name = "Mike Smith"; - newCard.$save(); - // POST: /user/123/card {number:'0123', name:'Mike Smith'} - // server returns: {id:789, number:'0123', name: 'Mike Smith'}; - expect(newCard.id).toEqual(789); - * ``` - * - * The object returned from this function execution is a resource "class" which has "static" method - * for each action in the definition. - * - * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and - * `headers`. - * When the data is returned from the server then the object is an instance of the resource type and - * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD - * operations (create, read, update, delete) on server-side data. - - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(user) { - user.abc = true; - user.$save(); - }); - ``` - * - * It's worth noting that the success callback for `get`, `query` and other methods gets passed - * in the response that came from the server as well as $http header getter function, so one - * could rewrite the above example and get access to http headers as: - * - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(u, getResponseHeaders){ - u.abc = true; - u.$save(function(u, putResponseHeaders) { - //u => saved user object - //putResponseHeaders => $http header getter - }); - }); - ``` - * - * You can also access the raw `$http` promise via the `$promise` property on the object returned - * - ``` - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}) - .$promise.then(function(user) { - $scope.user = user; - }); - ``` - - * # Creating a custom 'PUT' request - * In this example we create a custom method on our resource to make a PUT request - * ```js - * var app = angular.module('app', ['ngResource', 'ngRoute']); - * - * // Some APIs expect a PUT request in the format URL/object/ID - * // Here we are creating an 'update' method - * app.factory('Notes', ['$resource', function($resource) { - * return $resource('/notes/:id', null, - * { - * 'update': { method:'PUT' } - * }); - * }]); - * - * // In our controller we get the ID from the URL using ngRoute and $routeParams - * // We pass in $routeParams and our Notes factory along with $scope - * app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes', - function($scope, $routeParams, Notes) { - * // First get a note object from the factory - * var note = Notes.get({ id:$routeParams.id }); - * $id = note.id; - * - * // Now call update passing in the ID first then the object you are updating - * Notes.update({ id:$id }, note); - * - * // This will PUT /notes/ID with the note object in the request payload - * }]); - * ``` - */ -angular.module('ngResource', ['ng']). - provider('$resource', function() { - var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^\/]*/; - var provider = this; - - this.defaults = { - // Strip slashes by default - stripTrailingSlashes: true, - - // Default actions configuration - actions: { - 'get': {method: 'GET'}, - 'save': {method: 'POST'}, - 'query': {method: 'GET', isArray: true}, - 'remove': {method: 'DELETE'}, - 'delete': {method: 'DELETE'} - } - }; - - this.$get = ['$http', '$log', '$q', function($http, $log, $q) { - - var noop = angular.noop, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy, - isFunction = angular.isFunction; - - /** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set - * (pchar) allowed in path segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); - } - - - /** - * This method is intended for encoding *key* or *value* parts of query component. We need a - * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't - * have to be encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); - } - - function Route(template, defaults) { - this.template = template; - this.defaults = extend({}, provider.defaults, defaults); - this.urlParams = {}; - } - - Route.prototype = { - setUrlParams: function(config, params, actionUrl) { - var self = this, - url = actionUrl || self.template, - val, - encodedVal, - protocolAndDomain = ''; - - var urlParams = self.urlParams = {}; - forEach(url.split(/\W/), function(param) { - if (param === 'hasOwnProperty') { - throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name."); - } - if (!(new RegExp("^\\d+$").test(param)) && param && - (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { - urlParams[param] = true; - } - }); - url = url.replace(/\\:/g, ':'); - url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) { - protocolAndDomain = match; - return ''; - }); - - params = params || {}; - forEach(self.urlParams, function(_, urlParam) { - val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; - if (angular.isDefined(val) && val !== null) { - encodedVal = encodeUriSegment(val); - url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) { - return encodedVal + p1; - }); - } else { - url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match, - leadingSlashes, tail) { - if (tail.charAt(0) == '/') { - return tail; - } else { - return leadingSlashes + tail; - } - }); - } - }); - - // strip trailing slashes and set the url (unless this behavior is specifically disabled) - if (self.defaults.stripTrailingSlashes) { - url = url.replace(/\/+$/, '') || '/'; - } - - // then replace collapse `/.` if found in the last URL path segment before the query - // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x` - url = url.replace(/\/\.(?=\w+($|\?))/, '.'); - // replace escaped `/\.` with `/.` - config.url = protocolAndDomain + url.replace(/\/\\\./, '/.'); - - - // set params - delegate param encoding to $http - forEach(params, function(value, key) { - if (!self.urlParams[key]) { - config.params = config.params || {}; - config.params[key] = value; - } - }); - } - }; - - - function resourceFactory(url, paramDefaults, actions, options) { - var route = new Route(url, options); - - actions = extend({}, provider.defaults.actions, actions); - - function extractParams(data, actionParams) { - var ids = {}; - actionParams = extend({}, paramDefaults, actionParams); - forEach(actionParams, function(value, key) { - if (isFunction(value)) { value = value(); } - ids[key] = value && value.charAt && value.charAt(0) == '@' ? - lookupDottedPath(data, value.substr(1)) : value; - }); - return ids; - } - - function defaultResponseInterceptor(response) { - return response.resource; - } - - function Resource(value) { - shallowClearAndCopy(value || {}, this); - } - - Resource.prototype.toJSON = function() { - var data = extend({}, this); - delete data.$promise; - delete data.$resolved; - return data; - }; - - forEach(actions, function(action, name) { - var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); - - Resource[name] = function(a1, a2, a3, a4) { - var params = {}, data, success, error; - - /* jshint -W086 */ /* (purposefully fall through case statements) */ - switch (arguments.length) { - case 4: - error = a4; - success = a3; - //fallthrough - case 3: - case 2: - if (isFunction(a2)) { - if (isFunction(a1)) { - success = a1; - error = a2; - break; - } - - success = a2; - error = a3; - //fallthrough - } else { - params = a1; - data = a2; - success = a3; - break; - } - case 1: - if (isFunction(a1)) success = a1; - else if (hasBody) data = a1; - else params = a1; - break; - case 0: break; - default: - throw $resourceMinErr('badargs', - "Expected up to 4 arguments [params, data, success, error], got {0} arguments", - arguments.length); - } - /* jshint +W086 */ /* (purposefully fall through case statements) */ - - var isInstanceCall = this instanceof Resource; - var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data)); - var httpConfig = {}; - var responseInterceptor = action.interceptor && action.interceptor.response || - defaultResponseInterceptor; - var responseErrorInterceptor = action.interceptor && action.interceptor.responseError || - undefined; - - forEach(action, function(value, key) { - switch (key) { - default: - httpConfig[key] = copy(value); - break; - case 'params': - case 'isArray': - case 'interceptor': - break; - case 'timeout': - if (value && !angular.isNumber(value)) { - $log.debug('ngResource:\n' + - ' Only numeric values are allowed as `timeout`.\n' + - ' Promises are not supported in $resource, because the same value would ' + - 'be used for multiple requests.\n' + - ' If you need support for cancellable $resource actions, you should ' + - 'upgrade to version 1.5 or higher.'); - } - break; - } - }); - - if (hasBody) httpConfig.data = data; - route.setUrlParams(httpConfig, - extend({}, extractParams(data, action.params || {}), params), - action.url); - - var promise = $http(httpConfig).then(function(response) { - var data = response.data, - promise = value.$promise; - - if (data) { - // Need to convert action.isArray to boolean in case it is undefined - // jshint -W018 - if (angular.isArray(data) !== (!!action.isArray)) { - throw $resourceMinErr('badcfg', - 'Error in resource configuration for action `{0}`. Expected response to ' + - 'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object', - angular.isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url); - } - // jshint +W018 - if (action.isArray) { - value.length = 0; - forEach(data, function(item) { - if (typeof item === "object") { - value.push(new Resource(item)); - } else { - // Valid JSON values may be string literals, and these should not be converted - // into objects. These items will not have access to the Resource prototype - // methods, but unfortunately there - value.push(item); - } - }); - } else { - shallowClearAndCopy(data, value); - value.$promise = promise; - } - } - - value.$resolved = true; - - response.resource = value; - - return response; - }, function(response) { - value.$resolved = true; - - (error || noop)(response); - - return $q.reject(response); - }); - - promise = promise.then( - function(response) { - var value = responseInterceptor(response); - (success || noop)(value, response.headers); - return value; - }, - responseErrorInterceptor); - - if (!isInstanceCall) { - // we are creating instance / collection - // - set the initial promise - // - return the instance / collection - value.$promise = promise; - value.$resolved = false; - - return value; - } - - // instance call - return promise; - }; - - - Resource.prototype['$' + name] = function(params, success, error) { - if (isFunction(params)) { - error = success; success = params; params = {}; - } - var result = Resource[name].call(this, params, this, success, error); - return result.$promise || result; - }; - }); - - Resource.bind = function(additionalParamDefaults) { - return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions); - }; - - return Resource; - } - - return resourceFactory; - }]; - }); - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.min.js deleted file mode 100644 index 02c135d5..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-resource.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(J,f,C){'use strict';function D(t,e){e=e||{};f.forEach(e,function(f,k){delete e[k]});for(var k in t)!t.hasOwnProperty(k)||"$"===k.charAt(0)&&"$"===k.charAt(1)||(e[k]=t[k]);return e}var y=f.$$minErr("$resource"),B=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;f.module("ngResource",["ng"]).provider("$resource",function(){var t=/^https?:\/\/[^\/]*/,e=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}}; -this.$get=["$http","$log","$q",function(k,F,G){function w(f,g){this.template=f;this.defaults=r({},e.defaults,g);this.urlParams={}}function z(l,g,s,h){function c(a,q){var c={};q=r({},g,q);u(q,function(b,q){x(b)&&(b=b());var m;if(b&&b.charAt&&"@"==b.charAt(0)){m=a;var d=b.substr(1);if(null==d||""===d||"hasOwnProperty"===d||!B.test("."+d))throw y("badmember",d);for(var d=d.split("."),n=0,g=d.length;n - */ - /* global -ngRouteModule */ -var ngRouteModule = angular.module('ngRoute', ['ng']). - provider('$route', $RouteProvider), - $routeMinErr = angular.$$minErr('ngRoute'); - -/** - * @ngdoc provider - * @name $routeProvider - * - * @description - * - * Used for configuring routes. - * - * ## Example - * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`. - * - * ## Dependencies - * Requires the {@link ngRoute `ngRoute`} module to be installed. - */ -function $RouteProvider() { - function inherit(parent, extra) { - return angular.extend(Object.create(parent), extra); - } - - var routes = {}; - - /** - * @ngdoc method - * @name $routeProvider#when - * - * @param {string} path Route path (matched against `$location.path`). If `$location.path` - * contains redundant trailing slash or is missing one, the route will still match and the - * `$location.path` will be updated to add or drop the trailing slash to exactly match the - * route definition. - * - * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up - * to the next slash are matched and stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain named groups starting with a colon and ending with a star: - * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain optional named groups with a question mark: e.g.`:name?`. - * - * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match - * `/color/brown/largecode/code/with/slashes/edit` and extract: - * - * * `color: brown` - * * `largecode: code/with/slashes`. - * - * - * @param {Object} route Mapping information to be assigned to `$route.current` on route - * match. - * - * Object properties: - * - * - `controller` – `{(string|function()=}` – Controller fn that should be associated with - * newly created scope or the name of a {@link angular.Module#controller registered - * controller} if passed as a string. - * - `controllerAs` – `{string=}` – An identifier name for a reference to the controller. - * If present, the controller will be published to scope under the `controllerAs` name. - * - `template` – `{string=|function()=}` – html template as a string or a function that - * returns an html template as a string which should be used by {@link - * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives. - * This property takes precedence over `templateUrl`. - * - * If `template` is a function, it will be called with the following parameters: - * - * - `{Array.}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html - * template that should be used by {@link ngRoute.directive:ngView ngView}. - * - * If `templateUrl` is a function, it will be called with the following parameters: - * - * - `{Array.}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * - `resolve` - `{Object.=}` - An optional map of dependencies which should - * be injected into the controller. If any of these dependencies are promises, the router - * will wait for them all to be resolved or one to be rejected before the controller is - * instantiated. - * If all the promises are resolved successfully, the values of the resolved promises are - * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is - * fired. If any of the promises are rejected the - * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. The map object - * is: - * - * - `key` – `{string}`: a name of a dependency to be injected into the controller. - * - `factory` - `{string|function}`: If `string` then it is an alias for a service. - * Otherwise if function, then it is {@link auto.$injector#invoke injected} - * and the return value is treated as the dependency. If the result is a promise, it is - * resolved before its value is injected into the controller. Be aware that - * `ngRoute.$routeParams` will still refer to the previous route within these resolve - * functions. Use `$route.current.params` to access the new route parameters, instead. - * - * - `redirectTo` – {(string|function())=} – value to update - * {@link ng.$location $location} path with and trigger route redirection. - * - * If `redirectTo` is a function, it will be called with the following parameters: - * - * - `{Object.}` - route parameters extracted from the current - * `$location.path()` by applying the current route templateUrl. - * - `{string}` - current `$location.path()` - * - `{Object}` - current `$location.search()` - * - * The custom `redirectTo` function is expected to return a string which will be used - * to update `$location.path()` and `$location.search()`. - * - * - `[reloadOnSearch=true]` - {boolean=} - reload route when only `$location.search()` - * or `$location.hash()` changes. - * - * If the option is set to `false` and url in the browser changes, then - * `$routeUpdate` event is broadcasted on the root scope. - * - * - `[caseInsensitiveMatch=false]` - {boolean=} - match routes without being case sensitive - * - * If the option is set to `true`, then the particular route can be matched without being - * case sensitive - * - * @returns {Object} self - * - * @description - * Adds a new route definition to the `$route` service. - */ - this.when = function(path, route) { - //copy original route object to preserve params inherited from proto chain - var routeCopy = angular.copy(route); - if (angular.isUndefined(routeCopy.reloadOnSearch)) { - routeCopy.reloadOnSearch = true; - } - if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) { - routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch; - } - routes[path] = angular.extend( - routeCopy, - path && pathRegExp(path, routeCopy) - ); - - // create redirection for trailing slashes - if (path) { - var redirectPath = (path[path.length - 1] == '/') - ? path.substr(0, path.length - 1) - : path + '/'; - - routes[redirectPath] = angular.extend( - {redirectTo: path}, - pathRegExp(redirectPath, routeCopy) - ); - } - - return this; - }; - - /** - * @ngdoc property - * @name $routeProvider#caseInsensitiveMatch - * @description - * - * A boolean property indicating if routes defined - * using this provider should be matched using a case insensitive - * algorithm. Defaults to `false`. - */ - this.caseInsensitiveMatch = false; - - /** - * @param path {string} path - * @param opts {Object} options - * @return {?Object} - * - * @description - * Normalizes the given path, returning a regular expression - * and the original path. - * - * Inspired by pathRexp in visionmedia/express/lib/utils.js. - */ - function pathRegExp(path, opts) { - var insensitive = opts.caseInsensitiveMatch, - ret = { - originalPath: path, - regexp: path - }, - keys = ret.keys = []; - - path = path - .replace(/([().])/g, '\\$1') - .replace(/(\/)?:(\w+)(\*\?|[\?\*])?/g, function(_, slash, key, option) { - var optional = (option === '?' || option === '*?') ? '?' : null; - var star = (option === '*' || option === '*?') ? '*' : null; - keys.push({ name: key, optional: !!optional }); - slash = slash || ''; - return '' - + (optional ? '' : slash) - + '(?:' - + (optional ? slash : '') - + (star && '(.+?)' || '([^/]+)') - + (optional || '') - + ')' - + (optional || ''); - }) - .replace(/([\/$\*])/g, '\\$1'); - - ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : ''); - return ret; - } - - /** - * @ngdoc method - * @name $routeProvider#otherwise - * - * @description - * Sets route definition that will be used on route change when no other route definition - * is matched. - * - * @param {Object|string} params Mapping information to be assigned to `$route.current`. - * If called with a string, the value maps to `redirectTo`. - * @returns {Object} self - */ - this.otherwise = function(params) { - if (typeof params === 'string') { - params = {redirectTo: params}; - } - this.when(null, params); - return this; - }; - - - this.$get = ['$rootScope', - '$location', - '$routeParams', - '$q', - '$injector', - '$templateRequest', - '$sce', - function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce) { - - /** - * @ngdoc service - * @name $route - * @requires $location - * @requires $routeParams - * - * @property {Object} current Reference to the current route definition. - * The route definition contains: - * - * - `controller`: The controller constructor as define in route definition. - * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for - * controller instantiation. The `locals` contain - * the resolved values of the `resolve` map. Additionally the `locals` also contain: - * - * - `$scope` - The current route scope. - * - `$template` - The current route template HTML. - * - * @property {Object} routes Object with all route configuration Objects as its properties. - * - * @description - * `$route` is used for deep-linking URLs to controllers and views (HTML partials). - * It watches `$location.url()` and tries to map the path to an existing route definition. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API. - * - * The `$route` service is typically used in conjunction with the - * {@link ngRoute.directive:ngView `ngView`} directive and the - * {@link ngRoute.$routeParams `$routeParams`} service. - * - * @example - * This example shows how changing the URL hash causes the `$route` to match a route against the - * URL, and the `ngView` pulls in the partial. - * - * - * - *
    - * Choose: - * Moby | - * Moby: Ch1 | - * Gatsby | - * Gatsby: Ch4 | - * Scarlet Letter
    - * - *
    - * - *
    - * - *
    $location.path() = {{$location.path()}}
    - *
    $route.current.templateUrl = {{$route.current.templateUrl}}
    - *
    $route.current.params = {{$route.current.params}}
    - *
    $route.current.scope.name = {{$route.current.scope.name}}
    - *
    $routeParams = {{$routeParams}}
    - *
    - *
    - * - * - * controller: {{name}}
    - * Book Id: {{params.bookId}}
    - *
    - * - * - * controller: {{name}}
    - * Book Id: {{params.bookId}}
    - * Chapter Id: {{params.chapterId}} - *
    - * - * - * angular.module('ngRouteExample', ['ngRoute']) - * - * .controller('MainController', function($scope, $route, $routeParams, $location) { - * $scope.$route = $route; - * $scope.$location = $location; - * $scope.$routeParams = $routeParams; - * }) - * - * .controller('BookController', function($scope, $routeParams) { - * $scope.name = "BookController"; - * $scope.params = $routeParams; - * }) - * - * .controller('ChapterController', function($scope, $routeParams) { - * $scope.name = "ChapterController"; - * $scope.params = $routeParams; - * }) - * - * .config(function($routeProvider, $locationProvider) { - * $routeProvider - * .when('/Book/:bookId', { - * templateUrl: 'book.html', - * controller: 'BookController', - * resolve: { - * // I will cause a 1 second delay - * delay: function($q, $timeout) { - * var delay = $q.defer(); - * $timeout(delay.resolve, 1000); - * return delay.promise; - * } - * } - * }) - * .when('/Book/:bookId/ch/:chapterId', { - * templateUrl: 'chapter.html', - * controller: 'ChapterController' - * }); - * - * // configure html5 to get links working on jsfiddle - * $locationProvider.html5Mode(true); - * }); - * - * - * - * - * it('should load and compile correct template', function() { - * element(by.linkText('Moby: Ch1')).click(); - * var content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller\: ChapterController/); - * expect(content).toMatch(/Book Id\: Moby/); - * expect(content).toMatch(/Chapter Id\: 1/); - * - * element(by.partialLinkText('Scarlet')).click(); - * - * content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller\: BookController/); - * expect(content).toMatch(/Book Id\: Scarlet/); - * }); - * - *
    - */ - - /** - * @ngdoc event - * @name $route#$routeChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a route change. At this point the route services starts - * resolving all of the dependencies needed for the route change to occur. - * Typically this involves fetching the view template as well as any dependencies - * defined in `resolve` route property. Once all of the dependencies are resolved - * `$routeChangeSuccess` is fired. - * - * The route change (and the `$location` change that triggered it) can be prevented - * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} - * for more details about event object. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} next Future route information. - * @param {Route} current Current route information. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a route change has happened successfully. - * The `resolve` dependencies are now available in the `current.locals` property. - * - * {@link ngRoute.directive:ngView ngView} listens for the directive - * to instantiate the controller and render the view. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} current Current route information. - * @param {Route|Undefined} previous Previous route information, or undefined if current is - * first route entered. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeError - * @eventType broadcast on root scope - * @description - * Broadcasted if any of the resolve promises are rejected. - * - * @param {Object} angularEvent Synthetic event object - * @param {Route} current Current route information. - * @param {Route} previous Previous route information. - * @param {Route} rejection Rejection of the promise. Usually the error of the failed promise. - */ - - /** - * @ngdoc event - * @name $route#$routeUpdate - * @eventType broadcast on root scope - * @description - * The `reloadOnSearch` property has been set to false, and we are reusing the same - * instance of the Controller. - * - * @param {Object} angularEvent Synthetic event object - * @param {Route} current Current/previous route information. - */ - - var forceReload = false, - preparedRoute, - preparedRouteIsUpdateOnly, - $route = { - routes: routes, - - /** - * @ngdoc method - * @name $route#reload - * - * @description - * Causes `$route` service to reload the current route even if - * {@link ng.$location $location} hasn't changed. - * - * As a result of that, {@link ngRoute.directive:ngView ngView} - * creates new scope and reinstantiates the controller. - */ - reload: function() { - forceReload = true; - - var fakeLocationEvent = { - defaultPrevented: false, - preventDefault: function fakePreventDefault() { - this.defaultPrevented = true; - forceReload = false; - } - }; - - $rootScope.$evalAsync(function() { - prepareRoute(fakeLocationEvent); - if (!fakeLocationEvent.defaultPrevented) commitRoute(); - }); - }, - - /** - * @ngdoc method - * @name $route#updateParams - * - * @description - * Causes `$route` service to update the current URL, replacing - * current route parameters with those specified in `newParams`. - * Provided property names that match the route's path segment - * definitions will be interpolated into the location's path, while - * remaining properties will be treated as query params. - * - * @param {!Object} newParams mapping of URL parameter names to values - */ - updateParams: function(newParams) { - if (this.current && this.current.$$route) { - newParams = angular.extend({}, this.current.params, newParams); - $location.path(interpolate(this.current.$$route.originalPath, newParams)); - // interpolate modifies newParams, only query params are left - $location.search(newParams); - } else { - throw $routeMinErr('norout', 'Tried updating route when with no current route'); - } - } - }; - - $rootScope.$on('$locationChangeStart', prepareRoute); - $rootScope.$on('$locationChangeSuccess', commitRoute); - - return $route; - - ///////////////////////////////////////////////////// - - /** - * @param on {string} current url - * @param route {Object} route regexp to match the url against - * @return {?Object} - * - * @description - * Check if the route matches the current url. - * - * Inspired by match in - * visionmedia/express/lib/router/router.js. - */ - function switchRouteMatcher(on, route) { - var keys = route.keys, - params = {}; - - if (!route.regexp) return null; - - var m = route.regexp.exec(on); - if (!m) return null; - - for (var i = 1, len = m.length; i < len; ++i) { - var key = keys[i - 1]; - - var val = m[i]; - - if (key && val) { - params[key.name] = val; - } - } - return params; - } - - function prepareRoute($locationEvent) { - var lastRoute = $route.current; - - preparedRoute = parseRoute(); - preparedRouteIsUpdateOnly = preparedRoute && lastRoute && preparedRoute.$$route === lastRoute.$$route - && angular.equals(preparedRoute.pathParams, lastRoute.pathParams) - && !preparedRoute.reloadOnSearch && !forceReload; - - if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) { - if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) { - if ($locationEvent) { - $locationEvent.preventDefault(); - } - } - } - } - - function commitRoute() { - var lastRoute = $route.current; - var nextRoute = preparedRoute; - - if (preparedRouteIsUpdateOnly) { - lastRoute.params = nextRoute.params; - angular.copy(lastRoute.params, $routeParams); - $rootScope.$broadcast('$routeUpdate', lastRoute); - } else if (nextRoute || lastRoute) { - forceReload = false; - $route.current = nextRoute; - if (nextRoute) { - if (nextRoute.redirectTo) { - if (angular.isString(nextRoute.redirectTo)) { - $location.path(interpolate(nextRoute.redirectTo, nextRoute.params)).search(nextRoute.params) - .replace(); - } else { - $location.url(nextRoute.redirectTo(nextRoute.pathParams, $location.path(), $location.search())) - .replace(); - } - } - } - - $q.when(nextRoute). - then(function() { - if (nextRoute) { - var locals = angular.extend({}, nextRoute.resolve), - template, templateUrl; - - angular.forEach(locals, function(value, key) { - locals[key] = angular.isString(value) ? - $injector.get(value) : $injector.invoke(value, null, null, key); - }); - - if (angular.isDefined(template = nextRoute.template)) { - if (angular.isFunction(template)) { - template = template(nextRoute.params); - } - } else if (angular.isDefined(templateUrl = nextRoute.templateUrl)) { - if (angular.isFunction(templateUrl)) { - templateUrl = templateUrl(nextRoute.params); - } - if (angular.isDefined(templateUrl)) { - nextRoute.loadedTemplateUrl = $sce.valueOf(templateUrl); - template = $templateRequest(templateUrl); - } - } - if (angular.isDefined(template)) { - locals['$template'] = template; - } - return $q.all(locals); - } - }). - then(function(locals) { - // after route change - if (nextRoute == $route.current) { - if (nextRoute) { - nextRoute.locals = locals; - angular.copy(nextRoute.params, $routeParams); - } - $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute); - } - }, function(error) { - if (nextRoute == $route.current) { - $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error); - } - }); - } - } - - - /** - * @returns {Object} the current active route, by matching it against the URL - */ - function parseRoute() { - // Match a route - var params, match; - angular.forEach(routes, function(route, path) { - if (!match && (params = switchRouteMatcher($location.path(), route))) { - match = inherit(route, { - params: angular.extend({}, $location.search(), params), - pathParams: params}); - match.$$route = route; - } - }); - // No route matched; fallback to "otherwise" route - return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); - } - - /** - * @returns {string} interpolation of the redirect path with the parameters - */ - function interpolate(string, params) { - var result = []; - angular.forEach((string || '').split(':'), function(segment, i) { - if (i === 0) { - result.push(segment); - } else { - var segmentMatch = segment.match(/(\w+)(?:[?*])?(.*)/); - var key = segmentMatch[1]; - result.push(params[key]); - result.push(segmentMatch[2] || ''); - delete params[key]; - } - }); - return result.join(''); - } - }]; -} - -ngRouteModule.provider('$routeParams', $RouteParamsProvider); - - -/** - * @ngdoc service - * @name $routeParams - * @requires $route - * - * @description - * The `$routeParams` service allows you to retrieve the current set of route parameters. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * The route parameters are a combination of {@link ng.$location `$location`}'s - * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}. - * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched. - * - * In case of parameter name collision, `path` params take precedence over `search` params. - * - * The service guarantees that the identity of the `$routeParams` object will remain unchanged - * (but its properties will likely change) even when a route change occurs. - * - * Note that the `$routeParams` are only updated *after* a route change completes successfully. - * This means that you cannot rely on `$routeParams` being correct in route resolve functions. - * Instead you can use `$route.current.params` to access the new route's parameters. - * - * @example - * ```js - * // Given: - * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby - * // Route: /Chapter/:chapterId/Section/:sectionId - * // - * // Then - * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'} - * ``` - */ -function $RouteParamsProvider() { - this.$get = function() { return {}; }; -} - -ngRouteModule.directive('ngView', ngViewFactory); -ngRouteModule.directive('ngView', ngViewFillContentFactory); - - -/** - * @ngdoc directive - * @name ngView - * @restrict ECA - * - * @description - * # Overview - * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by - * including the rendered template of the current route into the main layout (`index.html`) file. - * Every time the current route changes, the included view changes with it according to the - * configuration of the `$route` service. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * @param {string=} onload Expression to evaluate whenever the view updates. - * - * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the view is updated. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated - * as an expression yields a truthy value. - * @example - - -
    - Choose: - Moby | - Moby: Ch1 | - Gatsby | - Gatsby: Ch4 | - Scarlet Letter
    - -
    -
    -
    -
    - -
    $location.path() = {{main.$location.path()}}
    -
    $route.current.templateUrl = {{main.$route.current.templateUrl}}
    -
    $route.current.params = {{main.$route.current.params}}
    -
    $routeParams = {{main.$routeParams}}
    -
    -
    - - -
    - controller: {{book.name}}
    - Book Id: {{book.params.bookId}}
    -
    -
    - - -
    - controller: {{chapter.name}}
    - Book Id: {{chapter.params.bookId}}
    - Chapter Id: {{chapter.params.chapterId}} -
    -
    - - - .view-animate-container { - position:relative; - height:100px!important; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .view-animate { - padding:10px; - } - - .view-animate.ng-enter, .view-animate.ng-leave { - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - - display:block; - width:100%; - border-left:1px solid black; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - padding:10px; - } - - .view-animate.ng-enter { - left:100%; - } - .view-animate.ng-enter.ng-enter-active { - left:0; - } - .view-animate.ng-leave.ng-leave-active { - left:-100%; - } - - - - angular.module('ngViewExample', ['ngRoute', 'ngAnimate']) - .config(['$routeProvider', '$locationProvider', - function($routeProvider, $locationProvider) { - $routeProvider - .when('/Book/:bookId', { - templateUrl: 'book.html', - controller: 'BookCtrl', - controllerAs: 'book' - }) - .when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: 'ChapterCtrl', - controllerAs: 'chapter' - }); - - $locationProvider.html5Mode(true); - }]) - .controller('MainCtrl', ['$route', '$routeParams', '$location', - function($route, $routeParams, $location) { - this.$route = $route; - this.$location = $location; - this.$routeParams = $routeParams; - }]) - .controller('BookCtrl', ['$routeParams', function($routeParams) { - this.name = "BookCtrl"; - this.params = $routeParams; - }]) - .controller('ChapterCtrl', ['$routeParams', function($routeParams) { - this.name = "ChapterCtrl"; - this.params = $routeParams; - }]); - - - - - it('should load and compile correct template', function() { - element(by.linkText('Moby: Ch1')).click(); - var content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller\: ChapterCtrl/); - expect(content).toMatch(/Book Id\: Moby/); - expect(content).toMatch(/Chapter Id\: 1/); - - element(by.partialLinkText('Scarlet')).click(); - - content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller\: BookCtrl/); - expect(content).toMatch(/Book Id\: Scarlet/); - }); - -
    - */ - - -/** - * @ngdoc event - * @name ngView#$viewContentLoaded - * @eventType emit on the current ngView scope - * @description - * Emitted every time the ngView content is reloaded. - */ -ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate']; -function ngViewFactory($route, $anchorScroll, $animate) { - return { - restrict: 'ECA', - terminal: true, - priority: 400, - transclude: 'element', - link: function(scope, $element, attr, ctrl, $transclude) { - var currentScope, - currentElement, - previousLeaveAnimation, - autoScrollExp = attr.autoscroll, - onloadExp = attr.onload || ''; - - scope.$on('$routeChangeSuccess', update); - update(); - - function cleanupLastView() { - if (previousLeaveAnimation) { - $animate.cancel(previousLeaveAnimation); - previousLeaveAnimation = null; - } - - if (currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if (currentElement) { - previousLeaveAnimation = $animate.leave(currentElement); - previousLeaveAnimation.then(function() { - previousLeaveAnimation = null; - }); - currentElement = null; - } - } - - function update() { - var locals = $route.current && $route.current.locals, - template = locals && locals.$template; - - if (angular.isDefined(template)) { - var newScope = scope.$new(); - var current = $route.current; - - // Note: This will also link all children of ng-view that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-view on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - $animate.enter(clone, null, currentElement || $element).then(function onNgViewEnter() { - if (angular.isDefined(autoScrollExp) - && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }); - cleanupLastView(); - }); - - currentElement = clone; - currentScope = current.scope = newScope; - currentScope.$emit('$viewContentLoaded'); - currentScope.$eval(onloadExp); - } else { - cleanupLastView(); - } - } - } - }; -} - -// This directive is called during the $transclude call of the first `ngView` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngView -// is called. -ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route']; -function ngViewFillContentFactory($compile, $controller, $route) { - return { - restrict: 'ECA', - priority: -400, - link: function(scope, $element) { - var current = $route.current, - locals = current.locals; - - $element.html(locals.$template); - - var link = $compile($element.contents()); - - if (current.controller) { - locals.$scope = scope; - var controller = $controller(current.controller, locals); - if (current.controllerAs) { - scope[current.controllerAs] = controller; - } - $element.data('$ngControllerController', controller); - $element.children().data('$ngControllerController', controller); - } - - link(scope); - } - }; -} - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-route.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-route.min.js deleted file mode 100644 index 3ed2a101..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-route.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(q,d,C){'use strict';function w(s,k,h){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,f,b,c,y){function z(){l&&(h.cancel(l),l=null);m&&(m.$destroy(),m=null);n&&(l=h.leave(n),l.then(function(){l=null}),n=null)}function x(){var b=s.current&&s.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),c=s.current;n=y(b,function(b){h.enter(b,null,n||f).then(function(){!d.isDefined(u)||u&&!a.$eval(u)||k()});z()});m=c.scope=b;m.$emit("$viewContentLoaded"); -m.$eval(v)}else z()}var m,n,l,u=b.autoscroll,v=b.onload||"";a.$on("$routeChangeSuccess",x);x()}}}function A(d,k,h){return{restrict:"ECA",priority:-400,link:function(a,f){var b=h.current,c=b.locals;f.html(c.$template);var y=d(f.contents());b.controller&&(c.$scope=a,c=k(b.controller,c),b.controllerAs&&(a[b.controllerAs]=c),f.data("$ngControllerController",c),f.children().data("$ngControllerController",c));y(a)}}}q=d.module("ngRoute",["ng"]).provider("$route",function(){function s(a,f){return d.extend(Object.create(a), -f)}function k(a,d){var b=d.caseInsensitiveMatch,c={originalPath:a,regexp:a},h=c.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[\?\*])?/g,function(a,d,b,c){a="?"===c||"*?"===c?"?":null;c="*"===c||"*?"===c?"*":null;h.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");c.regexp=new RegExp("^"+a+"$",b?"i":"");return c}var h={};this.when=function(a,f){var b=d.copy(f);d.isUndefined(b.reloadOnSearch)&& -(b.reloadOnSearch=!0);d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);h[a]=d.extend(b,a&&k(a,b));if(a){var c="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";h[c]=d.extend({redirectTo:a},k(c,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,f,b,c,k,q,x){function m(b){var e= -t.current;(w=(p=l())&&e&&p.$$route===e.$$route&&d.equals(p.pathParams,e.pathParams)&&!p.reloadOnSearch&&!v)||!e&&!p||a.$broadcast("$routeChangeStart",p,e).defaultPrevented&&b&&b.preventDefault()}function n(){var g=t.current,e=p;if(w)g.params=e.params,d.copy(g.params,b),a.$broadcast("$routeUpdate",g);else if(e||g)v=!1,(t.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?f.path(u(e.redirectTo,e.params)).search(e.params).replace():f.url(e.redirectTo(e.pathParams,f.path(),f.search())).replace()),c.when(e).then(function(){if(e){var a= -d.extend({},e.resolve),b,g;d.forEach(a,function(b,e){a[e]=d.isString(b)?k.get(b):k.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(g=e.templateUrl)&&(d.isFunction(g)&&(g=g(e.params)),d.isDefined(g)&&(e.loadedTemplateUrl=x.valueOf(g),b=q(g)));d.isDefined(b)&&(a.$template=b);return c.all(a)}}).then(function(c){e==t.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",e,g))},function(b){e==t.current&&a.$broadcast("$routeChangeError", -e,g,b)})}function l(){var a,b;d.forEach(h,function(c,h){var r;if(r=!b){var k=f.path();r=c.keys;var m={};if(c.regexp)if(k=c.regexp.exec(k)){for(var l=1,n=k.length;l - * - * See {@link ngSanitize.$sanitize `$sanitize`} for usage. - */ - -/* - * HTML Parser By Misko Hevery (misko@hevery.com) - * based on: HTML Parser By John Resig (ejohn.org) - * Original code by Erik Arvidsson, Mozilla Public License - * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js - * - * // Use like so: - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - */ - - -/** - * @ngdoc service - * @name $sanitize - * @kind function - * - * @description - * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are - * then serialized back to properly escaped html string. This means that no unsafe input can make - * it into the returned string, however, since our parser is more strict than a typical browser - * parser, it's possible that some obscure input, which would be recognized as valid HTML by a - * browser, won't make it through the sanitizer. The input may also contain SVG markup. - * The whitelist is configured using the functions `aHrefSanitizationWhitelist` and - * `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}. - * - * @param {string} html HTML input. - * @returns {string} Sanitized HTML. - * - * @example - - - -
    - Snippet: - - - - - - - - - - - - - - - - - - - - - - - - - -
    DirectiveHowSourceRendered
    ng-bind-htmlAutomatically uses $sanitize
    <div ng-bind-html="snippet">
    </div>
    ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value -
    <div ng-bind-html="deliberatelyTrustDangerousSnippet()">
    -</div>
    -
    ng-bindAutomatically escapes
    <div ng-bind="snippet">
    </div>
    -
    -
    - - it('should sanitize the html snippet by default', function() { - expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). - toBe('

    an html\nclick here\nsnippet

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

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

    "); - }); - - it('should escape snippet without any filter', function() { - expect(element(by.css('#bind-default div')).getInnerHtml()). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new text'); - expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()). - toBe('new text'); - expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe( - 'new text'); - expect(element(by.css('#bind-default div')).getInnerHtml()).toBe( - "new <b onclick=\"alert(1)\">text</b>"); - }); -
    -
    - */ -function $SanitizeProvider() { - this.$get = ['$$sanitizeUri', function($$sanitizeUri) { - return function(html) { - var buf = []; - htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { - return !/^unsafe/.test($$sanitizeUri(uri, isImage)); - })); - return buf.join(''); - }; - }]; -} - -function sanitizeText(chars) { - var buf = []; - var writer = htmlSanitizeWriter(buf, angular.noop); - writer.chars(chars); - return buf.join(''); -} - - -// Regular Expressions for parsing tags and attributes -var START_TAG_REGEXP = - /^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/, - END_TAG_REGEXP = /^<\/\s*([\w:-]+)[^>]*>/, - ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, - BEGIN_TAG_REGEXP = /^/g, - DOCTYPE_REGEXP = /]*?)>/i, - CDATA_REGEXP = //g, - SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g, - // Match everything outside of normal chars and " (quote character) - NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; - - -// Good source of info about elements and attributes -// http://dev.w3.org/html5/spec/Overview.html#semantics -// http://simon.html5.org/html-elements - -// Safe Void Elements - HTML5 -// http://dev.w3.org/html5/spec/Overview.html#void-elements -var voidElements = makeMap("area,br,col,hr,img,wbr"); - -// Elements that you can, intentionally, leave open (and which close themselves) -// http://dev.w3.org/html5/spec/Overview.html#optional-tags -var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), - optionalEndTagInlineElements = makeMap("rp,rt"), - optionalEndTagElements = angular.extend({}, - optionalEndTagInlineElements, - optionalEndTagBlockElements); - -// Safe Block Elements - HTML5 -var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," + - "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," + - "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")); - -// Inline Elements - HTML5 -var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," + - "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," + - "samp,small,span,strike,strong,sub,sup,time,tt,u,var")); - -// SVG Elements -// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements -// Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted. -// They can potentially allow for arbitrary javascript to be executed. See #11290 -var svgElements = makeMap("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph," + - "hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline," + - "radialGradient,rect,stop,svg,switch,text,title,tspan,use"); - -// Special Elements (can contain anything) -var specialElements = makeMap("script,style"); - -var validElements = angular.extend({}, - voidElements, - blockElements, - inlineElements, - optionalEndTagElements, - svgElements); - -//Attributes that have href and hence need to be sanitized -var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href"); - -var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' + - 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' + - 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' + - 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' + - 'valign,value,vspace,width'); - -// SVG attributes (without "id" and "name" attributes) -// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes -var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' + - 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' + - 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' + - 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' + - 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' + - 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' + - 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' + - 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' + - 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' + - 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' + - 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' + - 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' + - 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' + - 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' + - 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true); - -var validAttrs = angular.extend({}, - uriAttrs, - svgAttrs, - htmlAttrs); - -function makeMap(str, lowercaseKeys) { - var obj = {}, items = str.split(','), i; - for (i = 0; i < items.length; i++) { - obj[lowercaseKeys ? angular.lowercase(items[i]) : items[i]] = true; - } - return obj; -} - - -/** - * @example - * htmlParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * @param {string} html string - * @param {object} handler - */ -function htmlParser(html, handler) { - if (typeof html !== 'string') { - if (html === null || typeof html === 'undefined') { - html = ''; - } else { - html = '' + html; - } - } - var index, chars, match, stack = [], last = html, text; - stack.last = function() { return stack[stack.length - 1]; }; - - while (html) { - text = ''; - chars = true; - - // Make sure we're not in a script or style element - if (!stack.last() || !specialElements[stack.last()]) { - - // Comment - if (html.indexOf("", index) === index) { - if (handler.comment) handler.comment(html.substring(4, index)); - html = html.substring(index + 3); - chars = false; - } - // DOCTYPE - } else if (DOCTYPE_REGEXP.test(html)) { - match = html.match(DOCTYPE_REGEXP); - - if (match) { - html = html.replace(match[0], ''); - chars = false; - } - // end tag - } else if (BEGING_END_TAGE_REGEXP.test(html)) { - match = html.match(END_TAG_REGEXP); - - if (match) { - html = html.substring(match[0].length); - match[0].replace(END_TAG_REGEXP, parseEndTag); - chars = false; - } - - // start tag - } else if (BEGIN_TAG_REGEXP.test(html)) { - match = html.match(START_TAG_REGEXP); - - if (match) { - // We only have a valid start-tag if there is a '>'. - if (match[4]) { - html = html.substring(match[0].length); - match[0].replace(START_TAG_REGEXP, parseStartTag); - } - chars = false; - } else { - // no ending tag found --- this piece should be encoded as an entity. - text += '<'; - html = html.substring(1); - } - } - - if (chars) { - index = html.indexOf("<"); - - text += index < 0 ? html : html.substring(0, index); - html = index < 0 ? "" : html.substring(index); - - if (handler.chars) handler.chars(decodeEntities(text)); - } - - } else { - // IE versions 9 and 10 do not understand the regex '[^]', so using a workaround with [\W\w]. - html = html.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), - function(all, text) { - text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1"); - - if (handler.chars) handler.chars(decodeEntities(text)); - - return ""; - }); - - parseEndTag("", stack.last()); - } - - if (html == last) { - throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " + - "of html: {0}", html); - } - last = html; - } - - // Clean up any remaining tags - parseEndTag(); - - function parseStartTag(tag, tagName, rest, unary) { - tagName = angular.lowercase(tagName); - if (blockElements[tagName]) { - while (stack.last() && inlineElements[stack.last()]) { - parseEndTag("", stack.last()); - } - } - - if (optionalEndTagElements[tagName] && stack.last() == tagName) { - parseEndTag("", tagName); - } - - unary = voidElements[tagName] || !!unary; - - if (!unary) { - stack.push(tagName); - } - - var attrs = {}; - - rest.replace(ATTR_REGEXP, - function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) { - var value = doubleQuotedValue - || singleQuotedValue - || unquotedValue - || ''; - - attrs[name] = decodeEntities(value); - }); - if (handler.start) handler.start(tagName, attrs, unary); - } - - function parseEndTag(tag, tagName) { - var pos = 0, i; - tagName = angular.lowercase(tagName); - if (tagName) { - // Find the closest opened tag of the same type - for (pos = stack.length - 1; pos >= 0; pos--) { - if (stack[pos] == tagName) break; - } - } - - if (pos >= 0) { - // Close all the open elements, up the stack - for (i = stack.length - 1; i >= pos; i--) - if (handler.end) handler.end(stack[i]); - - // Remove the open elements from the stack - stack.length = pos; - } - } -} - -var hiddenPre=document.createElement("pre"); -/** - * decodes all entities into regular string - * @param value - * @returns {string} A string with decoded entities. - */ -function decodeEntities(value) { - if (!value) { return ''; } - - hiddenPre.innerHTML = value.replace(//g, '>'); -} - -/** - * create an HTML/XML writer which writes to buffer - * @param {Array} buf use buf.jain('') to get out sanitized html string - * @returns {object} in the form of { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * } - */ -function htmlSanitizeWriter(buf, uriValidator) { - var ignore = false; - var out = angular.bind(buf, buf.push); - return { - start: function(tag, attrs, unary) { - tag = angular.lowercase(tag); - if (!ignore && specialElements[tag]) { - ignore = tag; - } - if (!ignore && validElements[tag] === true) { - out('<'); - out(tag); - angular.forEach(attrs, function(value, key) { - var lkey=angular.lowercase(key); - var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); - if (validAttrs[lkey] === true && - (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { - out(' '); - out(key); - out('="'); - out(encodeEntities(value)); - out('"'); - } - }); - out(unary ? '/>' : '>'); - } - }, - end: function(tag) { - tag = angular.lowercase(tag); - if (!ignore && validElements[tag] === true) { - out(''); - } - if (tag == ignore) { - ignore = false; - } - }, - chars: function(chars) { - if (!ignore) { - out(encodeEntities(chars)); - } - } - }; -} - - -// define ngSanitize module and register $sanitize service -angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider); - -/* global sanitizeText: false */ - -/** - * @ngdoc filter - * @name linky - * @kind function - * - * @description - * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and - * plain email address links. - * - * Requires the {@link ngSanitize `ngSanitize`} module to be installed. - * - * @param {string} text Input text. - * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in. - * @returns {string} Html-linkified text. - * - * @usage - - * - * @example - - - -
    - Snippet: - - - - - - - - - - - - - - - - - - - - - -
    FilterSourceRendered
    linky filter -
    <div ng-bind-html="snippet | linky">
    </div>
    -
    -
    -
    linky target -
    <div ng-bind-html="snippetWithTarget | linky:'_blank'">
    </div>
    -
    -
    -
    no filter
    <div ng-bind="snippet">
    </div>
    - - - it('should linkify the snippet with urls', function() { - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); - }); - - it('should not linkify snippet without the linky filter', function() { - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new http://link.'); - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('new http://link.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(1); - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()) - .toBe('new http://link.'); - }); - - it('should work with the target property', function() { - expect(element(by.id('linky-target')). - element(by.binding("snippetWithTarget | linky:'_blank'")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); - }); - - - */ -angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { - var LINKY_URL_REGEXP = - /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i, - MAILTO_REGEXP = /^mailto:/i; - - return function(text, target) { - if (!text) return text; - var match; - var raw = text; - var html = []; - var url; - var i; - while ((match = raw.match(LINKY_URL_REGEXP))) { - // We can not end in these as they are sometimes found at the end of the sentence - url = match[0]; - // if we did not match ftp/http/www/mailto then assume mailto - if (!match[2] && !match[4]) { - url = (match[3] ? 'http://' : 'mailto:') + url; - } - i = match.index; - addText(raw.substr(0, i)); - addLink(url, match[0].replace(MAILTO_REGEXP, '')); - raw = raw.substring(i + match[0].length); - } - addText(raw); - return $sanitize(html.join('')); - - function addText(text) { - if (!text) { - return; - } - html.push(sanitizeText(text)); - } - - function addLink(url, text) { - html.push(''); - addText(text); - html.push(''); - } - }; -}]); - - -})(window, window.angular); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js deleted file mode 100644 index 74fed67a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - AngularJS v1.4.13 - (c) 2010-2015 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(n,h,p){'use strict';function E(a){var f=[];r(f,h.noop).chars(a);return f.join("")}function g(a,f){var d={},c=a.split(","),b;for(b=0;b=c;d--)f.end&&f.end(e[d]);e.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,e=[],m=a,l;for(e.last=function(){return e[e.length-1]};a;){l="";k=!0;if(e.last()&&w[e.last()])a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+e.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");f.chars&&f.chars(q(b));return""}),c("",e.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e", -b)===b&&(f.comment&&f.comment(a.substring(4,b)),a=a.substring(b+3),k=!1);else if(x.test(a)){if(b=a.match(x))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(y))a=a.substring(b[0].length),b[0].replace(y,c),k=!1}else K.test(a)&&((b=a.match(z))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(z,d)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),f.chars&&f.chars(q(l)))}if(a==m)throw L("badparse",a);m=a}c()}function q(a){if(!a)return"";A.innerHTML= -a.replace(//g,">")}function r(a,f){var d=!1,c=h.bind(a,a.push);return{start:function(a,k,e){a=h.lowercase(a);!d&&w[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(k,function(d,e){var k=h.lowercase(e),g="img"===a&&"src"===k|| -"background"===k;!0!==O[k]||!0===D[k]&&!f(d,g)||(c(" "),c(e),c('="'),c(B(d)),c('"'))}),c(e?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c(""));a==d&&(d=!1)},chars:function(a){d||c(B(a))}}}var L=h.$$minErr("$sanitize"),z=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,y=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^]*?)>/i, -I=/"\u201d\u2019]/i,d=/^mailto:/i;return function(c,b){function k(a){a&&g.push(E(a))}function e(a, -c){g.push("');k(c);g.push("")}if(!c)return c;for(var m,l=c,g=[],n,p;m=l.match(f);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),e(n,m[0].replace(d,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular); -//# sourceMappingURL=angular-sanitize.min.js.map diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js.map b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js.map deleted file mode 100644 index 2f360f4d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-sanitize.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-sanitize.min.js", -"lineCount":15, -"mappings":"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", -"sources":["angular-sanitize.js"], -"names":["window","angular","undefined","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","makeMap","str","lowercaseKeys","obj","items","split","i","length","lowercase","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","text","stack.last","specialElements","RegExp","all","COMMENT_REGEXP","CDATA_REGEXP","indexOf","lastIndexOf","comment","substring","DOCTYPE_REGEXP","test","BEGING_END_TAGE_REGEXP","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","hiddenPre","innerHTML","textContent","encodeEntities","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","uriValidator","ignore","out","bind","validElements","forEach","key","lkey","isImage","validAttrs","uriAttrs","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","svgElements","htmlAttrs","svgAttrs","document","createElement","module","provider","$SanitizeProvider","$get","$$sanitizeUri","uri","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","target","addText","addLink","url","isDefined","raw","substr"] -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-scenario.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-scenario.js deleted file mode 100644 index f8300f2e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/external/angular-1.4.13/angular-scenario.js +++ /dev/null @@ -1,41266 +0,0 @@ -/*! - * jQuery JavaScript Library v2.1.1 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-05-01T17:11Z - */ - -(function( global, factory ) {'use strict'; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper window is present, - // execute the factory and get jQuery - // For environments that do not inherently posses a window with a document - // (such as Node.js), expose a jQuery-making factory as module.exports - // This accentuates the need for the creation of a real window - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -// - -var arr = []; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var support = {}; - - - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "2.1.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android < 4.0, iOS < 6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Support: Android<4.1 - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v1.10.19 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-04-18 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( documentIsHTML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document (jQuery #6963) - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); - - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return !!fn( div ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~b.sourceIndex || MAX_NEGATIVE ) - - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== strundefined && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, - doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsHTML = !isXML( doc ); - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent !== parent.top ) { - // IE11 does not have attachEvent, so all must suffer - if ( parent.addEventListener ) { - parent.addEventListener( "unload", function() { - setDocument(); - }, false ); - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", function() { - setDocument(); - }); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { - div.innerHTML = "
    "; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [ m ] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowclip^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( div.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return doc; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (oldCache = outerCache[ dir ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - outerCache[ dir ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context !== document && context; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is no seed and only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome<14 -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = ""; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = ""; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); -var rnotwhite = (/\S+/g); - - - -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); - - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - -function Data() { - // Support: Android < 4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Math.random(); -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android < 4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; -var data_priv = new Data(); - -var data_user = new Data(); - - - -/* - Implementation Summary - - 1. Enforce API surface and semantic compatibility with 1.9.x branch - 2. Improve the module's maintainability by reducing the storage - paths to a single mechanism. - 3. Use the same single mechanism to support "private" and "user" data. - 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) - 5. Avoid exposing implementation details on user objects (eg. expando properties) - 6. Provide a clear path for implementation upgrade to WeakMap in 2014 -*/ -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", key ] ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHidden = function( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); - }; - -var rcheckableType = (/^(?:checkbox|radio)$/i); - - - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // #11217 - WebKit loses check when the name is after the checked attribute - // Support: Windows Web Apps (WWA) - // `name` and `type` need .setAttribute for WWA - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 - // old WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Make sure textarea (and checkbox) defaultValue is properly cloned - // Support: IE9-IE11+ - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); -var strundefined = typeof undefined; - - - -support.focusinBubbles = "onfocusin" in window; - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome < 28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - // Support: Android < 4.0 - src.returnValue === false ? - returnTrue : - returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// Create "bubbling" focus and blur events -// Support: Firefox, Chrome, Safari -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); - - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE 9 - option: [ 1, "" ], - - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] - }; - -// Support: IE 9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute("type"); - } - - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Support: IE >= 9 -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Support: IE >= 9 - // Fix Cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Fixes #12346 - // Support: Webkit, IE - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "
    - - - - - - --> - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook-viz.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook-viz.html deleted file mode 100644 index 252b51ec..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook-viz.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - - -
    - - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook.htm b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook.htm deleted file mode 100644 index 71aca7ab..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebook.htm +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebookInputs.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebookInputs.html deleted file mode 100644 index 0969aa2f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/notebook-integration/scripts/view-models/notebookInputs.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - -
    -
    -
    -
    - -
    -
    - - - - - - -
    -
    -
    - -
    - -
    - -
    - -
    -
    - -
    - -
    - - - Remove -
    -
    -
    -
    - - - - -
    - -
    - Submit -
    - - - -
    - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js deleted file mode 100644 index 94169ff4..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-closed-cloop.js +++ /dev/null @@ -1,28 +0,0 @@ -appDS2.controller('adminClosedLoopController', ['$scope','$http','$q','$log',function ($scope, $http,$q, $log){ - $scope.camunda_cockpit_url = ''; - var deferred = $q.defer(); - $http({ - method: "GET", - url: "get_camunda_cockpit_link", - }).success( function(res) { - // if the returned response is error HTML page in string format - if(res.link_defined=='false'){ - $log.error('Retrieval of camunda cockpit link failed. Please make sure the variable "camunda_cockpit_url" is defined in the system.properties file.'); - deferred.reject(status); - } - // valid cockpit url - else if(res.camunda_cockpit_link!=null & res.camunda_cockpit_link!= '') { - $scope.camunda_cockpit_url = res.camunda_cockpit_link; - deferred.resolve(res); - // if the defined url is empty; - } else { - $log.error('Please ensure the variable "camunda_cockpit_url" is properly defined in system.properties file (i.e., neither null nor empty).'); - deferred.reject(status); - } - // API call fails - }).error( function(status) { - $log.error('get_camunda_cockpit_link RestAPI call failed.'); - deferred.reject(status); - }); - return deferred.promise; -}]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js deleted file mode 100644 index a8b89757..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js +++ /dev/null @@ -1,970 +0,0 @@ -appDS2.controller('adminController', function($scope, $http,AdminService, $modal, $routeParams, $rootScope){ - - $scope.totalPages = 5; - $scope.viewPerPage = 8; - $scope.searchString = ""; - $scope.currentPage = 1; - $scope.nextSort=""; - $scope.showLoader = false; - $scope.tableData=[]; - $scope.showLoader=false; - $scope.routeRoleId = $routeParams.roleId; - $scope.regions = []; - /*function*/ - $scope.getFunctionList = function(){ - $scope.tableData.length=0; - $scope.showLoader=true; - AdminService.getRoleFunctionList().then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.tableData =JSON.parse($scope.data.availableRoleFunctions); - },function(error){ - console.log("failed"); - }).finally(function() { - $scope.showLoader=false; // Always execute this on both error and success - }); - } - - $scope.getCacheRegionsList = function(){ - AdminService.getCacheRegions().then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.regions =$scope.data; - },function(error){ - console.log("failed"); - }); - } - - - $scope.delRoleFunc = function(roleData){ - AdminService.delRoleFunctionList(roleData).then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - $scope.successPopUp(); - $scope.getFunctionList(); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - - $scope.saveRoleFunction = function(roleData){ - AdminService.saveRoleFunctionList(roleData).then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - $scope.successPopUp(); - $scope.getFunctionList(); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - $scope.addRoleFunction = function(roleData){ - if(/[^a-zA-Z0-9\-\.\_]/.test(roleData.type)){ - errorMsg = 'Type can only contain alphanumeric characters, dots(.) and underscores(_)'; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return errorMsg; - } - } - }); - return; - } - if(roleData.action !== '*' && /[^a-zA-Z0-9\-\.\_]/.test(roleData.action)){ - errorMsg = 'Action can only contain alphanumeric characters, hyphens(-), dots(.) and underscores(_) and single asterisk character(*)'; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return errorMsg; - } - } - }); - return; - } - if(/[^a-zA-Z0-9\-\:\_\./*]/.test(roleData.code)){ - errorMsg = 'Code can only contain alphanumeric characters, hyphens(-), dots(.), colons(:), forwardSlash(/) , asterisk(*) and underscores(_)'; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return errorMsg; - } - } - }); - return; - } - if(/[^a-zA-Z0-9\-\_ \.]/.test(roleData.name)){ - errorMsg = 'Name can only contain alphanumeric characters, spaces, hyphens(-), dots(.) and underscores(_)'; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return errorMsg; - } - } - }); - return; - } - AdminService.addRoleFunctionList(roleData).then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - $scope.successPopUp(); - $scope.getFunctionList(); - }else if(status=='"code exists"'){ - $scope.errorPopUp('Code already exists'); - $scope.getFunctionList(); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - /*init*/ - $scope.getFunctionList(); - $scope.getCacheRegionsList(); - /*popup*/ - var ModalInstanceCtrl = function ($scope, $modalInstance, items, AdminService,$rootScope) { - $scope.roleFun=items; - $scope.msg=items; - - $scope.ngRepeatDemo = [ - {id: 'menuradiobutton1', value: 'menu', labelvalue: 'menu'}, - {id: 'urlradiobutton2', value: 'url', labelvalue: 'url'}, - {id: 'otherradiobutton3', value: 'other', labelvalue: 'other'} - ] - $scope.selectedvalueradioButtonGroup = { - type: 'menu' - } - $scope.roleFun = { - action: '*' - } - - $scope.selectedvalueradioButtonOther = { - type: '' - } - - // remove role function associated to a role on Role Edit page - $scope.roleFunRemoveRole = function (roleFunction) { - AdminService.removeRoleFunction(roleFunction, $routeParams.roleId).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.role){ - $rootScope.$broadcast('updateRoleFunctions',{data:message.role,removedRoleFunc: roleFunction.name}); - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - console.log("error"); - }); - } - - //role activation for selected child role - $scope.activateRoleChildConfirmPopUp = function (selected, availableRole) { - $scope.msg.roleFun = availableRole.name; - $scope.msg.selected = selected; - $scope.msg.availableRole = availableRole; - var toggleType = null; - if(selected) { - toggleType = "activate"; - } else { - toggleType = "inactivate"; - } - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return $scope.msg; - } - } - }); - } - - // confirm Child Role Add - $scope.confirmRoleChildAdd = function(selected,availableRole,id){ - AdminService.confirmRoleChildAdd(selected,availableRole,id).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.role){ - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - console.log("error"); - }); - } - - // confirm Child Role Remove - $scope.confirmRoleChildRemove = function(selected,availableRole,id){ - AdminService.confirmRoleChildRemove(selected,availableRole,id).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.role){ - //$rootScope.$broadcast('updateAvailbleRoles',{data:message.availableRoles}); - /*$modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - sizeClass: 'modal-small', - })*/ - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - console.log("error"); - }); - } - - //role activation for role function - $scope.activateRoleConfirmPopUp = function (selected, availableRole) { - $scope.msg.roleFun = availableRole.name; - $scope.msg.selected = selected; - $scope.msg.availableRole = availableRole; - var toggleType = null; - if(selected) { - toggleType = "activate"; - } else { - toggleType = "inactivate"; - } - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return $scope.msg; - } - } - }); - } - - // confirm Role Function Add - $scope.confirmRoleFunAdd = function(selected,availableRole,id){ - AdminService.confirmRoleFunAdd(selected,availableRole,id).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.role){ - $rootScope.$broadcast('updateRoleFunctions',{data:message.role}); - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - console.log("error"); - }); - } - - // confirm Role Function Remove - $scope.confirmRoleFunRemove = function(selected,availableRole,id){ - AdminService.confirmRoleFunRemove(selected,availableRole,id).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.role){ - $rootScope.$broadcast('updateRoleFunctions',{data:message.role}); - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - console.log("error"); - }); - } - - //role activation - $scope.roleActivate = function(selected,availableRole){ - AdminService.activateRole(selected,availableRole).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.availableRoles){ - $rootScope.$broadcast('updateAvailbleRoles',{data:message.availableRoles}); - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - console.log("error"); - }); - } - - //role deletion - $scope.delRole = function(roleData){ - AdminService.delRoleList(roleData).then(function(msg){ - var message = msg; - $scope.cancel(); - if(message.availableRoles){ - $rootScope.$broadcast('updateAvailbleRoles',{data:message.availableRoles}); - }else{ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }) - } - - },function(error){ - - }); - } - - $scope.save = function (data,type) { - if(type !== 'other'){ - data.type = type ; - } else{ - data.type = $scope.selectedvalueradioButtonOther.type ; - } - $modalInstance.close(data); - }; - - // Cancel for toggle switch on Role Fn - $scope.cancelRoleFunSwitch = function (msg) { - $scope.msg.availableRole.selected = !$scope.msg.availableRole.selected; - $modalInstance.dismiss('cancel'); - }; - - // Cancel for toggle switch on Role List - $scope.cancelRoleSwitch = function (msg) { - $scope.msg.availableRole.active = !$scope.msg.availableRole.active; - $modalInstance.dismiss('cancel'); - }; - - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - - $scope.deleteFun = function(data){ - $modalInstance.close(data); - } - }; - - $scope.successPopUp = function () { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return ''; - } - } - }); - }; - - $scope.successTestModelPopUp = function (response) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modalpopup.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-large', - resolve: { - items: function () { - var message = { - title: '', - text: response - }; - return message; - } - } - }); - }; - $scope.errorPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }); - }; - $scope.saveRoleFuncPopUp = function (availableRoleFunction) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return availableRoleFunction; - } - } - }); - - modalInstance.result.then(function (data) { - $scope.saveRoleFunction(data); - }); - } - - $scope.addRoleFuncPopUp = function (availableRoleFunction) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return availableRoleFunction; - } - } - }); - - modalInstance.result.then(function (data,type) { - $scope.addRoleFunction(data,type); - }); - } - - $scope.delRoleFuncConfirmPopUp = function (availableRoleFunction) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - title: '', - text: availableRoleFunction.name, - content: availableRoleFunction - }; - return message; - } - } - }); - - modalInstance.result.then(function (data) { - $scope.delRoleFunc(data.content); - }); - } - $scope.clearAllFuncPopUp = function () { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - } - } - }); - - modalInstance.result.then(function () { - $scope.clearAll(); - }); - } - - $scope.clearAll = function(){ - AdminService.clearAdminRegions().then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - $scope.successTestModelPopUp(''); - $scope.getCacheRegionsList(); - }else{ - $scope.errorPopUp(); - } - } - - },function(error){ - - }); - } - $scope.showRegionDetailsFuncPopUp = function (response) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/success_modalpopup.html', - controller: ModalInstanceCtrl, - resolve: { - items: function () { - var message = { - title: '', - text: response, - }; - return message; - } - } - }); - - modalInstance.result.then(function (response) { - $scope.showRegionDetails(response); - }); - } - - $scope.showRegionDetails = function(cacheName) { - AdminService.showRegionDetails(cacheName).then(function(res){ - - var message = res.data; - var msgParsed = JSON.stringify(message); - - var messaged = message.data; - var msgParsedd = JSON.stringify(messaged); - - if(message.data!=null && message.data!=''){ - var status = res.status; - - - if(status==200){ - - - - var htmlstring = message.data.toString(); - var htmlStrReplace = htmlstring.replace(/['"]+/g, ''); - var htmlStrReplaceSplit = htmlStrReplace.split('\n'); - var dataStr = htmlStrReplace.replace(/\\n/g, "\n"); - $scope.successTestModelPopUp(dataStr); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - - $scope.clearRegionFuncPopUp = function (cacheName) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - title: '', - text: cacheName - }; - return message; - } - } - }); - - modalInstance.result.then(function (cacheName) { - $scope.clearRegionFunction(cacheName); - }); - } - - $scope.clearRegionFunction = function(cacheName){ - AdminService.clearRegionFunction(cacheName).then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - $scope.successPopUp(); - $scope.getCacheRegionsList()(); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - - $scope.clearItemFuncPopUp = function (cacheName, key) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - title: '', - text: cacheName - }; - return message; - } - } - }); - - modalInstance.result.then(function (cacheName, key) { - $scope.clearItemFunction(cacheName, key); - }); - } - - $scope.clearItemFunction = function(cacheName, key){ - AdminService.clearItemnFunction(cacheName, key).then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - $scope.successPopUp(); - $scope.getCacheRegionsList()(); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - - - - $scope.showItemDetails = function(cacheName, key){ - AdminService.showItemDetails(cacheName, key).then(function(msg){ - var message = msg; - if(message.data!=null && message.data!=''){ - var status = message.data; - if(status=='"success"'){ - - $scope.successPopUp(); - $scope.getCacheRegionsList()(); - }else{ - $scope.errorPopUp(''); - } - } - - },function(error){ - - }); - } - - - //role deletion pop up - $scope.delRoleConfirmPopUp = function (availableRole) { - - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - availableRole:availableRole, - roleName: availableRole.name - }; - return message; - } - } - }); - } - - // role activation - $scope.activateRoleConfirmPopUp = function (selected, availableRole) { - var toggleType = null; - if(selected) { - toggleType = "activate"; - } else { - toggleType = "inactivate"; - } - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - text: toggleType, - selected:selected, - availableRole:availableRole, - roleName:availableRole.name - }; - return message; - } - } - }); - } - - $scope.roleFnInit = function(){ - $scope.showLoader=true; - AdminService.getRole($routeParams.roleId).then(function(data){ - - var j = data; - $scope.data = JSON.parse(j.data); - $scope.role =JSON.parse($scope.data.role); - - $scope.ociavailableRoleFunctions =JSON.parse($scope.data.availableRoleFunctions); - $scope.availableRoleFunctions=[]; - - if($scope.ociavailableRoleFunctions) - angular.forEach($scope.ociavailableRoleFunctions, function(a,i){ - var availableRoleFunction = a; - availableRoleFunction.selected = false; - angular.forEach($scope.role.roleFunctions, function(b,j){ - if(a.code === b.code) { - availableRoleFunction.selected = true; - } - }); - $scope.availableRoleFunctions.push(availableRoleFunction); - }); - - - $scope.ociavailableRoles=JSON.parse($scope.data.availableRoles); - $scope.availableRoles=[]; - - },function(error){ - console.log("roleControllerDS2 failed: " + error); - // reloadPageOnce(); - }).finally(function() { - $scope.showLoader=false; // Always execute this on both error and success - }); - } - - // updating roles on role list page after deletion of a role - $rootScope.$on('updateAvailbleRoles', function(e,d){ - $scope.ociavailableRoles = d.data; - }) - - // updating role functions on roles page after deletion of a role function - $rootScope.$on('updateRoleFunctions',function(e,d){ - $scope.role = d.data; - if (typeof d.removedRoleFunc != 'undefined' && d.removedRoleFunc!=''){ - for(var i=0;i<$scope.ociavailableRoleFunctions.length;i++){ - if($scope.ociavailableRoleFunctions[i].name==d.removedRoleFunc) - $scope.ociavailableRoleFunctions[i].selected=false; - } - } - }) - - $scope.roleFnInit(); - $scope.updateRoleFunction = function(){ - $scope.role.roleFunctions=[]; - for(var i=0;i<$scope.ociavailableRoleFunctions.length;i++){ - if($scope.ociavailableRoleFunctions[i].selected) - $scope.role.roleFunctions.push($scope.ociavailableRoleFunctions[i]); - } - } - $scope.saveRole = function() { - var errorMsg; - $scope.showLoader=true; - if($scope.role.id == null || $scope.role.id == undefined ){ - $scope.role = { - 'id':null, - 'created':null, - 'modified':null, - 'createdId':null, - 'modifiedId':null, - 'rowNum':null, - 'auditUserId':null, - 'auditTrail':null, - 'name':$scope.role.name, - 'active':false, - 'priority':$scope.role.priority, - 'roleFunctions':null, - 'childRoles':null, - 'toggleActiveAltText':"Click to Activate Role ", - 'toggleActiveImage':" / static fusion images inactive.png ", - 'editUrl':" role.htm ? role_id = null", - }; - } - // Validate non-empty priority as integer - if ($scope.role.priority && $scope.role.priority != '' && isNaN(parseInt($scope.role.priority))) { - errorMsg = 'Priority must be an integer.'; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return errorMsg; - } - } - }); - return; - } - for (x in $scope.availableRoles){ - if ($scope.availableRoles[x].name==$scope.role.name){ - errorMsg = 'Role already exists.'; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return errorMsg; - } - } - }); - return; - } - } - if(!errorMsg){ - var postData={ - role: $scope.role, - childRoles: $scope.role.childRoles, - roleFunctions : $scope.role.roleFunctions - }; - AdminService.saveRole(postData, $routeParams.roleId).then(function(msg){ - if(msg.role){ - sessionStorage.setItem('addCall', true); - location.href='admin#/role/'+msg.role.id; - $scope.availableRoles.push(msg); - $scope.routeRoleId = msg.role.id; - $rootScope.$broadcast('updateAvailbleRoles',{data:$scope.availableRoles}); - //saving the addCall variable in sessionStorage to change the url from AddRole to Edit Role on success of Save and displaying the success pop up - if(sessionStorage.addCall){ - $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - sizeClass: 'modal-small' - }); - sessionStorage.removeItem('addCall'); - } - } else{ - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - msg = 'Error saving Role. Please retry'; - return msg; - } - } - }); - } - },function(error){ - console.log("error msg"); - }).finally(function() { - $scope.showLoader=false; // Always execute this on both error and success - }); - - } - } - - $scope.addNewRoleFunctionModalPopup = function(data, role,info) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-large', - resolve: { - items: function () { - var message = { - role:role, - roleId:info.id, - availableRoleFunctions:$scope.ociavailableRoleFunctions - }; - return message; - } - } - }); - modalInstance.result.finally(function () { - $scope.updateRoleFunction(); - }); - } - - $scope.addNewChildRoleFunctionModalPopup = function(data, role,info) { - data = $scope.role; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-large', - resolve: { - items: function () { - var message = { - roleChildFunctions:$scope.ociavailableRoles, - role:role, - roleId:info.id - }; - return message; - } - } - }); - modalInstance.result.finally(function () { - alert(); - }); - } - - // remove role function associated to a role on Role Edit page - $scope.removeRoleFunction= function(roleFunction){ - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - roleFunction:roleFunction - }; - return message; - } - } - }); - } - -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js deleted file mode 100644 index 00cd92d7..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-menu-edit.js +++ /dev/null @@ -1,184 +0,0 @@ -appDS2.controller('AdminMenuEditController', function ($scope, AdminMenuService, $modal, $route,AdminService){ - - $scope.showInput = true; - $scope.totalPages1 = 5; - $scope.viewPerPage1 = 8; - $scope.currentPage1 = 1; - $scope.showLoader = false; - $scope.firstPlay = true; - $scope.tableFnMenuItems = []; - $scope.$watch('viewPerPage1', function(val) { - $scope.showLoader = true; - AdminMenuService.getFnMenuItems($scope.currentPage1, val).then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.fnMenuItems = $scope.data.fnMenuItems; - var totalItems = $scope.fnMenuItems.length; - $scope.totalPages1 = Math.ceil(totalItems / $scope.viewPerPage1); - for (x in $scope.fnMenuItems) { - if ($scope.fnMenuItems[x].active_yn=='Y') - $scope.fnMenuItems[x].active_yn=true; - else - $scope.fnMenuItems[x].active_yn=false; - } - $scope.showLoader = false; - $scope.currentPage1=1; - var endIndex = 1 * $scope.viewPerPage1; - var startIndex = endIndex - $scope.viewPerPage1; - $scope.tableFnMenuItems = $scope.fnMenuItems.slice(startIndex, endIndex); - },function(error){ - console.log('AdminMenuEditControler::$watch viewPerPage1 failed', error); - reloadPageOnce(); - }); - - }); - - $scope.customHandler1 = function(num) { - $scope.currentPage1=num; - var endIndex = num * $scope.viewPerPage1; - var startIndex = endIndex - $scope.viewPerPage1; - $scope.tableFnMenuItems = $scope.fnMenuItems.slice(startIndex, endIndex); - }; - - $scope.init = function () { - $scope.numberOfRecordstoShow=20; - AdminMenuService.getFnMenuItems().then(function(data){ - var j = data; - $scope.data =JSON.parse(j.data); - $scope.fnMenuItems =($scope.data.fnMenuItems); - },function(error){ - console.log('AdminMenuEditControler::init failed'); - }); - } - - $scope.init(); - - $scope.mapActiveStatus = function(status){ - if(status) - status = "Y"; - else - status = "N"; - return status; - }; - - $scope.addNewFnMenuItemModalPopup = function(availableFnMenuItem) { - $scope.editFnMenuItem = null; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html', - controller: fn_menu_popupController, - resolve: { - message: function () { - var message = { - availableFnMenuItem: $scope.editFnMenuItem - }; - return message; - } - } - }); - - modalInstance.result.then(function(response){ - // console.log('response', response); - $scope.availableFnMenuItems=response.availableFnMenuItems; - $route.reload(); - }); - - }; - - $scope.removeMenuItem = function (fnMenuItem) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html', - controller: deletefn_menu_popupController, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - title: '', - text: fnMenuItem.label - }; - return fnMenuItem; - } - } - }); - }; - - - $scope.editRoleFunction = null; - var dialog = null; - $scope.editRoleFunctionPopup = function(availableRoleFunction) { - $scope.editRoleFunction = availableRoleFunction; - $( "#dialog" ).dialog({ - modal: true - }); - }; - - $scope.editMenuItemModalPopup = function(availableFnMenuItem) { - $scope.editFnMenuItem = availableFnMenuItem; - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html', - controller: fn_menu_popupController, - resolve: { - message: function () { - var message = { - availableFnMenuItem: $scope.editFnMenuItem - }; - return message; - } - } - }); - - modalInstance.result.then(function(response){ - $scope.availableFnMenuItems=response.availableFnMenuItems; - $route.reload(); - }); - }; - - $scope.editRoleFunctionModalPopup = function(availableRoleFunction) { - $scope.editRoleFunction = availableRoleFunction; - var modalInstance = $modal.open({ - templateUrl: 'edit_role_function_popup.html', - controller: 'rolefunctionpopupController', - resolve: { - message: function () { - var message = { - availableRoleFunction: $scope.editRoleFunction - }; - return message; - } - } - }); - modalInstance.result.then(function(response){ - // console.log('response', response); - $scope.availableRoleFunctions=response.availableRoleFunctions; - }); - }; - - $scope.addNewRoleFunctionModalPopup = function(availableRoleFunction) { - $scope.editRoleFunction = null; - var modalInstance = $modal.open({ - templateUrl: 'edit_role_function_popup.html', - controller: 'rolefunctionpopupController', - resolve: { - message: function () { - var message = { - availableRoleFunction: $scope.editRoleFunction - }; - return message; - } - } - }); - - modalInstance.result.then(function(response){ - $scope.availableRoleFunctions=response.availableRoleFunctions; - }); - }; - - $scope.addNewRoleFunctionPopup = function() { - $scope.editRoleFunction = null; - $( "#dialog" ).dialog({ - modal: true - }); - }; - - - -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js deleted file mode 100644 index c7c06a7e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-route.js +++ /dev/null @@ -1,43 +0,0 @@ -appDS2.config(function($routeProvider) { - $routeProvider - .when('/net_map', { - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-sample-page/net_map.html', - controller: "netMapController" - }) - .when('/jcs_admin', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html', - controller: 'adminController' - }) - .when('/admin_menu_edit', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html', - controller: 'AdminMenuEditController' - }) - .when('/usage_list', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/usage.html', - controller: 'usageListControllerDS2' - }) - .when('/role_function_list', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html', - controller : "adminController" - }) - .when('/role/:roleId', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/role.html', - controller: 'adminController' - }) - .when('/collaborate_list', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html', - controller: 'collaborateListControllerDS2' - }) - .when('/adminClosedLoop', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html', - controller: 'adminClosedLoopController' - }) - .when('/all', { - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html', - controller: 'workflowsController' - }) - .otherwise({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html', - controller : 'adminController' - }); -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js deleted file mode 100644 index 3e82df8e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-whitelist.js +++ /dev/null @@ -1,3 +0,0 @@ -appDS2.config(function ($sceDelegateProvider) { - $sceDelegateProvider.resourceUrlWhitelist(['self','**']); -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js deleted file mode 100644 index 74a7423e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-controller.js +++ /dev/null @@ -1,5 +0,0 @@ -appDS2.controller( - 'bootstrapSampleController', - function($scope, $interval, $http, $modal, $log, ManifestService) { - - }); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js deleted file mode 100644 index ac1ba168..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/bootstrap-sample-route.js +++ /dev/null @@ -1,7 +0,0 @@ -appDS2.config(function($routeProvider) { - $routeProvider - .otherwise({ - templateUrl: 'app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html', - controller : "bootstrapSampleController" - }); -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js deleted file mode 100644 index 670e8fc1..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate-list-controller.js +++ /dev/null @@ -1,71 +0,0 @@ -appDS2.controller("collaborateListControllerDS2", function ($scope,$http, $modal,AdminService) { - - $scope.showInput = true; - $scope.totalPages1 = 5; - $scope.viewPerPage1 = 8; - $scope.currentPage1 = 1; - $scope.showLoader = false; - $scope.firstPlay = true; - // Start with empty list to silence error in console - $scope.tableData = []; - $scope.tableCollbItems = []; - // $scope.totalPages1 = 20; - $scope.$watch('viewPerPage1', function(val) { - $scope.showLoader = true; - AdminService.getCollaborateList($scope.currentPage1, val).then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.tableData = $scope.data; - var totalItems = $scope.tableData.length; - //console.log(totalItems); - $scope.totalPages1 = Math.ceil(totalItems / $scope.viewPerPage1); - $scope.showLoader = false; - $scope.currentPage1=1; - var endIndex = 1 * $scope.viewPerPage1; - var startIndex = endIndex - $scope.viewPerPage1; - $scope.tableCollbItems = $scope.tableData.slice(startIndex, endIndex); - },function(error){ - console.log("failed"); - reloadPageOnce(); - }); - }); - - $scope.customHandler1 = function(num) { - $scope.currentPage1=num; - var endIndex = num * $scope.viewPerPage1; - var startIndex = endIndex - $scope.viewPerPage1; - $scope.tableCollbItems = $scope.tableData.slice(startIndex, endIndex); - }; - - $scope.openCollaboration = function(chatId){ - openInNewTab('openCollaboration?chat_id=' + chatId); - } - - $scope.toggleProfileActive = function(profileId) { - modalService.popupConfirmWin("Confirm","You are about to change user's active status. Do you want to continue?", - function(){ - $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){}); - }) - }; - -}); - -function openInNewTab(url) { - var win = window.open(url, '_blank'); - win.focus(); -}; - -function downloadScreenCaptureExtenstion() { - - var chromeURL = 'https://chrome.google.com/webstore/detail/icgmlogfeajbfdffajhoebcfbibfhaen'; - var firefoxURL = 'https://addons.mozilla.org/en-US/firefox/addon/screen-capturing-capability'; - var url; - - if(isChrome) - url = chromeURL; - else if(isFirefox) - url = firefoxURL; - - var win = window.open(url); - win.focus(); -}; diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js deleted file mode 100644 index fa9af088..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/collaborate.js +++ /dev/null @@ -1,7 +0,0 @@ -app.config(function($routeProvider) { - $routeProvider - .when('/collaborate_list', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html', - controller: 'collaborateListControllerDS2' - }) -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js deleted file mode 100644 index c43ad8b7..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborate/workflowController.js +++ /dev/null @@ -1,490 +0,0 @@ -app.controller('workflowsController', function($scope, $http, $uibModal, $log, modalService, $modal) { - - $scope.viewPerPage = 5; - $scope.scrollViewsPerPage = 20; - $scope.currentPage = 2; - $scope.totalPage; - $scope.searchCategory = ""; - $scope.searchString = ""; - $scope.radio = { - value: "" - }; - - - $scope.showModal = false; - $scope.toggleModal = function(){ - $scope.showModal = !$scope.showModal; - }; - - $scope.workflow = {}; - $scope.workflow.active = "true"; - - $scope.updateAllWorkflowStatus = function() { - angular.forEach($scope.workflows,function(value){ - $scope.checkWorkflowStatus(value); - }) - } - - $scope.fetchWorkflowsList = function() { - $http.get('workflows/list').then(function(workflowList){ - console.log('Got new list from server = ' + workflowList.data); - $scope.workflows = workflowList.data; - $scope.updateAllWorkflowStatus(); - }); - }; - - $scope.addNewWorkflow = function(newWorkflow) { - $http.post('workflows/addWorkflow/', JSON.stringify(newWorkflow)).success(function() { - $scope.fetchWorkflowsList(); - }); - - $scope.workflow.name = ''; - - }; - - $scope.updateWorkflow = function (workflowToEdit) { - //workflowToEdit.active='true'; - var modalInstance = $uibModal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-new.html', - //size : modalSize, - controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) { - $scope.workflow = workflowToEdit; - $scope.ok = function() { - console.log('Updating existing workflow ... ' + JSON.stringify($scope.workflow)); - $http.post('workflows/editWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){ - console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow)); - $uibModalInstance.close($scope.workflow); - }); - }; - - $scope.cancel = function() { - $uibModalInstance.dismiss(); - }; - }], - //End of inner controller - resolve: { - workflow: function() { - console.log('Passing ' + JSON.stringify($scope.workflow)); - return $scope.workflow; - } - } - }); - - modalInstance.result.then(function (editedWorkFlow) { - //Need to convert to proper date - later - delete editedWorkFlow.created; - delete editedWorkFlow.updated; - - delete editedWorkFlow.createdBy; - delete editedWorkFlow.modifiedBy; - - console.log('selected Item ' + JSON.stringify(editedWorkFlow)); - $scope.$emit('workflowAdded', editedWorkFlow); - - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - }; - - $scope.reset = function(){ - console.log("Resetting ...."); - }; - - $scope.update = function(){ - console.log("updating ...."); - }; - - $scope.createWorkflow = function (modalSize) { - - var modalInstance = $uibModal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-new.html', - size : modalSize, - controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) { - $scope.workflow = {}; - $scope.workflow.active = 'true'; - $scope.ok = function() { - console.log('Saving new workflow ... ' + JSON.stringify($scope.workflow)); - $http.post('workflows/addWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){ - console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow)); - $uibModalInstance.close($scope.workflow); - }); - }; -/* console.log(size);*/ - $scope.cancel = function() { - $uibModalInstance.dismiss(); - }; - }], - //End of inner controller - resolve: { - workflow: function() { - console.log('Passing ' + JSON.stringify($scope.workflow)); - return $scope.workflow; - } - } - }); - - modalInstance.result.then(function (newWorkflow) { - console.log('selected Item ' + JSON.stringify(newWorkflow)); - $scope.$emit('workflowAdded', newWorkflow); - - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - };//End of createWorkflow function - - - $scope.removeWorkflow = function(workflowToRemove){ - var modalInstance = $uibModal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-remove.html', - controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) { - $scope.workflowToRemove = workflowToRemove; - $scope.ok = function() { - console.log('Removing workflow ... ' + JSON.stringify($scope.workflowToRemove) + ' on client request.'); - $http.post('workflows/removeWorkflow/', JSON.stringify($scope.workflowToRemove.id)).then(function(){ - console.log('Workflow successfully removed !!!'); - $uibModalInstance.close(); - }); - }; - - $scope.cancel = function() { - $uibModalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('workflowRemoved'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - - }; - - - - $scope.scheduleWorkflow = function(workflowToSchedule){ - var modalInstance = $uibModal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-schedule.html', - size:'lg', - - controller: ['$scope', '$uibModalInstance', '$http','dateFilter', function ($scope, $uibModalInstance, $http,dateFilter) { - - $scope.workflowToSchedule = workflowToSchedule; - $scope.dt = new Date(); - $scope.dt2 = new Date(); - $scope.dateformat = 'MM/dd/yyyy', - $scope.datetimeformat = "hh:mm a"; - - $scope.recurrenceOptions =[{ - index:0, value:'One-Time', title:'One-Time' - },{ - index:1, value: 'Hourly',title:'Hourly' - },{ - index:2, value: 'Daily',title:'Daily' - },{ - index:3, value: 'Weekly',title:'Weekly' - }] - $scope.selectRecurrenceOpt = $scope.recurrenceOptions[0]; - - $scope.hours = []; - for (var i=0; i<24; i++){ - var newObj={} - newObj.index = i; - newObj.value = ""+i; - newObj.title = ""+i; - $scope.hours.push(newObj); - } - - $scope.minutes = []; - for (var i=0; i<60; i++){ - var newObj={} - newObj.index = i; - newObj.value = ""+i; - newObj.title = ""+i; - $scope.minutes.push(newObj); - } - - $scope.AMPMOptions =[ - { - index:0, value:'AM', title:'AM' - },{ - index:1, value: 'PM',title:'PM' - }] - - $scope.selectFirstHour =$scope.hours[0]; - $scope.selectFirstMinute =$scope.minutes[0]; - - $scope.selectLastHour =$scope.hours[0]; - $scope.selectLastMinute =$scope.minutes[0]; - - $scope.selectStartAMPMOption=$scope.AMPMOptions[0]; - $scope.selectLastAMPMOption=$scope.AMPMOptions[0]; - - var GenerateCronExpression = function(trigger_dt, RecurrenceOpt) { - var CRON_sec = trigger_dt.getSeconds(); - var CRON_min = trigger_dt.getMinutes(); - var CRON_hr = trigger_dt.getHours(); - var CRON_date= trigger_dt.getDate(); - var CRON_month = trigger_dt.toLocaleString('en-US', {month: 'short'}).toUpperCase(); - var CRON_day = trigger_dt.toLocaleString('en-US', {weekday: 'short'}).toUpperCase(); - var CRON_year = trigger_dt.getFullYear(); - if (RecurrenceOpt ==="One-Time") { - CRON_day = '?' - } else { - if (RecurrenceOpt ==="Hourly") { - CRON_hr = '*'; - CRON_date = '*' - CRON_month = '*' - CRON_day = '?' - CRON_year = '*' - } else if (RecurrenceOpt ==="Daily") { - CRON_date = '*' - CRON_month = '*' - CRON_day = '?' - CRON_year = '*' - } else if (RecurrenceOpt ==="Weekly") { - CRON_date = '*' - CRON_month = '*' - CRON_year = '*' - } - } - - var CRON_Expression = [CRON_sec, CRON_min, CRON_hr, CRON_date, CRON_month, CRON_day, CRON_year]; - return CRON_Expression.join(" "); - } - - $scope.ok = function() { - - // DateTime for the start time: it should be noted that the start time - // for a CRON job should be prior to the trigger time. - $scope.trigger_dt = new Date( $scope.dt.getFullYear() + - "-" + ("0"+($scope.dt.getMonth()+1)).slice(-2) + - "-" +("0"+ $scope.dt.getDate()).slice(-2) + - " " + ("0" + $scope.selectFirstHour.value).slice(-2) + - ":" +("0" + $scope.selectFirstMinute.value).slice(-2) + - ":00.0"); - - $scope.startDateTime_CRON = GenerateCronExpression($scope.trigger_dt, $scope.selectRecurrenceOpt.value) - - //roll back the the start date time by 30 seconds (start time should be 30 seconds prior to trigger time) - dt_st = new Date($scope.trigger_dt - 30*1000) - - startDateTime = dt_st.getFullYear() + - "-" + ("0"+(dt_st.getMonth()+1)).slice(-2) + - "-" +("0"+ dt_st.getDate()).slice(-2) + - " " + ("0" + dt_st.getHours()).slice(-2) + - ":" +("0" + dt_st.getMinutes()).slice(-2) + - ":" + ("0" + dt_st.getSeconds()).slice(-2) +".0"; - $scope.startDateTime = startDateTime; - - $scope.endDateTime = $scope.dt2.getFullYear() + - "-" + ("0"+($scope.dt2.getMonth()+1)).slice(-2) + - "-" +("0"+ $scope.dt2.getDate()).slice(-2) + - " " + ("0"+ $scope.selectLastHour.value).slice(-2) + - ":" +("0" + $scope.selectLastMinute.value).slice(-2) + - ":00.0" - - $scope.WorkflowScheduleObject = {}; - $scope.WorkflowScheduleObject['startDateTime_CRON'] = $scope.startDateTime_CRON; - $scope.WorkflowScheduleObject['startDateTime'] = $scope.startDateTime; - $scope.WorkflowScheduleObject['endDateTime'] = $scope.endDateTime; - $scope.WorkflowScheduleObject['workflowKey'] = $scope.workflowToSchedule.workflowKey; - $scope.WorkflowScheduleObject['recurrence'] = $scope.selectRecurrenceOpt.value; - $scope.WorkflowScheduleObject['workflow_arguments'] = "test"; - $scope.WorkflowScheduleObject['workflow_server_url'] = $scope.workflowToSchedule.runLink; - - - TimeFromNowToStart = new Date($scope.startDateTime)-new Date() - TimeStartToEnd = new Date($scope.endDateTime)-new Date($scope.startDateTime) - - if (TimeFromNowToStart<=0) { - console.log("invalid start time input") - alert("Please ensure the scheduled start date time is later than current time.") - return; - } - if (TimeStartToEnd<=0) { - console.log("invalid end time input") - alert("Please ensure the schduled end date time is later than the start time.") - return; - } - // if successful then save and close - $scope.saveCronJob($scope.WorkflowScheduleObject); - $uibModalInstance.close(); - - }; - - $scope.saveCronJob = function(cronJobData){ - - console.log('saving cron job data: ' + cronJobData); - var uuu = "workflows/saveCronJob.htm"; - var postData={cronJobDataObj: cronJobData}; - $.ajax({ - type : 'POST', - url : uuu, - //dataType: 'json', // data type expected from server - contentType: 'application/json', - data: JSON.stringify(postData), // data type sent to server - success : function(data){ - $scope.$apply(function(){ - //$scope.availableRoleFunctions=[];$scope.$apply(); - // new // $scope.availableFnMenuItems=data.availableFnMenuItems; - } - ); - //alert("Update Successful.") ; - //$scope.editRoleFunction = null; - // new /// $modalInstance.close({availableFnMenuItems:$scope.availableRoleFunctions}); - }, - error : function(data){ - alert("Error while saving."); - } - }); - - }; - - $scope.cancel = function() { - console.log("cancel triggered") - $uibModalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('workflowRemoved'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - - }; - - - - - - - - - $scope.previewWorkflow = function(workflowToPreview,modalSize){ - var modalInstance = $uibModal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/workflows/workflow-preview.html', - size:modalSize, - controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) { - $scope.workflowToPreview = workflowToPreview; - console.log('previewWorkFlow invoked'); - console.log($scope.workflowToPreview); - - $scope.cancel = function() { - $uibModalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('workflowRemoved'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - - }; - - - /* change work flow status based on the boolean variable "suspendBool" which corresponds whether - * we would like to suspend or activate a workflow specified by key. */ - $scope.changeWorkflowStatus = function(workflowToChangeStatus,suspendBool){ - if (workflowToChangeStatus!==null) { - var statusUrl= workflowToChangeStatus.runLink+"/engine-rest/process-definition/key/"+workflowToChangeStatus.workflowKey - var suspendedUrl= statusUrl+"/suspended" - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open('PUT', suspendedUrl, false); - xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - xmlHttp.onload = function() { - if (suspendBool) { - console.log("process definition is now suspended"); - workflowToChangeStatus.active="false" - } else { - console.log("process definition is now activated"); - workflowToChangeStatus.active="true" - } - }; - xmlHttp.send(JSON.stringify({ - "suspended" : suspendBool, - "includeProcessInstances" : true, - "executionDate" : "2013-11-21T10:49:45" - })); - } - - }; - - $scope.activateWorkflow = function(workflowToActivate){ - $scope.changeWorkflowStatus(workflowToActivate,false) - - }; - - $scope.suspendWorkflow = function(workflowToActivate){ - $scope.changeWorkflowStatus(workflowToActivate,true) - }; - - $scope.checkWorkflowStatus = function(workflow) { - if (workflow!==null) { - var statusUrl= workflow.runLink+"/engine-rest/process-definition/key/"+workflow.workflowKey - var xmlHttp3 = new XMLHttpRequest(); - xmlHttp3.open('GET', statusUrl, true); - xmlHttp3.withCredentials = true; - xmlHttp3.send(); - xmlHttp3.onreadystatechange = function() { - if (xmlHttp3.readyState == 4 && xmlHttp3.status == 200) { - // do something with the response in the variable data - var temp = JSON.parse(xmlHttp3.responseText) - if (temp.suspended == false){ - console.log("Activated") - workflow.active="true" - } else { - console.log("Suspended") - workflow.active="false" - } - } - } - } - }; - - $scope.StartWorkflowInstance = function(workflowToStart){ - if (workflowToStart!==null) { - var statusUrl= workflowToStart.runLink+"/engine-rest/process-definition/key/"+workflowToStart.workflowKey - var suspendedUrl= statusUrl+"/submit-form" - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open('POST', suspendedUrl, false); - xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - xmlHttp.onload = function() { - }; - xmlHttp.send(JSON.stringify({ - "variables": { - "customerId": {"value":"asdasda","type":"String"}, - "amount":{"value":"100","type":"String"} - } - })); - } - - }; - - - $scope.$on('workflowAdded', function(event, newWorkflow) { - console.log("New Workflow to be added in list scope " + JSON.stringify(newWorkflow)); - //$scope.workflows.push(newWorkflow); - $scope.fetchWorkflowsList(); - console.log('newly added workflow = ' + JSON.stringify(newWorkflow)); - }); - - $scope.$on('workflowRemoved', function(event) { - $scope.fetchWorkflowsList(); - }); - - $scope.fetchWorkflowsList(); - - - -}); - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js deleted file mode 100644 index d402fd7b..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaborateList-route.js +++ /dev/null @@ -1,19 +0,0 @@ -appDS2.config(function($routeProvider) { - $routeProvider - .when('/collaborate_list', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html', - controller: 'collaborateListControllerDS2' - }) - .when('/notebook', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html', - controller: 'nbookController' - }) - .when('/leafletMap', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/leafletMap.html', - controller: 'leafletController' - }) - .when('/notebook', { - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html', - controller: 'nbookController' - }) -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js deleted file mode 100644 index a800c009..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/collaboration-controller.js +++ /dev/null @@ -1,266 +0,0 @@ - - -appDS2.controller('collaborationControllerDS2', function ($scope,$http, $modal) { - console.log("modal", $modal); - var popupModalService; - - }); - - - $(document).ready(function () { - - // OUTER-LAYOUT - panelLayout = $('body').layout({ - center__paneSelector: ".outer-center" - , west__paneSelector: ".outer-west" - , east__paneSelector: ".outer-east" - //, west__size: 800 - //, east__size: 125 - , spacing_open: 8 // ALL panes - , spacing_closed: 12 // ALL panes - - , center__childOptions: { - center__paneSelector: ".inner-center" - , west__paneSelector: ".inner-west" - , east__paneSelector: ".inner-east" - , west__size: 75 - , east__size: 75 - , spacing_open: 8 // ALL panes - , spacing_closed: 8 // ALL panes - , west__spacing_closed: 12 - , east__spacing_closed: 12 - } - - - - - }); - - - function initializeConnections() { - - var channelId = null; - channelId = location.href.replace(/\/|:|#|%|\.|\[|\]/g, ''); - var videoChannelId = channelId.concat("video"); - var screenChannelId = channelId.concat("screen"); - - videoConnection = new RTCMultiConnection(videoChannelId); - screenConnection = new RTCMultiConnection(screenChannelId); - - configConnection(videoConnection,true,true,false,true,false); - configConnection(screenConnection,false,false,true,false,true); - - }; - - function configConnection(_connection, _audio, _video, _screen, _data, _oneway) { - _connection.session = { - audio: _audio, // by default, it is true - video: _video, // by default, it is true - screen: _screen, - data: _data, - oneway: _oneway, - broadcast: false - }; - - _connection.direction = "one-to-one"; - - if( _data == true ) { - _connection.onmessage = function(e) { - appendDIV(e.data); - - console.debug(e.userid, 'posted', e.data); - console.log('latency:', e.latency, 'ms'); - }; - } - - - }; - - function assignStreamToDom() { - - - screenConnection.screenbody = document.querySelector('.screenContainer1'); - screenConnection.videobody = document.querySelector('.videoContainer2'); - - videoConnection.screenbody = document.querySelector('.screenContainer2'); - videoConnection.videobody = document.querySelector('.videoContainer1'); - }; - - function maximizeLayout() { - - // open the panes and maximize the window. - top.window.resizeTo(screen.availWidth,screen.availHeight); - panelLayout.open('west'); - // panelLayout.open('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack. - $(".ui-layout-toggler-south-closed").first().click(); - - }; - - function minimizeLayout() { - - // close the panes and minimize the window. - top.window.resizeTo(screen.availWidth - 2*screen.availWidth/3, screen.availHeight - screen.availHeight/2); - panelLayout.close('west'); - // panelLayout.close('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack. - $(".ui-layout-toggler-south-opened").first().click(); - }; - - function emptyContainers() { - $('.screenContainer1').empty(); - $('.videoContainer2').empty(); - - $('.screenContainer2').empty(); - $('.videoContainer1').empty(); - }; - - function appendDIV(div, parent) { - if (typeof div === 'string') { - var content = div; - div = document.createElement('div'); - div.innerHTML = content; - }; - - var chatOutput = document.getElementById('chat-output'), - fileProgress = document.getElementById('file-progress'); - - if (!parent) chatOutput.insertBefore(div, chatOutput.firstChild); - else fileProgress.insertBefore(div, fileProgress.firstChild); - - div.tabIndex = 0; - $('#chat-input').focus(); - }; - - function confirmClose() { - var message = "Are you sure you want to close the session?"; - - /* if(popupModalService != undefined) { - popupModalService.popupConfirmWin("Confirm", message, function(){ location.reload();}); - } - - else */ - if (confirm(message) == true) { - location.reload(); - //window.opener.location.reload(); // go to the parent window - //close(); - } else { - // do nothing - } - - }; - - function notifyOthers() { - - // var websocket = localStorage.getItem('notifySocket'); - //if( websocket != null) { - // handling websocket peer broadcast session - var currentUser = "${sessionScope.user.sbcid}"; - var initialPageVisit = "${sessionScope.initialPageVisit}"; - var remoteUser = ''; - - var userList = location.search.split('chat_id=')[1].split('-'); - for(var i=0;i-1) { - $scope.showBackButton = true; - $scope.parentReportUrlParams = $routeParams.reportUrlParams.substring($routeParams.reportUrlParams.indexOf("parent___params===")+18); - $scope.currentReportUrlParams = $routeParams.reportUrlParams.substring(0,$routeParams.reportUrlParams.indexOf("parent___params===")); - } else { - $scope.currentReportUrlParams = $routeParams.reportUrlParams; - } - // console.log($routeParams.reportUrlParams); - var parseQueryString = function( queryString ) { - var params = {}, queries, temp, i, l; - // Split into key/value pairs - queries = queryString.split("&"); - // Convert the array of strings into an object - for ( i = 0, l = queries.length; i < l; i++ ) { - temp = queries[i].split('='); - //console.log(temp[0]); - //console.log(temp[0] != "refresh"); - if(temp[0] && temp[0] != "refresh") - params[temp[0]] = temp[1]; - } - return params; - }; - - var convertQueryString = function(queryString) { - var keys = ""; var str = ""; - keys = Object.keys(queryString); - //console.log(keys); - for ( i = 0, l = keys.length; i < l; i++ ) { - str += keys[i]+"="+queryString[keys[i]] + "&"; - - } - return str; - //queryString = - } - - - - $scope.backToParentReport = function (){ - $window.location.href = "report#/report_run/"+$scope.parentReportUrlParams - } - - $scope.urlParams = parseQueryString($scope.currentReportUrlParams); - - $scope.reportChartURL = 'report#/report_chart/'+$scope.urlParams.c_master; - - $scope.reportEditURL = 'report#/report_wizard/'+$scope.urlParams.c_master; - - - $http.get('raptor.htm?action=report.run.container&'+$scope.currentReportUrlParams).then( - function(response){ - // console.log(response); - $scope.isInProgress = false; - if(response.data.errormessage!=null && response.data.errormessage!=''){ - $scope.errorPopUp(response.data.errormessage); - }else{ - $scope.reportData = response.data; - // console.log('reportData report run container response',$scope.reportData); - if ($scope.reportData.reportTitle) { - $scope.reportData.reportHeading = $scope.reportData.reportTitle; - if ($scope.reportData.reportSubTitle) { - $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle; - } - } - else - $scope.reportData.reportHeading = $scope.reportData.reportName; - if( ($scope.urlParams.hideChart === undefined || $scope.urlParams.hideChart) && $scope.reportData.chartAvailable && $scope.reportData.totalRows>=1){ - //console.log('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams)); - $http.get('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams)).then( - function(response){ - $scope.showChart = true; - document.getElementById('chartiframe').contentWindow.document.write(response.data); - document.getElementById('chartiframe').contentWindow.document.close(); - }); - } - - if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){ - $scope.showFormFields = true; - } - } - - }); - $scope.getFormFieldSelectedValuesAsURL = function(){ - var formFieldsUrl = ''; - $scope.reportData.formFieldList.forEach(function(formField) { - if(formField.fieldType==='LIST_BOX') { - if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] ) { - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&'; - } - } else if(formField.fieldType==='LIST_MULTI_SELECT') { - if($scope.formFieldSelectedValues[formField.fieldId].length >0) { - for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) { - if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&'; - } - } - } - } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&'; - } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&'; - } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&'; - } - }); - //formFieldsUrl = str.slice(0, -1); - return formFieldsUrl; - - } - - $scope.runReport = function(pagination){ - $scope.showLoader=true; - var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL(); - /*if ($scope.reportData.reportTitle) - $scope.reportData.reportHeading = $scope.reportData.reportTitle; - else - $scope.reportData.reportHeading = $scope.reportData.reportName;*/ - - // console.log("pagination"); - if(!pagination) { - //console.log("refreshed ..."); - $scope.gridOptions.pageNumber = 1; - paginationOptions.pageNumber = 1; - paginationOptions.pageSize = $scope.reportData.pageSize; - //console.log($scope.gridOptions); - $scope.gridOptions.paginationCurrentPage = 1; - $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize]; - $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize; - if($scope.reportData.totalRows<14){ - $scope.gridHeight = ($scope.reportData.totalRows+7)*30+'px'; - } else{ - $scope.gridHeight = '400px'; - } - $scope.gridOptions.totalItems = $scope.reportData.totalRows; - $scope.gridOptions.data= $scope.reportData.reportDataRows; - $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName; - - } - $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1); - $http.get('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then( - function(response){ - $scope.showLoader=false; - $scope.reportData = response.data; - if ($scope.reportData.reportTitle) { - $scope.reportData.reportHeading = $scope.reportData.reportTitle; - if ($scope.reportData.reportSubTitle) { - $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle; - } - } - else - $scope.reportData.reportHeading = $scope.reportData.reportName; - - if($scope.reportData.errormessage) { - //console.log($scope.reportData); - var stacktraceFP = $scope.reportData.stacktrace.substring(0, $scope.reportData.stacktrace.indexOf(":")+1); - document.getElementById('errorDiv').innerHTML = $sanitize(+stacktraceFP + " " + $scope.reportData.errormessage); - //console.log(document.getElementById('errorDiv').innerHtml); - //console.log(stacktraceFP + " " + $scope.reportData.errormessage); - } - if(!pagination) { - if( ($scope.urlParams.hideChart === undefined || $scope.urlParams.hideChart) && $scope.reportData.chartAvailable && $scope.reportData.totalRows>=1){ - // console.log('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)); - $http.get('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then( - function(response) { - // console.log(response.data); - $scope.showChart = true; - // console.log('response.data',response.data); - document.getElementById('chartiframe').contentWindow.document.write($sanitize(response.data)); - document.getElementById('chartiframe').contentWindow.document.close(); - }); - } else { - $scope.showChart = false; - } - } - if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields && !$scope.reportData.hideFormFieldsAfterRun){ - $scope.showFormFields = true; - } else { - $scope.showFormFields = false; - } - }); - }; - - var paginationOptions = { - pageNumber: 1, - pageSize: 5, - sort: null - }; - - var correctTotalPaginationTemplate = - //same as normal template, but fixed totals: {{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} - "
    0\">/ {{ paginationApi.getTotalPages() }}
    1\"> {{sizesLabel}}
    {{grid.options.paginationPageSize}} {{sizesLabel}}
    0\">{{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} - {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} {{paginationOf}} {{grid.options.totalItems}} {{totalItemsLabel}}
    "; - - $scope.gridOptions = { - pageNumber: 1, - useExternalPagination: true, - sort : null, - paginationPageSizes: [5], - paginationPageSize: 5, - paginationTemplate: correctTotalPaginationTemplate, - columnDefs: [], - data: [], - enableSorting: true, - enableGridMenu: true, - enableSelectAll: true, - gridMenuCustomItems : [ - { title : 'All Reports', - action : function($event) { - $window.open('report.htm','_self'); - }, order : 210 }, - { title : 'Edit Report', - action : function($event) { - $window.open($scope.reportEditURL,'_self'); - }, order : 211 }, - /*{ title : 'Export All data as Excel 2007', - action : function($event) { - $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel2007.session','_self'); - }, order : 212 },*/ - { title : 'Export All data as Excel', - action : function($event) { - $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel.session','_self'); - }, order : 213 }, - { title : 'Export All data as CSV', - action : function($event) { - $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.csv.session','_self'); - }, order : 214 }, - { title : 'Export All data as PDF', - action : function($event) { - $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.pdf.session','_self'); - }, order : 215 } ], - exporterMenuPdf: false, - exporterMenuCsv: false, - exporterCsvFilename: 'myFile.csv', - exporterPdfDefaultStyle: {fontSize: 9}, - exporterPdfTableStyle: {margin: [30, 30, 30, 30]}, - exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'}, - exporterPdfHeader: { text: "My Header", style: 'headerStyle' }, - exporterPdfFooter: function ( currentPage, pageCount ) { - return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' }; - }, - exporterPdfCustomFormatter: function ( docDefinition ) { - docDefinition.styles.headerStyle = { fontSize: 22, bold: true }; - docDefinition.styles.footerStyle = { fontSize: 10, bold: true }; - return docDefinition; - }, - exporterPdfOrientation: 'portrait', - exporterPdfPageSize: 'LETTER', - exporterPdfMaxGridWidth: 500, - exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")), - onRegisterApi: function(gridApi) { - $scope.gridApi = gridApi; - gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) { - paginationOptions.pageNumber = newPage; - paginationOptions.pageSize = pageSize; - $scope.runReport(true); - }); - } - }; - - $scope.uiGridRefresh = function(){ - var columnDefsArray = []; - var columnFreezeEndColumn = $scope.reportData.colIdxTobeFreezed; - var doColumnNeedToFreeze = false; - if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) { - doColumnNeedToFreeze = true; - } - $scope.reportData.reportDataColumns.forEach(function(entry) { - var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable, - sortingAlgorithm: function(a, b) { - return rowSorter.sortAlpha(a.displayValue, b.displayValue); - }, - cellTemplate: '
    '+ - '
    {{COL_FIELD.displayValue}}
    ' + - ' {{COL_FIELD.displayValue}}' + - '
    '}; - if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){ - tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2); - } else { - tempColumnDef['minWidth'] = '100'; - } - if(doColumnNeedToFreeze) { - tempColumnDef['pinnedLeft']= true; - if(columnFreezeEndColumn === entry.colId){ - doColumnNeedToFreeze = false; - } - } - columnDefsArray.push(tempColumnDef); - }); - - $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize]; - $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize; - if($scope.reportData.totalRows<14){ - $scope.gridHeight = ($scope.reportData.totalRows+5)*30+'px'; - }else{ - $scope.gridHeight = '400px'; - } - $scope.gridOptions.totalItems = $scope.reportData.totalRows; - $scope.gridOptions.columnDefs= columnDefsArray; - $scope.gridOptions.data= $scope.reportData.reportDataRows; - $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName; - }; - - $scope.$watch("reportData",function(newValue,oldValue) { - if(!$scope.urlParams.hideGrid){ - if($scope.reportData){ - if($scope.reportData.displayData && $scope.reportData.reportDataColumns){ - $scope.showGrid = true; - $scope.uiGridRefresh(); - } - } - } - }); - - $scope.triggerOtherFormFields = function(){ - // console.log("report_run"); - var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL(); - $http.get('raptor.htm?action=report.formfields.run.container&c_master='+$scope.reportData.reportID+'&'+formFieldsUrl).then( - function(response){ - $scope.reportData = response.data; - if($scope.reportData.reportHeading==null || $scope.reportData.reportHeading=='') - $scope.reportData.reportHeading = ($scope.reportData.reportTitle=='')?$scope.reportData.reportName:$scope.reportData.reportTitle; - }); - }; - $timeout(function() { - $rootScope.isViewRendering = false; - }); - $scope.successPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - msg: function () { - var message = { - title: '', - text: msg - }; - return message; - } - } - }); - }; - - $scope.errorPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - msg: function () { - return msg; - } - } - }); - }; - var ModalInstanceCtrl = function ($scope, $modalInstance, msg,$rootScope) { - $scope.msg=msg; - } -}]); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js deleted file mode 100644 index 36a541ed..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-search-controller.js +++ /dev/null @@ -1,244 +0,0 @@ -appDS2.requires.push('ui.grid'); -appDS2.requires.push('ui.grid.pagination'); -appDS2.requires.push('ui.grid.resizeColumns'); -appDS2.controller("reportSearchController", ['$scope','$rootScope','$http','$timeout','uiGridConstants','$modal','$q','$log','raptorReportFactory',function ($scope,$rootScope,$http,$timeout,uiGridConstants,$modal,$q,$log,raptorReportFactory) { - $scope.showLoader=false; - $scope.getSearchData = function(){ - $scope.showLoader=true; - - raptorReportFactory.getSearchData().then(function(data){ - $scope.searchdData = data; - },function(error){ - $log.error("raptorReportFactory: getSearchData failed."); - }).finally(function() { - $scope.showLoader=false;// Always execute this on both error and success - });; - } - - $scope.getSearchData(); - - $scope.runReport = function(){ - var searchParams = ''; - if($scope.reportId && $scope.reportId!=''){ - searchParams = '&rep_id='+$scope.reportId+'&rep_id_options='+$scope.operatorRepId.index; - } - if($scope.reportName && $scope.reportName!=''){ - searchParams = searchParams+'&rep_name='+$scope.reportName+'&rep_name_options='+$scope.operatorRepName.index; - } - $scope.showLoader=true; - var pageSearchParameter = ($scope.paginationOptions.pageNumber-1)+searchParams - raptorReportFactory.getSearchDataAtPage(pageSearchParameter).then(function(data){ - $scope.searchdData = data - },function(error){ - $log.error("raptorReportFactory: getSearchDataAtPage failed."); - }).finally(function() { - $scope.showLoader=false;// Always execute this on both error and success - - }); - }; - - - $scope.paginationOptions = { - pageNumber: 1, - pageSize: 5, - sort: null - }; - - function convertValue(v){ - return parseInt(v.displayValue); - } - - $scope.getSortingAlgorithm= function (columnName) { - return function(a, b, rowA, rowB, direction) { - console.log("sorting by column " + columnName,a,b); - if(columnName=='rep_id'){ - if(a && b && a.displayValue && b.displayValue){ - if (convertValue(a) == convertValue(b)) return 0; - if (convertValue(a) < convertValue(b)) return -1; - if (convertValue(a) > convertValue(b)) return 1; - }else{ - return 0; - } - }else if(columnName=='rep_name'){ - if(a && b && a.displayValue && b.displayValue){ - if (a.displayValue == b.displayValue) return 0; - if (a.displayValue < b.displayValue) return -1; - if (a.displayValue > b.displayValue) return 1; - }else{ - return 0; - } - }else if(columnName=='descr'){ - if(a && b && a.displayValue && b.displayValue){ - if (a.displayValue == b.displayValue) return 0; - if (a.displayValue < b.displayValue) return -1; - if (a.displayValue > b.displayValue) return 1; - }else{ - return 0; - } - }else if(columnName=='owner'){ - if(a && b && a.displayValue && b.displayValue){ - if (a.displayValue == b.displayValue) return 0; - if (a.displayValue < b.displayValue) return -1; - if (a.displayValue > b.displayValue) return 1; - }else{ - return 0; - } - }else if(columnName=='create_date'){ - if(a && b && a.displayValue && b.displayValue){ - if (a.displayValue == b.displayValue) return 0; - if (a.displayValue < b.displayValue) return -1; - if (a.displayValue > b.displayValue) return 1; - }else{ - return 0; - } - } - } - }; - - var correctTotalPaginationTemplate = - //same as normal template, but fixed totals: {{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} - "
    0\">/ {{ paginationApi.getTotalPages() }}
    1\"> {{sizesLabel}}
    {{grid.options.paginationPageSize}} {{sizesLabel}}
    0\">{{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} - {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} {{paginationOf}} {{grid.options.totalItems}} {{totalItemsLabel}}
    "; - - $scope.gridOptions = { - paginationPageSizes: [5], - paginationPageSize: 5, - paginationTemplate: correctTotalPaginationTemplate, - columnDefs: [], - enableColumnResizing: true, - data: [], - enableGridMenu: true, - enableSelectAll: true, - exporterMenuPdf: false, - exporterMenuCsv: false, - exporterCsvFilename: 'myFile.csv', - exporterPdfDefaultStyle: {fontSize: 9}, - exporterPdfTableStyle: {margin: [30, 30, 30, 30]}, - exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'}, - exporterPdfHeader: { text: "My Header", style: 'headerStyle' }, - exporterPdfFooter: function ( currentPage, pageCount ) { - return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' }; - }, - exporterPdfCustomFormatter: function ( docDefinition ) { - docDefinition.styles.headerStyle = { fontSize: 22, bold: true }; - docDefinition.styles.footerStyle = { fontSize: 10, bold: true }; - return docDefinition; - }, - exporterPdfOrientation: 'portrait', - exporterPdfPageSize: 'LETTER', - exporterPdfMaxGridWidth: 500, - exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")), - onRegisterApi: function(gridApi) { - gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) { - $scope.paginationOptions.pageNumber = newPage; - $scope.paginationOptions.pageSize = pageSize; - $scope.runReport(); - }); - } - }; - - - var getPage = function() { - $scope.gridOptions.columnDefs = []; - $scope.searchdData.columns[0].forEach(function(entry) { - if(entry.columnTitle=='Run'){ - $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false, - cellTemplate: '
    ' - }); - } else if(entry.columnTitle=='Edit'){ - $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false, - cellTemplate: '
    ' - }); - } else if(entry.columnTitle=='Delete'){ - $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false, - cellTemplate: '
    ' - }); - } else if(entry.columnTitle=='Copy'){ - $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false, - cellTemplate: '
    ' - }); - } else if(entry.columnTitle=='Schedule'){ - } else if(entry.columnTitle=='No'){ - } else { - $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, - enableSorting: true, - sortingAlgorithm: $scope.getSortingAlgorithm(entry.columnId), - cellTemplate: '
    {{COL_FIELD.displayValue}}
    ' - }); - } - }); - $scope.gridOptions.useExternalPagination=true; - $scope.gridOptions.paginationPageSizes= [$scope.searchdData.metaReport.pageSize]; - $scope.gridOptions.paginationPageSize= 50;//$scope.searchdData.metaReport.pageSize; - $scope.gridOptions.totalItems = $scope.searchdData.metaReport.totalSize; - $scope.gridOptions.data = []; - $scope.searchdData.rows[0].forEach(function(entry) { - var localData = {}; - entry.forEach(function(rowData){ - localData[rowData["columnId"]]= rowData["searchresultField"]; - }); - $scope.gridOptions.data.push(localData); - }); - }; - - $scope.$watch("searchdData",function(newValue,oldValue) { - if($scope.searchdData){ - getPage(); - } - }); - - $scope.operatorsRepId = [ - {index: 0, value: 'Equal To', text: 'Equal To', alias:'Equal To'}, - {index: 1, value: 'Less Than', text: 'Less Than', alias:'Less Than'}, - {index: 2, value: 'Greater Than', text: 'Greater Than', alias:'Greater Than'}]; - $scope.operatorRepId = {}; - $scope.operatorRepId.value = $scope.operatorsRepId[0].value; - $scope.operatorRepId.index = $scope.operatorsRepId[0].index; - - $scope.operatorsRepName = [ - {index: 0, value: 'Starts With', text: 'Starts With', alias:'Starts With'}, - {index:1, value: 'Ends With', text: 'Ends With', alias:'Ends With'}, - {index: 2, value: 'Contains', text: 'Contains', alias:'Contains'}]; - - $scope.operatorRepName = {}; - $scope.operatorRepName.value = $scope.operatorsRepName[0].value; - $scope.operatorRepName.index = $scope.operatorsRepName[0].index; - - $scope.removeReport = function(reportDeleteUrl,row) { - var modalInstance = $modal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html', - sizeClass: 'modal-small', - controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory', function ($scope, $modalInstance, $http, $log, raptorReportFactory) { - $scope.ok = function() { - raptorReportFactory.getReportDeleteStatus(reportDeleteUrl).then(function(data){ - if (!(data.deleted)) { - $log.error("raptorReportFactory: report removal failed.") - } - $modalInstance.close(); - },function(error){ - $log.error("report removal error.") - }); - }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('RefreshGridOptions'); - }, function () { - }); - }; - - $scope.$on('RefreshGridOptions', function(event) { - $scope.getSearchData(); - }); - - $timeout(function() { - $rootScope.isViewRendering = false; - }); - - -}]); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js deleted file mode 100644 index a23823e3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-reports/report-step-controller.js +++ /dev/null @@ -1,786 +0,0 @@ -appDS2.controller('reportStepController', function($scope,$http,$location, $routeParams, $q, $modal,$log,$window, raptorReportFactory, stepFormFactory) { - /*****************Init values*********************/ - $scope.reportIdURL = $routeParams.reportId; - $scope.isEdit = ($scope.reportIdURL==null||$scope.reportIdURL=='')?false:true; - $scope.isCopy = false; - $scope.isDefReady = $scope.isEdit; - $scope.activeTabsId = 'definition'; - $scope.pageMsg ='' - $scope.stepNum = 0; - $scope.stepTabs=[ - { - title: 'Definition', - id: 'definition', - uniqueId: 'uniqueStep1', - tabPanelId: 'definitionTab', - disabled: false - - }, { - title: 'SQL', - id: 'sql', - uniqueId: 'uniqueStep2', - tabPanelId: 'sqlTab', - disabled: (!$scope.isDefReady) - }, { - title: 'Columns', - id: 'columns', - uniqueId: 'uniqueTab3x', - tabPanelId: 'columnsTab', - disabled: (!$scope.isDefReady) - }, { - title: 'Form Fields', - id: 'formFields', - uniqueId: 'uniqueTab4x', - tabPanelId: 'formFieldsTab', - disabled: (!$scope.isDefReady) - }, { - title: 'Security', - id: 'security', - uniqueId: 'uniqueTab5x', - tabPanelId: 'securityTab', - disabled: (!$scope.isDefReady) - }, { - title: 'Log', - id: 'log', - uniqueId: 'uniqueTab6x', - tabPanelId: 'logTab', - disabled: (!$scope.isDefReady) - }, { - title: 'Run', - id: 'run', - uniqueId: 'uniqueTab7x', - tabPanelId: 'runTab', - disabled: (!$scope.isDefReady) - } - - ]; - $scope.$watch('activeTabsId', function (newVal, oldVal) { - if(newVal !== oldVal) { - $scope.init(); - } - }); - - $scope.renderStep = function(stepNum){ - var containerElement = angular.element(document.getElementById("stepView")); - containerElement.empty(); - $scope.stepNum = stepNum; - var jsonSrcName = getJsonSrcName(stepNum); - stepFormFactory.renderForm(jsonSrcName, containerElement, $scope); - } - $scope.next = function(){ - $scope.stepNum = $scope.stepNum +1; - $scope.activeTabsId = $scope.stepTabs[$scope.stepNum].id; - }; - - - $scope.previous = function(){ - $scope.stepNum = $scope.stepNum -1; - $scope.activeTabsId = $scope.stepTabs[$scope.stepNum].id; - } - - /*******************Step 1 Definitions****************/ - $scope.displayOptions={ - hideFormFields:false, - hideChart:false, - hideReportData:false, - hideExcel:false, - hidePdf:false - } - $scope.reportIdURL = $routeParams.reportId; - $scope.definitionData={}; - $scope.definitionData.displayOptions=[ - {name:'HideFormFields', selected:false}, - {name:'HideChart', selected:false}, - {name:'HideReportData', selected:false}, - {name:'HideExcel', selected:false}, - {name:'HidePdf', selected:false} - ] - -/* $scope.definitionData.dbSrcOptions=[ - {text:'local', value:'local', selected:true}, - {text:'e911dev_leto07', value:'e911dev_leto07', selected:false}, - ]*/ - - $scope.pageSizeValues=['10','25','50','100','500']; - $scope.pageSizeOptions =[]; - $scope.dbSrcOptions =[]; - $scope.maxRowValues = ['500','1000','2000','3000','4000','5000','10000','15000','20000','25000','30000','35000','40000','45000','50000','65000'] - $scope.maxRowOptions =[]; - $scope.frozenColValues = ['0','1','2','3','4']; - $scope.frozenColOptions =[]; - $scope.dataGridAlignValues = ['Left','Right','Center']; - $scope.dataGridAlignOptions =[]; - $scope.dataContainerValues = ['10','20','30','40','50','60','70','80','90','100','110','120','130','140','150','160','170','180','190','200']; - $scope.dataContainerOptions =[]; - $scope.runTimeFormNumValues = ['1','2','3','4']; - $scope.runTimeFormNumOptions =[]; - /******create*****/ - if(!$scope.isEdit){ - $scope.definitionData.reportType = 'Linear'; - //$scope.definitionData.dbInfo = 'Local'; - //$scope.definitionData.dbSrcOptions = ['Local']; - } - /****end create***/ - - /*functions*/ - $scope.getDefinitionById = function(id) { - $scope.showLoader=true; - raptorReportFactory.getDefinitionByReportId(id).then(function(data){ - $scope.showLoader=false; - $scope.definitionData = data; - $scope.definitionData.dbSrc=data.dbInfo; - $scope.definitionData.dbSrcOptions = data.dbInfoList; - console.log($scope.definitionData.dbSrcOptions[0].name); - - $scope.showLoader = false; - for(x in data.displayOptions){ - if(data.displayOptions[x].name=='HideFormFields') - $scope.displayOptions.hideFormFields = data.displayOptions[x].selected; - else if(data.displayOptions[x].name=='HideChart') - $scope.displayOptions.hideChart = data.displayOptions[x].selected; - else if(data.displayOptions[x].name=='HideReportData') - $scope.displayOptions.hideReportData = data.displayOptions[x].selected; - else if(data.displayOptions[x].name=='HideExcel') - $scope.displayOptions.hideExcel = data.displayOptions[x].selected; - else if(data.displayOptions[x].name=='HidePdf') - $scope.displayOptions.hidePdf = data.displayOptions[x].selected; - } - - $scope.definitionData.frozenColumns = $scope.definitionData.frozenColumns+''; - $scope.definitionData.numFormCols = $scope.definitionData.numFormCols+''; - $scope.definitionData.allowScheduler = data.allowScheduler=='Y'?true:false; - $scope.definitionData.sizedByContent = data.sizedByContent=='Y'?true:false; - - $scope.definitionData.oneTimeRec = data.oneTimeRec=='Y'?true:false; - $scope.definitionData.hourlyRec = data.hourlyRec=='Y'?true:false; - $scope.definitionData.dailyRec = data.dailyRec=='Y'?true:false; - $scope.definitionData.dailyMFRec = data.dailyMFRec=='Y'?true:false; - $scope.definitionData.weeklyRec = data.weeklyRec=='Y'?true:false; - $scope.definitionData.monthlyRec = data.monthlyRec=='Y'?true:false; - - if($scope.definitionData.reportTitle==null || $scope.definitionData.reportTitle=='') - $scope.definitionData.reportTitle = $scope.definitionData.reportName; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getDefinitionById failed."); - $scope.showLoader = false; - }); - } - - $scope.constructureDefDropDown = function(){ - - for(i in $scope.pageSizeValues){ - var v = { - value :$scope.pageSizeValues[i], - text :$scope.pageSizeValues[i] - } - $scope.pageSizeOptions.push(v); - } - for(i in $scope.maxRowValues){ - var v = { - value :$scope.maxRowValues[i], - text :$scope.maxRowValues[i] - } - $scope.maxRowOptions.push(v); - } - for(i in $scope.frozenColValues){ - var v = { - value :$scope.frozenColValues[i]+'', - text :$scope.frozenColValues[i] - } - $scope.frozenColOptions.push(v); - } - for(i in $scope.dataGridAlignValues){ - var v = { - value :$scope.dataGridAlignValues[i].toLowerCase(), - text :$scope.dataGridAlignValues[i] - } - $scope.dataGridAlignOptions.push(v); - } - for(i in $scope.dataContainerValues){ - var v = { - value :$scope.dataContainerValues[i], - text :$scope.dataContainerValues[i] - } - $scope.dataContainerOptions.push(v); - } - for(i in $scope.runTimeFormNumValues){ - var v = { - value :$scope.runTimeFormNumValues[i], - text :$scope.runTimeFormNumValues[i] - } - $scope.runTimeFormNumOptions.push(v); - } - } - - $scope.constructDef = function(){ - var data =Object.assign({}, $scope.definitionData); - if($scope.definitionData.dbSrc){ - console.log("Hello World ", $scope.definitionData.dbSrc); - data.dbInfo = $scope.definitionData.dbSrc; - } - for(x in $scope.definitionData.displayOptions){ - if($scope.definitionData.displayOptions[x].name=='HideFormFields') - data.displayOptions[x].selected = $scope.displayOptions.hideFormFields - else if($scope.definitionData.displayOptions[x].name=='HideChart') - data.displayOptions[x].selected = $scope.displayOptions.hideChart - else if($scope.definitionData.displayOptions[x].name=='HideReportData') - data.displayOptions[x].selected = $scope.displayOptions.hideReportData - else if($scope.definitionData.displayOptions[x].name=='HideExcel') - data.displayOptions[x].selected = $scope.displayOptions.hideExcel - else if($scope.definitionData.displayOptions[x].name=='HidePdf') - data.displayOptions[x].selected = $scope.displayOptions.hidePdf - } - if(data.pageSize==null || data.pageSize.startsWith("Select")) - data.pageSize = null; - if(data.maxRowsInExcelCSVDownload==null || data.maxRowsInExcelCSVDownload.startsWith("Select")) - data.maxRowsInExcelCSVDownload = null; - if(data.frozenColumns==null || data.frozenColumns.startsWith("Select")) - data.frozenColumns = null; - if(data.dataGridAlign==null || data.dataGridAlign.startsWith("Select")) - data.dataGridAlign = null; - if(data.dataContainerHeight==null || data.dataContainerHeight.startsWith("Select")) - data.dataContainerHeight = null; - if(data.dataContainerWidth ==null || data.dataContainerWidth.startsWith("Select")) - data.dataContainerWidth = null; - if(data.numFormCols ==null || data.numFormCols.startsWith("Select")) - data.numFormCols = null; - - if(!$scope.isEdit) - data.reportId=-1; - if(data.reportTitle==null || data.reportTitle=='') - data.reportTitle = data.reportName; - return data; - } - $scope.updateDef = function(){ - $scope.showLoader=true; - var dataToSave = $scope.constructDef(); - raptorReportFactory.updateDefinition(dataToSave,$scope.isEdit).then(function(data){ - $scope.successPopUp('Definition is updated'); - for(x in $scope.stepTabs){ - $scope.stepTabs[x].disabled=false; - } - $scope.showLoader=false; - if(isCopy){ - var newReportId = data.anyStacktrace.split("-")[0]; - if(newReportId!=null && newReportId!='' && newReportId!=-1) - $window.location.href = "#/report_wizard/"+newReportId; - } - },function(error){ - $scope.errorPopUp(error); - $log.error("report-step-controller: updateDefinition by Id failed."); - }); - } - /*******************Step1 Ends****************/ - /*******************Step2 SQL****************/ - $scope.pageisCreating = false; - $scope.sqlScript={ - value:'' - }; - $scope.sqlTestTableData=''; - /*function*/ - $scope.getSql = function(){ - $scope.showLoader = true; - raptorReportFactory.getSqlInSession().then(function(data){ - $scope.sqlInSessionJSON = data; - $scope.sqlScript.value = data.query; - $scope.showLoader = false; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getSearchData failed."); - }); - } - $scope.testRunSql = function(){ - $scope.showLoader=true; - var queryJSON = {query: $scope.sqlScript.value}; - queryJSON = JSON.stringify(queryJSON); - raptorReportFactory.testRunSQL(queryJSON).then(function(data){ - $scope.showLoader=false; - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html', - windowClass:'modal-docked', - sizeClass: 'modal-large', - controller: testRunSqlController, - resolve:{ - queriedData: function(){ - return data; - } - } - }); - - modalInstance.result.finally(function () { - if(!$scope.isEdit){ - $scope.showLoader=true; - $scope.pageisCreating = true; - $scope.pageMsg = 'Please wait while we are creating the report. Page will be reloaded after the creation is done.' - raptorReportFactory.getDefinitionInSession().then(function(data){ - var newReportId = data.reportId; - if(newReportId!=null && newReportId!='' && newReportId!=-1) - $window.location.href = "#/report_wizard/"+newReportId; - - $scope.showLoader = false; - $scope.pageisCreating = false; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: get Definition In Session failed."); - $scope.showLoader = false; - }); - } - }); - - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: test run SQL failed."); - }); - } - - /*******************Step2 End****************/ - /*******************Step3 Column****************/ - $scope.colTableRowData=''; - $scope.isEditCol= true; - - $scope.getColumn = function(){ - $scope.showLoader = true; - raptorReportFactory.getColumnList().then(function(data){ - $scope.colTableRowData = data; - $scope.showLoader = false; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: get column list failed."); - }); - } - - $scope.openColumnPopup = function (rowData) { - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html', - windowClass:'modal-docked', - sizeClass: 'modal-jumbo', - controller: openColumnPopupController, - resolve:{ - colData: function(){ - return rowData; - } - } - }); - modalInstance.result.finally(function () { - $scope.getColumn(); - }); - }; - - /*******************Step3 End****************/ - /*******************Step4 Starts Form Fields****************/ - - $scope.dataProcessing = false; - $scope.formFieldData = []; - $scope.getFormFieldList = function(){ - $scope.showLoader= true; - $scope.formFieldData = []; - raptorReportFactory.getFormFieldList().then(function(data){ - $scope.showLoader= false; - $scope.formFieldData = data; - $scope.formFieldData.sort(function(obj1, obj2) { - // Ascending: first age less than the previous - return obj1.orderSeq - obj2.orderSeq; - }); - - $scope.showLoader = false; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: get formfields failed."); - $scope.showLoader = false; - }); - } - - $scope.formFieldReOrder = function(upID, downID){ - - $scope.moveUpFF={}; - $scope.moveDownFF={}; - $scope.showLoader=true; - raptorReportFactory.getFormFieldEditInfoById(upID).then(function(data){ - $scope.moveUpFF = data; - raptorReportFactory.getFormFieldEditInfoById(downID).then(function(data){ - $scope.moveDownFF = data; - var downOrder = $scope.moveDownFF.orderSeq; - $scope.moveDownFF.orderSeq = $scope.moveUpFF.orderSeq; - $scope.moveUpFF.orderSeq = downOrder; - raptorReportFactory.saveFormFieldEditInfo($scope.moveDownFF).then(function(data){ - raptorReportFactory.saveFormFieldEditInfo($scope.moveUpFF).then(function(data){ - $scope.successPopUp(''); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: saveFormFieldEditInfo failed."); - }).finally(function() { - $scope.showLoader=false; - $scope.getFormFieldList(); - }) - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: saveFormFieldEditInfo failed."); - }); - - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getColumnEditInfoById failed."); - }); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getColumnEditInfoById failed."); - }) - - - } - - $scope.formFieldVerifySQL= function(sqlScript){ - var queryJSON = {query: sqlScript}; - queryJSON = JSON.stringify(queryJSON); - raptorReportFactory.formFieldVerifySQL(queryJSON).then(function(data){ - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html', - sizeClass: 'modal-large', - controller: formFieldVerifySQLController, - resolve:{ - queriedData: function(){ - return data; - } - } - }) - - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: test run SQL failed."); - }); - } - - - $scope.openFormFieldPopup = function (rowData,type) { - $scope.type= type; - var modalInstance = $modal.open({ - scope: $scope, - animation: true, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html', - sizeClass: 'modal-large', - controller: openFormFieldPopupController, - resolve:{ - fieldData: function(){ - return rowData; - } - } - }); - - modalInstance.result.finally(function () { - $scope.getFormFieldList(); - }); - }; - $scope.addFormField = function(){ - $scope.openFormFieldPopup('','add'); - } - - - $scope.deleteFormField = function(rowData) { - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html', - sizeClass: 'modal-small', - controller: deleteFormFieldController, - resolve:{ - rowData: function(){ - return rowData; - } - } - }); - modalInstance.result.then(function () { - $scope.getFormFieldList(); - }, function () { - }); - } - - /*******************Step4 End****************/ - /*******************Step5 Starts Security****************/ - $scope.ynOptions = [ - {value:"true", text:"Yes"}, - {value:"false", text:"No"} - ]; - $scope.addReportUserId={ - id:'' - }; - $scope.addReportRoleId={ - id:'' - }; - $scope.loadSecurityPage = function() { - $scope.showLoader = true; - raptorReportFactory.resetSecurityLoadingCounter(); - - //API call 1: - raptorReportFactory.getSecurityReportOwnerList().then(function(data){ - $scope.reportOwnerList = data; - raptorReportFactory.icrementSecurityLoadingCounter(); - if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;}; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getSecurityReportOwnerList failed."); - }); - - //API call 2: get report role list - raptorReportFactory.getReportRoleList().then(function(data){ - $scope.reportRoleList = data; - raptorReportFactory.icrementSecurityLoadingCounter(); - if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;}; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getReportRoleList failed."); - }); - - //API call 3: get security page basic info - raptorReportFactory.getReportSecurityInfo().then(function(data){ - $scope.reportSecurityInfo = data; - $scope.reportOwnerId ={id: $scope.reportSecurityInfo.ownerId}; - raptorReportFactory.icrementSecurityLoadingCounter(); - if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;}; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getReportSecurityInfo failed."); - $scope.showLoader = false;}); - - //API call 4: retrieve security users - raptorReportFactory.getReportSecurityUsers().then(function(data){ - - $scope.reportSecurityUsers = data; - for (var i=0; i<$scope.reportSecurityUsers.length;i++) { - $scope.reportSecurityUsers[i]["accessAllowed"] = !$scope.reportSecurityUsers[i]["readOnly"]; - $scope.reportSecurityUsers[i].runAccess = true; // need to check why 1702 version is making it true always - } - raptorReportFactory.icrementSecurityLoadingCounter(); - if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;}; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: reportSecurityUsers failed."); - }); - - //API call 5: retrieve security roles - raptorReportFactory.getReportSecurityRoles().then(function(data){ - $scope.reportSecurityRoles = data; - for (var i=0; i<$scope.reportSecurityRoles.length;i++) { - $scope.reportSecurityRoles[i]["accessAllowed"] = !$scope.reportSecurityRoles[i]["readOnly"]; - $scope.reportSecurityRoles[i].runAccess = true; // need to check why 1702 version is making it true always - } - - raptorReportFactory.icrementSecurityLoadingCounter(); - if(raptorReportFactory.checkSecurityLoadingCounter()){$scope.showLoader = false;}; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: reportSecurityRoles failed."); - }); - } - $scope.addReportSecurityUser = function(userId) { - $scope.showLoader=true; - raptorReportFactory.addReportSecurityUser(userId).then(function(data){ - $scope.loadSecurityPage(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: addReportSecurityUser failed."); - }).finally(function() { - $scope.showLoader=false; - }); - } - - $scope.removeReportSecurityUser = function(securityUser) { - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html', - sizeClass: 'modal-small', - controller: removeReportSecurityUserController, - resolve:{ - securityUser: function(){ - return securityUser; - } - } - }); - modalInstance.result.then(function () { - $scope.loadSecurityPage(); - }, function () { - }); - }; - $scope.addReportSecurityRole = function(roleId) { - raptorReportFactory.addReportSecurityRole(roleId).then(function(data){ - $scope.loadSecurityPage(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: addReportSecurityRole failed."); - }); - } - - - $scope.removeReportSecurityRole = function(securityRole) { - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html', - sizeClass: 'modal-small', - controller: removeReportSecurityRoleController, - resolve:{ - securityRole: function(){ - return securityRole; - } - } - }); - modalInstance.result.then(function () { - $scope.loadSecurityPage(); - }, function () { - }); - } - - $scope.saveReportSecurityInfo = function() { - $scope.showLoader = true; - var securityInfo = {'userId':$scope.reportSecurityInfo.ownerId+"",'isPublic':$scope.reportSecurityInfo.isPublic}; - raptorReportFactory.updateReportSecurityInfo(securityInfo).then(function(data){ - $scope.successPopUp(''); - $scope.loadSecurityPage(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: updateReportSecurityInfo failed."); - }); - }; - - $scope.toggleUserEditAccessActive = function(rowData) { - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html', - sizeClass: 'modal-small', - controller: toggleUserEditAccessActiveController, - resolve:{ - rowData: function(){ - return rowData; - } - } - }); - } - - $scope.toggleRoleEditAccessActive = function(rowData) { - var modalInstance = $modal.open({ - scope: $scope, - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html', - sizeClass: 'modal-small', - controller: toggleRoleEditAccessActiveController, - resolve:{ - rowData: function(){ - return rowData; - } - } - }); - } - - /*******************Step5 End****************/ - /*******************Step6 Starts****************/ - $scope.logs = []; - $scope.getReportID = function(){ - $scope.showLoader = true; - raptorReportFactory.getReportLogs($routeParams.reportId).then(function(data){ - $scope.logs = data; - $scope.showLoader = false; - - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getReportID failed."+ error); - }); - } - - - /*******************Step6 End****************/ - /*******************Step7 Starts Run****************/ - $scope.loadDefinitionInSession = function(){ - $scope.showLoader = true; - raptorReportFactory.getDefinitionInSession().then(function(data){ - $scope.reportId = data.reportId; - $scope.showLoader = false; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getDefinitionInSession failed."); - $scope.showLoader = false; - }); - } - $scope.runReport = function(){ - $window.location.href = "#/report_run/c_master="+$scope.reportId+"&refresh=Y"; - } - /*******************Step7 End****************/ - - /********************Init*************/ - $scope.init = function(){ - if ($routeParams.reportMode=="copy") { - $scope.isCopy = true; - raptorReportFactory.copyReportById($routeParams.reportId).then(function(data){ - $scope.isEdit = true; - $scope.reportId = -1; - $scope.getDefinitionById(-1); - },function(error){ - $log.error("raptorReportFactory: deleteFormFieldById failed."); - }); - } /*else if ($routeParams.reportMode=="import") { - $scope.$emit('RefreshInsession'); - }*/ - - - if($scope.activeTabsId=='definition'){ /*Step 1*/ - $scope.constructureDefDropDown(); - if($scope.isEdit) - $scope.getDefinitionById($scope.reportIdURL); //edit - else - $scope.getDefinitionById(-1); //create - }else if($scope.activeTabsId=='sql'){ /*Step 2*/ - $scope.getSql(); - }else if($scope.activeTabsId=='columns'){ - $scope.getColumn(); - }else if($scope.activeTabsId=='formFields'){ - $scope.getFormFieldList(); - }else if($scope.activeTabsId=='security'){ - $scope.loadSecurityPage(); - }else if($scope.activeTabsId=='log'){ - $scope.getReportID(); - }else if($scope.activeTabsId=='run'){ - $scope.reportId = $scope.reportIdURL; - if($scope.reportId==null || $scope.reportId=='') - $scope.loadDefinitionInSession(); - } - } - - $scope.successPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - msg: function () { - var message = { - title: '', - text: msg - }; - return message; - } - } - }); - }; - - $scope.errorPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - msg: function () { - return msg; - } - } - }); - }; - - $scope.init(); -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js deleted file mode 100644 index 1d4659e3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/drools-controller.js +++ /dev/null @@ -1,53 +0,0 @@ -appDS2.controller('droolsController', function($scope, $modal, $routeParams, DroolsService, modalService) { - $scope.tableDate=[]; - $scope.resultsString = ""; - $scope.postDroolsBean={ - droolsFile:'', - className:'', - selectedRules:'' - }; - $scope.filenameFromUrl = $routeParams.filename; - if($scope.filenameFromUrl!='' && $scope.filenameFromUrl!='0') - $scope.postDroolsBean.droolsFile = $scope.filenameFromUrl - $scope.execute = function(postDroolsBean) { - if($scope.postDroolsBean.droolsFile=='' ||$scope.postDroolsBean.className=='' || $scope.postDroolsBean.selectedRules=='' ){ - modalService.errorPopUp ("Required fields cannot be empty"); - return; - } - var uuu = "post_drools/execute"; - var postData={postDroolsBean:postDroolsBean}; - DroolsService.executeDrools(postData).then(function(data){ - $scope.resultsString=data.resultsString; - modalService.successPopUp($scope.resultsString); - },function(error){ - modalService.errorPopUp (error); - }); - }; -}); - -appDS2.controller('droolsListController', function($scope, $modal, DroolsService, modalService) { - $scope.tableDate=[]; - $scope.resultsString = ""; - $scope.postDroolsBean=""; - - $scope.getDroolsList = function(){ - DroolsService.getDroolsList().then(function(data){ - var j = data; - $scope.tableData = JSON.parse(j.data); - $scope.buildTable(); - },function(error){ - modalService.errorPopUp (error); - }); - } - - $scope.buildTable = function(){ - for(x in $scope.tableData){ - if($scope.tableData[x].active_yn=='Y') - $scope.tableData[x].active_yn=true; - else - $scope.tableData[x].active_yn=false; - } - } - -}); - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js deleted file mode 100644 index ab88aed9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/nbook-framecontroller.js +++ /dev/null @@ -1,15 +0,0 @@ -appDS2.config(function($routeProvider) { - $routeProvider - - //.when('/notebook-frame/:id/:key/:value',{ - //.when('/notebook-frame/:nid/:qprms',{ - /*.when('/notebook-frame',{ - templateUrl: 'app/fusion/notebook-integration/scripts/view-models/notebook-frame.html', - controller: 'notebookFrameController' - })*/ - - .otherwise({ - templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html', - controller: 'notebookFrameController' - }); -}) \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js deleted file mode 100644 index efd22f0f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebook-controller.js +++ /dev/null @@ -1,37 +0,0 @@ -appDS2.controller('nbookController', ['$scope', '$location','$window','$http', function ($scope,$location,$window,$http) { - $scope.keyValueList = [{}]; - $scope.submitParameters = function() { - $scope.iframevisibility = false; - $scope.postData = {}; - $scope.additionalqueryParams = {}; - //Use this if there is only one 1 query param key value pair - $scope.additionalqueryParams.paramKey = $scope.qparamKey; - $scope.additionalqueryParams.paramVal = $scope.qparamVal; - var qryStr = ''; - for(var i = 0; i < $scope.keyValueList.length; i++) { - var obj = $scope.keyValueList[i]; - if (obj.qK != undefined && obj.qV != undefined) { - if (qryStr!='') - qryStr = qryStr+'&'+obj.qK+'='+obj.qV; - else - qryStr = obj.qK+'='+obj.qV; - } - } - var queryurl = 'nbooktest.htm?nid='+$scope.notebookvalue+'&'+qryStr; - window.open (queryurl,'_self',false); - } - $scope.addKeyValuePairs = function (kv) { - if ($scope.keyValueList.length < 9) { - $scope.keyValueList.push({ - }); - } else { - document.getElementById("addbtn")["disabled"] = true; - } - } - $scope.removeKeyValuePairs = function (index) { - $scope.keyValueList.splice(index, 1); - if ($scope.keyValueList.length == 8) { - document.getElementById("addbtn")["disabled"] = false; - } - } -}]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js deleted file mode 100644 index 95489918..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-sample/notebookFrameController.js +++ /dev/null @@ -1,24 +0,0 @@ -appDS2.controller('notebookFrameController', function ($scope,$location,$window,$http,$routeParams) { - var nid = $window.location.search.substr($window.location.search.indexOf("=")+1); - $scope.additionalqueryParams={}; - if ($window.location.search.substr($window.location.search.indexOf("=")+1)) { - $scope.queryParams = $window.location.search; - if($window.location.search.substring(0, $window.location.search.length-1).indexOf("&")!=-1) { - $scope.notebookparam = $window.location.search.substring($window.location.search.indexOf("?")+1,$window.location.search.indexOf("&")); - $scope.additionalqueryParams = JSON.parse('{"' + decodeURI($scope.queryParams.substr($scope.queryParams.indexOf("&")+1).replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}'); - } - else { - $scope.notebookparam1 = $window.location.search.substr($window.location.search.indexOf("?")+1); - $scope.notebookparam = $scope.notebookparam1.substring(0, $scope.notebookparam1.length - 1); - } - $scope.notebookvalue = $scope.notebookparam.substr($scope.notebookparam.indexOf("=")+1); - } - else { - $scope.notebookvalue = '833c0a69ec1433fbb2f8752af733cf0e'; - } - $http({method:'POST', url:'rNotebookFE/authCr', data: $scope.notebookvalue, params:{'qparams' : $scope.additionalqueryParams}, transformResponse: [function (data) { - // Do whatever you want! - document.getElementById('itestframe').src = data; - return data; - }]}) -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js deleted file mode 100644 index 2ae2b1b3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowApp.js +++ /dev/null @@ -1,6 +0,0 @@ -/*angular.module('att.abs.helper', []); -angular.module('quantum', []); -//angular.module('ui.bootstrap', []); -appDS2=angular.module("workflowApp", ["ngRoute", 'ngMessages', 'ngCookies', 'b2b.att.tpls', 'ddh.att.tpls','ddh.att.dropdowns', 'ddh.att.switches', 'b2b.att.footer', 'b2b.att.header','gridster','ui.bootstrap']); -*/ -var appDS2=angular.module("workflowApp", ["ngRoute", 'ngMessages','ngCookies','modalServices', 'ngCookies', 'b2b.att','gridster','ui.bootstrap','ui.bootstrap.modal']); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js deleted file mode 100644 index f18f00e9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowController.js +++ /dev/null @@ -1,513 +0,0 @@ - - -appDS2.controller('workflowsControllerDS2', function($scope, $http, $log, $modal) { - $scope.viewPerPage = 5; - $scope.scrollViewsPerPage = 20; - $scope.currentPage = 2; - $scope.totalPage; - $scope.searchCategory = ""; - $scope.searchString = ""; - $scope.radio = { - value: "" - }; - - - $scope.showModal = false; - $scope.toggleModal = function(){ - $scope.showModal = !$scope.showModal; - }; - - $scope.workflow = {}; - $scope.workflow.active = "true"; - - $scope.updateAllWorkflowStatus = function() { - angular.forEach($scope.workflows,function(value){ - $scope.checkWorkflowStatus(value); - }) - } - - $scope.fetchWorkflowsList = function() { - $http.get('workflows/list').then(function(workflowList){ - console.log('Got new list from server = ' + workflowList.data); - $scope.workflows = workflowList.data; - $scope.updateAllWorkflowStatus(); - }); - }; - - $scope.addNewWorkflow = function(newWorkflow) { - $http.post('workflows/addWorkflow/', JSON.stringify(newWorkflow)).success(function() { - $scope.fetchWorkflowsList(); - }); - - $scope.workflow.name = ''; - - }; - - $scope.updateWorkflow = function (workflowToEdit) { - //workflowToEdit.active='true'; - var modalInstance = $modal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html', - sizeClass: 'modal-small', - controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) { - $scope.workflow = workflowToEdit; - $scope.ok = function() { - if( - $scope.workflow.name== undefined|| $scope.workflow.name == null|| $scope.workflow.name == "" - ||$scope.workflow.workflowKey == undefined ||$scope.workflow.workflowKey==null||$scope.workflow.workflowKey=="" - ||$scope.workflow.runLink==undefined||$scope.workflow.runLink==null||$scope.workflow.runLink=="" - - ) - { - alert("please provide valid entries !"); - } - else{ - - console.log('Updating existing workflow ... ' + JSON.stringify($scope.workflow)); - $http.post('workflows/editWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){ - console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow)); - $modalInstance.close($scope.workflow); - }); - } - }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - }], - //End of inner controller - resolve: { - workflow: function() { - console.log('Passing ' + JSON.stringify($scope.workflow)); - return $scope.workflow; - } - } - }); - - modalInstance.result.then(function (editedWorkFlow) { - //Need to convert to proper date - later - delete editedWorkFlow.created; - delete editedWorkFlow.updated; - - delete editedWorkFlow.createdBy; - delete editedWorkFlow.modifiedBy; - - console.log('selected Item ' + JSON.stringify(editedWorkFlow)); - $scope.$emit('workflowAdded', editedWorkFlow); - - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - }; - - $scope.reset = function(){ - console.log("Resetting ...."); - }; - - $scope.update = function(){ - console.log("updating ...."); - }; - - $scope.createWorkflow = function (modalSize) { - - var modalInstance = $modal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html', - sizeClass: 'modal-small', - controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) { - $scope.workflow = {}; - $scope.workflow.active = 'true'; - $scope.ok = function() { - if($scope.workflow.name== undefined|| $scope.workflow.name == null|| $scope.workflow.name == "" - ||$scope.workflow.workflowKey == undefined ||$scope.workflow.workflowKey==null||$scope.workflow.workflowKey=="" - ||$scope.workflow.runLink==undefined||$scope.workflow.runLink==null||$scope.workflow.runLink=="" - - ) - { - alert("please provide valid entries !"); - } - else{ - console.log('Saving new workflow ... ' + JSON.stringify($scope.workflow)); - $http.post('workflows/addWorkflow/', JSON.stringify($scope.workflow)).then(function(returnedWorkflow){ - console.log('Returned Workflow = ' + JSON.stringify(returnedWorkflow)); - $modalInstance.close($scope.workflow); - }); - } - }; -/* console.log(size);*/ - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - }], - //End of inner controller - resolve: { - workflow: function() { - console.log('Passing ' + JSON.stringify($scope.workflow)); - return $scope.workflow; - } - } - }); - - modalInstance.result.then(function (newWorkflow) { - console.log('selected Item ' + JSON.stringify(newWorkflow)); - $scope.$emit('workflowAdded', newWorkflow); - - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - };//End of createWorkflow function - - - $scope.removeWorkflow = function(workflowToRemove){ - var modalInstance = $modal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html', - sizeClass: 'modal-small', - controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) { - $scope.workflowToRemove = workflowToRemove; - $scope.ok = function() { - console.log('Removing workflow ... ' + JSON.stringify($scope.workflowToRemove) + ' on client request.'); - $http.post('workflows/removeWorkflow/', JSON.stringify($scope.workflowToRemove.id)).then(function(){ - console.log('Workflow successfully removed !!!'); - $modalInstance.close(); - }); - }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('workflowRemoved'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - - }; - - - - $scope.scheduleWorkflow = function(workflowToSchedule){ - var modalInstance = $modal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html', - - controller: ['$scope', '$modalInstance', '$http','dateFilter', function ($scope, $modalInstance, $http,dateFilter) { - - $scope.workflowToSchedule = workflowToSchedule; - $scope.dt = new Date(); - $scope.dt2 = new Date(); - $scope.dateformat = 'MM/dd/yyyy', - $scope.datetimeformat = "hh:mm a"; - - $scope.recurrenceOptions =[{ - index:0, value:'One-Time', title:'One-Time' - },{ - index:1, value: 'Hourly',title:'Hourly' - },{ - index:2, value: 'Daily',title:'Daily' - },{ - index:3, value: 'Weekly',title:'Weekly' - }] - $scope.selectRecurrenceOpt = $scope.recurrenceOptions[0]; - - $scope.hours = []; - for (var i=0; i<24; i++){ - var newObj={} - newObj.index = i; - newObj.value = ""+i; - newObj.title = ""+i; - $scope.hours.push(newObj); - } - - $scope.minutes = []; - for (var i=0; i<60; i++){ - var newObj={} - newObj.index = i; - newObj.value = ""+i; - newObj.title = ""+i; - $scope.minutes.push(newObj); - } - - $scope.AMPMOptions =[ - { - index:0, value:'AM', title:'AM' - },{ - index:1, value: 'PM',title:'PM' - }] - - $scope.selectFirstHour =$scope.hours[0]; - $scope.selectFirstMinute =$scope.minutes[0]; - - $scope.selectLastHour =$scope.hours[0]; - $scope.selectLastMinute =$scope.minutes[0]; - - $scope.selectStartAMPMOption=$scope.AMPMOptions[0]; - $scope.selectLastAMPMOption=$scope.AMPMOptions[0]; - - var GenerateCronExpression = function(trigger_dt, RecurrenceOpt) { - var CRON_sec = trigger_dt.getSeconds(); - var CRON_min = trigger_dt.getMinutes(); - var CRON_hr = trigger_dt.getHours(); - var CRON_date= trigger_dt.getDate(); - var CRON_month = trigger_dt.toLocaleString('en-US', {month: 'short'}).toUpperCase(); - var CRON_day = trigger_dt.toLocaleString('en-US', {weekday: 'short'}).toUpperCase(); - var CRON_year = trigger_dt.getFullYear(); - if (RecurrenceOpt ==="One-Time") { - CRON_day = '?' - } else { - if (RecurrenceOpt ==="Hourly") { - CRON_hr = '*'; - CRON_date = '*' - CRON_month = '*' - CRON_day = '?' - CRON_year = '*' - } else if (RecurrenceOpt ==="Daily") { - CRON_date = '*' - CRON_month = '*' - CRON_day = '?' - CRON_year = '*' - } else if (RecurrenceOpt ==="Weekly") { - CRON_date = '*' - CRON_month = '*' - CRON_year = '*' - } - } - - var CRON_Expression = [CRON_sec, CRON_min, CRON_hr, CRON_date, CRON_month, CRON_day, CRON_year]; - return CRON_Expression.join(" "); - } - - $scope.ok = function() { - - // DateTime for the start time: it should be noted that the start time - // for a CRON job should be prior to the trigger time. - $scope.trigger_dt = new Date( $scope.dt.getFullYear() + - "-" + ("0"+($scope.dt.getMonth()+1)).slice(-2) + - "-" +("0"+ $scope.dt.getDate()).slice(-2) + - " " + ("0" + $scope.selectFirstHour.value).slice(-2) + - ":" +("0" + $scope.selectFirstMinute.value).slice(-2) + - ":00.0"); - - $scope.startDateTime_CRON = GenerateCronExpression($scope.trigger_dt, $scope.selectRecurrenceOpt.value) - - //roll back the the start date time by 30 seconds (start time should be 30 seconds prior to trigger time) - dt_st = new Date($scope.trigger_dt - 30*1000) - - startDateTime = dt_st.getFullYear() + - "-" + ("0"+(dt_st.getMonth()+1)).slice(-2) + - "-" +("0"+ dt_st.getDate()).slice(-2) + - " " + ("0" + dt_st.getHours()).slice(-2) + - ":" +("0" + dt_st.getMinutes()).slice(-2) + - ":" + ("0" + dt_st.getSeconds()).slice(-2) +".0"; - $scope.startDateTime = startDateTime; - - $scope.endDateTime = $scope.dt2.getFullYear() + - "-" + ("0"+($scope.dt2.getMonth()+1)).slice(-2) + - "-" +("0"+ $scope.dt2.getDate()).slice(-2) + - " " + ("0"+ $scope.selectLastHour.value).slice(-2) + - ":" +("0" + $scope.selectLastMinute.value).slice(-2) + - ":00.0" - - $scope.WorkflowScheduleObject = {}; - $scope.WorkflowScheduleObject['startDateTime_CRON'] = $scope.startDateTime_CRON; - $scope.WorkflowScheduleObject['startDateTime'] = $scope.startDateTime; - $scope.WorkflowScheduleObject['endDateTime'] = $scope.endDateTime; - $scope.WorkflowScheduleObject['workflowKey'] = $scope.workflowToSchedule.workflowKey; - $scope.WorkflowScheduleObject['recurrence'] = $scope.selectRecurrenceOpt.value; - $scope.WorkflowScheduleObject['workflow_arguments'] = "test"; - $scope.WorkflowScheduleObject['workflow_server_url'] = $scope.workflowToSchedule.runLink; - - - TimeFromNowToStart = new Date($scope.startDateTime)-new Date() - TimeStartToEnd = new Date($scope.endDateTime)-new Date($scope.startDateTime) - - if (TimeFromNowToStart<=0) { - console.log("invalid start time input") - alert("Please ensure the scheduled start date time is later than current time.") - return; - } - if (TimeStartToEnd<=0) { - console.log("invalid end time input") - alert("Please ensure the schduled end date time is later than the start time.") - return; - } - // if successful then save and close - $scope.saveCronJob($scope.WorkflowScheduleObject); - $modalInstance.close(); - - }; - - $scope.saveCronJob = function(cronJobData){ - - console.log('saving cron job data: ' + cronJobData); - var uuu = "workflows/saveCronJob.htm"; - var postData={cronJobDataObj: cronJobData}; - $http.post({ - - url : uuu, - //dataType: 'json', // data type expected from server - contentType: 'application/json', - data: JSON.stringify(postData), // data type sent to server - success : function(data){ - $scope.$apply(function(){ - //$scope.availableRoleFunctions=[];$scope.$apply(); - // new // $scope.availableFnMenuItems=data.availableFnMenuItems; - } - ); - //alert("Update Successful.") ; - //$scope.editRoleFunction = null; - // new /// $modalInstance.close({availableFnMenuItems:$scope.availableRoleFunctions}); - }, - error : function(data){ - alert("Error while saving."); - } - }); - - }; - - $scope.cancel = function() { - console.log("cancel triggered") - $modalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('workflowRemoved'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - - }; - - - - - - - - - $scope.previewWorkflow = function(workflowToPreview,modalSize){ - var modalInstance = $modal.open({ - animation: $scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html', - sizeClass: 'modal-medium', - controller: ['$scope', '$modalInstance', '$http', function ($scope, $modalInstance, $http) { - $scope.workflowToPreview = workflowToPreview; - console.log('previewWorkFlow invoked'); - console.log($scope.workflowToPreview); - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - }] - }); - - modalInstance.result.then(function () { - $scope.$emit('workflowRemoved'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - - }; - - - /* change work flow status based on the boolean variable "suspendBool" which corresponds whether - * we would like to suspend or activate a workflow specified by key. */ - $scope.changeWorkflowStatus = function(workflowToChangeStatus,suspendBool){ - if (workflowToChangeStatus!==null) { - var statusUrl= workflowToChangeStatus.runLink+"/engine-rest/process-definition/key/"+workflowToChangeStatus.workflowKey - var suspendedUrl= statusUrl+"/suspended" - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open('PUT', suspendedUrl, false); - xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - xmlHttp.onload = function() { - if (suspendBool) { - console.log("process definition is now suspended"); - workflowToChangeStatus.active="false" - } else { - console.log("process definition is now activated"); - workflowToChangeStatus.active="true" - } - }; - xmlHttp.send(JSON.stringify({ - "suspended" : suspendBool, - "includeProcessInstances" : true, - "executionDate" : "2013-11-21T10:49:45" - })); - } - - }; - - $scope.activateWorkflow = function(workflowToActivate){ - $scope.changeWorkflowStatus(workflowToActivate,false) - - }; - - $scope.suspendWorkflow = function(workflowToActivate){ - $scope.changeWorkflowStatus(workflowToActivate,true) - }; - - $scope.checkWorkflowStatus = function(workflow) { - if (workflow!==null) { - var statusUrl= workflow.runLink+"/engine-rest/process-definition/key/"+workflow.workflowKey - var xmlHttp3 = new XMLHttpRequest(); - xmlHttp3.open('GET', statusUrl, true); - xmlHttp3.withCredentials = true; - xmlHttp3.send(); - xmlHttp3.onreadystatechange = function() { - if (xmlHttp3.readyState == 4 && xmlHttp3.status == 200) { - // do something with the response in the variable data - var temp = JSON.parse(xmlHttp3.responseText) - if (temp.suspended == false){ - console.log("Activated") - workflow.active="true" - } else { - console.log("Suspended") - workflow.active="false" - } - } - } - } - }; - - $scope.StartWorkflowInstance = function(workflowToStart){ - if (workflowToStart!==null) { - var statusUrl= workflowToStart.runLink+"/engine-rest/process-definition/key/"+workflowToStart.workflowKey - var suspendedUrl= statusUrl+"/submit-form" - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open('POST', suspendedUrl, false); - xmlHttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - xmlHttp.onload = function() { - }; - xmlHttp.send(JSON.stringify({ - "variables": { - "customerId": {"value":"asdasda","type":"String"}, - "amount":{"value":"100","type":"String"} - } - })); - } - - }; - - - $scope.$on('workflowAdded', function(event, newWorkflow) { - console.log("New Workflow to be added in list scope " + JSON.stringify(newWorkflow)); - //$scope.workflows.push(newWorkflow); - $scope.fetchWorkflowsList(); - console.log('newly added workflow = ' + JSON.stringify(newWorkflow)); - }); - - $scope.$on('workflowRemoved', function(event) { - $scope.fetchWorkflowsList(); - }); - - $scope.fetchWorkflowsList(); - - - -}); - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js deleted file mode 100644 index f6ffe8f1..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/ds2-workflows/workflowRouting.js +++ /dev/null @@ -1,8 +0,0 @@ -appDS2.config(function($routeProvider) { - $routeProvider - .when('/all', { - templateUrl: 'app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html', - controller: 'workflowsControllerDS2' - }) -}); - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js deleted file mode 100644 index 2b3663c0..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/fn-menu-add-popup-controller.js +++ /dev/null @@ -1,339 +0,0 @@ -var deletefn_menu_popupController = function ($scope,$modal, items,$modalInstance, $http){ - $scope.fnMenuItem=items; - console.log("fnMenuItems",$scope.fnMenuItem); - var ModalInstanceCtrl = function ($scope, $modalInstance, items,AdminMenuService,$http,$modal) { - $scope.fnMenuItem=items; - $scope.save = function (data) { - $modalInstance.close(data); - }; - - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - - $scope.deleteFun = function(data){ - $modalInstance.close(data); - } - }; - $scope.successPopUp = function () { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return ''; - } - } - }); - }; - $scope.successModelPopUp = function () { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modalpopup.html', - controller: ModalInstanceCtrl, - //sizeClass: 'modal-small', - resolve: { - items: function () { - return ''; - } - } - }); - }; - $scope.errorPopUp = function () { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return ''; - } - } - }); - }; - $scope.deleteMenuItem= function(fnMenuItem){ - var uuu = "admin_fn_menu/removeMenuItem.htm"; - var postData={fnMenuItem: fnMenuItem}; - $http({ - method :'POST', - url : uuu, - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify(postData) - - }).then(function(data){ - $scope.successPopUp(); - // $scope.$apply(function(){$scope.fnMenuItem=data.data.fnMenuItem;}); - location.reload(); - },function(data){ - $scope.errorPopUp(); - // console.log(data); - // modalService.showFailure("Fail","Error while deleting: "+ data.responseText); - }); - }/// examine the LeftMenuService -} - var fn_menu_popupController = function ($scope, $modalInstance, message, $http){ /// examine the LeftMenuService - - if(message.availableFnMenuItem==null) - $scope.label='Add New Menu Item' - - else{ - $scope.label='Edit Menu Item' - //$scope.disableParentId=true; - } - - $scope.getParentData = function(){ - var uuu = "admin_fn_menu/get_parent_list" - $http({ - method : 'GET', - url : uuu, - dataType: 'json', // data type expected from server - contentType: 'application/json', - //data: JSON.stringify(postData), // data type sent to server - - }).then(function(data){ - //$scope.$apply(function(){ - //$scope.availableRoleFunctions=[];$scope.$apply(); - $scope.parentListSelectData=data.data; // data from server - menuItems = $scope.parentListSelectData; - var heirarchicalMenuItems = []; - var children = []; - for ( var i=0; i b[prop]) { - return 1; - } else if (a[prop] < b[prop]) { - return -1; - } - return 0; - } - - }; - - $scope.getParentLabel = function(parentId, parentListSelectData){ - var element; - element = parentListSelectData[0]; - for (var i=0; i length ? "..." : ""; - return text.slice(0, length) + ellipsis; - }; - return text; - } -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js deleted file mode 100644 index 758add6e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/ds2LeftMenu.js +++ /dev/null @@ -1,73 +0,0 @@ -appDS2.directive('ds2Menu', function () { - return { - restrict: 'A', //This means that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements - replace: false, - templateUrl: "app/fusion/scripts/DS2-view-models/ds2Left_menu.html", - controller: ['$scope','$filter','$http','$timeout','$cookies','LeftMenuServiceDS2', function ($scope, $filter, $http, $timeout, $cookies, LeftMenuServiceDS2) { - $scope.menuData = []; - $scope.leftChildData = []; - $scope.leftParentData = []; - $scope.leftMenuItems = []; - $scope.app_name = ""; - $scope.app_name_full = ""; - LeftMenuServiceDS2.getLeftMenu().then(function(response){ - var j = response; - if (j && j !== "null" && j !== "undefined"){ - $scope.leftParentData = JSON.parse(j.data); - $scope.leftChildData = JSON.parse(j.data2); - } else { - console.log("ds2Menu::controller: unexpected getLeftMenu response"); - return; - } - var leftParentList = $scope.leftParentData; - var leftChildItemList = $scope.leftChildData; - for (var i = 0; i < leftParentList.length; i++) { - var parentItem = {}; - parentItem.name = leftParentList[i].label; - parentItem.imageSrc = leftParentList[i].imageSrc; - // Add link to items with no subitems - if (leftChildItemList[i].length == 0) - parentItem.href = leftParentList[i].action; - parentItem.menuItems = []; - for (var j = 0; j < leftChildItemList[i].length; j++) { - if (leftChildItemList[i][j].label != null && leftChildItemList[i][j].label.length > 0) { - var childItem = {}; - childItem.name = leftChildItemList[i][j].label; - childItem.href = leftChildItemList[i][j].action; - parentItem.menuItems.push(childItem) - } - } - $scope.menuData.push(parentItem); - } - },function(error){ - console.log("ds2Menu::controller: getLeftMenu failed", error); - }); - - LeftMenuServiceDS2.getAppName().then(function(response){ - var j = response; - try { - if (j && j !== "null" && j!== "undefined"){ - $scope.app_name_full = j.data; - var processed_app_name = j.data; - var n = processed_app_name.length; - if (n > 15) { - n = 15; - } - $scope.app_name = processed_app_name.substr(0, n); - } else { - throw "Get app_name respsone is not an object/is empty"; - } - } catch (e) { - console.log("error happened while trying to get app name "+e); - return; - } - },function(error){ - console.log("error happened while calling getAppName "+error); - }); - - $scope.drawerOpen = true; - - - }] - } -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js deleted file mode 100644 index 34eaab9d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-directives/footer.js +++ /dev/null @@ -1,27 +0,0 @@ -appDS2.directive('ds2Footer', function () { - return { - restrict: 'A', //This means that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements - replace: false, - templateUrl: "app/fusion/scripts/DS2-view-models/footer.html", - controller: ['$scope', '$filter','ManifestService', function ($scope, $filter,ManifestService) { - $scope.build_number = ''; - ManifestService.getManifest().then(function(response){ - $scope.build_number=response['Build-Number']; - }); - }] - } -}); - -/*Analytics for all the pages*/ -$(function() { - portalHook(); - function portalHook() { - var script = document.createElement('script'); - script.src = "api/v3/analytics" - script.async = true; - script.onload = function() { - runAnalytics(); //runAnaltics() has endpoint in epsdk-fw library. - } - document.head.appendChild(script); - } -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html deleted file mode 100644 index 895abaf9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/error_modal.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -
    -

    Error!

    -
    - -
    -
    -
    -

    {{msg}}

    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html deleted file mode 100644 index 2584216c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modal.html +++ /dev/null @@ -1,20 +0,0 @@ -
    -
    -

    Success!

    -
    - -
    -
    -
    - Your change has been saved! {{msg.text}} -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html deleted file mode 100644 index e0a168ab..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-modal/success_modalpopup.html +++ /dev/null @@ -1,20 +0,0 @@ -
    -
    -

    Success!

    -
    - -
    -
    -
    -
     {{msg.text}}
    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js deleted file mode 100644 index 86bf5cd4..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminMenuService.js +++ /dev/null @@ -1,129 +0,0 @@ -appDS2.factory('AdminMenuService', function ($http, $q) { - return { - getRoleFunctionList: function() { - return $http.get('get_role_functions') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - -getFnMenuItems: function(){ - - return $http.get('admin_fn_menu') - .then(function(response) { - if (typeof response.data === 'object') { - - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - getCollaborateList: function() { - return $http.get('get_collaborate_list') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, -/* saveRoleFunctionList: function(roleData) { - return $http.post('role_function_list/saveRoleFunction',{ - roleData - }) - .then(function(response) { - console.log(response); - if (response.status == 200) { - return response.data; - } else { - console.log('eror'); - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }*/ - saveRoleFunctionList: function(roleData) { - return $http({ - method: "POST", - url: "role_function_list/saveRoleFunction", - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - delRoleFunctionList: function(roleData) { - return $http({ - method: "POST", - url: "role_function_list/removeRoleFunction", - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - clearAdminRegions: function() { - return $http({ - method: "GET", - url: "jcs_admin/clearAll", - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - - - - }; -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js deleted file mode 100644 index 105f0202..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/adminService.js +++ /dev/null @@ -1,453 +0,0 @@ -appDS2.factory('AdminService', function ($http, $q) { - return { - getRole: function(roleId) { - return $http.get('get_role?role_id=' + roleId) - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - getCollaborateList: function() { - return $http.get('get_collaborate_list') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getCacheRegions: function() { - return $http.get('get_regions') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getUsageList: function() { - return $http.get('get_usage_list') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - -getFnMenuItems: function(){ - - return $http.get('admin_fn_menu') - .then(function(response) { - if (typeof response.data === 'object') { - - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - -/* saveRoleFunctionList: function(roleData) { - return $http.post('role_function_list/saveRoleFunction',{ - roleData - }) - .then(function(response) { - console.log(response); - if (response.status == 200) { - return response.data; - } else { - console.log('eror'); - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }*/ - - getRoleFunctionList: function() { - return $http.get('get_role_functions') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - saveRoleFunctionList: function(roleData) { - return $http({ - method: "POST", - url: "role_function_list/saveRoleFunction", - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - addRoleFunctionList: function(roleData) { - return $http({ - method: "POST", - url: "role_function_list/addRoleFunction", - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - delRoleFunctionList: function(roleData) { - return $http({ - method: "POST", - url: "role_function_list/removeRoleFunction", - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - clearAdminRegions: function() { - return $http({ - method: "GET", - url: "jcs_admin/clearAll" - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - showRegionDetails: function(cacheName) { - return $http({ - method: "GET", - url: "jcs_admin/showRegionDetails?cacheName="+cacheName, - contentType: 'application/json', - }).then(function(response) { - //var parsed = JSON.stringify(response); - var responseData = JSON.stringify(response); - if (response.status == 200) { - return response; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - console.log('response'+response); - // something went wrong - return $q.reject(response.data); - }); - }, - - clearRegionFunction: function(cacheName) { - return $http({ - method: "GET", - url: "jcs_admin/clearRegion?cacheName="+cacheName - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - clearItemnFunction: function(cacheName, key) { - return $http({ - method: "GET", - url: "jcs_admin/clearItem?keyName="+key+"&cacheName="+cacheName - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - showItemDetails: function(cacheName, key) { - return $http({ - method: "GET", - url: "jcs_admin/showItemDetails?keyName="+key+"&cacheName="+cacheName - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - //role deletion - delRoleList: function(roleData) { - return $http({ - method: "POST", - url: "role_list/removeRole", - data:JSON.stringify({role:roleData}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - // activate role - activateRole: function(selected,availableRole){ - return $http({ - method: "POST", - url: "role_list/toggleRole", - data:JSON.stringify({role:availableRole}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - // save Role - saveRole: function(role,roleId){ - return $http({ - method: "POST", - url: "role/saveRole.htm?role_id="+roleId, - data:JSON.stringify(role) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - // activate RoleFun Remove - confirmRoleFunRemove: function(selected,availableRole,id){ - return $http({ - method: "POST", - url: "role/removeRoleFunction.htm?role_id=" + id, - data:JSON.stringify({roleFunction:availableRole}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - // activate RoleFun Add - confirmRoleFunAdd: function(selected,availableRole,id){ - return $http({ - method: "POST", - url: "role/addRoleFunction.htm?role_id=" + id, - data:JSON.stringify({roleFunction:availableRole}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - // activate RoleChild Remove - confirmRoleChildRemove: function(selected,availableRole,id){ - return $http({ - method: "POST", - url: "role/removeChildRole.htm?role_id=" + id, - data:JSON.stringify({roleFunction:availableRole}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - // activate RoleChild Add - confirmRoleChildAdd: function(selected,availableRole,id){ - return $http({ - method: "POST", - url: "role/addChildRole.htm?role_id=" + id, - data:JSON.stringify({roleFunction:availableRole}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - //Role Function delete for associated role on Edit Role - removeRoleFunction: function(roleFunction,roleId){ - return $http({ - method: "POST", - url: "role/removeRoleFunction.htm?role_id=" + roleId, - data:JSON.stringify({roleFunction:roleFunction}) - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - -/* toggleProfileActiveFunction: function(profileId) { - return $http({ - method: "GET", - url: "jcs_admin/clearRegion?cacheName="+cacheName - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }*/ - }; -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js deleted file mode 100644 index 061d1ba2..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-modal/modalService.js +++ /dev/null @@ -1,38 +0,0 @@ -angular.module("modalServices",[]).service('modalService', ['$modal', function ($modal) { - var ModalInstanceCtrl = function ($scope, $modalInstance, items,$rootScope) { - $scope.roleFun=items; - $scope.msg=items; - - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - }; - this.errorPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - return msg; - } - } - }); - }; - this.successPopUp = function (msg) { - var modalInstance = $modal.open({ - templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html', - controller: ModalInstanceCtrl, - sizeClass: 'modal-small', - resolve: { - items: function () { - var message = { - title: '', - text: msg - }; - return message; - } - } - }); - }; - }]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js deleted file mode 100644 index bc18f2c8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-profile/selfProfileService.js +++ /dev/null @@ -1,114 +0,0 @@ -appDS2.factory('SelfProfileService', function ($http, $q) { - return { - getProfileDetail: function(profileId) { - return $http({ - method: "GET", - url: "get_profile?profile_id=" + profileId, - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getSelfProfileDetail: function() { - return $http.get('get_self_profile') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - addRole: function(roleData,profileId) { - return $http({ - method: "POST", - url: "profile/addNewRole?profile_id=" + profileId, - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - deRole: function(roleData,profileId) { - return $http({ - method: "POST", - url: "profile/removeRole?profile_id=" + profileId, - data:roleData - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - saveProfile: function(data,profileId) { - return $http({ - method: "POST", - url: "profile/saveProfile?profile_id=" + profileId, - data:data - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - removeRole: function(data,profileId) { - return $http({ - method: "POST", - url: "profile/removeRole?profile_id=" + profileId, - data:data - - }).then(function(response) { - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - }; -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js deleted file mode 100644 index 37845a60..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/raptorReportFactory.js +++ /dev/null @@ -1,674 +0,0 @@ -appDS2.factory('raptorReportFactory', function($http, $q) { - return { - getDefinitionByReportId: function(reportId) { - return $http({ - method: "GET", - url: "report/wizard/retrieve_def_tab_wise_data/"+reportId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDefinitionByReportId did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDefinitionByReportId callback failed"); - }); - }, - getDefinitionByReportId: function(reportId) { - return $http({ - method: "GET", - url: "report/wizard/retrieve_def_tab_wise_data/"+reportId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDefinitionByReportId did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDefinitionByReportId callback failed"); - }); - }, - getDefinitionInSession: function() { - return $http({ - method: "GET", - url: "report/wizard/retrieve_def_tab_wise_data/InSession", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDefinitionInSession did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDefinitionInSession callback failed"); - }); - }, - - createNewDefinition: function() { - return $http({ - method: "GET", - url: "report/wizard/retrieve_def_tab_wise_data/Create", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: createNewDefinition did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: createNewDefinition callback failed"); - }); - }, - updateDefinition: function(updatedJson,isUpdate) { - return $http({ - method: "POST", - url: (isUpdate?("report/wizard/save_def_tab_data/"+updatedJson.reportId):"report/wizard/save_def_tab_data/Create"), - data: updatedJson - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: updateDefinition did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: updateDefinition callback failed"); - }); - }, - saveNewDefinition: function(updatedJson) { - return $http({ - method: "POST", - url: "report/wizard/save_def_tab_data/InSession", - data: updatedJson - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: saveNewDefinition did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveNewDefinition callback failed"); - }); - }, - getSqlInSession: function() { - return $http({ - method: "GET", - url: "report/wizard/retrieve_sql_tab_wise_data/InSession", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getSqlInSession did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getSqlInSession callback failed"); - }); - }, - testRunSQL: function(queryJSON) { - return $http({ - method: "POST", - url: "report/wizard/retrieve_data/true", - data: queryJSON - }).then(function(response) { - if (typeof response.data === 'object') { - return JSON.parse(response.data.data.elements); - } else { - return $q.reject("raptorReportFactory: testRunSQL did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: testRunSQL callback failed"); - }); - }, - formFieldVerifySQL: function(queryJSON) { - return $http({ - method: "POST", - url: "report/wizard/retrieve_data/false", - data: queryJSON - }).then(function(response) { - if (typeof response.data === 'object') { - return JSON.parse(response.data.data.elements); - } else { - return $q.reject("raptorReportFactory: formFieldVerifySQL did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: formFieldVerifySQL callback failed"); - }); - }, - getColumnList: function() { - return $http({ - method: "GET", - url: "report/wizard/list_columns", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getColumnList did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getColumnList callback failed"); - }); - }, - getDrillDownReportList: function() { - return $http({ - method: "GET", - url: "report/wizard/list_drilldown_reports", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDrillDownReportList did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDrillDownReportList callback failed"); - }); - }, - getTotalColList: function() { - return $http({ - method: "GET", - url: "report/wizard/list_drilldown_reports", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDrillDownReportList did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDrillDownReportList callback failed"); - }); - }, - getTotalForTheColList : function(){ - return $http({ - method: "GET", - url: "report/wizard/retrieveTotalForTheColList", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: retrieveTotalForTheColList did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: retrieveTotalForTheColList callback failed"); - }); - }, - getChildReportFormField: function(reportId) { - return $http({ - method: "GET", - url: "report/wizard/list_child_report_ff/"+reportId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDrillDownReportList did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDrillDownReportList callback failed"); - }); - }, - getChildReportColumn: function(reportId) { - return $http({ - method: "GET", - url: "report/wizard/list_child_report_col/"+reportId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getChildReportColumn did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getChildReportColumn callback failed"); - }); - }, - getColumnEditInfoById: function(columnId){ - return $http({ - method: "GET", - url: "report/wizard/retrieve_col_tab_wise_data/"+columnId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getColumnEditInfoById did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getColumnEditInfoById callback failed"); - }); - }, - saveColumnEditInfo: function(updatedColumnJson){ - return $http({ - method: "POST", - url: "report/wizard/save_col_tab_data", - data: updatedColumnJson - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: saveColumnEditInfo did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveColumnEditInfo callback failed"); - }); - }, - postImportXml: function(importXMLJSON){ - return $http({ - method: "POST", - url: "report/wizard/import_report", - data: importXMLJSON - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: importXml did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: importXml callback failed"); - }); - }, - copyReportById: function(reportId) { - return $http({ - method: "GET", - url: "report/wizard/copy_report/"+reportId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: copyReportById did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: copyReportById callback failed"); - }); - }, - saveFormFieldEditInfo: function(updatedFormFieldJson){ - return $http({ - method: "POST", - url: "report/wizard/save_formfield_tab_data", - data: updatedFormFieldJson - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: saveFormFieldEditInfo did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveFormFieldEditInfo callback failed"); - }); - }, - addFormFieldEditInfo: function(addFormFieldJson){ - return $http({ - method: "POST", - url: "report/wizard/add_formfield_tab_data", - data: addFormFieldJson - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: saveFormFieldEditInfo did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveFormFieldEditInfo callback failed"); - }); - }, - - getFormFieldList: function() { - return $http({ - method: "GET", - url: "report/wizard/list_formfields", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getFormFieldList did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getFormFieldList callback failed"); - }); - }, - getFormFieldEditInfoById: function(fieldId){ - return $http({ - method: "GET", - url: "report/wizard/retrieve_form_tab_wise_data/"+fieldId, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getColumnEditInfoById did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getFormFieldEditInfoById callback failed"); - }); - }, - deleteFormFieldById: function(fieldId){ - return $http({ - method: "GET", - url: "report/wizard/retrieve_form_tab_wise_data/"+fieldId+"/delete", - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: deleteFormFieldById did not return a valid JSON object."); - } - return response.data; - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: deleteFormFieldById callback failed"); - }); - }, - getColumns: function() { - return $http - .get('raptor.htm?action=report.search.execute&r_page=0') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getColumns did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getColumns callback failed"); - }); - }, - - getSearchData : function() { - return $http - .get('raptor.htm?action=report.search.execute&r_page=0') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getSearchData did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getSearchData callback failed"); - }); - }, - - getSecurityReportOwnerList: function() { - return $http - .get('report/wizard/security/retrieveReportOwner') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getSecurityReportOwnerList did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getSecurityReportOwnerList callback failed"); - }); - }, - getReportRoleList: function() { - return $http - .get('report/wizard/security/retrieveReportRoleList') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getReportRoleList did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getReportRoleList callback failed"); - }); - }, - getReportSecurityInfo: function() { - return $http - .get('report/wizard/security/getReportSecurityInfo') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getReportSecurityInfo did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getReportSecurityInfo callback failed"); - }); - }, - getReportSecurityUsers: function() { - return $http - .get('report/wizard/security/retrieveReportUserList') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getReportSecurityUsers did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getReportSecurityUsers callback failed"); - }); - }, - - getReportSecurityRoles: function() { - return $http - .get('report/wizard/security/getReportSecurityRoles') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getReportSecurityUsers did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getReportSecurityUsers callback failed"); - }); - }, - - - getSearchDataAtPage : function(pageSearchParameter) { - return $http - .get('raptor.htm?action=report.search.execute&r_page='+pageSearchParameter) - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getSearchDataAtPage did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getSearchDataAtPage callback failed"); - }); - }, - setDrillDownPopupOptions: function(drillDownURL,drillDownParams) { - this.drillDownURL = drillDownURL; - this.drillDownParams = drillDownParams; - }, - getReportDeleteStatus : function(deleteUrl) { - return $http.get(deleteUrl).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getReportDeleteStatus did not return a valid JSON object."); - } - - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getReportDeleteStatus callback failed"); - }); - }, - addReportSecurityUser: function(UserId) { - return $http({ - method: "POST", - url: "report/security/addReportUser", - data: UserId - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: addReportSecurityUser did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveNewDefinition callback failed"); - }); - }, - removeReportSecurityUser: function(UserId) { - return $http({ - method: "POST", - url: "report/security/removeReportUser", - data: UserId - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: removeReportSecurityUser did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveNewDefinition callback failed"); - }); - }, - addReportSecurityRole: function(RoleId) { - return $http({ - method: "POST", - url: "report/security/addReportRole", - data: RoleId - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: addReportSecurityRole did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: saveNewDefinition callback failed"); - }); - }, - removeReportSecurityRole: function(RoleId) { - return $http({ - method: "POST", - url: "report/security/removeReportRole", - data: RoleId - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: removeReportSecurityRole did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: removeReportSecurityRole callback failed"); - }); - }, - updateReportSecurityInfo: function(securityInfo) { - return $http({ - method: "POST", - url: "report/security/updateReportSecurityInfo", - data: securityInfo - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: updateReportSecurityInfo did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: updateReportSecurityInfo callback failed"); - }); - }, - getReportLogs: function(reportId) { - return $http({ - method: "GET", - url: "report/wizard/get_report_log/"+reportId - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getReportLogs did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getReportLogs callback failed"); - }); - }, - - toggleUserEditAccess: function(reportUser) { - var readOnly = reportUser.accessAllowed?"N":"Y"; - return $http({ - method: "POST", - url:"report/security/toggleUserEditAccess/"+reportUser.id, - data: readOnly - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: toggleUserEditAccess did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: toggleUserEditAccess callback failed"); - }); - }, - toggleRoleEditAccess: function(reportRole) { - var readOnly = reportRole.accessAllowed?"N":"Y"; - return $http({ - method: "POST", - url:"report/security/toggleRoleEditAccess/"+reportRole.id, - data: readOnly - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: toggleRoleEditAccess did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: toggleRoleEditAccess callback failed"); - }); - }, - resetSecurityLoadingCounter: function() { - this.securityPageApiCounter = 0; - this.securityPageApiTotalCount = 5; - }, - icrementSecurityLoadingCounter: function() { - this.securityPageApiCounter = this.securityPageApiCounter+1; - }, - checkSecurityLoadingCounter: function() { - return (this.securityPageApiCounter ==this.securityPageApiTotalCount); - }, - getDrillDownParamDef: function(param) { - return $http({ - method: "GET", - url: "report/wizard/drill_down_param/"+param - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject("raptorReportFactory: getDrillDownParamDef did not return a valid JSON object."); - } - }, function(response) { - // something went wrong - return $q.reject("raptorReportFactory: getDrillDownParamDef callback failed"); - }); - } - }; -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js deleted file mode 100644 index 2b59c578..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/reportModalControllers.js +++ /dev/null @@ -1,423 +0,0 @@ -var ModalInstanceCtrl = function ($scope, $modalInstance, msg,$rootScope) { - $scope.msg=msg; -} - -var testRunSqlController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, queriedData) { - var init = function() { - $scope.isError = false; - if (queriedData.errormessage) { - $scope.isError = true; - $scope.errormessage = queriedData.errormessage; - $scope.stacktrace = queriedData.stacktrace; - } else { - $scope.queryData = queriedData; - } - } - init(); - $scope.close = function() { - $modalInstance.dismiss(); - }; -} - -var openColumnPopupController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, colData, $routeParams) { - $scope.processingData=true; - $scope.colInfo={}; - $scope.drilldownReports={}; - $scope.isEditCol = true; - var init = function() { - $scope.displayAlignmentOptions = [ - {value:"null", text:""}, - {value:"Left", text:"Left"}, - {value:"Center", text:"Center"}, - {value:"Right", text:"Right"} - ]; - $scope.dataTypeOptions = [ - {value:"Number", text:"Number"}, - {value:"Date", text:"Date"}, - {value:"VARCHAR2", text:"Character"}, - {value:"Hyperlink", text:"Hyperlink"} - ]; - - $scope.multiGroupColLevel = [ - {value:"1", text:"1"}, - {value:"2", text:"2"}, - {value:"3", text:"3"}, - {value:"4", text:"4"} - ]; - $scope.indentValues = [ - {value:"1", text:"1"}, - {value:"2", text:"2"}, - {value:"3", text:"3"}, - ]; - } - - $scope.totalForTheColList= []; - raptorReportFactory.getTotalForTheColList().then(function(data){ - $scope.totalForTheColList = data; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: retrieveTotalForTheColList failed."); - }); - - raptorReportFactory.getDrillDownReportList().then(function(data2){ - $scope.drilldownReports = data2; - raptorReportFactory.getColumnEditInfoById(colData.id).then(function(data){ - $scope.colInfo = data; - if($scope.colInfo.noWrap!=null && ($scope.colInfo.noWrap=='Y' || $scope.colInfo.noWrap==true)) - $scope.colInfo.noWrap=true; - else - $scope.colInfo.noWrap=false; - $scope.processingData=false; - init(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getColumnEditInfoById failed."); - }); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getDrillDownReportList failed."); - }); - - $scope.massageData = function(){ - if(!Number.isInteger($scope.colInfo.level)) - $scope.colInfo.level = null; - if(!Number.isInteger($scope.colInfo.indentation)) - $scope.colInfo.indentation = null; - } - - $scope.save = function() { - $scope.processingData=true; - $scope.colInfo.noWrap=($scope.colInfo.noWrap==true)?'Y':'N'; - if($scope.colInfo.level && $scope.colInfo.level.startsWith("Select")) - $scope.colInfo.level = null; - if($scope.colInfo.displayTotal && $scope.colInfo.displayTotal.startsWith("Select")) - $scope.colInfo.displayTotal = null; - - if($scope.colInfo.indentation && $scope.colInfo.indentation.startsWith("Select")) - $scope.colInfo.indentation = null; - raptorReportFactory.saveColumnEditInfo($scope.colInfo).then(function(data){ - $scope.successPopUp(''); - $scope.processingData=false; - $modalInstance.close(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: save failed."); - $scope.processingData=false; - }); - }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; - - - /****Drill***/ - $scope.drilDownValues=[]; - $scope.childReportFF =[]; - $scope.childReportCol = []; - $scope.complete = function() { - var drillDownParams=''; - var ampStr = "&"; - var count =0; - for(var i in $scope.selectedDrillReportFormField){ - var selectedRadio = $scope.selectedDrillReportFormField[i]; - if( selectedRadio != (i+'-0')){// if it's not 'No Value' - if (typeof($scope.drillDownParams[i].fieldName) == "undefined"){ - if(i>=($scope.drilDownFormField.length-1)){ - var id = $scope.drilDownFormField[i].id; - drillDownParams+= id+"="; - } - }else - drillDownParams+=$scope.drillDownParams[i].fieldName+"="; - if( selectedRadio == (i+'-1')){//'Fixed Value' - drillDownParams+= $scope.drillDownParams[i].valValue+ampStr; - }else if( selectedRadio == (i+'-2')){//'Value of Column' - drillDownParams+= ('['+$scope.drillDownParams[i].valColId+']'+ampStr); - }else if( selectedRadio == (i+'-3')){//'Value of form field' - drillDownParams+= ('[!'+$scope.drillDownParams[i].valFieldId+']'+ampStr); - }else if( selectedRadio == (i+'-4')){//'Value set' - if($scope.drillDownParams[i].valColId!='' && $scope.drillDownParams[i].valFieldId!='' && $scope.drillDownParams[i].valColId!='Select' && $scope.drillDownParams[i].valFieldId!='Select') - drillDownParams+= ('['+$scope.drillDownParams[i].valColId+'!'+$scope.drillDownParams[i].valFieldId+']'+ampStr); - } - } - } - drillDownParams = drillDownParams.substring(0, drillDownParams.length - 1); - $scope.colInfo.drilldownParams = drillDownParams; - $scope.isEditCol=true; - }; - $scope.selectedDrillReportFormField = []; - $scope.drillDownParams = {}; - $scope.getDrillReportFormField = function(ddReportId,param){ - $scope.isEditCol = false; - $scope.processingData = true; - - raptorReportFactory.getChildReportFormField(ddReportId).then(function(data){ - $scope.drilDownFormField = data; - for(var i in data){ - var array = [ - {selection: 'No Value', value:'Accept Default', radioGroup :i+'-'+'0'}, - {selection: 'Fixed Value', value:'Accept Default' , radioGroup :i+'-'+'1'}, - {selection: 'Value of Column', value:'Accept Default', radioGroup :i+'-'+'2'}, - {selection: 'Value of form field', value:'Accept Default', radioGroup :i+'-'+'3'}, - {selection: 'Value set', value:'Pass the value of the selected column if not empty, otherwise pass the value of the selected form field', radioGroup :i+'-'+'4'} - ] - $scope.drilDownValues.push(array); - } - - if(param!=''){ - raptorReportFactory.getDrillDownParamDef(param).then(function(dataDD){ - var temp = $scope.drilDownFormField; - $scope.drillDownParams = []; - for(var i in $scope.drilDownFormField){ - $scope.selectedDrillReportFormField[i] = i+'-0'; - var tmp = { - fieldName: $scope.drilDownFormField[i].id, - valColId:'', - ValFieldId:'', - valType:'', - valValue:'' - }; - $scope.drillDownParams.push(tmp); - } - for(var i in $scope.drilDownFormField){ - for(var j in dataDD){ - if($scope.drilDownFormField[i].id == dataDD[j].fieldName){ - $scope.selectedDrillReportFormField[i] = i+'-'+dataDD[j].valType; - $scope.drillDownParams[i] = dataDD[j]; - } - } - } - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getChildReportFormField failed."); - }).finally(function() { - $scope.processingData=false; - }); - }else{ - $scope.processingData = false; - } - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getChildReportFormField failed."); - }); - - raptorReportFactory.getChildReportFormField($scope.colInfo.drilldownURL).then(function(data){ - $scope.childReportFF =data; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getChildReportFormField failed."); - }); - - raptorReportFactory.getChildReportColumn($routeParams.reportId).then(function(data){ - $scope.childReportCol =data; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getChildReportFormField failed."); - }); - } -} - - -var openFormFieldPopupController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, fieldData) { - $scope.formFieldEditData = {}; - $scope.sqlAsDefaultValue ={ - value:false - }; - $scope.predefinedValues ={ - value:'' - }; - var init = function() { - if($scope.type=='edit'){ - $scope.dataProcessing = true; - raptorReportFactory.getFormFieldEditInfoById(fieldData.id).then(function(data){ - $scope.dataProcessing = false; - $scope.formFieldEditData = data; - if($scope.formFieldEditData.fieldDefaultSQL) - $scope.sqlAsDefaultValue.value = true; - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: getColumnEditInfoById failed."); - }).finally(function() { - $scope.dataProcessing=false; - }); - }else{ - $scope.formFieldEditData ={ - groupFormField: false, - visible:"true" - }; - } - $scope.ynOptions = [ - {value:"true", text:"Yes"}, - {value:"false", text:"No"} - ]; - $scope.verifyFieldValueOptions = [ - {value:null, text:"--- Do Not Perform Validation ---"}, - {value:"DATE", text:"Date"}, - {value:"TIMESTAMP_HR", text:"TimeStamp (Hour)"}, - {value:"TIMESTAMP_MIN", text:"TimeStamp (Hour,Min)"}, - {value:"TIMESTAMP_SEC", text:"TimeStamp (Hour,Min,Sec)"}, - {value:"INTEGER", text:"Integer"}, - {value:"POSITIVE_INTEGER", text:"Positive Integer"}, - {value:"NON_NEGATIVE_INTEGER", text:"Positive Integer. Cannot Be Zero"}, - {value:"FLOAT", text:"Any Number"}, - {value:"NON_NEGATIVE_FLOAT", text:"Positive Number"}, - {value:"POSITIVE_FLOAT", text:"Positive Number. Cannot Be Zero"} - ] - $scope.fieldTypeOptions = [ - {value:"TEXT", text:"Text Box"}, - {value:"LIST_BOX", text:"List Box"}, - {value:"LIST_MULTI_SELECT", text:"Multi-select List Box"}, - {value:"HIDDEN", text:"Hidden"} - ]; - } - init(); - $scope.save = function() { - if($scope.sqlAsDefaultValue.value && ($scope.formFieldEditData.fieldDefaultSQL==null || $scope.formFieldEditData.fieldDefaultSQL=='')){ - $scope.errorPopUp("if SQL as Default Value is checked, 'Default SQL' and 'SQL Generating Custom List of Values' fields cannot be empty"); - return; - }else if(!$scope.sqlAsDefaultValue.value){ - $scope.formFieldEditData.fieldDefaultSQL=null; - } - $scope.dataProcessing = true; - console.log($scope.formFieldEditData.validationType); - if($scope.formFieldEditData.validationType=='Select') - $scope.formFieldEditData.validationType = ''; - raptorReportFactory.saveFormFieldEditInfo($scope.formFieldEditData).then(function(data){ - $scope.dataProcessing = false; - $scope.successPopUp(''); - $modalInstance.close(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: saveFormFieldEditInfo failed."); - }).finally(function() { - $scope.dataProcessing=false; - }); - }; - - $scope.add = function() { - $scope.dataProcessing = true; - $scope.formFieldEditData.visible== - raptorReportFactory.addFormFieldEditInfo($scope.formFieldEditData).then(function(data){ - $scope.dataProcessing = false; - $modalInstance.close(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: add FormFieldEditInfo failed."); - }).finally(function() { - $scope.dataProcessing=false; - }); - }; - - $scope.addPredefinedValueList = function() { - if($scope.formFieldEditData.predefinedValueList==null) - $scope.formFieldEditData.predefinedValueList=[]; - var item ={ - id:$scope.predefinedValues.value, - name:$scope.predefinedValues.value, - selected:false - }; - if($scope.predefinedValues.value!=null && $scope.predefinedValues.value!='') - $scope.formFieldEditData.predefinedValueList.push(item); - }; - - $scope.removePredefinedValueList = function(removeVal) { - var removeIndex = null; - for(i in $scope.formFieldEditData.predefinedValueList){ - if($scope.formFieldEditData.predefinedValueList[i].id == removeVal){ - removeIndex= i; - break; - } - } - $scope.formFieldEditData.predefinedValueList.splice(removeIndex, 1) - }; - - $scope.cancel = function() { - $modalInstance.dismiss(); - }; -} - - -var deleteFormFieldController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) { - $scope.tempFieldId = rowData.id; - $scope.ok = function() { - raptorReportFactory.deleteFormFieldById(rowData.id).then(function(data){ - $modalInstance.close(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: deleteFormFieldById failed."); - }); - } - $scope.cancel = function() { - $modalInstance.dismiss(); - }; -} - -var removeReportSecurityUserController = function ($scope, $modalInstance, $http, $log, raptorReportFactory,securityUser) { - $scope.securityUserName = securityUser.name; - $scope.ok = function() { - raptorReportFactory.removeReportSecurityUser(securityUser.id).then(function(data){ - $modalInstance.close(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: removeReportSecurityUser failed."); - }); - } - $scope.cancel = function() { - $modalInstance.dismiss(); - }; -} - -var removeReportSecurityRoleController = function ($scope, $modalInstance, $http, $log, raptorReportFactory,securityRole) { - $scope.securityRoleName = securityRole.name; - $scope.ok = function() { - raptorReportFactory.removeReportSecurityRole(securityRole.id).then(function(data){ - $modalInstance.close(); - },function(error){ - $scope.errorPopUp(error); - $log.error("raptorReportFactory: removeReportSecurityRole failed."); - }); - } - $scope.cancel = function() { - $modalInstance.dismiss(); - }; -} - -var formFieldVerifySQLController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, queriedData) { - var init = function() { - $scope.isError = false; - if (queriedData.errormessage) { - $scope.isError = true; - $scope.errormessage = queriedData.errormessage; - $scope.stacktrace = queriedData.stacktrace; - } else { - $scope.queryData = queriedData; - } - } - init(); - $scope.close = function() { - $modalInstance.dismiss(); - }; -} -var toggleUserEditAccessActiveController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) { - $scope.rowData = rowData; - $scope.toggleEditAccessStatus = function(rowData) { - raptorReportFactory.toggleUserEditAccess(rowData); - $modalInstance.close(); - }; - - $scope.cancelEditAccessToggle = function(rowData) { - rowData.accessAllowed = ! rowData.accessAllowed; - $modalInstance.dismiss('cancel');} -} - -var toggleRoleEditAccessActiveController = function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) { - $scope.rowData = rowData; - $scope.toggleEditAccessStatus = function(rowData) { - raptorReportFactory.toggleRoleEditAccess(rowData); - $modalInstance.close(); - }; - - $scope.cancelEditAccessToggle = function(rowData) { - rowData.accessAllowed = ! rowData.accessAllowed; - $modalInstance.dismiss('cancel');} -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js deleted file mode 100644 index 5c711425..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-raptor-report/stepFormFactory.js +++ /dev/null @@ -1,198 +0,0 @@ -(function(){ - var stepFormFactory = function($http, $compile, $q, $log) { - - var factory = {}; - - factory.getStepJSONData = function(jsonSrcName) { - $http({ - method: "GET", - url: jsonSrcName, - }).then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - - - factory.renderColumnForm = function(scope) { - - } - factory.renderForm = function(jsonSrcName, elem, scope) { - let defer = $q.defer(); - var divStepForm = document.getElementById('stepView'); - var textStyle = "width:300px" - var textAreaStyle = "width:300px" - if(divStepForm) - while(divStepForm && divStepForm.firstChild){ - divStepForm.removeChild(divStepForm.firstChild); - } - $http({ - method: 'GET', - url: jsonSrcName - }).then(function successCallback(response) { - // this callback will be called asynchronously - // when the response is available - if (typeof response.data === 'object') { - var json = response.data; - var step = json.step; - var div =d3.select(elem[0]); - var modelNameDict = {}; - - div.append("h1").attr({"class":"font-color:blue"}).text(json.content.title); - div.append("div").html(json.content.contentHtml); - var sections = json.content.sections; - sections.forEach(function(d, i) { - var sectionDiv = div.append("div"); - sectionDiv.attr("id", "section_"+i); - if(d.title != "finalButton") - sectionDiv.append("h4").text(d.title); - var proj_id_hidden = sectionDiv.append("input"); - proj_id_hidden.attr({"type":"hidden", "value":"", "name": "proj_id", "ng-model":"proj_id", "style": "" }); - - var elements = d.elements; - var buttons = d.buttons; - var elementTable ; - if(elements) { - elements.forEach(function(element, elementIndex) { - - var elementBody ; - if(elementIndex == 0) { - elementTable = sectionDiv.append("table").attr({"border":"0", "cellpadding":"4", "cellspacing":"0"}); - elementBody = elementTable.append("tbody"); - } else { - elementBody = elementTable = sectionDiv.select("tbody"); - } - if(element.input == 'hidden') { - - } else { - var tr = elementBody.append("tr") - var cellWidthStyle = {"width":"50%"} - - if (!(element.spanOverTwoColumns)){ - var td = tr.append("td").attr({"width":"30%","class":"tdLeftColumn"}); - if (element.input=="checkboxGroup") { - td = td.attr({"rowspan":element.checkboxes.length}) - } - td.text(element.displayName); - var cellWidthStyle = {"width":"500px;"} - } - td = tr.append("td").attr(cellWidthStyle); - var model_name_appendix=''; - if (element.name in modelNameDict) { - modelNameDict[element.name]=modelNameDict[element.name]+1 - model_name_appendix ='_'+modelNameDict[element.name] - } else { - modelNameDict[element.name]=0 - } - if(element.input == 'text') { - var inp_text = td.append("input"); - inp_text.attr({"type":"text", "value":element.defaultValue, "name": element.name, "ng-model":element.name+model_name_appendix, "style": (element.style?element.style:textStyle) }); - } - else if(element.input === 'checkbox') { - var temptd= td.append("label").attr({"class":"checkbox"}); - var temptd2= temptd.append("input").attr({"type":"checkbox", "ng-model": element.checkbox.value}); - var temptd3= temptd.append("i").attr({"class":"skin"}) - var temptd3= temptd.append("span").text(element.checkbox.text); - - } else if (element.input === 'radio') { - element.options.forEach(function(d,i) { - td.append("input").attr({"type":"radio", "id":element.name+"_"+d.id, "ng-model":element.name+model_name_appendix, "name": element.name, "value": d.id}); - td.append("label").text(d.name); - }) - } else if (element.input === 'checkboxGroup') { - - element.checkboxes.forEach(function(d,i) { - if (i==0) { - var temptd= td.append("label").attr({"class":"checkbox"}); - var temptd2= temptd.append("input").attr({"type":"checkbox", "ng-model": d.value}); - var temptd3= temptd.append("i").attr({"class":"skin"}) - var temptd3= temptd.append("span").text(d.text); - } else { - var tr = elementBody.append("tr") - td = tr.append("td").attr({"width":"50%"}); - var temptd= td.append("label").attr({"class":"checkbox"}); - var temptd2= temptd.append("input").attr({"type":"checkbox", "ng-model": d.value}); - var temptd3= temptd.append("i").attr({"class":"skin"}) - var temptd3= temptd.append("span").text(d.text); - } - }) - } else if (element.input === 'textarea') { - td.append("textarea").attr({"rows":"4", "cols":"50", "ng-model":element.name+model_name_appendix, "name": element.name, "style": (element.style?element.style:textAreaStyle)}); - } - else if (element.input === 'select') { - var select = td.append("select"); - // need to store options into element name; - select - .attr({"name": element.name,"b2b-dropdown":"","ng-model":element.ngModelName,"style":"width:300px"}) - .attr("placeholder-text","Select"); - - - /* var data = ["Option 1", "Option 2", "Option 3"]*/ - var options = select - .selectAll('option') - .data(element.options).enter() - .append('option').attr("value", function(d) {return d.value}) - .attr("b2b-dropdown-list","") - .text(function (d) { return d.text; }) - ; - } else if (element.input === 'tabletext') { - var colArray = element.columns.split(','); - var table = td.append("table"); - table.attr("border", "1"); - - colArray.forEach(function(d) { - table.append("th").text(d); - }) - - } - } - }) - if (buttons) { - buttons.forEach(function(button, buttonIndex) { - sectionDiv.append("input").attr({"type":"button", "value": button.text, "ng-click":button.ngFunction,"class":"btn btn-alt btn-small"}); - }) - sectionDiv.append("br"); - } - } - else { //if elements - if((json.step != "1")&&(!json.hideBackButton)) - sectionDiv.append("input").attr({"type":"button", "value": "Back", "ng-click":"previous()","class":"btn btn-alt btn-small"}); - if((d.title == "finalButton")&(!json.hideSaveButton)) - sectionDiv.append("input").attr({"type":"button", "value": "Save", "ng-click":"save()", "class":"btn btn-alt btn-small"}); - if(!json.last_step) - sectionDiv.append("input").attr({"type":"button", "value": "Next", "ng-click":"next()", "class":"btn btn-alt btn-small"}); - - } - }) - elem.html(div.html()); - elem.removeAttr("step-form"); - $compile(elem.contents())(scope); - defer.resolve(); - } else { - $log.error - return $q.reject(response.data); - } - }, function errorCallback(response) { - // called asynchronously if an error occurs - // or server returns response with an error status. - $log.error("reponse data is not a valid JSON object"); - defer.resolve(); - }); - //} - return defer.promise; - }; - - return factory; - }; - - stepFormFactory.$inject = ['$http', '$compile', '$q']; - - appDS2.factory('stepFormFactory', stepFormFactory); - -}()) diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js deleted file mode 100644 index 90c3d00d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/ds2-sample-page/droolsService.js +++ /dev/null @@ -1,53 +0,0 @@ -appDS2.factory('DroolsService', function ($http, $q) { - return { - getDroolsList: function() { - return $http.get('getDrools') - .then(function(response) { - console.log(response); - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getDroolDetails: function(selectedFile) { - return $http.get('getDroolDetails'+'?selectedFile=' + selectedFile ) - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - executeDrools:function(droolsData) { - return $http({ - method: "POST", - url: "post_drools/execute", - data:droolsData - }).then(function(response) { - console.log(response); - if (response.status == 200) { - return response.data; - } else { - return $q.reject(response.data); - } - return response.data; - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - }; -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js deleted file mode 100644 index c9134f62..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/headerServiceDS2.js +++ /dev/null @@ -1,17 +0,0 @@ -appDS2.factory('HeaderServiceDS2', function ($http,$log, $q) { - return { - getMenu: function() { - return $http.get('get_menu') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - }; -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js deleted file mode 100644 index 61346c84..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-services/leftMenuServiceDS2.js +++ /dev/null @@ -1,97 +0,0 @@ -function isRealValue(obj){ - return obj && obj !== "null" && obj!== "undefined"; -} -appDS2.factory('LeftMenuServiceDS2', function ($http,$log, $q) { - return { - getLeftMenu: function() { - return $http.get('get_menu') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - getAppName: function() { - return $http.get('get_app_name') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - } - - }; -}); - -/* check if the body height has changed */ -function onElementHeightChange(elm, callback){ - if (!elm) { - console.log('onElementHeightChange: null element!'); - return; - } - var lastHeight = elm.clientHeight, newHeight; - (function run(){ - newHeight = elm.clientHeight; - if( lastHeight != newHeight ) - callback(); - lastHeight = newHeight; - - if( elm.onElementHeightChangeTimer ) - clearTimeout(elm.onElementHeightChangeTimer); - elm.onElementHeightChangeTimer = setTimeout(run, 200); - })(); -} - -/*adjust height of left menu*/ -function adjustLeftMenuHeight() { - - try{ - var footerTop = $('.footer-container').offset().top; - var scrollTop = $(window).scrollTop(); - $(".menu-container").css({ - "height" : footerTop- scrollTop, - }); - }catch(err){ - console.log('adjustLeftMenuHeight failed', err) - } -} -/* adjust left menu height on scroll */ -window.onscroll = function (e) { - adjustLeftMenuHeight(); -} - -/* adjust left menu height on page load */ -$(function() { - adjustLeftMenuHeight(); -}); - - -onElementHeightChange(document.body, function(){ - adjustLeftMenuHeight(); -}); - -function getCookie(cname) { - var name = cname + "="; - var decodedCookie = decodeURIComponent(document.cookie); - var ca = decodedCookie.split(';'); - for(var i = 0; i - - - - - - - Workflow NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html deleted file mode 100644 index 7bcd9a85..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-landing.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - Workflow - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html deleted file mode 100644 index 452dcafa..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-listing.html +++ /dev/null @@ -1,65 +0,0 @@ - -
    -
    -
    -

    Workflow

    - -
    -
    -
    -
    - -
    -
    -
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    IdNameKeyDescriptionWorkflow Server URLViewActiveCreated Created ByActionScheduleEditDelete?
    {{workflow.id}}{{workflow.name}}{{workflow.workflowKey}}{{workflow.description}}{{workflow.runLink}}
    {{workflow.active}}{{workflow.created}}{{workflow.createdBy}}
    -
    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html deleted file mode 100644 index 9daebd07..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-new.html +++ /dev/null @@ -1,110 +0,0 @@ -
    -
    -

    Create Workflows

    -
    - -
    -
    -
    -
    -
    - - -
    - - -
    - Workflow Name is required !!! -
    - -
    -
    - - -
    - -
    - - -
    - Workflow Key is required !!! -
    - -
    -
    - - -
    - - -
    - -
    -
    - -
    - -
    - -
    - -
    - Run Link is required !!! - Not valid url! -
    - -
    - - - - - - -
    - - - - - -
    -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html deleted file mode 100644 index 0fb1ffa2..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-preview.html +++ /dev/null @@ -1,24 +0,0 @@ -
    -
    -

    View Workflow

    -
    - -
    -
    -
    -
    - -
    - -
    - -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html deleted file mode 100644 index a355c07e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-remove.html +++ /dev/null @@ -1,26 +0,0 @@ -
    -
    -

    Remove Workflow

    -
    - -
    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html deleted file mode 100644 index b939a598..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/DS2-workflows-page/workflow-schedule.html +++ /dev/null @@ -1,130 +0,0 @@ -
    -
    -

    Workflow: {{workflowToSchedule.name}}

    -
    - -
    - -
    - - - -
    Workflow Key: {{workflowToSchedule.workflowKey}}
    Workflow Description: {{workflowToSchedule.description}}
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - : - - - - - - -
    - - -
    -
    - -
    -
    - -
    -
    - - -Pick a date: - -Hour: - -Minute: -
    -
    - -
    -
    - - - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    - - - -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html deleted file mode 100644 index 5337fd24..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/b2b-leftnav-ext.html +++ /dev/null @@ -1,50 +0,0 @@ -
    -
    - -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html deleted file mode 100644 index 23d138eb..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-content.html +++ /dev/null @@ -1,146 +0,0 @@ -
    -
    -

    Bootstrap Sample Page

    - - -

    Bootstrap Dropdowns

    - - - - -

    Bootstrap Button Group

    -
    - - - -
    - - -

    Single Button Dropdowns

    - - - -

    Table Sample

    -
    - -
    Table heading
    -
    -

    Table description

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #First NameLast NameUsername
    1Mark Otto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    -
    - - - -

    Checkboxes and radio addons

    -

    In order to make bootstrap checkbox and radio button appear, please make sure b2b-bootstrap-common.css in app/fusion/external/ds2-bootstrap directory is included in the main HTML page.

    - -

    checkbox

    -
    - -
    - -
    -

    radio button

    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - -

    Available variations

    -
    - Default - Primary - Success - Info - Warning - Danger -
    - -

    Checkbox

    -
    - -
    -
    - -
    - -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html deleted file mode 100644 index 6a3660da..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/bootstrap-sample-page.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - Welcome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html deleted file mode 100644 index 913b10ed..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin-menu-edit.html +++ /dev/null @@ -1,102 +0,0 @@ -
    -
    -

    Admin Menu Items

    -
    -
    - -
    - -

    - Existing menu items -

    - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Menu IDLabelParentIdSort OrderActionFunctionActiveServletQuery StringExternal URLTargetMenu Set CodeSeparatorImage SourceEditDelete
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - -
    -
    - -
    - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html deleted file mode 100644 index 1c623af3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - Admin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html deleted file mode 100644 index 4f65e7b3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/admin_closed_loop.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -
    - -

    Closed Loop

    -
    -
    -
    -
    - Cloop Server -
    -
    -
    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html deleted file mode 100644 index 05c316c8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html +++ /dev/null @@ -1,76 +0,0 @@ - -
    -
    - -
    -

    User List

    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    User IDLast NameFirst NameEmailOrganization User IDOnline/Offline
    {{rowData.id}}{{rowData.lastName}}{{rowData.firstName}}{{rowData.email}}{{rowData.loginId}} -
    Offline
    -
    Online
    -
    -
    - -
    -
    -
    -
    - - -
    -
    -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html deleted file mode 100644 index 619dec21..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/collaboration.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - -
    - - - - -
    - -
    -
    - - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html deleted file mode 100644 index fd8a5302..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/jcs_admin.html +++ /dev/null @@ -1,73 +0,0 @@ -
    - -
    -

    Cache Regions

    -
    - -
    -

    - These are the regions which are currently defined in the cache. 'Items' and 'Bytes' refer to the elements currently in memory (not spooled). - You can clear all items for a region by clicking on the Clear icon next to the desired region below. You can also clear all regions - which empties the entire cache.

    -
    - - -
    -
    -
    Cache Name
    -
    # of Items
    -
    Bytes
    -
    Status
    -
    Memory Hits
    -
    Aux Hits
    -
    Not Found Misses
    -
    Expired Misses
    -
    Clear?
    -
    Items
    -
    - -
    -
    - -
    {{region.size}}
    -
    {{region.byteCount}}
    -
    {{region.status}}
    -
    {{region.hitCountRam}}
    -
    {{region.hitCountAux}}
    -
    {{region.missCountNotFound}}
    -
    {{region.missCountExpired}}
    -
    -
    -
    -
    -
    -
    -
    - -
    Key
    -
    Eternal?
    -
    Created
    -
    Max Life
    -
    Expires
    -
    Clear?
    -
    -
    -
    - - -
    {{item.eternal}}
    -
    {{item.createTime}}
    -
    {{item.maxLifeSeconds}}
    -
    {{item.expiresInSeconds}}
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html deleted file mode 100644 index 5d6cb16c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/admin-menu-del-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Menu Item Deletion

    -
    - -
    -
    -
    - You are about to delete '{{fnMenuItem.label}}' Menu Item. Please click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html deleted file mode 100644 index d3eda5e4..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Clear All Cache Regions

    -
    - -
    -
    -
    - You are about to clear all cache regions. Please click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html deleted file mode 100644 index 5f43e2a0..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/cache-menu-clear-region-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Clear Cache Region

    -
    - -
    -
    -
    - You are about to clear all of the items in the cache region {{msg.text}}. Please click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html deleted file mode 100644 index 004b49d8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/clearItem-region-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Clear Item Cache Region

    -
    - -
    -
    -
    - You are about to clear this item from the cache region {{msg.text}}. Please click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html deleted file mode 100644 index 6a91cb0a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/collaborate-list-toggle-profile-active-status.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Change User Status

    -
    - -
    -
    -
    - You are about to change user's active status. Please click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html deleted file mode 100644 index 2ccdf2af..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fn-menu-edit.html +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html deleted file mode 100644 index 167defb7..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/popup-modal-fnmenu-add.html +++ /dev/null @@ -1,136 +0,0 @@ -
    -
    -

    {{label}}

    -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html deleted file mode 100644 index 8a944d76..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-child-add-confirm.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to add the child role {{msg.roleFun}} to the role for {{msg.role}}. Do you want to continue? -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html deleted file mode 100644 index 7a663cf3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-confirm-activation.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -
    -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to {{msg.text}} the {{msg.roleName}} role. Do you want to continue? -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html deleted file mode 100644 index 45e5ddfc..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-delete-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Confrim

    -
    - -
    -
    -
    - You are about to delete {{msg.roleName}} role. Click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html deleted file mode 100644 index ff5ac253..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-add-confirm.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to add the role function {{msg.roleFun}} to the role for {{msg.role}}. Do you want to continue? -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html deleted file mode 100644 index 322c6624..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-fun-role-del-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Role

    -
    - -
    -
    -
    - You are about to delete this Role Function. Click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html deleted file mode 100644 index ad3d538b..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html +++ /dev/null @@ -1,81 +0,0 @@ -
    -
    -

    Role Function Create

    -
    - -
    -
    - -
    - -
    - *Name - -
    -
    - Name is Required -
    -
    -
    - *Code - - -
    -
    - Code is - Required -
    -
    -
    - * - Type - -
    -
    -
    - Type is Required -
    -
    -
    - *Action - -
    -
    - Action is Required -
    -
    -
    - - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html deleted file mode 100644 index 31109112..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-del-confirm.html +++ /dev/null @@ -1,22 +0,0 @@ -
    -
    -

    Role Function Delete

    -
    - -
    -
    -
    - You are about to delete this role function, '{{msg.text}}'. Click 'OK' to continue. -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html deleted file mode 100644 index 9c1d55aa..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-edit.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -
    -

    Role Function Edit

    -
    - -
    -
    -
    -
    - Name -
    -
    - Code -
    -
    - Type -
    -
    - Action -
    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html deleted file mode 100644 index ec8b2b8e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-child-roles-modal.html +++ /dev/null @@ -1,33 +0,0 @@ -
    -
    -
    -

    Select Child Roles

    -
    -
    -
    - - - - - - - - - - - - - -
    Role
    - - {{ role.name }}
    -
    - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html deleted file mode 100644 index 1ecf192b..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-functions-modal.html +++ /dev/null @@ -1,39 +0,0 @@ -
    -

    Select Role Functions

    -
    - -
    -
    - -
    -
    - - - - - - - - - - - - - -
    Role Function
    - - {{roleFunction.name}}
    -
    - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html deleted file mode 100644 index 32ce58bc..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/ngadmin.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - Admin NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html deleted file mode 100644 index 4114a468..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role-function.html +++ /dev/null @@ -1,72 +0,0 @@ -
    -

    Role Function

    - Please go to portal to Manage Role Function. -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - -
    NameCodeTypeActionEditDelete
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html deleted file mode 100644 index f4c9d0c6..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role.html +++ /dev/null @@ -1,61 +0,0 @@ -
    -
    -

    Manage Roles

    -
    -
    - -
    -
    -
    -

    Please edit the role details below:

    -
    - -
    - -
    - -
    - -
    - -
    - - -
    -
    -
    -
    -

    Role Functions

    - - - - - - - - - - - - - - - -
    Role Function NameRemove
    {{ roleFunction.name }} -
    -
    -
    -
    -
    - -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html deleted file mode 100644 index e8820f95..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/role_list.html +++ /dev/null @@ -1,47 +0,0 @@ -
    -
    -

    Roles

    - Please go to portal to Manage Roles. -
    -
    - -
    -
    -
    - -
    -

    Click on a Role to view its details.

    - - - - - - - - - - - - - - -
    -
    - - - - -
    NamePriorityEditActive?Delete?
    {{ availableRole.name }}{{ availableRole.priority }} - - -
    - -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html deleted file mode 100644 index 8e411141..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/usage.html +++ /dev/null @@ -1,43 +0,0 @@ -
    -
    -

    Current Usage

    -
    - -

    - The following table shows all current user sessions. Click the icon to end a user's session. -

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    User IdUser NameEmailLast Access Time (minutes)Time Remaining (minutes)Expire User Session?
    {{user.id}}{{user.lastName}}{{user.email}}{{user.lastAccess}}{{user.remaining}}
    Current Session
    -
    - -
    -
    - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html deleted file mode 100644 index 0fe37686..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/profile-confirm-toggle.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -
    -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to {{msg.text}} the user with ID {{msg.rowData.id}}. Do you want to continue? -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html deleted file mode 100644 index edaa0a1e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add-confirm.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to change the role {{msg.roleFun}} Do you want to continue? -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html deleted file mode 100644 index f182417e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-add.html +++ /dev/null @@ -1,37 +0,0 @@ - -
    -

    Select Role

    -
    - -
    -
    - -
    - - - - - - - - - - - - - -
    Role
    - - {{roleFunction.name}}
    -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html deleted file mode 100644 index b795d35f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/modals/role-del-confirm.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -
    -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to delete the role '{{msg.role.name}}'. Do you want to continue? -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html deleted file mode 100644 index 028793cd..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/ngprofile.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - Profile Search NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html deleted file mode 100644 index 8190f3b2..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - Profile Search - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html deleted file mode 100644 index fcad9de9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/all-reports.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - Reports - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js deleted file mode 100644 index 5147719f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/dynamicform.js +++ /dev/null @@ -1,134 +0,0 @@ -appDS2 -.directive('formBuilder', ['$q', '$parse', '$http', '$templateCache', '$compile', '$document', '$timeout', function ($q, $parse, $http, $templateCache, $compile, $document, $timeout) { - return { - restrict: 'E', // supports using directive as element only - scope:{ - ngModel: '=', - ngFormFields: '=', - ngNumFormCols: '=', - ngTriggerMethod: '=', - ngShowFieldId: '=' - }, - link: function ($scope, element, attrs) { - $scope.element=element; - $scope.datetimeformat = "MM/dd/yyyy hh:mm a"; - $scope.buildField = function (field, parentElement) { - var x = ''; - if(field.visible) { - - if (field.fieldType === 'LIST_MULTI_SELECT') { - /*x = angular.element('
    '+ - '
    '+ - ''+ - '
    ');*/ - - x = angular.element( - '
    '+ - '

    '+field.fieldDisplayName+'

    '+ - '
    '+ - ''+ - '
    '+ - '
    '+ - '
    '+ - '
    '); - } else if (field.fieldType === 'LIST_BOX') { - var temp = - '
    '+ - ''+ - ''+ - '
    '; - - x = angular.element(temp); - //x = angular.element('
    '); - } else if((field.fieldType === 'text' || field.fieldType === 'TEXT') && field.validationType === 'DATE'){ - x = angular.element('
    '); - } else if((field.fieldType === 'text' || field.fieldType === 'TEXT') && field.validationType === 'TIMESTAMP_MIN'){ - x = angular.element('
    '); - } else if(field.fieldType === 'text' || field.fieldType === 'TEXT'){ - x = angular.element('
    '); - } else if(field.fieldType === 'CHECK_BOX'){ - x = angular.element('
    '); - } - parentElement.append(x); - $compile(x)($scope); - } - - }; - $scope.buildForm = function() { - // create elements and a - var tbl = angular.element("
    "); - var tblBody = angular.element(""); - var row = angular.element(""); - - var ngFormFieldsLength = $scope.ngFormFields.length; - - for (var j = 0; j < ngFormFieldsLength; j++) { - var cell = angular.element(""); - $scope.buildField($scope.ngFormFields[j],cell); - row.append(cell); - - if((j!=0 && (j+1)%$scope.ngNumFormCols==0) || j==(ngFormFieldsLength-1)){ - tblBody.append(row); - row = angular.element(""); - } - } - tbl.append(tblBody); - angular.element($scope.element).html(''); - $scope.element.append(tbl); - }; - - - $scope.formFieldLuValues = {}; - $scope.getEBZFormat = function() { - if($scope.ngFormFields && $scope.ngFormFields.length>0){ - $scope.ngFormFields.forEach(function(formField) { - if(formField.fieldType === 'LIST_MULTI_SELECT') { - $scope.ngModel[formField.fieldId]= []; - if(formField.formFieldValues && formField.formFieldValues.length>0){ - formField.formFieldValues.forEach(function(entry,i) { - $scope.ngModel[formField.fieldId].push({ index: i, value: entry.id, title: entry.name, defaultValue: entry.defaultValue}); - }); - } - } else if(formField.fieldType==='LIST_BOX') { - $scope.formFieldLuValues[formField.fieldId]= []; - if(formField.formFieldValues && formField.formFieldValues.length>0){ - formField.formFieldValues.forEach(function(entry,i) { - $scope.formFieldLuValues[formField.fieldId].push({ index: i, value: entry.id, title: entry.name}); - if(entry.defaultValue){ - //$scope.ngModel[formField.fieldId]={ index: i, value: entry.id, title: entry.name}; - } - }); - } - } else if(formField.fieldType === 'text' || formField.fieldType === 'TEXT' || - formField.validationType === 'DATE' || formField.validationType === 'TIMESTAMP_MIN') { - if(formField.formFieldValues && formField.formFieldValues.length>0){ - $scope.ngModel[formField.fieldId]=formField.formFieldValues[0].id; - } - } - }); - } - }; - - $scope.$watch("ngFormFields",function(newValue,oldValue) { - if($scope.ngFormFields){ - $scope.getEBZFormat(); - $scope.buildForm(); - } - }); - - $scope.triggerFormFields = function(triggerFlag) { - if(triggerFlag){ - $scope.element.html('Loading...'); - $scope.ngTriggerMethod(); - } - }; - - } - }; - }]); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js deleted file mode 100644 index a64309bf..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/directive/step-form-directive.js +++ /dev/null @@ -1,14 +0,0 @@ -appDS2 -.directive('stepForm', function($compile,$http, stepFormFactory) { - return { - restrict: 'AE', - - // scope: { - // jsonSource: '=' - // }, - link: function(scope, elem, attrs) { - var jsonSrcName = "app/fusionapp/scripts/view-models/wz_steps/json/step1.json"; - stepFormFactory.renderForm(jsonSrcName, elem, scope); - } - } -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html deleted file mode 100644 index 3f0338c9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html +++ /dev/null @@ -1,18 +0,0 @@ - -
    -

    Remove Report

    -
    - -
    -
    -
    -

    The selected report will be removed. Do you want to continue

    -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html deleted file mode 100644 index 20dd9202..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    Remove Formfield

    -
    - -
    -
    -
    - The selected formfield {{tempFieldId}} will be removed. Do you want to continue? -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html deleted file mode 100644 index 629b9a91..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-role-del-confirm.html +++ /dev/null @@ -1,19 +0,0 @@ - -
    -

    Remove Report Role

    -
    - -
    -
    -
    - {{securityRoleName}} - will be removed. Would you want to continue? -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html deleted file mode 100644 index 5af1b227..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-security-user-del-confirm.html +++ /dev/null @@ -1,18 +0,0 @@ -
    -

    Remove Report User

    -
    - -
    -
    -
    - {{securityUserName}} - will be removed. Would you want to continue? -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html deleted file mode 100644 index 06f2049a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-user-role-confirm-toggle.html +++ /dev/null @@ -1,24 +0,0 @@ - -
    -

    - -

    -

    Confirm

    -
    - -
    -
    -
    - You are about to {{rowData.accessAllowed?"grant":"revoke"}} - {{rowData.name}} edit access. Would you like to continue? -
    - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html deleted file mode 100644 index 3aadf27e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html +++ /dev/null @@ -1,232 +0,0 @@ - - -
    -

    Report Column - Edit

    -
    - -
    -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Column ID:{{colInfo.colId}}
    Column Name:{{colInfo.colName}}
    Depends on formfield:
    Datatype: - -
    Group By Pos: - -
    Custom Text for Sub-Total:
    Hide Repeated Values: - -
    Multi Group Column Level: - -
    Multi group Column Range : Colspan: - -
    Display Name: - -
    Display Width (In Pxls): - -
    No Wrap ?: - -
    Indent Parameter to display value: - -
    Display Alignment: - -
    Display Header Alignment: - -
    Sortable: - -
    Visible: - -
    Drill-down Link: - -
    Total for the column: - -
    - - - - - - - - - - - - - - - - - -
    {{ff.name}}
    - - {{ dd.selection }} - Accept default - -
    - -
    -
    - - - -
    - - - - - - -
    - -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html deleted file mode 100644 index 6b98ac78..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-drilldown-edit.html +++ /dev/null @@ -1,112 +0,0 @@ - - -
    -
    -

    Drill-down Parameters Configuration

    -
    - -
    -
    -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    {{drillDownOption.name}}

    -
    - -
    - - - -
    - - - -
    -
    - -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html deleted file mode 100644 index 3c17ff7b..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html +++ /dev/null @@ -1,154 +0,0 @@ - - -
    -

    Report Form Field - Edit

    -
    - -
    -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Name:
    Field Type:
    Visible: - -
    Is used in Group By Clause? - -
    SQL as Default Value: - -
    Default SQL: - - -

    - -

    -
    Default Value:
    Verify Field Value As:
    SQL Generating Custom List of - Values: -

    - -

    -
    Provide Predefined List of Values: Do not use Predefined list - Generate list from database : - - -

    - -

    -
    -
    - {{rowData.id}} - -
    -
    -
    -
    - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html deleted file mode 100644 index 50132ecf..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-report-name-validation.html +++ /dev/null @@ -1,20 +0,0 @@ -
    -
    -

    Warning

    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html deleted file mode 100644 index e3fda72b..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html +++ /dev/null @@ -1,57 +0,0 @@ - -
    -

    SQL Test Run - - {{isError?'Failed':'Executed'}}

    -
    - -
    -
    -
    -
    - -
    -

    Error Message:

    -
    -

    {{errormessage}}

    -

    Stack Trace:

    -
    -

    {{stacktrace}}

    - -
    - - - - - - - - - - - - -
    {{colName}}
    {{rowData[keyName]}}
    -
    - -
    - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html deleted file mode 100644 index b026ac83..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/ngall-reports.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - Reports NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html deleted file mode 100644 index ed3c4ba9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-chart-wizard.html +++ /dev/null @@ -1,1080 +0,0 @@ - - -
    -

    Report Chart Configuration

    - -
    - -
    - - -
    -
    -
    - -
    - - - - - - - - - - - - - - -
    Chart Type
    - - - - - - - - - - - - - - -
    Width (px)Height (px)
    - - - - - - - - - -
    -
    - - - - - -
    Title
    - - - - - - - - - - - - - - - -
    Domain AxisCategory
    - - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Range AxisY AxisChart TitleColorLine Type
    - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -
    Show Hide -
    -
    - - -
    -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - - - - -
    - - - - - -
    -
    -
    Vertical Horizontal -
    - -
    -
    Yes No -
    - -
    -
    Yes No -
    - -
    -
    - Yes No -
    - -
    -
    Yes No -
    -
    - -
    -
    Yes No -
    - -
    -
    - - -
    -
    - -
    -
    - {{reportRunJson.chartType}} -
    - - - -
    -
    -
    -
    Line Area -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    -
    Yes No -
    - -
    -
    Yes No -
    -
    -
    - -
    - -
    - -
    - - - - -
    -
    -
    -
    - -
    - -
    -
    - Weekly Daily Hourly 30 Min -
    -
    -
    -
    - -
    - - - - - - - - - - - -
    -
    -
    -
    up 45° up 90° down 45° down 90° Standard -
    - -
    -
    - Top Bottom -
    -
    - -
    -
    Yes No -
    - -
    -
    Yes No -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    Save - Run -
    - -
    - - -
    -
    -
    Additional - Options
    -

    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - -
    Primary Axis LabelSecondary Axis Label
    -
    - - - - - - - - - - - - - - -
    Range Axis Minimum RangeMaximum Range
    - -
    -
    -
    -
    - - - - -
    -
    -
    Bar - Chart Options
    -

    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - -
    OrientationStackedShow ControlsXAxis Date TypeDisplay less XAxis tickers
    - - - - - - - - - - - - - - -
    Is Time Axis?Log Scale (Y Axis)
    -
    -
    -
    - - - - - -
    -
    -
    Time - Series Chart Options
    -

    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - -
    Render asX Axis LabelX Axis TickersIs Time Axis?Multi Series
    -
    -
    -
    - - - - -
    -
    -
    Common - Options
    -

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - - - - - - - - -
    -
    - - -
    -
    - - - -
    Legend AngleLegend Position
    - - - - - - - - - - - - -
    -
    - - -
    -
    - - - - -
    LegendAnimation
    - - - - - - - - - - - - - - - - - - -
    Top MarginBottom MarginLeft MarginRight Margin
    -
    -
    -
    - - -
    -
    -
    - - - - -
    -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html deleted file mode 100644 index cd64b09f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-import.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - -

    Report Import

    - -

    Import XML

    - -
    -

    {{errorMessage}}

    -
    - - - - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html deleted file mode 100644 index ba609151..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-run.html +++ /dev/null @@ -1,124 +0,0 @@ - - -
    -
    -
    -

    {{reportData.reportHeading}}

    -
    -
    - -
    -
    - -
    - -
    - -
    -
    -
    - -
    -

    {{reportData.reportSubTitle}}

    - -
    Loading...
    - -
    - -
    -
    - -
    - - -
    -
    -
    -
    -
    - {{reportData.message}} -
    -
    -
    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html deleted file mode 100644 index 2fd0e436..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-search.html +++ /dev/null @@ -1,57 +0,0 @@ -
    - -

    Report search

    -
    -
    - - -
    - -
    - -
    - -
    - - - -
    - -
    - -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html deleted file mode 100644 index 9550ac33..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/report-step.html +++ /dev/null @@ -1,35 +0,0 @@ -
    -
    -
    - - - {{tab.title}} - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html deleted file mode 100644 index 9e5851fe..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step1.html +++ /dev/null @@ -1,216 +0,0 @@ -

    Step 1 - Report Definition

    - -
    - -
    - -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    - - -
    -
    - - - - - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - -
    - -
    -
    - -
    - - -
    -
    - - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html deleted file mode 100644 index e21af0c8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step2.html +++ /dev/null @@ -1,26 +0,0 @@ -

    Step 2 - Report SQL

    - -
    - -
    -

    {{pageMsg}}

    -
    -
    - -
    - -
    -
    -
    - -
    -
    - -
    - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html deleted file mode 100644 index e1f02a1c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step3.html +++ /dev/null @@ -1,34 +0,0 @@ -

    Step 3 - Report Columns

    -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - -
    NoIDDisplay NameEdit
    {{$index+1}}{{rowData.id}}{{rowData.name}}
    -
    - - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html deleted file mode 100644 index dc3be5c8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step4.html +++ /dev/null @@ -1,47 +0,0 @@ -

    Step 4 - Report Form Fields

    -
    - -
    -
    -
    -

    Report Form Fields 4

    - - - - - - - - - - - - - - - - - - - -
    Order NumberField NameEditOrderDelete
    {{rowData.orderSeq}}{{rowData.name}}[{{rowData.id}}] - - - - - - -
    -
    -
    - -
    - - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html deleted file mode 100644 index 13278029..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step5.html +++ /dev/null @@ -1,172 +0,0 @@ - -

    Step 5 - Report Security

    - -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - -
    Created By: {{reportSecurityInfo.createdUser}}Created Date: {{reportSecurityInfo.createdDate}}
    Last Updated By: {{reportSecurityInfo.updateUser}}Last Updated: {{reportSecurityInfo.updatedDate}}
    Report Owner: - - Public? (All users can run the report): -
    -
    - -
    -

    Report Users

    - - - - - - - - - - - - - - - - - - - -
    NoUser NameRun AccessEdit AccessRemove
    {{$index+1}}{{reportUser.name}} - -
    -
    -
    -

    Grant Access To:

    -
    - -
    -
    - -
    -
    - -
    -

    Report Roles

    - - - - - - - - - - - - - - - - - - - -
    NoRole NameRun AccessEdit AccessRemove
    {{$index+1}}{{reportRole.name}} - -
    -
    -

    Grant Access To:

    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    - - -
    - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html deleted file mode 100644 index 4849190a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step6.html +++ /dev/null @@ -1,34 +0,0 @@ -

    Step 6 - Report Log

    - -
    - -
    -
    -
    -

    Report Logs

    - - - - - - - - - - - - - - - - - -
    NoUser NameLog TimeAction
    {{$index+1}}{{rowData.userName}}{{rowData.logTime}}{{rowData.action}}
    -
    - - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html deleted file mode 100644 index 298cce8f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/steps/step7.html +++ /dev/null @@ -1,16 +0,0 @@ -

    Step 7 - Report Run

    - -
    - -
    -
    -
    - -
    - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json deleted file mode 100644 index abdbd023..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step1.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "step" : "1", - "content": { - "title": "Step 1 : Report Definition", - "sections": [ - { - "title": "", - "elements": [ - { - "input": "hidden", - "name": "proj_id", - "displayName": "Project Id", - "defaultValue": "" - }, - { - "input": "text", - "name": "reportId", - "displayName": "Report ID:", - "defaultValue": "" - }, - { - "input": "text", - "name": "reportName", - "displayName": "Report Name *:", - "defaultValue": "" - }, - { - "input": "textarea", - "name": "reportDescr", - "displayName": "Report Description:", - "style":"width:300px;height:80px;" - }, - { - "input": "select", - "name": "reportType", - "ngModelName":"selectedReportType.value", - "displayName": "Report Type: ", - "defaultValue": "no", - "action": "", - "action_img": "", - "optionsName":"reportTypes", - "options":[{"value":"linear", "text":"Linear"}] - }, - { - "input": "select", - "name": "dataSource", - "ngModelName":"selectedDataSource.value", - "displayName": "Data Source:", - "defaultValue": "no", - "action": "", - "action_img": "", - "optionsName":"DataSources", - "options":[{"value":"local", "text":"Local"}] - }, - { - "input": "textarea", - "name": "formHelpText", - "displayName": "Form Help Text:", - "style":"width:300px;height:80px;" - }, - { - "input": "select", - "name": "pageSize", - "ngModelName":"selectedPageSize.value", - "displayName": "Page Size:", - "defaultValue": "no", - "action": "", - "action_img": "", - "optionsName":"PageSizes", - "options":[ {"value":"10", "text":"10"}, - {"value":"20", "text":"20"}, - {"value":"50", "text":"50"}, - {"value":"100", "text":"100"}, - {"value":"500", "text":"500"} - ] - }, - { - "input": "checkboxGroup", - "name":"displayArea", - "displayName": "Display Area:", - "defaultValue": "no", - "action": "", - "action_img": "", - "checkboxes":[ - {"value":"homeSelected", "text":"HOME"}, - {"value":"customerSelected", "text":"CUSTOMER"}, - {"value":"reportsSelected", "text":"REPORTS"}, - {"value":"utilSelected", "text":"Utilization"}, - {"value":"tmSelected", "text":"Tunnel Management"}, - {"value":"trSelected", "text":"Tunnel Routing"}, - {"value":"cmSelected", "text":"Capacity Management"}, - {"value":"tlSelected", "text":"Traffic Loss"}, - {"value":"smSelected", "text":"System Monitoring"}, - {"value":"netOperateSelected", "text":"Network Operation Monitoring"} - ] - }, - - { - "input": "checkboxGroup", - "name": "hideFormFieldsAfterRun", - "displayName": "Hide Form Fields After Run:", - "defaultValue": "no", - "action": "", - "action_img": "", - "optionsName":"HideFormFieldsAfterRun", - "checkboxes":[{"value":"hideFormFieldsAfterRunSelected.value", "text":""} - ] - }, - { - "input": "select", - "name": "maxRowsInExcelCSVDownload", - "ngModelName":"selectedMaxRowsInExcelCSVDownload.value", - "displayName": "Max Rows in Excel/CSV Download:", - "defaultValue": "no", - "action": "", - "action_img": "", - "optionsName":"PageSizes", - "options":[{"value":"500","text":"500"},{"value":"1000","text":"1000"},{"value":"2000","text":"2000"},{"value":"3000","text":"3000"},{"value":"4000","text":"4000"},{"value":"5000","text":"5000"},{"value":"10000","text":"10000"},{"value":"15000","text":"15000"},{"value":"20000","text":"20000"},{"value":"25000","text":"25000"},{"value":"30000","text":"30000"},{"value":"35000","text":"35000"},{"value":"40000","text":"40000"},{"value":"45000","text":"45000"},{"value":"50000","text":"50000"},{"value":"65000","text":"65000"}] - }, - { - "input": "select", - "name": "frozenColumns", - "ngModelName":"selectedFrozenColumns.value", - "displayName": "Columns to be Frozen:", - "defaultValue": "", - "action": "", - "action_img": "", - "optionsName":"frozenColumnsOptions", - "options":[{"value":"0","text":"0"},{"value":"1","text":"1"},{"value":"2","text":"2"},{"value":"3","text":"3"},{"value":"4","text":"4"}] - }, - { - "input": "select", - "name": "dataGridAlign", - "ngModelName":"selectedDataGridAlign.value", - "displayName": "Data Grid Align:", - "defaultValue": "", - "action": "", - "action_img": "", - "optionsName":"selectedDataGridAlignOptions", - "options":[{"value":"left","text":"Left"},{"value":"right","text":"Right"},{"value":"center","text":"Center"}] - }, - { - "input": "textarea", - "name": "emptyMessage", - "displayName": "Empty Message:", - "style":"width:300px;height:80px;" - }, - { - "input": "select", - "name": "dataContainerHeight", - "ngModelName":"selectedDataContainerHeight.value", - "displayName": "Height of the Data Container:", - "defaultValue": "", - "action": "", - "action_img": "", - "optionsName":"dataContainerHeightOptions", - "options":[{"value":"200","text":"200%"},{"value":"190","text":"190%"},{"value":"180","text":"180%"},{"value":"170","text":"170%"},{"value":"160","text":"160%"},{"value":"150","text":"150%"},{"value":"140","text":"140%"},{"value":"130","text":"130%"},{"value":"120","text":"120%"},{"value":"110","text":"110%"},{"value":"100","text":"100%"},{"value":"90","text":"90%"},{"value":"80","text":"80%"},{"value":"70","text":"70%"},{"value":"60","text":"60%"},{"value":"50","text":"50%"},{"value":"40","text":"40%"},{"value":"30","text":"30%"},{"value":"20","text":"20%"},{"value":"10","text":"10%"}] - }, - { - "input": "select", - "name": "dataContainerWidth", - "ngModelName":"selectedDataContainerWidth.value", - "displayName": "Width of the Data Container:", - "defaultValue": "", - "action": "", - "action_img": "", - "optionsName":"dataContainerWidthOptions", - "options":[{"value":"200","text":"200%"},{"value":"190","text":"190%"},{"value":"180","text":"180%"},{"value":"170","text":"170%"},{"value":"160","text":"160%"},{"value":"150","text":"150%"},{"value":"140","text":"140%"},{"value":"130","text":"130%"},{"value":"120","text":"120%"},{"value":"110","text":"110%"},{"value":"100","text":"100%"},{"value":"90","text":"90%"},{"value":"80","text":"80%"},{"value":"70","text":"70%"},{"value":"60","text":"60%"},{"value":"50","text":"50%"},{"value":"40","text":"40%"},{"value":"30","text":"30%"},{"value":"20","text":"20%"},{"value":"10","text":"10%"}] - }, - { - "input": "checkboxGroup", - "name": "displayOptions", - "displayName": "Display Options:", - "defaultValue": "no", - "action": "", - "action_img": "", - "checkboxes":[{"value":"hideFormFieldsSelected.value", "text":"Hide Form Fields"}, - {"value":"hideChartSelected.value", "text":"Hide Chart"}, - {"value":"hideReportDataSelected.value", "text":"Hide Report Data"}, - {"value":"hideExcelSelected.value", "text":"Hide Excel"}, - {"value":"hidePdfSelected.value", "text":"Hide PDF"} - ] - }, - { - "input": "checkboxGroup", - "name":"runtimeColSort", - "displayName": "Disable column sort at runtime:", - "defaultValue": "no", - "action": "", - "action_img": "", - "checkboxes":[{"value":"runtimeColSortDisabled.value", "text":""} - ] - }, - { - "input": "select", - "name": "runtimeFormNumberColumns", - "ngModelName":"selectedNumFormCols.value", - "displayName": "Run-time Form Number Columns:", - "defaultValue": "no", - "action": "", - "action_img": "", - "optionsName":"runtimeFormNumberColumns", - "options":[ {"value":"1", "text":"1"}, - {"value":"2", "text":"2"}, - {"value":"3", "text":"3"}, - {"value":"3", "text":"4"} - ] - }, - { - "input": "text", - "name": "reportTitle", - "displayName": "Report Title:", - "defaultValue": "" - }, - { - "input": "text", - "name": "reportSubTitle", - "displayName": "Report Subtitle:", - "defaultValue": "" - } - ] - - }, - { - "title": "finalButton", - "submitAction" : "", - "next":"Microservice Config", - "previous":"none" - } - ] - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json deleted file mode 100644 index ca01985d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step2.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "step" : "2", - "content": { - "title": "Step 2 : Report SQL", - "sections": [ - { - "title": "", - "elements": [ - { - "input": "textarea", - "spanOverTwoColumns":"true", - "name": "sqlScript", - "displayName": "SQL script:", - "defaultValue":"SELECT ", - "style":"width: 600px; height: 400px" - } - ], - "buttons": [ - { - "text":"Validate/Test Run SQL", - "value":"next", - "ngFunction":"testRunSql()" - }] - - }, - { - "title": "finalButton", - "submitAction" : "", - "next":"Microservice Config", - "previous":"none" - } - ] - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json deleted file mode 100644 index 9ea9b6f4..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step3.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "step" : "3", - "content": { - "title": "", - "sections": [ - { - "title": "", - "elements": [ - ] - }, - { - "title": "finalButton", - "submitAction" : "", - "next":"Microservice Config", - "previous":"none" - } - ] - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json deleted file mode 100644 index 971a0cf3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step4.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "step" : "4", - "content": { - "title": "", - "sections": [ - { - "title": "", - "elements": [ - ], - "buttons": [ - { - "text":"Add", - "value":"add", - "ngFunction":"addNewFormField()" - }] - }, - { - "title": "finalButton", - "submitAction" : "", - "next":"Microservice Config", - "previous":"none" - } - ] - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json deleted file mode 100644 index cc10114d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step5.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "step" : "5", - "content": { - "title": "", - "sections": [ - { - "title": "", - "elements": [ - ] - }, - { - "title": "finalButton", - "submitAction" : "", - "next":"Microservice Config", - "previous":"none" - } - ] - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json deleted file mode 100644 index e3b1ccce..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step6.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "step" : "6", - "last_step": true, - "hideSaveButton":true, - "hideBackButton":true, - "content": { - "title": "Step 6 : Run", - "sections": [ - { - "elements": [ - ], - "buttons": [ - { - "text":"Run Report", - "value":"next", - "ngFunction":"RunCurrentReport()" - }] - }, - { - "title": "finalButton", - "submitAction" : "", - "next":"Microservice Config", - "previous":"none" - } - ] - - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html deleted file mode 100644 index 9b498870..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/report-step.html +++ /dev/null @@ -1,243 +0,0 @@ - - - -
    -

    Report Wizard

    - - - - - - {{tab.title}} - - -

    -
    - -
    - -
    - - - - - -
    -

    Step 3 : Columns

    - - - - - - - - - - - - - - - - - -
    NoColumn NameIDEdit
    {{$index+1}}{{rowData.name}}{{rowData.id}}
    -
    - -
    -

    Step 4 : Form Fields

    - - - - - - - - - - - - - - - - - -
    NoField NameEditDelete
    {{$index+1}}{{rowData.name}}[{{rowData.id}}]
    -
    - -
    -

    Step 5 : Report Security

    -
    - - - - - - - - - - - - - - - -
    Created By: {{reportSecurityInfo.createdUser}}Created Date: {{reportSecurityInfo.createdDate}}
    Last Updated By: {{reportSecurityInfo.updateUser}}Last Updated: {{reportSecurityInfo.updatedDate}}
    - Report Owner: - - - - - Public? (All users can run the report): - -
    -
    - -
    -

    Report Users

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NoUser NameRun AccessEdit AccessRemove
    {{$index+1}}{{reportUser.name}} - - - - - -
    - Grant Access To: - - - - -
    -
    - -
    -

    Report Roles

    - - - - - - - - - - - - - - - - - - - - - - - - -
    NoRole NameRun AccessEdit AccessRemove
    {{$index+1}}{{reportRole.name}} - - - - - - -
    - Grant Access To: - - - - -
    -
    - -
    - -
    -
    -
    - -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html deleted file mode 100644 index b94b5c08..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html +++ /dev/null @@ -1,32 +0,0 @@ -
    -

    Drools List

    -
    - - - - - - - - - - - - - - - - -
    Drools File NameClass NameRun Rule
    -
    - -
    -
    - -
    No records found
    -
    - Go to Drools Rule Engine import page - -
    - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html deleted file mode 100644 index cbc0cfc0..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html +++ /dev/null @@ -1,55 +0,0 @@ - -
    -
    -

    Drools Rule Engine

    -
    -
    -

    Please enter below details:

    -
    -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - - Go to Drools list page -
    -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html deleted file mode 100644 index 5c2e45f9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/frame_insert.html +++ /dev/null @@ -1,27 +0,0 @@ -
    test
    - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html deleted file mode 100644 index 0ec9e949..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/ngnotebook-frame.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - Notebook Page NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html deleted file mode 100644 index 815ea4b9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-frame.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - Notebook Page - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html deleted file mode 100644 index 0db933d6..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-page.html +++ /dev/null @@ -1,80 +0,0 @@ -
    -
    -

    Notebook

    -
    -
    -
    -
    -
    - - - - - - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - - Remove -
    - -
    -
    -
    -
    - - - - -
    - -
    - Submit -
    - - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html deleted file mode 100644 index 4c89ee41..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/notebook-viz.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - - -
    - - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html deleted file mode 100644 index d0748e1d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Header.html +++ /dev/null @@ -1,68 +0,0 @@ -
    -
    - -
    -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html deleted file mode 100644 index c30a0b69..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2Left_menu.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html deleted file mode 100644 index 19868bb6..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/loginSnippet.html +++ /dev/null @@ -1,63 +0,0 @@ - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html deleted file mode 100644 index 2626d01a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html +++ /dev/null @@ -1,191 +0,0 @@ -
    - - -
    -
      -
    • -
      -
      - - - - - - -
      -

      {{item.headerText}}

      -

      {{item.headerText.length<36?item.headerText:item.headerText.substring(0,35)+' ...'}}

      -
      -
      -
      - - - - -
      - - -
      -
      -
      -
      - -
      - -
      -
      - -
      -
      - -
      -
      -
      -
      - -
      - -
      -
      - -
      -
      -
      -
      - -
      - - -
      -
      - -
      - -
      -
      -
        -
      • {{Daytab.title}}
      • -
      -
      -
      -
      - - - - - - - -
      -
      - -
      -
      -
        -
      • {{TrafficTab.title}}
      • -
      -
      -
      -
      - - - - - -
      -
      - -
      - - - - - - - - - - - - - - - - - - - - - -
      JQuery - -
      Network Simulation - -
      Animated Map - -
      Chat Session - -
      -
      -
      -
      -
      - -
      - - - - - - - - -
      - -
      -
      -
      -
    • -
    -
    - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html deleted file mode 100644 index 6200985c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-sample.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - Welcome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html deleted file mode 100644 index bbaaf967..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - Welcome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js deleted file mode 100644 index 985fa434..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/angular-gridster.js +++ /dev/null @@ -1,2244 +0,0 @@ -/*global define:true*/ -(function(root, factory) { - - 'use strict'; - - if (typeof define === 'function' && define.amd) { - // AMD - define(['angular'], factory); - } else if (typeof exports === 'object') { - // CommonJS - module.exports = factory(require('angular')); - } else { - // Browser, nothing "exported". Only registered as a module with angular. - factory(root.angular); - } -}(this, function(angular) { - - 'use strict'; - - var ie8 = false; - - var getInternetExplorerVersion = function () - // Returns the version of Internet Explorer >4 or - // undefined(indicating the use of another browser). - { - var isIE10 = (eval("/*@cc_on!@*/false") && document.documentMode === 10); - if (isIE10) { - return 10; - } - var v = 3, - div = document.createElement('div'), - all = div.getElementsByTagName('i'); - do { - div.innerHTML = ''; - } while (all[0]); - return v > 4 ? v : undefined; - }; - - var browserVersion = getInternetExplorerVersion(); - - if (browserVersion && browserVersion < 9) { - ie8 = true; - } - - // This returned angular module 'gridster' is what is exported. - return angular.module('attGridsterLib', []) - - .constant('gridsterConfig', { - columns: 6, // number of columns in the grid - pushing: true, // whether to push other items out of the way - floating: true, // whether to automatically float items up so they stack - swapping: true, // whether or not to have items switch places instead of push down if they are the same size - width: 'auto', // width of the grid. "auto" will expand the grid to its parent container - colWidth: 'auto', // width of grid columns. "auto" will divide the width of the grid evenly among the columns - rowHeight: 'match', // height of grid rows. 'match' will make it the same as the column width, a numeric value will be interpreted as pixels, '/2' is half the column width, '*5' is five times the column width, etc. - margins: [10, 10], // margins in between grid items - outerMargin: false, - isMobile: false, // toggle mobile view - mobileBreakPoint: 100, // width threshold to toggle mobile mode - mobileModeEnabled: true, // whether or not to toggle mobile mode when screen width is less than mobileBreakPoint - minColumns: 1, // minimum amount of columns the grid can scale down to - minRows: 1, // minimum amount of rows to show if the grid is empty - maxRows: 100, // maximum amount of rows in the grid - defaultSizeX: 1, // default width of an item in columns - defaultSizeY: 1, // default height of an item in rows - minSizeX: 1, // minimum column width of an item - maxSizeX: null, // maximum column width of an item - minSizeY: 1, // minumum row height of an item - maxSizeY: null, // maximum row height of an item - saveGridItemCalculatedHeightInMobile: false, // grid item height in mobile display. true- to use the calculated height by sizeY given - resizable: { // options to pass to resizable handler - enabled: false, - handles: ['s', 'e', 'n', 'w', 'se', 'ne', 'sw', 'nw'] - }, - draggable: { // options to pass to draggable handler - enabled: true, - scrollSensitivity: 20, // Distance in pixels from the edge of the viewport after which the viewport should scroll, relative to pointer - scrollSpeed: 15 // Speed at which the window should scroll once the mouse pointer gets within scrollSensitivity distance - } - }) - - .controller('GridsterCtrl', ['gridsterConfig', '$timeout', - function(gridsterConfig, $timeout) { - - var gridster = this; - - /** - * Create options from gridsterConfig constant - */ - angular.extend(this, gridsterConfig); - - this.resizable = angular.extend({}, gridsterConfig.resizable || {}); - this.draggable = angular.extend({}, gridsterConfig.draggable || {}); - - var flag = false; - this.layoutChanged = function() { - if (flag) { - return; - } - flag = true; - $timeout(function() { - flag = false; - if (gridster.loaded) { - gridster.floatItemsUp(); - } - gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0); - }, 30); - }; - - /** - * A positional array of the items in the grid - */ - this.grid = []; - - /** - * Clean up after yourself - */ - this.destroy = function() { - // empty the grid to cut back on the possibility - // of circular references - if (this.grid) { - this.grid = []; - } - this.$element = null; - }; - - /** - * Overrides default options - * - * @param {Object} options The options to override - */ - this.setOptions = function(options) { - if (!options) { - return; - } - - options = angular.extend({}, options); - - // all this to avoid using jQuery... - if (options.draggable) { - angular.extend(this.draggable, options.draggable); - delete(options.draggable); - } - if (options.resizable) { - angular.extend(this.resizable, options.resizable); - delete(options.resizable); - } - - angular.extend(this, options); - - if (!this.margins || this.margins.length !== 2) { - this.margins = [0, 0]; - } else { - for (var x = 0, l = this.margins.length; x < l; ++x) { - this.margins[x] = parseInt(this.margins[x], 10); - if (isNaN(this.margins[x])) { - this.margins[x] = 0; - } - } - } - }; - - /** - * Check if item can occupy a specified position in the grid - * - * @param {Object} item The item in question - * @param {Number} row The row index - * @param {Number} column The column index - * @returns {Boolean} True if if item fits - */ - this.canItemOccupy = function(item, row, column) { - return row > -1 && column > -1 && item.sizeX + column <= this.columns && item.sizeY + row <= this.maxRows; - }; - - /** - * Set the item in the first suitable position - * - * @param {Object} item The item to insert - */ - this.autoSetItemPosition = function(item) { - // walk through each row and column looking for a place it will fit - for (var rowIndex = 0; rowIndex < this.maxRows; ++rowIndex) { - for (var colIndex = 0; colIndex < this.columns; ++colIndex) { - // only insert if position is not already taken and it can fit - var items = this.getItems(rowIndex, colIndex, item.sizeX, item.sizeY, item); - if (items.length === 0 && this.canItemOccupy(item, rowIndex, colIndex)) { - this.putItem(item, rowIndex, colIndex); - return; - } - } - } - throw new Error('Unable to place item!'); - }; - - /** - * Gets items at a specific coordinate - * - * @param {Number} row - * @param {Number} column - * @param {Number} sizeX - * @param {Number} sizeY - * @param {Array} excludeItems An array of items to exclude from selection - * @returns {Array} Items that match the criteria - */ - this.getItems = function(row, column, sizeX, sizeY, excludeItems) { - var items = []; - if (!sizeX || !sizeY) { - sizeX = sizeY = 1; - } - if (excludeItems && !(excludeItems instanceof Array)) { - excludeItems = [excludeItems]; - } - for (var h = 0; h < sizeY; ++h) { - for (var w = 0; w < sizeX; ++w) { - var item = this.getItem(row + h, column + w, excludeItems); - if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && items.indexOf(item) === -1) { - items.push(item); - } - } - } - return items; - }; - - /** - * @param {Array} items - * @returns {Object} An item that represents the bounding box of the items - */ - this.getBoundingBox = function(items) { - - if (items.length === 0) { - return null; - } - if (items.length === 1) { - return { - row: items[0].row, - col: items[0].col, - sizeY: items[0].sizeY, - sizeX: items[0].sizeX - }; - } - - var maxRow = 0; - var maxCol = 0; - var minRow = 9999; - var minCol = 9999; - - for (var i = 0, l = items.length; i < l; ++i) { - var item = items[i]; - minRow = Math.min(item.row, minRow); - minCol = Math.min(item.col, minCol); - maxRow = Math.max(item.row + item.sizeY, maxRow); - maxCol = Math.max(item.col + item.sizeX, maxCol); - } - - return { - row: minRow, - col: minCol, - sizeY: maxRow - minRow, - sizeX: maxCol - minCol - }; - }; - - - /** - * Removes an item from the grid - * - * @param {Object} item - */ - this.removeItem = function(item) { - for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) { - var columns = this.grid[rowIndex]; - if (!columns) { - continue; - } - var index = columns.indexOf(item); - if (index !== -1) { - columns[index] = null; - break; - } - } - this.layoutChanged(); - }; - - /** - * Returns the item at a specified coordinate - * - * @param {Number} row - * @param {Number} column - * @param {Array} excludeItems Items to exclude from selection - * @returns {Object} The matched item or null - */ - this.getItem = function(row, column, excludeItems) { - if (excludeItems && !(excludeItems instanceof Array)) { - excludeItems = [excludeItems]; - } - var sizeY = 1; - while (row > -1) { - var sizeX = 1, - col = column; - while (col > -1) { - var items = this.grid[row]; - if (items) { - var item = items[col]; - if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && item.sizeX >= sizeX && item.sizeY >= sizeY) { - return item; - } - } - ++sizeX; - --col; - } - --row; - ++sizeY; - } - return null; - }; - - /** - * Insert an array of items into the grid - * - * @param {Array} items An array of items to insert - */ - this.putItems = function(items) { - for (var i = 0, l = items.length; i < l; ++i) { - this.putItem(items[i]); - } - }; - - /** - * Insert a single item into the grid - * - * @param {Object} item The item to insert - * @param {Number} row (Optional) Specifies the items row index - * @param {Number} column (Optional) Specifies the items column index - * @param {Array} ignoreItems - */ - this.putItem = function(item, row, column, ignoreItems) { - // auto place item if no row specified - if (typeof row === 'undefined' || row === null) { - row = item.row; - column = item.col; - if (typeof row === 'undefined' || row === null) { - this.autoSetItemPosition(item); - return; - } - } - - // keep item within allowed bounds - if (!this.canItemOccupy(item, row, column)) { - column = Math.min(this.columns - item.sizeX, Math.max(0, column)); - row = Math.min(this.maxRows - item.sizeY, Math.max(0, row)); - } - - // check if item is already in grid - if (item.oldRow !== null && typeof item.oldRow !== 'undefined') { - var samePosition = item.oldRow === row && item.oldColumn === column; - var inGrid = this.grid[row] && this.grid[row][column] === item; - if (samePosition && inGrid) { - item.row = row; - item.col = column; - return; - } else { - // remove from old position - var oldRow = this.grid[item.oldRow]; - if (oldRow && oldRow[item.oldColumn] === item) { - delete oldRow[item.oldColumn]; - } - } - } - - item.oldRow = item.row = row; - item.oldColumn = item.col = column; - - this.moveOverlappingItems(item, ignoreItems); - - if (!this.grid[row]) { - this.grid[row] = []; - } - this.grid[row][column] = item; - - if (this.movingItem === item) { - this.floatItemUp(item); - } - this.layoutChanged(); - }; - - /** - * Trade row and column if item1 with item2 - * - * @param {Object} item1 - * @param {Object} item2 - */ - this.swapItems = function(item1, item2) { - this.grid[item1.row][item1.col] = item2; - this.grid[item2.row][item2.col] = item1; - - var item1Row = item1.row; - var item1Col = item1.col; - item1.row = item2.row; - item1.col = item2.col; - item2.row = item1Row; - item2.col = item1Col; - }; - - /** - * Prevents items from being overlapped - * - * @param {Object} item The item that should remain - * @param {Array} ignoreItems - */ - this.moveOverlappingItems = function(item, ignoreItems) { - // don't move item, so ignore it - if (!ignoreItems) { - ignoreItems = [item]; - } else if (ignoreItems.indexOf(item) === -1) { - ignoreItems = ignoreItems.slice(0); - ignoreItems.push(item); - } - - // get the items in the space occupied by the item's coordinates - var overlappingItems = this.getItems( - item.row, - item.col, - item.sizeX, - item.sizeY, - ignoreItems - ); - this.moveItemsDown(overlappingItems, item.row + item.sizeY, ignoreItems); - }; - - /** - * Moves an array of items to a specified row - * - * @param {Array} items The items to move - * @param {Number} newRow The target row - * @param {Array} ignoreItems - */ - this.moveItemsDown = function(items, newRow, ignoreItems) { - if (!items || items.length === 0) { - return; - } - items.sort(function(a, b) { - return a.row - b.row; - }); - - ignoreItems = ignoreItems ? ignoreItems.slice(0) : []; - var topRows = {}, - item, i, l; - - // calculate the top rows in each column - for (i = 0, l = items.length; i < l; ++i) { - item = items[i]; - var topRow = topRows[item.col]; - if (typeof topRow === 'undefined' || item.row < topRow) { - topRows[item.col] = item.row; - } - } - - // move each item down from the top row in its column to the row - for (i = 0, l = items.length; i < l; ++i) { - item = items[i]; - var rowsToMove = newRow - topRows[item.col]; - this.moveItemDown(item, item.row + rowsToMove, ignoreItems); - ignoreItems.push(item); - } - }; - - /** - * Moves an item down to a specified row - * - * @param {Object} item The item to move - * @param {Number} newRow The target row - * @param {Array} ignoreItems - */ - this.moveItemDown = function(item, newRow, ignoreItems) { - if (item.row >= newRow) { - return; - } - while (item.row < newRow) { - ++item.row; - this.moveOverlappingItems(item, ignoreItems); - } - this.putItem(item, item.row, item.col, ignoreItems); - }; - - /** - * Moves all items up as much as possible - */ - this.floatItemsUp = function() { - if (this.floating === false) { - return; - } - for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) { - var columns = this.grid[rowIndex]; - if (!columns) { - continue; - } - for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { - var item = columns[colIndex]; - if (item) { - this.floatItemUp(item); - } - } - } - }; - - /** - * Float an item up to the most suitable row - * - * @param {Object} item The item to move - */ - this.floatItemUp = function(item) { - if (this.floating === false) { - return; - } - var colIndex = item.col, - sizeY = item.sizeY, - sizeX = item.sizeX, - bestRow = null, - bestColumn = null, - rowIndex = item.row - 1; - - while (rowIndex > -1) { - var items = this.getItems(rowIndex, colIndex, sizeX, sizeY, item); - if (items.length !== 0) { - break; - } - bestRow = rowIndex; - bestColumn = colIndex; - --rowIndex; - } - if (bestRow !== null) { - this.putItem(item, bestRow, bestColumn); - } - }; - - /** - * Update gridsters height - * - * @param {Number} plus (Optional) Additional height to add - */ - this.updateHeight = function(plus) { - var maxHeight = this.minRows; - plus = plus || 0; - for (var rowIndex = this.grid.length; rowIndex >= 0; --rowIndex) { - var columns = this.grid[rowIndex]; - if (!columns) { - continue; - } - for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { - if (columns[colIndex]) { - maxHeight = Math.max(maxHeight, rowIndex + plus + columns[colIndex].sizeY); - } - } - } - this.gridHeight = this.maxRows - maxHeight > 0 ? Math.min(this.maxRows, maxHeight) : Math.max(this.maxRows, maxHeight); - }; - - /** - * Returns the number of rows that will fit in given amount of pixels - * - * @param {Number} pixels - * @param {Boolean} ceilOrFloor (Optional) Determines rounding method - */ - this.pixelsToRows = function(pixels, ceilOrFloor) { - if (ceilOrFloor === true) { - return Math.ceil(pixels / this.curRowHeight); - } else if (ceilOrFloor === false) { - return Math.floor(pixels / this.curRowHeight); - } - - return Math.round(pixels / this.curRowHeight); - }; - - /** - * Returns the number of columns that will fit in a given amount of pixels - * - * @param {Number} pixels - * @param {Boolean} ceilOrFloor (Optional) Determines rounding method - * @returns {Number} The number of columns - */ - this.pixelsToColumns = function(pixels, ceilOrFloor) { - if (ceilOrFloor === true) { - return Math.ceil(pixels / this.curColWidth); - } else if (ceilOrFloor === false) { - return Math.floor(pixels / this.curColWidth); - } - - return Math.round(pixels / this.curColWidth); - }; - } - ]) - - .directive('gridsterPreview', function() { - return { - replace: true, - scope: true, - require: '^gridster', - template: '
    ', - link: function(scope, $el, attrs, gridster) { - - /** - * @returns {Object} style object for preview element - */ - scope.previewStyle = function() { - - if (!gridster.movingItem) { - return { - display: 'none' - }; - } - - return { - display: 'block', - height: (gridster.movingItem.sizeY * gridster.curRowHeight - gridster.margins[0]) + 'px', - width: (gridster.movingItem.sizeX * gridster.curColWidth - gridster.margins[1]) + 'px', - top: (gridster.movingItem.row * gridster.curRowHeight + (gridster.outerMargin ? gridster.margins[0] : 0)) + 'px', - left: (gridster.movingItem.col * gridster.curColWidth + (gridster.outerMargin ? gridster.margins[1] : 0)) + 'px' - }; - }; - } - }; - }) - - /** - * The gridster directive - * - * @param {Function} $timeout - * @param {Object} $window - * @param {Object} $rootScope - * @param {Function} gridsterDebounce - */ - .directive('gridster', ['$timeout', '$window', '$rootScope', 'gridsterDebounce', - function($timeout, $window, $rootScope, gridsterDebounce) { - return { - scope: true, - restrict: 'EAC', - controller: 'GridsterCtrl', - controllerAs: 'gridster', - compile: function($tplElem) { - - $tplElem.prepend('
    '); - - return function(scope, $elem, attrs, gridster) { - gridster.loaded = false; - - gridster.$element = $elem; - - scope.gridster = gridster; - - $elem.addClass('gridster'); - - var isVisible = function(ele) { - return ele.style.visibility !== 'hidden' && ele.style.display !== 'none'; - }; - - function refresh(config) { - gridster.setOptions(config); - - if (!isVisible($elem[0])) { - return; - } - - // resolve "auto" & "match" values - if (gridster.width === 'auto') { - gridster.curWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - } else { - gridster.curWidth = gridster.width; - } - - if (gridster.colWidth === 'auto') { - gridster.curColWidth = (gridster.curWidth + (gridster.outerMargin ? -gridster.margins[1] : gridster.margins[1])) / gridster.columns; - } else { - gridster.curColWidth = gridster.colWidth; - } - - gridster.curRowHeight = gridster.rowHeight; - if (typeof gridster.rowHeight === 'string') { - if (gridster.rowHeight === 'match') { - gridster.curRowHeight = Math.round(gridster.curColWidth); - } else if (gridster.rowHeight.indexOf('*') !== -1) { - gridster.curRowHeight = Math.round(gridster.curColWidth * gridster.rowHeight.replace('*', '').replace(' ', '')); - } else if (gridster.rowHeight.indexOf('/') !== -1) { - gridster.curRowHeight = Math.round(gridster.curColWidth / gridster.rowHeight.replace('/', '').replace(' ', '')); - } - } - - gridster.isMobile = gridster.mobileModeEnabled && gridster.curWidth <= gridster.mobileBreakPoint; - - // loop through all items and reset their CSS - for (var rowIndex = 0, l = gridster.grid.length; rowIndex < l; ++rowIndex) { - var columns = gridster.grid[rowIndex]; - if (!columns) { - continue; - } - - for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { - if (columns[colIndex]) { - var item = columns[colIndex]; - item.setElementPosition(); - item.setElementSizeY(); - item.setElementSizeX(); - } - } - } - - updateHeight(); - } - - var optionsKey = attrs.gridster; - if (optionsKey) { - scope.$parent.$watch(optionsKey, function(newConfig) { - refresh(newConfig); - }, true); - } else { - refresh({}); - } - - scope.$watch(function() { - return gridster.loaded; - }, function() { - if (gridster.loaded) { - $elem.addClass('gridster-loaded'); - } else { - $elem.removeClass('gridster-loaded'); - } - }); - - scope.$watch(function() { - return gridster.isMobile; - }, function() { - if (gridster.isMobile) { - $elem.addClass('gridster-mobile').removeClass('gridster-desktop'); - } else { - $elem.removeClass('gridster-mobile').addClass('gridster-desktop'); - } - $rootScope.$broadcast('gridster-mobile-changed', gridster); - }); - - scope.$watch(function() { - return gridster.draggable; - }, function() { - $rootScope.$broadcast('gridster-draggable-changed', gridster); - }, true); - - scope.$watch(function() { - return gridster.resizable; - }, function() { - $rootScope.$broadcast('gridster-resizable-changed', gridster); - }, true); - - function updateHeight() { - if(gridster.gridHeight){ //need to put this check, otherwise fail in IE8 - $elem.css('height', (gridster.gridHeight * gridster.curRowHeight) + (gridster.outerMargin ? gridster.margins[0] : -gridster.margins[0]) + 'px'); - } - } - - scope.$watch(function() { - return gridster.gridHeight; - }, updateHeight); - - scope.$watch(function() { - return gridster.movingItem; - }, function() { - gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0); - }); - - var prevWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - - var resize = function() { - var width = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - - if (!width || width === prevWidth || gridster.movingItem) { - return; - } - prevWidth = width; - - if (gridster.loaded) { - $elem.removeClass('gridster-loaded'); - } - - refresh(); - - if (gridster.loaded) { - $elem.addClass('gridster-loaded'); - } - - $rootScope.$broadcast('gridster-resized', [width, $elem[0].offsetHeight], gridster); - }; - - // track element width changes any way we can - var onResize = gridsterDebounce(function onResize() { - resize(); - $timeout(function() { - scope.$apply(); - }); - }, 100); - - scope.$watch(function() { - return isVisible($elem[0]); - }, onResize); - - // see https://github.com/sdecima/javascript-detect-element-resize - if (typeof window.addResizeListener === 'function') { - window.addResizeListener($elem[0], onResize); - } else { - scope.$watch(function() { - return $elem[0].offsetWidth || parseInt($elem.css('width'), 10); - }, resize); - } - var $win = angular.element($window); - $win.on('resize', onResize); - - // be sure to cleanup - scope.$on('$destroy', function() { - gridster.destroy(); - $win.off('resize', onResize); - if (typeof window.removeResizeListener === 'function') { - window.removeResizeListener($elem[0], onResize); - } - }); - - // allow a little time to place items before floating up - $timeout(function() { - scope.$watch('gridster.floating', function() { - gridster.floatItemsUp(); - }); - gridster.loaded = true; - }, 100); - }; - } - }; - } - ]) - - .controller('GridsterItemCtrl', function() { - this.$element = null; - this.gridster = null; - this.row = null; - this.col = null; - this.sizeX = null; - this.sizeY = null; - this.minSizeX = 0; - this.minSizeY = 0; - this.maxSizeX = null; - this.maxSizeY = null; - - this.init = function($element, gridster) { - this.$element = $element; - this.gridster = gridster; - this.sizeX = gridster.defaultSizeX; - this.sizeY = gridster.defaultSizeY; - }; - - this.destroy = function() { - // set these to null to avoid the possibility of circular references - this.gridster = null; - this.$element = null; - }; - - /** - * Returns the items most important attributes - */ - this.toJSON = function() { - return { - row: this.row, - col: this.col, - sizeY: this.sizeY, - sizeX: this.sizeX - }; - }; - - this.isMoving = function() { - return this.gridster.movingItem === this; - }; - - /** - * Set the items position - * - * @param {Number} row - * @param {Number} column - */ - this.setPosition = function(row, column) { - this.gridster.putItem(this, row, column); - - if (!this.isMoving()) { - this.setElementPosition(); - } - }; - - /** - * Sets a specified size property - * - * @param {String} key Can be either "x" or "y" - * @param {Number} value The size amount - * @param {Boolean} preventMove - */ - this.setSize = function(key, value, preventMove) { - key = key.toUpperCase(); - var camelCase = 'size' + key, - titleCase = 'Size' + key; - if (value === '') { - return; - } - value = parseInt(value, 10); - if (isNaN(value) || value === 0) { - value = this.gridster['default' + titleCase]; - } - var max = key === 'X' ? this.gridster.columns : this.gridster.maxRows; - if (this['max' + titleCase]) { - max = Math.min(this['max' + titleCase], max); - } - if (this.gridster['max' + titleCase]) { - max = Math.min(this.gridster['max' + titleCase], max); - } - if (key === 'X' && this.cols) { - max -= this.cols; - } else if (key === 'Y' && this.rows) { - max -= this.rows; - } - - var min = 0; - if (this['min' + titleCase]) { - min = Math.max(this['min' + titleCase], min); - } - if (this.gridster['min' + titleCase]) { - min = Math.max(this.gridster['min' + titleCase], min); - } - - value = Math.max(Math.min(value, max), min); - - var changed = (this[camelCase] !== value || (this['old' + titleCase] && this['old' + titleCase] !== value)); - this['old' + titleCase] = this[camelCase] = value; - - if (!this.isMoving()) { - this['setElement' + titleCase](); - } - if (!preventMove && changed) { - this.gridster.moveOverlappingItems(this); - this.gridster.layoutChanged(); - } - - return changed; - }; - - /** - * Sets the items sizeY property - * - * @param {Number} rows - * @param {Boolean} preventMove - */ - this.setSizeY = function(rows, preventMove) { - return this.setSize('Y', rows, preventMove); - }; - - /** - * Sets the items sizeX property - * - * @param {Number} columns - * @param {Boolean} preventMove - */ - this.setSizeX = function(columns, preventMove) { - return this.setSize('X', columns, preventMove); - }; - - /** - * Sets an elements position on the page - */ - this.setElementPosition = function() { - if (this.gridster.isMobile) { - this.$element.css({ - marginLeft: this.gridster.margins[0] + 'px', - marginRight: this.gridster.margins[0] + 'px', - marginTop: this.gridster.margins[1] + 'px', - marginBottom: this.gridster.margins[1] + 'px', - top: '', - left: '' - }); - } else { - this.$element.css({ - margin: 0, - top: (this.row * this.gridster.curRowHeight + (this.gridster.outerMargin ? this.gridster.margins[0] : 0)) + 'px', - left: (this.col * this.gridster.curColWidth + (this.gridster.outerMargin ? this.gridster.margins[1] : 0)) + 'px' - }); - } - }; - - /** - * Sets an elements height - */ - this.setElementSizeY = function() { - if (this.gridster.isMobile && !this.gridster.saveGridItemCalculatedHeightInMobile) { - this.$element.css('height', ''); - } else { - var computedHeight = (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]) + 'px'; - //this.$element.css('height', computedHeight); - this.$element.attr('style', this.$element.attr('style') + '; ' + 'height: '+computedHeight+' !important;'); - } - }; - - /** - * Sets an elements width - */ - this.setElementSizeX = function() { - if (this.gridster.isMobile) { - this.$element.css('width', ''); - } else { - this.$element.css('width', (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]) + 'px'); - } - }; - - /** - * Gets an element's width - */ - this.getElementSizeX = function() { - return (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]); - }; - - /** - * Gets an element's height - */ - this.getElementSizeY = function() { - return (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]); - }; - - }) - - .factory('GridsterTouch', [function() { - return function GridsterTouch(target, startEvent, moveEvent, endEvent) { - var lastXYById = {}; - - // Opera doesn't have Object.keys so we use this wrapper - var numberOfKeys = function(theObject) { - if (Object.keys) { - return Object.keys(theObject).length; - } - - var n = 0, - key; - for (key in theObject) { - ++n; - } - - return n; - }; - - // this calculates the delta needed to convert pageX/Y to offsetX/Y because offsetX/Y don't exist in the TouchEvent object or in Firefox's MouseEvent object - var computeDocumentToElementDelta = function(theElement) { - var elementLeft = 0; - var elementTop = 0; - var oldIEUserAgent = navigator.userAgent.match(/\bMSIE\b/); - - for (var offsetElement = theElement; offsetElement != null; offsetElement = offsetElement.offsetParent) { - // the following is a major hack for versions of IE less than 8 to avoid an apparent problem on the IEBlog with double-counting the offsets - // this may not be a general solution to IE7's problem with offsetLeft/offsetParent - if (oldIEUserAgent && - (!document.documentMode || document.documentMode < 8) && - offsetElement.currentStyle.position === 'relative' && offsetElement.offsetParent && offsetElement.offsetParent.currentStyle.position === 'relative' && offsetElement.offsetLeft === offsetElement.offsetParent.offsetLeft) { - // add only the top - elementTop += offsetElement.offsetTop; - } else { - elementLeft += offsetElement.offsetLeft; - elementTop += offsetElement.offsetTop; - } - } - - return { - x: elementLeft, - y: elementTop - }; - }; - - // cache the delta from the document to our event target (reinitialized each mousedown/MSPointerDown/touchstart) - var documentToTargetDelta = computeDocumentToElementDelta(target); - - // common event handler for the mouse/pointer/touch models and their down/start, move, up/end, and cancel events - var doEvent = function(theEvtObj) { - - if (theEvtObj.type === 'mousemove' && numberOfKeys(lastXYById) === 0) { - return; - } - - var prevent = true; - - var pointerList = theEvtObj.changedTouches ? theEvtObj.changedTouches : [theEvtObj]; - - for (var i = 0; i < pointerList.length; ++i) { - var pointerObj = pointerList[i]; - var pointerId = (typeof pointerObj.identifier !== 'undefined') ? pointerObj.identifier : (typeof pointerObj.pointerId !== 'undefined') ? pointerObj.pointerId : 1; - - // use the pageX/Y coordinates to compute target-relative coordinates when we have them (in ie < 9, we need to do a little work to put them there) - if (typeof pointerObj.pageX === 'undefined') { - - // initialize assuming our source element is our target - if(!ie8){ - pointerObj.pageX = pointerObj.offsetX + documentToTargetDelta.x; - pointerObj.pageY = pointerObj.offsetY + documentToTargetDelta.y; - } - else{ - pointerObj.pageX = pointerObj.clientX; - pointerObj.pageY = pointerObj.clientY; - } - - if (pointerObj.srcElement.offsetParent === target && document.documentMode && document.documentMode === 8 && pointerObj.type === 'mousedown') { - // source element is a child piece of VML, we're in IE8, and we've not called setCapture yet - add the origin of the source element - pointerObj.pageX += pointerObj.srcElement.offsetLeft; - pointerObj.pageY += pointerObj.srcElement.offsetTop; - } else if (pointerObj.srcElement !== target && !document.documentMode || document.documentMode < 8) { - // source element isn't the target (most likely it's a child piece of VML) and we're in a version of IE before IE8 - - // the offsetX/Y values are unpredictable so use the clientX/Y values and adjust by the scroll offsets of its parents - // to get the document-relative coordinates (the same as pageX/Y) - var sx = -2, - sy = -2; // adjust for old IE's 2-pixel border - for (var scrollElement = pointerObj.srcElement; scrollElement !== null; scrollElement = scrollElement.parentNode) { - sx += scrollElement.scrollLeft ? scrollElement.scrollLeft : 0; - sy += scrollElement.scrollTop ? scrollElement.scrollTop : 0; - } - - pointerObj.pageX = pointerObj.clientX + sx; - pointerObj.pageY = pointerObj.clientY + sy; - } - } - - - var pageX = pointerObj.pageX; - var pageY = pointerObj.pageY; - - if (theEvtObj.type.match(/(start|down)$/i)) { - // clause for processing MSPointerDown, touchstart, and mousedown - - // refresh the document-to-target delta on start in case the target has moved relative to document - documentToTargetDelta = computeDocumentToElementDelta(target); - - // protect against failing to get an up or end on this pointerId - if (lastXYById[pointerId]) { - if (endEvent) { - endEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - - delete lastXYById[pointerId]; - } - - if (startEvent) { - if (prevent) { - prevent = startEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - } - - // init last page positions for this pointer - lastXYById[pointerId] = { - x: pageX, - y: pageY - }; - - // IE pointer model - if (target.msSetPointerCapture) { - target.msSetPointerCapture(pointerId); - } else if (theEvtObj.type === 'mousedown' && numberOfKeys(lastXYById) === 1) { - if (useSetReleaseCapture) { - target.setCapture(true); - } else { - document.addEventListener('mousemove', doEvent, false); - document.addEventListener('mouseup', doEvent, false); - } - } - } else if (theEvtObj.type.match(/move$/i)) { - // clause handles mousemove, MSPointerMove, and touchmove - - if (lastXYById[pointerId] && !(lastXYById[pointerId].x === pageX && lastXYById[pointerId].y === pageY)) { - // only extend if the pointer is down and it's not the same as the last point - - if (moveEvent && prevent) { - prevent = moveEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - - // update last page positions for this pointer - lastXYById[pointerId].x = pageX; - lastXYById[pointerId].y = pageY; - } - } else if (lastXYById[pointerId] && theEvtObj.type.match(/(up|end|cancel)$/i)) { - // clause handles up/end/cancel - - if (endEvent && prevent) { - prevent = endEvent({ - target: theEvtObj.target, - which: theEvtObj.which, - pointerId: pointerId, - pageX: pageX, - pageY: pageY - }); - } - - // delete last page positions for this pointer - delete lastXYById[pointerId]; - - // in the Microsoft pointer model, release the capture for this pointer - // in the mouse model, release the capture or remove document-level event handlers if there are no down points - // nothing is required for the iOS touch model because capture is implied on touchstart - if (target.msReleasePointerCapture) { - target.msReleasePointerCapture(pointerId); - } else if (theEvtObj.type === 'mouseup' && numberOfKeys(lastXYById) === 0) { - if (useSetReleaseCapture) { - target.releaseCapture(); - } else { - document.removeEventListener('mousemove', doEvent, false); - document.removeEventListener('mouseup', doEvent, false); - } - } - } - } - - if (prevent) { - if (theEvtObj.preventDefault) { - theEvtObj.preventDefault(); - } - - if (theEvtObj.preventManipulation) { - theEvtObj.preventManipulation(); - } - - if (theEvtObj.preventMouseEvent) { - theEvtObj.preventMouseEvent(); - } - } - }; - - var useSetReleaseCapture = false; - // saving the settings for contentZooming and touchaction before activation - var contentZooming, msTouchAction; - - this.enable = function() { - - if (window.navigator.msPointerEnabled) { - // Microsoft pointer model - target.addEventListener('MSPointerDown', doEvent, false); - target.addEventListener('MSPointerMove', doEvent, false); - target.addEventListener('MSPointerUp', doEvent, false); - target.addEventListener('MSPointerCancel', doEvent, false); - - // css way to prevent panning in our target area - if (typeof target.style.msContentZooming !== 'undefined') { - contentZooming = target.style.msContentZooming; - target.style.msContentZooming = 'none'; - } - - // new in Windows Consumer Preview: css way to prevent all built-in touch actions on our target - // without this, you cannot touch draw on the element because IE will intercept the touch events - if (typeof target.style.msTouchAction !== 'undefined') { - msTouchAction = target.style.msTouchAction; - target.style.msTouchAction = 'none'; - } - } else if (target.addEventListener) { - // iOS touch model - target.addEventListener('touchstart', doEvent, false); - target.addEventListener('touchmove', doEvent, false); - target.addEventListener('touchend', doEvent, false); - target.addEventListener('touchcancel', doEvent, false); - - // mouse model - target.addEventListener('mousedown', doEvent, false); - - // mouse model with capture - // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target - if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) { - useSetReleaseCapture = true; - - target.addEventListener('mousemove', doEvent, false); - target.addEventListener('mouseup', doEvent, false); - } - } else if (target.attachEvent && target.setCapture) { - // legacy IE mode - mouse with capture - useSetReleaseCapture = true; - target.attachEvent('onmousedown', function() { - doEvent(window.event); - window.event.returnValue = false; - return false; - }); - target.attachEvent('onmousemove', function() { - doEvent(window.event); - window.event.returnValue = false; - return false; - }); - target.attachEvent('onmouseup', function() { - doEvent(window.event); - window.event.returnValue = false; - return false; - }); - } - }; - - this.disable = function() { - if (window.navigator.msPointerEnabled) { - // Microsoft pointer model - target.removeEventListener('MSPointerDown', doEvent, false); - target.removeEventListener('MSPointerMove', doEvent, false); - target.removeEventListener('MSPointerUp', doEvent, false); - target.removeEventListener('MSPointerCancel', doEvent, false); - - // reset zooming to saved value - if (contentZooming) { - target.style.msContentZooming = contentZooming; - } - - // reset touch action setting - if (msTouchAction) { - target.style.msTouchAction = msTouchAction; - } - } else if (target.removeEventListener) { - // iOS touch model - target.removeEventListener('touchstart', doEvent, false); - target.removeEventListener('touchmove', doEvent, false); - target.removeEventListener('touchend', doEvent, false); - target.removeEventListener('touchcancel', doEvent, false); - - // mouse model - target.removeEventListener('mousedown', doEvent, false); - - // mouse model with capture - // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target - if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) { - useSetReleaseCapture = true; - - target.removeEventListener('mousemove', doEvent, false); - target.removeEventListener('mouseup', doEvent, false); - } - } else if (target.detachEvent && target.setCapture) { - // legacy IE mode - mouse with capture - useSetReleaseCapture = true; - target.detachEvent('onmousedown'); - target.detachEvent('onmousemove'); - target.detachEvent('onmouseup'); - } - }; - - return this; - }; - }]) - - .factory('GridsterDraggable', ['$document', '$timeout', '$window', 'GridsterTouch', - function($document, $timeout, $window, GridsterTouch) { - function GridsterDraggable($el, scope, gridster, item, itemOptions) { - - var elmX, elmY, elmW, elmH, - - mouseX = 0, - mouseY = 0, - lastMouseX = 0, - lastMouseY = 0, - mOffX = 0, - mOffY = 0, - - minTop = 0, - maxTop = 9999, - minLeft = 0, - realdocument = $document[0]; - - var originalCol, originalRow; - var inputTags = ['select', 'input', 'textarea', 'button']; - - var gridsterItemDragElement = $el[0].querySelector('[gridster-item-drag]'); - //console.log(gridsterItemDragElement); - var isDraggableAreaDefined = gridsterItemDragElement?true:false; - //console.log(isDraggableAreaDefined); - - function mouseDown(e) { - - if(ie8){ - e.target = window.event.srcElement; - e.which = window.event.button; - } - - if(isDraggableAreaDefined && (!gridsterItemDragElement.contains(e.target))){ - return false; - } - - if (inputTags.indexOf(e.target.nodeName.toLowerCase()) !== -1) { - return false; - } - - var $target = angular.element(e.target); - - // exit, if a resize handle was hit - if ($target.hasClass('gridster-item-resizable-handler')) { - return false; - } - - // exit, if the target has it's own click event - if ($target.attr('onclick') || $target.attr('ng-click')) { - return false; - } - - // only works if you have jQuery - if ($target.closest && $target.closest('.gridster-no-drag').length) { - return false; - } - - switch (e.which) { - case 1: - // left mouse button - break; - case 2: - case 3: - // right or middle mouse button - return; - } - - lastMouseX = e.pageX; - lastMouseY = e.pageY; - - elmX = parseInt($el.css('left'), 10); - elmY = parseInt($el.css('top'), 10); - elmW = $el[0].offsetWidth; - elmH = $el[0].offsetHeight; - - originalCol = item.col; - originalRow = item.row; - - dragStart(e); - - return true; - } - - function mouseMove(e) { - if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) { - return false; - } - - var maxLeft = gridster.curWidth - 1; - - // Get the current mouse position. - mouseX = e.pageX; - mouseY = e.pageY; - - // Get the deltas - var diffX = mouseX - lastMouseX + mOffX; - var diffY = mouseY - lastMouseY + mOffY; - mOffX = mOffY = 0; - - // Update last processed mouse positions. - lastMouseX = mouseX; - lastMouseY = mouseY; - - var dX = diffX, - dY = diffY; - if (elmX + dX < minLeft) { - diffX = minLeft - elmX; - mOffX = dX - diffX; - } else if (elmX + elmW + dX > maxLeft) { - diffX = maxLeft - elmX - elmW; - mOffX = dX - diffX; - } - - if (elmY + dY < minTop) { - diffY = minTop - elmY; - mOffY = dY - diffY; - } else if (elmY + elmH + dY > maxTop) { - diffY = maxTop - elmY - elmH; - mOffY = dY - diffY; - } - elmX += diffX; - elmY += diffY; - - // set new position - $el.css({ - 'top': elmY + 'px', - 'left': elmX + 'px' - }); - - drag(e); - - return true; - } - - function mouseUp(e) { - if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) { - return false; - } - - mOffX = mOffY = 0; - - dragStop(e); - - return true; - } - - function dragStart(event) { - $el.addClass('gridster-item-moving'); - gridster.movingItem = item; - - gridster.updateHeight(item.sizeY); - scope.$apply(function() { - if (gridster.draggable && gridster.draggable.start) { - gridster.draggable.start(event, $el, itemOptions); - } - }); - } - - function drag(event) { - var oldRow = item.row, - oldCol = item.col, - hasCallback = gridster.draggable && gridster.draggable.drag, - scrollSensitivity = gridster.draggable.scrollSensitivity, - scrollSpeed = gridster.draggable.scrollSpeed; - - var row = gridster.pixelsToRows(elmY); - var col = gridster.pixelsToColumns(elmX); - - var itemsInTheWay = gridster.getItems(row, col, item.sizeX, item.sizeY, item); - var hasItemsInTheWay = itemsInTheWay.length !== 0; - - if (gridster.swapping === true && hasItemsInTheWay) { - var boundingBoxItem = gridster.getBoundingBox(itemsInTheWay), - sameSize = boundingBoxItem.sizeX === item.sizeX && boundingBoxItem.sizeY === item.sizeY, - sameRow = boundingBoxItem.row === oldRow, - sameCol = boundingBoxItem.col === oldCol, - samePosition = boundingBoxItem.row === row && boundingBoxItem.col === col, - inline = sameRow || sameCol; - - if (sameSize && itemsInTheWay.length === 1) { - if (samePosition) { - gridster.swapItems(item, itemsInTheWay[0]); - } else if (inline) { - return; - } - } else if (boundingBoxItem.sizeX <= item.sizeX && boundingBoxItem.sizeY <= item.sizeY && inline) { - var emptyRow = item.row <= row ? item.row : row + item.sizeY, - emptyCol = item.col <= col ? item.col : col + item.sizeX, - rowOffset = emptyRow - boundingBoxItem.row, - colOffset = emptyCol - boundingBoxItem.col; - - for (var i = 0, l = itemsInTheWay.length; i < l; ++i) { - var itemInTheWay = itemsInTheWay[i]; - - var itemsInFreeSpace = gridster.getItems( - itemInTheWay.row + rowOffset, - itemInTheWay.col + colOffset, - itemInTheWay.sizeX, - itemInTheWay.sizeY, - item - ); - - if (itemsInFreeSpace.length === 0) { - gridster.putItem(itemInTheWay, itemInTheWay.row + rowOffset, itemInTheWay.col + colOffset); - } - } - } - } - - if (gridster.pushing !== false || !hasItemsInTheWay) { - item.row = row; - item.col = col; - } - - if(($window.navigator.appName === 'Microsoft Internet Explorer' && !ie8) || $window.navigator.userAgent.indexOf("Firefox")!==-1){ - if (event.pageY - realdocument.documentElement.scrollTop < scrollSensitivity) { - realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop - scrollSpeed; - } else if ($window.innerHeight - (event.pageY - realdocument.documentElement.scrollTop) < scrollSensitivity) { - realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop + scrollSpeed; - } - } - else{ - if (event.pageY - realdocument.body.scrollTop < scrollSensitivity) { - realdocument.body.scrollTop = realdocument.body.scrollTop - scrollSpeed; - } else if ($window.innerHeight - (event.pageY - realdocument.body.scrollTop) < scrollSensitivity) { - realdocument.body.scrollTop = realdocument.body.scrollTop + scrollSpeed; - } - } - - - - if (event.pageX - realdocument.body.scrollLeft < scrollSensitivity) { - realdocument.body.scrollLeft = realdocument.body.scrollLeft - scrollSpeed; - } else if ($window.innerWidth - (event.pageX - realdocument.body.scrollLeft) < scrollSensitivity) { - realdocument.body.scrollLeft = realdocument.body.scrollLeft + scrollSpeed; - } - - if (hasCallback || oldRow !== item.row || oldCol !== item.col) { - scope.$apply(function() { - if (hasCallback) { - gridster.draggable.drag(event, $el, itemOptions); - } - }); - } - } - - function dragStop(event) { - $el.removeClass('gridster-item-moving'); - var row = gridster.pixelsToRows(elmY); - var col = gridster.pixelsToColumns(elmX); - if (gridster.pushing !== false || gridster.getItems(row, col, item.sizeX, item.sizeY, item).length === 0) { - item.row = row; - item.col = col; - } - gridster.movingItem = null; - item.setPosition(item.row, item.col); - - scope.$apply(function() { - if (gridster.draggable && gridster.draggable.stop) { - gridster.draggable.stop(event, $el, itemOptions); - } - }); - } - - var enabled = null; - var $dragHandles = null; - var unifiedInputs = []; - - this.enable = function() { - if (enabled === true) { - return; - } - - // disable and timeout required for some template rendering - $timeout(function() { - // disable any existing draghandles - for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) { - unifiedInputs[u].disable(); - } - unifiedInputs = []; - - if (gridster.draggable && gridster.draggable.handle) { - $dragHandles = angular.element($el[0].querySelectorAll(gridster.draggable.handle)); - if ($dragHandles.length === 0) { - // fall back to element if handle not found... - $dragHandles = $el; - } - } else { - $dragHandles = $el; - } - - for (var h = 0, hl = $dragHandles.length; h < hl; ++h) { - unifiedInputs[h] = new GridsterTouch($dragHandles[h], mouseDown, mouseMove, mouseUp); - unifiedInputs[h].enable(); - } - - enabled = true; - }); - }; - - this.disable = function() { - if (enabled === false) { - return; - } - - // timeout to avoid race contition with the enable timeout - $timeout(function() { - - for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) { - unifiedInputs[u].disable(); - } - - unifiedInputs = []; - enabled = false; - }); - }; - - this.toggle = function(enabled) { - if (enabled) { - this.enable(); - } else { - this.disable(); - } - }; - - this.destroy = function() { - this.disable(); - }; - } - - return GridsterDraggable; - } - ]) - - .factory('GridsterResizable', ['GridsterTouch', function(GridsterTouch) { - function GridsterResizable($el, scope, gridster, item, itemOptions) { - - function ResizeHandle(handleClass) { - - var hClass = handleClass; - - var elmX, elmY, elmW, elmH, - - mouseX = 0, - mouseY = 0, - lastMouseX = 0, - lastMouseY = 0, - mOffX = 0, - mOffY = 0, - - minTop = 0, - maxTop = 9999, - minLeft = 0; - - var getMinHeight = function() { - return (item.minSizeY ? item.minSizeY : 1) * gridster.curRowHeight - gridster.margins[0]; - }; - var getMinWidth = function() { - return (item.minSizeX ? item.minSizeX : 1) * gridster.curColWidth - gridster.margins[1]; - }; - - var originalWidth, originalHeight; - var savedDraggable; - - function mouseDown(e) { - switch (e.which) { - case 1: - // left mouse button - break; - case 2: - case 3: - // right or middle mouse button - return; - } - - // save the draggable setting to restore after resize - savedDraggable = gridster.draggable.enabled; - if (savedDraggable) { - gridster.draggable.enabled = false; - scope.$broadcast('gridster-draggable-changed', gridster); - } - - // Get the current mouse position. - lastMouseX = e.pageX; - lastMouseY = e.pageY; - - // Record current widget dimensions - elmX = parseInt($el.css('left'), 10); - elmY = parseInt($el.css('top'), 10); - elmW = $el[0].offsetWidth; - elmH = $el[0].offsetHeight; - - originalWidth = item.sizeX; - originalHeight = item.sizeY; - - resizeStart(e); - - return true; - } - - function resizeStart(e) { - $el.addClass('gridster-item-moving'); - $el.addClass('gridster-item-resizing'); - - gridster.movingItem = item; - - item.setElementSizeX(); - item.setElementSizeY(); - item.setElementPosition(); - gridster.updateHeight(1); - - scope.$apply(function() { - // callback - if (gridster.resizable && gridster.resizable.start) { - gridster.resizable.start(e, $el, itemOptions); // options is the item model - } - }); - } - - function mouseMove(e) { - var maxLeft = gridster.curWidth - 1; - - // Get the current mouse position. - mouseX = e.pageX; - mouseY = e.pageY; - - // Get the deltas - var diffX = mouseX - lastMouseX + mOffX; - var diffY = mouseY - lastMouseY + mOffY; - mOffX = mOffY = 0; - - // Update last processed mouse positions. - lastMouseX = mouseX; - lastMouseY = mouseY; - - var dY = diffY, - dX = diffX; - - if (hClass.indexOf('n') >= 0) { - if (elmH - dY < getMinHeight()) { - diffY = elmH - getMinHeight(); - mOffY = dY - diffY; - } else if (elmY + dY < minTop) { - diffY = minTop - elmY; - mOffY = dY - diffY; - } - elmY += diffY; - elmH -= diffY; - } - if (hClass.indexOf('s') >= 0) { - if (elmH + dY < getMinHeight()) { - diffY = getMinHeight() - elmH; - mOffY = dY - diffY; - } else if (elmY + elmH + dY > maxTop) { - diffY = maxTop - elmY - elmH; - mOffY = dY - diffY; - } - elmH += diffY; - } - if (hClass.indexOf('w') >= 0) { - if (elmW - dX < getMinWidth()) { - diffX = elmW - getMinWidth(); - mOffX = dX - diffX; - } else if (elmX + dX < minLeft) { - diffX = minLeft - elmX; - mOffX = dX - diffX; - } - elmX += diffX; - elmW -= diffX; - } - if (hClass.indexOf('e') >= 0) { - if (elmW + dX < getMinWidth()) { - diffX = getMinWidth() - elmW; - mOffX = dX - diffX; - } else if (elmX + elmW + dX > maxLeft) { - diffX = maxLeft - elmX - elmW; - mOffX = dX - diffX; - } - elmW += diffX; - } - - // set new position - $el.css({ - 'top': elmY + 'px', - 'left': elmX + 'px', - 'width': elmW + 'px', - 'height': elmH + 'px' - }); - - resize(e); - - return true; - } - - function mouseUp(e) { - // restore draggable setting to its original state - if (gridster.draggable.enabled !== savedDraggable) { - gridster.draggable.enabled = savedDraggable; - scope.$broadcast('gridster-draggable-changed', gridster); - } - - mOffX = mOffY = 0; - - resizeStop(e); - - return true; - } - - function resize(e) { - var oldRow = item.row, - oldCol = item.col, - oldSizeX = item.sizeX, - oldSizeY = item.sizeY, - hasCallback = gridster.resizable && gridster.resizable.resize; - - var col = item.col; - // only change column if grabbing left edge - if (['w', 'nw', 'sw'].indexOf(handleClass) !== -1) { - col = gridster.pixelsToColumns(elmX, false); - } - - var row = item.row; - // only change row if grabbing top edge - if (['n', 'ne', 'nw'].indexOf(handleClass) !== -1) { - row = gridster.pixelsToRows(elmY, false); - } - - var sizeX = item.sizeX; - // only change row if grabbing left or right edge - if (['n', 's'].indexOf(handleClass) === -1) { - sizeX = gridster.pixelsToColumns(elmW, true); - } - - var sizeY = item.sizeY; - // only change row if grabbing top or bottom edge - if (['e', 'w'].indexOf(handleClass) === -1) { - sizeY = gridster.pixelsToRows(elmH, true); - } - - if (gridster.pushing !== false || gridster.getItems(row, col, sizeX, sizeY, item).length === 0) { - item.row = row; - item.col = col; - item.sizeX = sizeX; - item.sizeY = sizeY; - } - var isChanged = item.row !== oldRow || item.col !== oldCol || item.sizeX !== oldSizeX || item.sizeY !== oldSizeY; - - if (hasCallback || isChanged) { - scope.$apply(function() { - if (hasCallback) { - gridster.resizable.resize(e, $el, itemOptions); // options is the item model - } - }); - } - } - - function resizeStop(e) { - $el.removeClass('gridster-item-moving'); - $el.removeClass('gridster-item-resizing'); - - gridster.movingItem = null; - - item.setPosition(item.row, item.col); - item.setSizeY(item.sizeY); - item.setSizeX(item.sizeX); - - scope.$apply(function() { - if (gridster.resizable && gridster.resizable.stop) { - gridster.resizable.stop(e, $el, itemOptions); // options is the item model - } - }); - } - - var $dragHandle = null; - var unifiedInput; - - this.enable = function() { - if (!$dragHandle) { - $dragHandle = angular.element('
    '); - $el.append($dragHandle); - } - - unifiedInput = new GridsterTouch($dragHandle[0], mouseDown, mouseMove, mouseUp); - unifiedInput.enable(); - }; - - this.disable = function() { - if ($dragHandle) { - $dragHandle.remove(); - $dragHandle = null; - } - - unifiedInput.disable(); - unifiedInput = undefined; - }; - - this.destroy = function() { - this.disable(); - }; - } - - var handles = []; - var handlesOpts = gridster.resizable.handles; - if (typeof handlesOpts === 'string') { - handlesOpts = gridster.resizable.handles.split(','); - } - var enabled = false; - - for (var c = 0, l = handlesOpts.length; c < l; c++) { - handles.push(new ResizeHandle(handlesOpts[c])); - } - - this.enable = function() { - if (enabled) { - return; - } - for (var c = 0, l = handles.length; c < l; c++) { - handles[c].enable(); - } - enabled = true; - }; - - this.disable = function() { - if (!enabled) { - return; - } - for (var c = 0, l = handles.length; c < l; c++) { - handles[c].disable(); - } - enabled = false; - }; - - this.toggle = function(enabled) { - if (enabled) { - this.enable(); - } else { - this.disable(); - } - }; - - this.destroy = function() { - for (var c = 0, l = handles.length; c < l; c++) { - handles[c].destroy(); - } - }; - } - return GridsterResizable; - }]) - - .factory('gridsterDebounce', function() { - return function gridsterDebounce(func, wait, immediate) { - var timeout; - return function() { - var context = this, - args = arguments; - var later = function() { - timeout = null; - if (!immediate) { - func.apply(context, args); - } - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) { - func.apply(context, args); - } - }; - }; - }) - - /** - * GridsterItem directive - * @param $parse - * @param GridsterDraggable - * @param GridsterResizable - * @param gridsterDebounce - */ - .directive('gridsterItem', ['$parse', 'GridsterDraggable', 'GridsterResizable', 'gridsterDebounce', - function($parse, GridsterDraggable, GridsterResizable, gridsterDebounce) { - return { - scope: true, - restrict: 'EA', - controller: 'GridsterItemCtrl', - controllerAs: 'gridsterItem', - require: ['^gridster', 'gridsterItem'], - link: function(scope, $el, attrs, controllers) { - var optionsKey = attrs.gridsterItem, - options; - - var gridster = controllers[0], - item = controllers[1]; - - scope.gridster = gridster; - - - // bind the item's position properties - // options can be an object specified by gridster-item="object" - // or the options can be the element html attributes object - if (optionsKey) { - var $optionsGetter = $parse(optionsKey); - options = $optionsGetter(scope) || {}; - if (!options && $optionsGetter.assign) { - options = { - row: item.row, - col: item.col, - sizeX: item.sizeX, - sizeY: item.sizeY, - minSizeX: 0, - minSizeY: 0, - maxSizeX: null, - maxSizeY: null - }; - $optionsGetter.assign(scope, options); - } - } else { - options = attrs; - } - - item.init($el, gridster); - - $el.addClass('gridster-item'); - - var aspects = ['minSizeX', 'maxSizeX', 'minSizeY', 'maxSizeY', 'sizeX', 'sizeY', 'row', 'col'], - $getters = {}; - - var expressions = []; - var aspectFn = function(aspect) { - var expression; - if (typeof options[aspect] === 'string') { - // watch the expression in the scope - expression = options[aspect]; - } else if (typeof options[aspect.toLowerCase()] === 'string') { - // watch the expression in the scope - expression = options[aspect.toLowerCase()]; - } else if (optionsKey) { - // watch the expression on the options object in the scope - expression = optionsKey + '.' + aspect; - } else { - return; - } - expressions.push('"' + aspect + '":' + expression); - $getters[aspect] = $parse(expression); - - // initial set - var val = $getters[aspect](scope); - if (typeof val === 'number') { - item[aspect] = val; - } - }; - - for (var i = 0, l = aspects.length; i < l; ++i) { - aspectFn(aspects[i]); - } - - var watchExpressions = '{' + expressions.join(',') + '}'; - - // when the value changes externally, update the internal item object - scope.$watchCollection(watchExpressions, function(newVals, oldVals) { - for (var aspect in newVals) { - var newVal = newVals[aspect]; - var oldVal = oldVals[aspect]; - if (oldVal === newVal) { - continue; - } - newVal = parseInt(newVal, 10); - if (!isNaN(newVal)) { - item[aspect] = newVal; - } - } - }); - - function positionChanged() { - // call setPosition so the element and gridster controller are updated - item.setPosition(item.row, item.col); - - // when internal item position changes, update externally bound values - if ($getters.row && $getters.row.assign) { - $getters.row.assign(scope, item.row); - } - if ($getters.col && $getters.col.assign) { - $getters.col.assign(scope, item.col); - } - } - scope.$watch(function() { - return item.row + ',' + item.col; - }, positionChanged); - - function sizeChanged() { - var changedX = item.setSizeX(item.sizeX, true); - if (changedX && $getters.sizeX && $getters.sizeX.assign) { - $getters.sizeX.assign(scope, item.sizeX); - } - var changedY = item.setSizeY(item.sizeY, true); - if (changedY && $getters.sizeY && $getters.sizeY.assign) { - $getters.sizeY.assign(scope, item.sizeY); - } - - if (changedX || changedY) { - item.gridster.moveOverlappingItems(item); - gridster.layoutChanged(); - scope.$broadcast('gridster-item-resized', item); - } - } - - scope.$watch(function() { - return item.sizeY + ',' + item.sizeX + ',' + item.minSizeX + ',' + item.maxSizeX + ',' + item.minSizeY + ',' + item.maxSizeY; - }, sizeChanged); - - var draggable = new GridsterDraggable($el, scope, gridster, item, options); - var resizable = new GridsterResizable($el, scope, gridster, item, options); - - var updateResizable = function() { - resizable.toggle(!gridster.isMobile && gridster.resizable && gridster.resizable.enabled); - }; - updateResizable(); - - var updateDraggable = function() { - draggable.toggle(!gridster.isMobile && gridster.draggable && gridster.draggable.enabled); - }; - updateDraggable(); - - scope.$on('gridster-draggable-changed', updateDraggable); - scope.$on('gridster-resizable-changed', updateResizable); - scope.$on('gridster-resized', updateResizable); - scope.$on('gridster-mobile-changed', function() { - updateResizable(); - updateDraggable(); - }); - - function whichTransitionEvent() { - var el = document.createElement('div'); - var transitions = { - 'transition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'MozTransition': 'transitionend', - 'WebkitTransition': 'webkitTransitionEnd' - }; - for (var t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - } - - var debouncedTransitionEndPublisher = gridsterDebounce(function() { - scope.$apply(function() { - scope.$broadcast('gridster-item-transition-end', item); - }); - }, 50); - - if(whichTransitionEvent()){ //check for IE8, as it evaluates to null - $el.on(whichTransitionEvent(), debouncedTransitionEndPublisher); - } - - scope.$broadcast('gridster-item-initialized', item); - - return scope.$on('$destroy', function() { - try { - resizable.destroy(); - draggable.destroy(); - } catch (e) {} - - try { - gridster.removeItem(item); - } catch (e) {} - - try { - item.destroy(); - } catch (e) {} - }); - } - }; - } - ]) - - .directive('gridsterNoDrag', function() { - return { - restrict: 'A', - link: function(scope, $element) { - $element.addClass('gridster-no-drag'); - } - }; - }) - - ; - -})); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js deleted file mode 100644 index 3ca3db7d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/att_angular_gridster/ui-gridster-tpls.js +++ /dev/null @@ -1,168 +0,0 @@ -/** -* FileName ui-gridster -* Version 0.0.1 -* Build number ad58c6f4f8f8fd7f04ac457f95d76f09 -* Date 08/17/2015 -*/ - - -(function(angular, window){ -angular.module("att.gridster", ["att.gridster.tpls", "att.gridster.utilities","att.gridster.gridster"]); -angular.module("att.gridster.tpls", ["template/gridster/gridster.html","template/gridster/gridsterItem.html","template/gridster/gridsterItemBody.html","template/gridster/gridsterItemFooter.html","template/gridster/gridsterItemHeader.html"]); -angular.module('att.gridster.utilities', []) - .factory('$extendObj', [function() { - var _extendDeep = function(dst) { - angular.forEach(arguments, function(obj) { - if (obj !== dst) { - angular.forEach(obj, function(value, key) { - if (dst[key] && dst[key].constructor && dst[key].constructor === Object) { - _extendDeep(dst[key], value); - } else { - dst[key] = value; - } - }); - } - }); - return dst; - }; - return { - extendDeep: _extendDeep - }; - }]); - -angular.module('att.gridster.gridster', ['attGridsterLib', 'att.gridster.utilities']) - .config(['$compileProvider', function($compileProvider) { - $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/); - }]) - .constant('attGridsterConfig', - { - columns: 3, - margins: [10, 10], - outerMargin: true, - pushing: true, - floating: true, - swapping: true, - draggable: { - enabled: true - } - }) - .directive('attGridster', ['attGridsterConfig', '$extendObj', function(attGridsterConfig, $extendObj) { - return { - restrict: 'EA', - scope: { - attGridsterOptions: '=?' - }, - templateUrl: 'template/gridster/gridster.html', - replace: false, - transclude: true, - controller: [function() {}], - link: function(scope) { - if (angular.isDefined(scope.attGridsterOptions)) { - attGridsterConfig = $extendObj.extendDeep(attGridsterConfig, scope.attGridsterOptions); - } - scope.attGridsterConfig = attGridsterConfig; - } - }; - }]) - .directive('attGridsterItem', ['$timeout', function($timeout) { - return { - restrict: 'EA', - require: ['^attGridster'], - scope: { - attGridsterItem: '=' - }, - templateUrl: 'template/gridster/gridsterItem.html', - replace: false, - transclude: true, - controller: [function() {}] - }; - }]) - .directive('attGridsterItemHeader', [function() { - return { - restrict: 'EA', - require: ['^attGridsterItem'], - scope: { - headerText: '@', - subHeaderText: '@?' - }, - templateUrl: 'template/gridster/gridsterItemHeader.html', - replace: true, - transclude: true, - link: function(scope, element) { - if (angular.isDefined(scope.subHeaderText) && scope.subHeaderText) { - angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("tabindex", "0"); - angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("aria-label", scope.subHeaderText); - } - } - }; - }]) - .directive('attGridsterItemBody', [function() { - return { - restrict: 'EA', - require: ['^attGridsterItem'], - scope: {}, - templateUrl: 'template/gridster/gridsterItemBody.html', - replace: true, - transclude: true - }; - }]) - .directive('attGridsterItemFooter', ['$location', function($location) { - return { - restrict: 'EA', - require: ['^attGridsterItem'], - scope: { - attGridsterItemFooterLink: '@?' - }, - templateUrl: 'template/gridster/gridsterItemFooter.html', - replace: true, - transclude: true, - controller: ['$scope', function($scope) { - $scope.clickOnFooterLink = function(evt) { - evt.preventDefault(); - evt.stopPropagation(); - if ($scope.attGridsterItemFooterLink) { - $location.url($scope.attGridsterItemFooterLink); - } - }; - }], - link: function(scope, element) { - if (angular.isDefined(scope.attGridsterItemFooterLink) && scope.attGridsterItemFooterLink) { - element.attr("role", "link"); - } - } - }; - }]); -angular.module("template/gridster/gridster.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridster.html", - "
    "); -}]); - -angular.module("template/gridster/gridsterItem.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItem.html", - "
    "); -}]); - -angular.module("template/gridster/gridsterItemBody.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItemBody.html", - "
    "); -}]); - -angular.module("template/gridster/gridsterItemFooter.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItemFooter.html", - "
    \n" + - " \n" + - "
    "); -}]); - -angular.module("template/gridster/gridsterItemHeader.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/gridster/gridsterItemHeader.html", - "
    \n" + - " \"||\"\n" + - " {{headerText}}\n" + - " {{subHeaderText}}\n" + - "
    \n" + - "
    "); -}]); - -return {} -})(angular, window); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js deleted file mode 100644 index 39ef50e8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-closed-cloop.js +++ /dev/null @@ -1,28 +0,0 @@ -app.controller('adminClosedLoopController', ['$scope','$http','$q','$log',function ($scope, $http,$q, $log){ - $scope.camunda_cockpit_url = ''; - var deferred = $q.defer(); - $http({ - method: "GET", - url: "get_camunda_cockpit_link", - }).success( function(res) { - // if the returned response is error HTML page in string format - if(res.link_defined=='false'){ - $log.error('Retrieval of camunda cockpit link failed. Please make sure the variable "camunda_cockpit_url" is defined in the system.properties file.'); - deferred.reject(status); - } - // valid cockpit url - else if(res.camunda_cockpit_link!=null & res.camunda_cockpit_link!= '') { - $scope.camunda_cockpit_url = res.camunda_cockpit_link; - deferred.resolve(res); - // if the defined url is empty; - } else { - $log.error('Please ensure the variable "camunda_cockpit_url" is properly defined in system.properties file (i.e., neither null nor empty).'); - deferred.reject(status); - } - // API call fails - }).error( function(status) { - $log.error('get_camunda_cockpit_link RestAPI call failed.'); - deferred.reject(status); - }); - return deferred.promise; -}]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js deleted file mode 100644 index 5eed3003..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/admin-whitelist.js +++ /dev/null @@ -1,3 +0,0 @@ -app.config(function ($sceDelegateProvider) { - $sceDelegateProvider.resourceUrlWhitelist(['self','**']); -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js deleted file mode 100644 index 3d92220f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/ase-controller.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('aseCtrl', function ($scope){ -/* do nothing yet*/ -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js deleted file mode 100644 index a6cde5ae..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-controller.js +++ /dev/null @@ -1,60 +0,0 @@ -app.controller('broadcastController', function ($scope, modalService, $modal,AdminService,$routeParams){ - //$scope.broadcastMessage=${broadcastMessage}; - //$scope.broadcastSites=${broadcastSites}; - //console.log($scope.broadcastMessage); - $scope.broadcastMessage=[]; - $scope.broadcastSites=[]; - AdminService.getBroadcast($routeParams.messageLocationId, $routeParams.messageLocation, $routeParams.messageId).then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.broadcastMessage=JSON.parse($scope.data.broadcastMessage); - $scope.broadcastSites=JSON.parse($scope.data.broadcastSites); - console.log($scope.broadcastMessage); - console.log($scope.broadcastMessage.id); - console.log($scope.broadcastSites); - //$scope.resetMenu(); - - },function(error){ - console.log("failed"); - reloadPageOnce(); - }); - - $scope.save = function() { - var uuu = "broadcast/save"; - var postData={broadcastMessage: $scope.broadcastMessage}; - $.ajax({ - type : 'POST', - url : uuu, - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify(postData), - success : function(data){ - window.location.href = "admin#/broadcast_list"; - }, - error : function(data){ - modalService.showFailure("Fail","Error while saving."); - } - }); - }; - - $scope.close = function() { - window.location.href = "admin#/broadcast_list"; -}; - -}); - -$(function() { - $( "#startDatepicker" ).datepicker(); - $( "#endDatepicker" ).datepicker(); - - $( "#startDatepicker" ).change(function() { - var tempStartDate = moment($( "#startDatepicker" ).val()).format('YYYY-MM-DD hh:mm:ss.S'); - $( "#startDateHidden" ).val(tempStartDate.toString()); - //alert( $( "#startDateHidden" ).val() ); - }); - $( "#endDatepicker" ).change(function() { - var tempEndDate = moment($( "#endDatepicker" ).val()).format('YYYY-MM-DD hh:mm:ss.S'); - $( "#endDateHidden" ).val(tempEndDate.toString()); - //alert( $( "#endDateHidden" ).val() ); - }); -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js deleted file mode 100644 index b487fc9a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/broadcast-list-controller.js +++ /dev/null @@ -1,101 +0,0 @@ -app.controller('broadcastListController', function ($scope, modalService, $modal,AdminService){ - //$scope.broadcastMessage=${broadcastMessage}; - //$scope.broadcastSites=${broadcastSites}; - //console.log($scope.broadcastMessage); - var messagesMap = {}; - AdminService.getBroadcastList().then(function(data){ - - var j = data; - $scope.data = JSON.parse(j.data); - $scope.messagesList=(($scope.data.messagesList===null) ? [""]:$scope.data.messagesList); - $scope.messageLocations=(($scope.data.messageLocations===null) ? [""]:$scope.data.messageLocations); - console.log("messages: "+$scope.messagesList); - console.log("location: "+$scope.messageLocations); - $.each($scope.messageLocations, function(i, a){ - //var result = []; - angular.forEach($scope.messagesList, function(value, key) { - if (key+'' === a.value+'') { - //var objsJSON = JSON.parse(value); - - $.each(value, function(i, a){ - var startDateLong = a.startDate; - var tempStartDate = new Date(startDateLong); - tempStartDate = moment(tempStartDate).format('DD MMM YYYY hh:mmA zz');//03 Jun 2013 04:15PM EDT - a.displayStartDate=tempStartDate.toString(); - - var endDateLong = a.endDate; - var tempEndDate = new Date(endDateLong); - tempEndDate = moment(tempEndDate).format('DD MMM YYYY hh:mmA zz');//03 Jun 2013 04:15PM EDT - a.displayEndDate=tempEndDate.toString(); - }); - a.messages = value; - } - }); - console.log(a.messages); - }); - - //$scope.resetMenu(); - - },function(error){ - console.log("failed"); - reloadPageOnce(); - }); - - - $scope.editMessage = function(location) { - - editMessage(location.value, location.label); - }; - - $scope.toggleActive = function(broadcastMessage) { - - //alert('deleted'+role.name); - var uuu = "broadcast_list/toggleActive"; - var postData={broadcastMessage:broadcastMessage}; - $.ajax({ - type : 'POST', - url : uuu, - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify(postData), - success : function(data){ - //window.location.reload(); - }, - error : function(data){ - console.log(data); - modalService.showFailure("Fail","Error while toggling: "+ data.responseText); - - } - }); - - - }; - - $scope.remove = function(broadcastMessage) { - - //alert('deleted'+role.name); - var uuu = "broadcast_list/remove"; - var postData={broadcastMessage:broadcastMessage}; - $.ajax({ - type : 'POST', - url : uuu, - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify(postData), - success : function(data){ - window.location.reload(); - }, - error : function(data){ - console.log(data); - modalService.showFailure("Fail","Error while deleting: "+ data.responseText); - } - }); - - - }; - -}); - -function editMessage(messageLocationId, messageLocation, messageId) { - window.location=encodeURIComponent('admin#/broadcast/'+messageLocationId + '/' + messageLocation + ((messageId != null) ? '/' + messageId : '')); -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js deleted file mode 100644 index a1831b7e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/collaborate-list-controller.js +++ /dev/null @@ -1,44 +0,0 @@ -app.controller("collaborateListController", function ($scope,$http,modalService, $modal,AdminService) { - // Table Data - AdminService.getCollaborateList().then(function(data){ - - var j = data; - $scope.tableData = JSON.parse(j.data); - //$scope.resetMenu(); - - },function(error){ - console.log("failed"); - reloadPageOnce(); - }); - - $scope.viewPerPage = 20; - $scope.scrollViewsPerPage = 2; - $scope.currentPage = 1; - $scope.totalPage; - $scope.searchCategory = ""; - $scope.searchString = ""; - /* modalService.showSuccess('','Modal Sample') ; */ - for(x in $scope.tableData){ - if($scope.tableData[x].active_yn=='Y') - $scope.tableData[x].active_yn=true; - else - $scope.tableData[x].active_yn=false; - } - $scope.openCollaboration = function(chatId){ - openInNewTab('openCollaboration?chat_id=' + chatId); - } - - $scope.toggleProfileActive = function(profileId) { - modalService.popupConfirmWin("Confirm","You are about to change user's active status. Do you want to continue?", - function(){ - $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){}); - - }) - }; - -}); - -function openInNewTab(url) { - var win = window.open(url, '_blank'); - win.focus(); -}; \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js deleted file mode 100644 index 48fbbc03..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/controllers/modelpopupController.js +++ /dev/null @@ -1,21 +0,0 @@ -var modalpopupController = function ($scope, $modalInstance, message){ - - $scope.message = message; - - - $scope.hello = function () { - $modalInstance.close($scope.digitPattern); - }; - $modalInstance.ok = function() { - //add the ok functionality - alert("Logout"); - }; - $modalInstance.cancel = function() { - //add the cancel functionality - alert("Keep Log in"); - }; - $modalInstance.cancelbutton = function() { - //add the cancel functionality - alert("Modal Waring popup close event"); - }; -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js deleted file mode 100644 index d49f5980..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/footer.js +++ /dev/null @@ -1,11 +0,0 @@ -app.directive('qFooter', function () { - return { - restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements - replace: false, - templateUrl: "app/fusion/scripts/view-models/footer.html", - controller: ['$scope', '$filter', function ($scope, $filter) { - // Your behaviour goes here :) - }] - } -}); - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js deleted file mode 100644 index 32024aaf..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/header.js +++ /dev/null @@ -1,477 +0,0 @@ -app.directive('qHeader', function () { - return { - restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements - replace: false, - templateUrl: "app/fusion/scripts/view-models/header.html", - controller: ['$scope', '$filter','$http','$timeout', '$log','UserInfoService', '$window', '$cookies', function ($scope, $filter, $http, $timeout, $log,UserInfoService, $window, $cookies) { - - /*Define fields*/ - $scope.userName; - $scope.userFirstName; - $scope.redirectUrl; - $scope.contactUsUrl; - $scope.getAccessUrl; - $scope.childData=[]; - $scope.parentData=[]; - $scope.menuItems = []; - $scope.loadMenufail=false; - $scope.megaMenuDataObject=[]; - $scope.activeClickSubMenu = { - x: '' - }; - $scope.activeClickMenu = { - x: '' - }; - $scope.favoritesMenuItems = []; - $scope.favoriteItemsCount = 0; - $scope.showFavorites = false; - $scope.emptyFavorites = false; - $scope.favoritesWindow = false; - - /*Menu Structure*/ - var menuStructureConvert = function(menuItems) { - // console.log(menuItems); - $scope.megaMenuDataObjectTemp = - [ - { - text: "ECOMP", - children: menuItems - }, - { - text: "Help", - children: [ - { - text:"Contact Us", - url:$scope.contactUsUrl - }, - { - text:"Get Access", - url:$scope.getAccessUrl - }] - } - ]; - return $scope.megaMenuDataObjectTemp; - }; - - /***************functions**************/ - /*Put user info into fields*/ - $scope.inputUserInfo = function(userInfo){ - if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){ - if(typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null){ - $scope.userFirstName = userInfo.USER_FIRST_NAME; - } - } - } - /*getting user info from session*/ - $scope.getUserNameFromSession = function(){ - UserInfoService.getFunctionalMenuStaticDetailSession() - .then(function (res) { - $scope.contactUsUrl=res.contactUsLink; - $scope.userName = res.userName; - $scope.userFirstName = res.firstName; - $scope.redirectUrl = res.portalUrl; - $scope.getAccessUrl = res.getAccessUrl; - }); - } - $scope.getTopMenuStaticInfo=function() { - var promise = UserInfoService.getFunctionalMenuStaticDetailSession(); - promise.then( - function(res) { - $scope.contactUsUrl=res.contactUsLink; - $scope.userName = res.userName; - $scope.userId = res.userid; - $scope.userEmail = res.email; - $scope.userFirstName = res.firstName; - $scope.redirectUrl = res.portalUrl; - $scope.getAccessUrl = res.getAccessUrl; - $scope.isAppCentralized = res.isAppCentralized; - }, - function(err) { - $log.error('getFunctionalMenuStaticDetailShareContext failed', err); - } - ); - } - - $scope.returnToPortal=function(){ - window.location.href = $scope.redirectUrl; - } - - var unflatten = function( array, parent, tree ){ - tree = typeof tree !== 'undefined' ? tree : []; - parent = typeof parent !== 'undefined' ? parent : { menuId: null }; - var children = _.filter( array, function(child){ return child.parentMenuId == parent.menuId; }); - if( !_.isEmpty( children ) ){ - if( parent.menuId === null ){ - tree = children; - }else{ - parent['children'] = children - } - _.each( children, function( child ){ unflatten( array, child ) } ); - } - return tree; - } - - $scope.getMenu=function() { - $scope.getUserNameFromSession(); - $http({ - method: "GET", - url: 'get_functional_menu', -// TIMEOUT USED FOR LOCAL TESTING ONLY -// timeout: 100 - }).success(function (response) { - - if (response == '101: Timeout') { - $log.debug('Timeout attempting to get_functional_menu'); - $scope.megaMenuDataObject = menuStructureConvert(""); -// $scope.createErrorMenu(); - //$scope.loadMenufail=true; - } else { - if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){ - $log.debug('Timeout attempting to get_functional_menu'); - $scope.menuItems = unflatten( response); - $scope.megaMenuDataObject = menuStructureConvert($scope.menuItems); -// $scope.createErrorMenu(); - //$scope.loadMenufail=true; - }else{ - $scope.loadMenufail=false; - $scope.contactUsURL = response.contactUsLink; - $log.debug('functional_menu',response); - $scope.megaMenuDataObject = menuStructureConvert(""); - } - } - }).error(function (response){ - $scope.megaMenuDataObject = menuStructureConvert(""); -// $scope.createErrorMenu(); - //$scope.loadMenufail=true; - $log.debug('REST API failed get_functional_menu...'); - }); - - } - - $scope.adjustHeader=function() { - $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); - - if($scope.showHeader == true) { - $scope.drawer_margin_top = 70; - $scope.drawer_custom_top = 54; - $scope.toggle_drawer_top = 55; - } - else { - - $scope.drawer_margin_top = 60; - $scope.drawer_custom_top = 0; - $scope.toggle_drawer_top = 10; - } - - } - - $scope.getMenu(); - $scope.adjustHeader(); - -/* **************************************************************************/ -/* Logic for the favorite menus is here */ - - $scope.loadFavorites = function () { - $log.debug('loadFavorites has happened.'); - if ($scope.favoritesMenuItems == '') { - $scope.generateFavoriteItems(); - $log.debug('loadFavorites is calling generateFavoriteItems()'); - } else { - $log.debug('loadFavorites is NOT calling generateFavoriteItems()'); - } - } - - $scope.goToUrl = function (item) { - $log.debug("goToUrl called", item); - - var url = item.url; - var restrictedApp = item.restrictedApp; - // $log.debug('Restricted app status is: ' + restrictedApp); - if (!url) { - $log.error('No url found for this application, doing nothing..'); - return; - } - if (restrictedApp) { - $window.open(url, '_blank'); - } else { - $window.open(url, '_self'); - } - - } - - $scope.submenuLevelAction = function(index, column) { - if ($scope.favoritesMenuItems == '') { - $scope.generateFavoriteItems(); - $log.debug('submenuLevelAction is calling generateFavoriteItems()'); - } - $log.debug('item hovered/clicked: ' + index + '; column = ' + column); - if (column == 2) { // 2 is Design - $scope.favoritesWindow = false; - $scope.showFavorites = false; - $scope.emptyFavorites = false; - } - if (index=='Favorites' && $scope.favoriteItemsCount != 0) { - $log.debug('Showing Favorites window'); - $scope.favoritesWindow = true; - $scope.showFavorites = true; - $scope.emptyFavorites = false; - } - if (index=='Favorites' && $scope.favoriteItemsCount == 0) { - $log.debug('Hiding Favorites window in favor of No Favorites Window'); - $scope.favoritesWindow = true; - $scope.showFavorites = false; - $scope.emptyFavorites = true; - } - if (column > 2) { - $scope.favoritesWindow = false; - $scope.showFavorites = false; - $scope.emptyFavorites = false; - } - }; - - $scope.hideFavoritesWindow = function() { - $log.debug('$scope.hideFavoritesWindow has been called'); - $scope.showFavorites = false; - $scope.emptyFavorites = false; - } - - $scope.isUrlFavorite = function (menuId) { -// $log.debug('array objects in menu favorites = ' + $scope.favoriteItemsCount + '; menuId=' + menuId); - var jsonMenu = JSON.stringify($scope.favoritesMenuItems); - var isMenuFavorite = jsonMenu.indexOf('menuId\":' + menuId); - if (isMenuFavorite==-1) { - return false; - } else { - return true; - } - - } - - $scope.generateFavoriteItems = function() { - $http({ - method: "GET", - url: 'get_favorites', -// TIMEOUT USED FOR LOCAL TESTING ONLY -// timeout: 100 - }).success(function (response) { - if (response == '101: Timeout') { - $log.error('Timeout attempting to get_favorites_menu'); - } else { - if(typeof response != 'undefined' && response.length!=0 && typeof response[0] != 'undefined' && typeof response[0].error!="undefined"){ - $log.error('REST API failed get_favorites' + response); - }else{ - $log.debug('get_favorites = ' + JSON.stringify(response)); - $scope.favoritesMenuItems = response; - $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; - // $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); - } - } - }).error(function (response){ - $log.error('REST API failed get_favorites' + response); -//createFavoriteErrorMenu() USED FOR LOCAL TESTING ONLY -// $scope.createFavoriteErrorMenu(); - }); - } - - $scope.createFavoriteErrorMenu=function() { - $scope.favoritesMenuItems = []; - $scope.favoriteItemsCount = Object.keys($scope.favoritesMenuItems).length; - // $log.info('number of favorite menus: ' + $scope.favoriteItemsCount); - } - - /* end of Favorite Menu code */ - /* **************************************************************************/ - - - /* **************************************************************************/ - // THIS IS USED FOR LOCAL TESTING ONLY - /* **************************************************************************/ - $scope.createErrorMenu=function() { - $log.debug('Creating fake menu now...'); -// $scope.loadMenufail=true; - $scope.menuItems = [ - { - "menuId": 1, - "column": 2, - "text": "Design", - "parentMenuId": null, - "url": "" - }, - { - "menuId": 2, - "column": 3, - "text": "Infrastructure Ordering", - "parentMenuId": null, - "url": "" - }, - { - "menuId": 3, - "column": 4, - "text": "Service Creation", - "parentMenuId": null, - "url": "" - }, - { - "menuId": 4, - "column": 5, - "text": "Service Mgmt", - "parentMenuId": null, - "url": "" - }, - { - "menuId": 90, - "column": 1, - "text": "Google", - "parentMenuId": 1, - "url": "http://google.com" - }, - { - "menuId": 91, - "column": 1, - "text": "Mike Little's Coffee Cup", - "parentMenuId": 2, - "url": "http://coffee.com" - }, - { - "menuId": 92, - "column": 2, - "text": "Andy and his Astrophotgraphy", - "parentMenuId": 3, - "url": "http://nightskypix.com" - }, - { - "menuId": 93, - "column": 1, - "text": "JSONLint", - "parentMenuId": 4, - "url": "http://http://jsonlint.com" - }, - { - "menuId": 94, - "column": 2, - "text": "ONAP test link", - "parentMenuId": 4, - "url": "http://tbd.onap.org/testlink" - }, - { - "menuId": 95, - "column": 2, - "text": "4th Level App4a R16", - "parentMenuId": 4, - "url": "http://app4ar16.onap.org/testlink" - }, - { - "menuId": 96, - "column": 3, - "text": "3rd Level App1c R200", - "parentMenuId": 4, - "url": "http://app1c.com" - }, - { - "menuId": 97, - "column": 1, - "text": "3rd Level App4b R16", - "parentMenuId": 5, - "url": "http://app4b.com" - }, - { - "menuId": 98, - "column": 2, - "text": "3rd Level App2b R16", - "parentMenuId": 5, - "url": "http://app2b.com" - }, - { - "menuId": 99, - "column": 1, - "text": "Favorites", - "parentMenuId": null, - "url": "" - } - ]; - $scope.menuItems = unflatten( $scope.menuItems ); - //remove this - $scope.megaMenuDataObject = menuStructureConvert($scope.menuItems); - } - }] - } -}); - -app.filter("ellipsis", function(){ - return function(text, length){ - if (text) { - var ellipsis = text.length > length ? "..." : ""; - return text.slice(0, length) + ellipsis; - }; - return text; - } -}); - -function reloadPageOnce() { - if( window.localStorage ) - { - if( !localStorage.getItem('firstLoad') ) - { - localStorage['firstLoad'] = true; - window.location.reload(); - } - else - localStorage.removeItem('firstLoad'); - } -} -app.controller('loginSnippetCtrl', function ($scope,$http, $log,UserInfoService){ - /*Define fields*/ - $scope.userProfile={ - firstName:'', - lastName:'', - fullName:'', - email:'', - } - /*Put user info into fields*/ - $scope.inputUserInfo = function(userInfo){ - if (typeof(userInfo) != "undefined" && userInfo!=null && userInfo!=''){ - if (typeof(userInfo.USER_FIRST_NAME) != "undefined" && userInfo.USER_FIRST_NAME!=null && userInfo.USER_FIRST_NAME!='') - $scope.userProfile.firstName = userInfo.USER_FIRST_NAME; - if (typeof(userInfo.USER_LAST_NAME) != "undefined" && userInfo.USER_LAST_NAME!=null && userInfo.USER_LAST_NAME!='') - $scope.userProfile.lastName = userInfo.USER_LAST_NAME; - if (typeof(userInfo.USER_EMAIL) != "undefined" && userInfo.USER_EMAIL!=null && userInfo.USER_EMAIL!='') - $scope.userProfile.email = userInfo.USER_EMAIL; - - } - } - /*getting user info from session*/ - $scope.getUserNameFromSession = function(){ - UserInfoService.getFunctionalMenuStaticDetailSession() - .then(function (response) { - $scope.userProfile.fullName = response.userName; - $scope.userProfile.email = response.email; - }); - } - /*getting user info from shared context*/ - $scope.getUserName=function() { - var promise = UserInfoService.getFunctionalMenuStaticDetailShareContext(); - promise.then( - function(res) { - if(res==null || res==''){ - $log.error('getFunctionalMenuStaticDetailShareContext failed'); - $scope.getUserNameFromSession(); - }else{ - // $log.info('Received User information from shared context',res); - var resData = res; - // console.log(resData); - $scope.inputUserInfo(resData); - $scope.userProfile.fullName = $scope.userProfile.firstName+ ' '+ $scope.userProfile.lastName; - } - }, - function(err) { - console.log('getFunctionalMenuStaticDetailShareContext failed', err); - } - ); - }; - /*call the get user info function*/ - try{ - $scope.getUserName(); - }catch(err){ - $log.info('getUserName failed', err); - } -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js deleted file mode 100644 index f42276fe..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/directives/leftMenu.js +++ /dev/null @@ -1,184 +0,0 @@ - -app.directive('qMenu', function () { - return { - restrict: 'A', //This menas that it will be used as an attribute and NOT as an element. I don't like creating custom HTML elements - replace: false, - templateUrl: "app/fusion/scripts/view-models/left_menu.html", - controller: ['$scope', '$filter','$http','$timeout','$cookies','LeftMenuService', function ($scope, $filter, $http,$timeout,$cookies,LeftMenuService) { - - $scope.leftChildData=[]; - $scope.leftParentData=[]; - $scope.leftMenuItems = []; - $scope.app_name = ""; - $scope.app_name_full; - LeftMenuService.getLeftMenu().then(function(response){ - var j = response; - try{ - if(j && j !== "null" && j!== "undefined"){ - $scope.leftParentData = JSON.parse(j.data); - $scope.leftChildData = JSON.parse(j.data2); - }else{ - throw "Get Left Menu response is not an object/is empty"; - } - try{ - var leftChildItemList = $scope.leftChildData; - var pageUrl = window.location.href.split('/')[window.location.href.split('/').length-1]; - var leftParentList =$scope.leftParentData; - for (var i = 0; i < leftParentList.length; i++) { - $scope.item = { - parentLabel : leftParentList[i].label, - parentAction : leftParentList[i].action, - parentImageSrc : leftParentList[i].imageSrc, - open:pageUrl==leftParentList[i].action?true:false, - childItemList : leftChildItemList[i] - } - $scope.leftMenuItems.push($scope.item); - }; - }catch(err){ - console.log("failed to set left menu structure", err); - } - }catch (e) { - console.log("failed to get left menu items", e); - reloadPageOnce(); - return; - } - },function(error){ - console.log("error happened while calling getLeftMenu", error); - }); - - LeftMenuService.getAppName().then(function(response){ - var j = response; - try{ - if(j && j !== "null" && j!== "undefined"){ - // console.log("app name is " + $scope.app_name); - $scope.app_name_full = j.data; - var processed_app_name = j.data; - var n = processed_app_name.length; - if (n > 15) { - n = 15; - } - $scope.app_name = processed_app_name.substr(0, n); - }else{ - throw "Get app_name respsone is not an object/is empty"; - } - }catch (e) { - console.log("failed to get app name", e); - return; - } - },function(error){ - console.log("failed in getAppName", error); - }); - - $scope.adjustHeader=function() { - $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); - - if($scope.showHeader == true) { - $scope.drawer_margin_top = 50; - $scope.drawer_custom_top = 54; - $scope.toggle_drawer_top = 55; - } - else { - - $scope.drawer_margin_top = 40; - $scope.drawer_custom_top = 0; - $scope.toggle_drawer_top = 10; - } - - - }; - - $scope.adjustHLeftMenu = function (type){ - $scope.showHeader = ($cookies.show_app_header == undefined ? true : $cookies.show_app_header); - - if($scope.showHeader == true) { - $scope.drawer_margin_top = 60; - $scope.drawer_custom_top = 54; - $scope.toggle_drawer_top = 55; - } - else { - - $scope.drawer_margin_top = 50; - $scope.drawer_custom_top = 0; - $scope.toggle_drawer_top = 10; - } - if(type=='burgerIcon'){ - return { "top": $scope.toggle_drawer_top+"px"}; - }else if(type=='leftMenu'){ - return { "margin-top": $scope.drawer_margin_top+"px"}; - }else - return; - } - $scope.adjustHeader(); - $scope.drawerOpen = true; - - $scope.toggleDrawer = function() { - $scope.drawerOpen = !($scope.drawerOpen); - if ($scope.drawerOpen) { - // setCookie('drawerOpen','open',30); - $scope.arrowShow = true; - - - if (document.getElementById('fnMenueContent')!=null) - document.getElementById('fnMenueContent').style.marginLeft = "0px"; - - if (document.getElementById('rightContentAdmin')!=null) - document.getElementById('rightContentAdmin').style.marginLeft = "210px"; - - else if (document.getElementById('rightContentProfile')!=null) - document.getElementById('rightContentProfile').style.marginLeft = "210px"; - - - - } else { - - $scope.arrowShow = false; - - if (document.getElementById('fnMenueContent')!=null) - document.getElementById('fnMenueContent').style.marginLeft = "-150px"; - - if (document.getElementById('rightContentAdmin')!=null) { - document.getElementById('rightContentAdmin').style.marginLeft = "50px"; - - } - - else if (document.getElementById('rightContentProfile')!=null) - document.getElementById('rightContentProfile').style.marginLeft = "50px"; - - - - - } - }; - - $timeout(function() { - detectScrollEvent(); - }, 800); - }] - } - -}); -$(window).scroll(function() { - if ($('.att-drawer').is(':visible')) { - detectScrollEvent(); - } - -}); - -function detectScrollEvent() { - try{ - var footerOff = $('#footerContainer').offset().top; - var headOff = $('#headerContainer').offset().top; - var winHeight = $(window).height(); - if ((footerOff - headOff) <= winHeight) { - $('.att-drawer').css({ - "height" : footerOff - headOff - 55 - }); - } else { - $('.att-drawer').css({ - "height" : "94vh" - }); - } - }catch(err){ - console.log('detectScrollEvent failed', err) - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js deleted file mode 100644 index 1ebd6c95..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/jquery.resize.js +++ /dev/null @@ -1,139 +0,0 @@ -/*! - * jquery.resize.js 0.0.1 - https://github.com/yckart/jquery.resize.js - * Resize-event for DOM-Nodes - * - * @see http://workingdraft.de/113/ - * @see http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/ - * - * Copyright (c) 2013 Yannick Albert (http://yckart.com) - * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php). - * 2013/04/01 - */ - -(function(factory) { - if(typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if(typeof exports === 'object') { - // Node/CommonJS style for Browserify - module.exports = factory; - } else { - // Browser globals - factory(jQuery); - } -}(function($) { - - function addFlowListener(element, type, fn) { - var flow = type == 'over'; - element.addEventListener('OverflowEvent' in window ? 'overflowchanged' : type + 'flow', function(e) { - if(e.type == (type + 'flow') || ((e.orient == 0 && e.horizontalOverflow == flow) || (e.orient == 1 && e.verticalOverflow == flow) || (e.orient == 2 && e.horizontalOverflow == flow && e.verticalOverflow == flow))) { - e.flow = type; - return fn.call(this, e); - } - }, false); - }; - - function fireEvent(element, type, data, options) { - var options = options || {}, - event = document.createEvent('Event'); - event.initEvent(type, 'bubbles' in options ? options.bubbles : true, 'cancelable' in options ? options.cancelable : true); - for(var z in data) event[z] = data[z]; - element.dispatchEvent(event); - }; - - $.event.special.resize = { - setup: function() { - var element = this; - var resize = 'onresize' in element; - if(!resize && !element._resizeSensor) { - var sensor = element._resizeSensor = document.createElement('div'); - sensor.className = 'resize-sensor'; - sensor.innerHTML = '
    '; - - var x = 0, - y = 0, - first = sensor.firstElementChild.firstChild, - last = sensor.lastElementChild.firstChild, - matchFlow = function(event) { - var change = false, - width = element.offsetWidth; - if(x != width) { - first.style.width = width - 1 + 'px'; - last.style.width = width + 1 + 'px'; - change = true; - x = width; - } - var height = element.offsetHeight; - if(y != height) { - first.style.height = height - 1 + 'px'; - last.style.height = height + 1 + 'px'; - change = true; - y = height; - } - if(change && event.currentTarget != element) fireEvent(element, 'resize'); - }; - - if(getComputedStyle(element).position == 'static') { - element.style.position = 'relative'; - element._resizeSensor._resetPosition = true; - } - addFlowListener(sensor, 'over', matchFlow); - addFlowListener(sensor, 'under', matchFlow); - addFlowListener(sensor.firstElementChild, 'over', matchFlow); - addFlowListener(sensor.lastElementChild, 'under', matchFlow); - element.appendChild(sensor); - matchFlow({}); - } - var events = element._flowEvents || (element._flowEvents = []); - if(events.indexOf(handler) == -1) events.push(handler); - if(!resize) element.addEventListener('resize', handler, false); - element.onresize = function(e) { - events.forEach(function(fn) { - fn.call(element, e); - }); - }; - }, - - teardown: function() { - var element = this; - var index = element._flowEvents.indexOf(handler); - if(index > -1) element._flowEvents.splice(index, 1); - if(!element._flowEvents.length) { - var sensor = element._resizeSensor; - if(sensor) { - element.removeChild(sensor); - if(sensor._resetPosition) element.style.position = 'static'; - delete element._resizeSensor; - } - if('onresize' in element) element.onresize = null; - delete element._flowEvents; - } - element.removeEventListener('resize', handler); - } - }; - - $.fn.extend({ - resize: function(fn) { - return fn ? this.bind("resize", fn) : this.trigger("resize"); - }, - - unresize: function(fn) { - return this.unbind("resize", fn); - } - }); - - - function handler(event) { - var orgEvent = event || window.event, - args = [].slice.call(arguments, 1); - - event = $.event.fix(orgEvent); - event.type = "resize"; - - // Add event to the front of the arguments - args.unshift(event); - - return($.event.dispatch || $.event.handle).apply(this, args); - } - -})); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js deleted file mode 100644 index eff36a25..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/debug.js +++ /dev/null @@ -1,329 +0,0 @@ -/** - * debugData - * - * Pass me a data structure {} and I'll output all the key/value pairs - recursively - * - * @example var HTML = debugData( oElem.style, "Element.style", { keys: "top,left,width,height", recurse: true, sort: true, display: true, returnHTML: true }); - * - * @param Object o_Data A JSON-style data structure - * @param String s_Title Title for dialog (optional) - * @param Hash options Pass additional options in a hash - */ -function debugData (o_Data, s_Title, options) { - options = options || {}; - var - str=(s_Title||s_Title==='' ? s_Title : 'DATA') - , dType=$.type(o_Data) - // maintain backward compatibility with OLD 'recurseData' param - , recurse=($.type(options)==='boolean' ? options : options.recurse !==false) - , keys=(options.keys?','+options.keys+',':false) - , display=options.display !==false - , html=options.returnHTML !==false - , sort=!!options.sort - , prefix=options.indent ? ' ' : '' - , D=[], i=0 // Array to hold data, i=counter - , hasSubKeys = false - , k, t, skip, x, type // loop vars - ; - if (dType!=='object' && dType!=='array') { - if (options.display) alert( (s_Title || 'debugData') +': '+ o_Data ); - return o_Data; - } - if (dType==='object' && $.isPlainObject(o_Data)) - dType='hash'; - - if (o_Data.jquery) { - str=s_Title+'jQuery Collection ('+ o_Data.length +')\n context="'+ o_Data.context +'"'; - } - else if (o_Data.nodeName) { - str=s_Title+o_Data.tagName; - var id = o_Data.id, cls=o_Data.className, src=o_Data.src, hrf=o_Data.href; - if (id) str+='\n id="'+ id+'"'; - if (cls) str+='\n class="'+ cls+'"'; - if (src) str+='\n src="'+ src+'"'; - if (hrf) str+='\n href="'+ hrf+'"'; - } - else { - parse(o_Data,prefix,dType); // recursive parsing - if (sort && !hasSubKeys) D.sort(); // sort by keyName - but NOT if has subKeys! - if (str) str += '\n***'+ '****************************'.substr(0,str.length) +'\n'; - str += D.join('\n'); // add line-breaks - } - - if (display) alert(str); // display data - if (html) str=str.replace(/\n/g, '
    ').replace(/ /g, '  '); // format as HTML - return str; - - function parse ( data, prefix, parentType ) { - var first = true; - try { - $.each( data, function (key, val) { - skip = (keys && keys.indexOf(','+key+',') === -1); - type = $.type(val); - if (type==='object' && $.isPlainObject(val)) - type = 'hash'; - k = prefix + (first ? ' ' : ', '); - first = false; - - if (parentType!=='array') // no key-names for array items - k += key+': '; // NOT an array - - if (type==="date" || type==="regexp") { - val = val.toString(); - type = "string"; - } - if (type==="string") { // STRING - if (!skip) D[i++] = k +'"'+ val +'"'; - } - // NULL, UNDEFINED, NUMBER or BOOLEAN - else if (/^(null|undefined|number|boolean)/.test(type)) { - if (!skip) D[i++] = k + val; - } - else if (type==="function") { // FUNCTION - if (!skip) D[i++] = k +'function()'; - } - else if (type==="array") { // ARRAY - if (!skip) { - D[i++] = k +'['; - parse( val, prefix+' ',type); // RECURSE - D[i++] = prefix +' ]'; - } - } - else if (val.jquery) { // JQUERY OBJECT - if (!skip) D[i++] = k +'jQuery ('+ val.length +') context="'+ val.context +'"'; - } - else if (val.nodeName) { // DOM ELEMENT - var id = val.id, cls=val.className, src=val.src, hrf=val.href; - if (skip) D[i++] = k +' '+ - id ? 'id="'+ id+'"' : - src ? 'src="'+ src+'"' : - hrf ? 'href="'+ hrf+'"' : - cls ? 'class="'+cls+'"' : - ''; - } - else if (type==="hash") { // JSON - if (!recurse || $.isEmptyObject(val)) { // show an empty hash - if (!skip) D[i++] = k +'{ }'; - } - else { // recurse into JSON hash - indent output - D[i++] = k +'{'; - parse( val, prefix+' ',type); // RECURSE - D[i++] = prefix +' }'; - } - } - else { // OBJECT - if (!skip) D[i++] = k +'OBJECT'; // NOT a hash - } - }); - } catch (e) {} - } -}; - -function debugStackTrace (s_Title, options) { - var - callstack = [] - , isCallstackPopulated = false - ; - try { - i.dont.exist += 0; // doesn't exist- that's the point - } catch(e) { - if (e.stack) { // Firefox - var lines = e.stack.split('\n'); - for (var i=0, len=lines.length; i
    ') - .html( content.replace(/\n/g, '
    ').replace(/ /g, '  ') ) // format as HTML - .css( options.css ) - ; -}; diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js deleted file mode 100644 index 5b16efa1..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/layout/jquery-latest.js +++ /dev/null @@ -1,10598 +0,0 @@ -/*! - * jQuery JavaScript Library v3.4.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2019-05-01T21:04Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.4.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); - - // ID filter and find - if ( support.getById ) { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - // Use previously-cached element index if available - if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context === document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - if ( !context && elem.ownerDocument !== document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // Support: IE <=9 only - option: [ 1, "" ], - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - } ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box - if ( ( !support.boxSizingReliable() && isBorderBox || - val === "auto" || - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url, options ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html deleted file mode 100644 index b1c9135a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_add.html +++ /dev/null @@ -1,136 +0,0 @@ - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html deleted file mode 100644 index 2ccdf2af..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_fn_menu_edit.html +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html deleted file mode 100644 index cbfd6133..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_role.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html deleted file mode 100644 index b5fd76ad..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/profile-page/popup_modal_rolefunction.html +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js deleted file mode 100644 index 6cabe9f2..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/customWidgetSettings.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app - .controller('CustomSettingsDemoCtrl', function($scope, $interval, $window, widgetDefinitions, defaultWidgets, RandomDataModel) { - - - // Add an additional widget with setting overrides - var definitions = [{ - name: 'congfigurable widget', - directive: 'wt-scope-watch', - dataAttrName: 'value', - dataModelType: RandomDataModel, - dataModelOptions: { - limit: 10 - }, - settingsModalOptions: { - partialTemplateUrl: 'template/configurableWidgetModalOptions.html' - }, - onSettingsClose: function (result, widget) { - if (widget.dataModel && widget.dataModel.updateLimit) { - widget.dataModel.updateLimit(result.dataModelOptions.limit); - } - } - }, { - name: 'override modal widget', - directive: 'wt-scope-watch', - dataAttrName: 'value', - dataModelType: RandomDataModel, - settingsModalOptions: { - templateUrl: 'template/WidgetSpecificSettings.html', - controller: 'WidgetSpecificSettingsCtrl', - backdrop: false - }, - onSettingsClose: function(result, widget) { - console.log('Widget-specific settings resolved!'); - jQuery.extend(true, widget, result); - }, - onSettingsDismiss: function(reason, scope) { - console.log('Settings have been dismissed: ', reason); - console.log('Dashboard scope: ', scope); - } - }]; - - var defaultWidgets = [ - { name: 'congfigurable widget' }, - { name: 'override modal widget' } - ]; - - $scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: definitions, - defaultWidgets: defaultWidgets, - storage: $window.localStorage, - storageId: 'custom-settings', - - /* - // Overrides default $uibModal options. - // This can also be set on individual - // widget definition objects (see above). - settingsModalOptions: { - // This will completely override the modal template for all widgets. - // You also have the option to add to the default modal template with settingsModalOptions.partialTemplateUrl (see "configurable widget" above) - templateUrl: 'template/customSettingsTemplate.html' - // We could pass a custom controller name here to be used - // with the widget settings dialog, but for this demo we - // will just keep the default. - // - // controller: 'CustomSettingsModalCtrl' - // - // Other options passed to $uibModal.open can be put here, - // eg: - // - // backdrop: false, - // keyboard: false - // - // @see http://angular-ui.github.io/bootstrap/#/modal <-- heads up: routing on their site was broken as of this writing - }, - */ - - // Called when a widget settings dialog is closed - // by the "ok" method (i.e., the promise is resolved - // and not rejected). This can also be set on individual - // widgets (see above). - onSettingsClose: function(result, widget, scope) { - console.log('Settings result: ', result); - console.log('Widget: ', widget); - console.log('Dashboard scope: ', scope); - jQuery.extend(true, widget, result); - }, - - // Called when a widget settings dialog is closed - // by the "cancel" method (i.e., the promise is rejected - // and not resolved). This can also be set on individual - // widgets (see above). - onSettingsDismiss: function(reason, scope) { - console.log('Settings have been dismissed: ', reason); - console.log('Dashboard scope: ', scope); - } - }; - }) - .controller('WidgetSpecificSettingsCtrl', function ($scope, $uibModalInstance, widget) { - // add widget to scope - $scope.widget = widget; - - // set up result object - $scope.result = jQuery.extend(true, {}, widget); - - $scope.ok = function () { - console.log('calling ok from widget-specific settings controller!'); - $uibModalInstance.close($scope.result); - }; - - $scope.cancel = function () { - console.log('calling cancel from widget-specific settings controller!'); - $uibModalInstance.dismiss('cancel'); - }; - }) diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js deleted file mode 100644 index d9be52ea..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/dataModel.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app - .factory('RandomDataModel', function ($interval, WidgetDataModel) { - function RandomDataModel() { - } - - RandomDataModel.prototype = Object.create(WidgetDataModel.prototype); - RandomDataModel.prototype.constructor = WidgetDataModel; - - angular.extend(RandomDataModel.prototype, { - init: function () { - var dataModelOptions = this.dataModelOptions; - this.limit = (dataModelOptions && dataModelOptions.limit) ? dataModelOptions.limit : 100; - - this.updateScope('-'); - this.startInterval(); - }, - - startInterval: function () { - $interval.cancel(this.intervalPromise); - - this.intervalPromise = $interval(function () { - var value = Math.floor(Math.random() * this.limit); - this.updateScope(value); - }.bind(this), 500); - }, - - updateLimit: function (limit) { - this.dataModelOptions = this.dataModelOptions ? this.dataModelOptions : {}; - this.dataModelOptions.limit = limit; - this.limit = limit; - }, - - destroy: function () { - WidgetDataModel.prototype.destroy.call(this); - $interval.cancel(this.intervalPromise); - } - }); - - return RandomDataModel; - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js deleted file mode 100644 index d598f0d0..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.js +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app -.config(function ($routeProvider) { - $routeProvider - .when('/view', { - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html', - controller: 'DemoCtrl', - title: 'simple', - description: 'This is the simplest demo.' - }) - .when('/resize', { - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html', - controller: 'ResizeDemoCtrl', - title: 'resize', - description: 'This demo showcases widget resizing.' - }) - .when('/custom-settings', { - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html', - controller: 'CustomSettingsDemoCtrl', - title: 'custom widget settings', - description: 'This demo showcases overriding the widget settings dialog/modal ' + - 'for the entire dashboard and for a specific widget. Click on the cog of each ' + - 'widget to see the custom modal. \n"configurable widget" has "limit" option in the modal ' + - 'that controls RandomDataModel.' - }) - .when('/explicit-saving', { - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html', - controller: 'ExplicitSaveDemoCtrl', - title: 'explicit saving', - description: 'This demo showcases an option to only save the dashboard state '+ - 'explicitly, e.g. by user input. Notice the "all saved" button in the controls ' + - 'updates as you make saveable changes.' - }) - .when('/layouts', { - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html', - controller: 'LayoutsDemoCtrl', - title: 'dashboard layouts', - description: 'This demo showcases the ability to have "dashboard layouts", ' + - 'meaning the ability to have multiple arbitrary configurations of widgets. For more ' + - 'information, take a look at [issue #31](https://github.com/DataTorrent/malhar-angular-dashboard/issues/31)' - }) - .when('/', { - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html', - controller: 'LayoutsDemoExplicitSaveCtrl', - title: 'layouts explicit saving', - description: 'This demo showcases dashboard layouts with explicit saving enabled.' - }) - .otherwise({ - redirectTo: '/' - }); - }) - .controller('NavBarCtrl', function($scope, $route) { - $scope.$route = $route; - }) - .factory('widgetDefinitions', function(RandomDataModel) { - return [ - { - name: 'random', - directive: 'wt-scope-watch', - attrs: { - value: 'randomValue' - } - }, - { - name: 'time', - directive: 'wt-time' - }, - { - name: 'datamodel', - directive: 'wt-scope-watch', - dataAttrName: 'value', - dataModelType: RandomDataModel - }, - { - name: 'resizable', - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html', - attrs: { - class: 'demo-widget-resizable' - } - }, - { - name: 'fluid', - directive: 'wt-fluid', - size: { - width: '50%', - height: '250px' - } - }, - { - name: 'raptor-report-data', - directive: 'raptor-report-data', - size: { - width: '50%', - height: '300px' - } - }, - { - name: 'raptor-report-chart', - directive: 'raptor-report-chart', - size: { - width: '50%', - height: '300px' - } - }, - { - name: 'r-cloud', - directive: 'r-cloud', - size: { - width: '50%', - height: '300px' - } - } - ]; - - }) - .value('defaultWidgets', [ -// { name: 'random' }, -// { name: 'time' }, -// { name: 'datamodel' }, -// { -// name: 'random', -// style: { -// width: '50%', -// minWidth: '39%' -// } -// }, -// { -// name: 'time', -// style: { -// width: '50%' -// } -// } -// {"name":"raptor-report","title":"Spam Source Line Chart","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"3360"} - - ]) - .controller('DemoCtrl', function ($scope, $interval, $window, widgetDefinitions, defaultWidgets) { - - $scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - storage: $window.localStorage, - storageId: 'demo_simple' - }; - $scope.randomValue = Math.random(); - $interval(function () { - $scope.randomValue = Math.random(); - }, 500); - - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less deleted file mode 100644 index 91f4cee9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/demo.less +++ /dev/null @@ -1,24 +0,0 @@ -body { - margin: 15px; - padding-top: 50px; -} -a { - cursor: pointer; -} -.layout-tabs { - margin-bottom: 10px; -} - -.demo-widget-fluid { - border: 1px solid blue; - height: 100%; -} - -.demo-widget-fluid > div { - border: 1px solid red; - position: relative; - top: 50%; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js deleted file mode 100644 index fe3ee7f7..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/directives.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app - .directive('wtTime', function ($interval) { - return { - restrict: 'A', - scope: true, - replace: true, - template: '
    Time
    {{time}}
    ', - link: function (scope) { - function update() { - scope.time = new Date().toLocaleTimeString(); - } - - update(); - - var promise = $interval(update, 500); - - scope.$on('$destroy', function () { - $interval.cancel(promise); - }); - } - }; - }) - .directive('wtScopeWatch', function () { - return { - restrict: 'A', - replace: true, - template: '
    Value
    {{value}}
    ', - scope: { - value: '=value' - } - }; - }) - .directive('wtFluid', function () { - return { - restrict: 'A', - replace: true, - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html', - scope: true, - controller: function ($scope) { - $scope.$on('widgetResized', function (event, size) { - $scope.width = size.width || $scope.width; - $scope.height = size.height || $scope.height; - }); - } - }; - }) - .directive('raptorReportChart', ['widgetDefinitions','defaultWidgets',function (widgetDefinitions, defaultWidgets) { - return { - restrict: 'A', - replace: true, - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html', - scope: true, - controller: function ($scope,$http, $rootScope) { -// console.log('================= Raptor Report scope ================='); -// console.log($scope); - $scope.showChart = false; - $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid=Y&width="+Math.floor($scope.width*13)+"&height=300"; -// $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid="+$scope.hideGrid+"&width=550&height=300"; - $rootScope.showdataContainer = false; - $rootScope.$watch('showdataContainer', function () { - console.log('change showdataContainer'); - console.log($rootScope.showdataContainer); - $scope.gridOptions = $rootScope.gridOptions; - $scope.gridOptions = $rootScope.gridOptions; - $scope.uiGridRefresh = function(){ - var columnDefsArray = []; - var columnFreezeEndColumn = $scope.widget.reportData.colIdxTobeFreezed; - var doColumnNeedToFreeze = false; - if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) { - doColumnNeedToFreeze = true; - } - $scope.widget.reportData.reportDataColumns.forEach(function(entry) { - var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable, - sortingAlgorithm: function(a, b) { - return rowSorter.sortAlpha(a.displayValue, b.displayValue); - }, - cellTemplate: '
    '+ - '
    {{COL_FIELD.displayValue}}
    ' + - ' {{COL_FIELD.displayValue}}' + - '
    '}; - if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){ - tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2); - } else { - tempColumnDef['minWidth'] = '100'; - } - if(doColumnNeedToFreeze) { - tempColumnDef['pinnedLeft']= true; - if(columnFreezeEndColumn === entry.colId){ - doColumnNeedToFreeze = false; - } - } - columnDefsArray.push(tempColumnDef); - }); - - $scope.gridOptions.paginationPageSizes= [$scope.widget.reportData.pageSize]; - $scope.gridOptions.paginationPageSize= $scope.widget.reportData.pageSize; - if($scope.widget.reportData.totalRows<14){ - $scope.widget.gridHeight = (widget.reportData.totalRows+5)*30+'px'; - }else{ - $scope.gridHeight = '400px'; - } - $scope.gridOptions.totalItems = $scope.widget.reportData.totalRows; - $scope.gridOptions.columnDefs= columnDefsArray; - $scope.gridOptions.data= $scope.widget.reportData.reportDataRows; - $scope.gridOptions.exporterPdfHeader.text= $scope.widget.reportData.reportName; - }; - $scope.uiGridRefresh(); - - - /*presence.setGlobal({ - u: $rootScope.currentUser, - s: 'on' - })*/ - }) - $scope.$on('widgetResized', function (event, size) { - console.log("===$scope==="); - console.log($scope); - $scope.width = size.width || $scope.width; - $scope.height = size.height || $scope.height; - $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid=Y&width="+Math.floor($scope.width*13)+"&height=300"; - }); - } - }; - }]) - .directive('raptorReportData', ['widgetDefinitions','defaultWidgets',function (widgetDefinitions, defaultWidgets) { - return { - restrict: 'A', - replace: true, - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html', - scope: true, - controller: function ($scope,$http, $rootScope) { -// console.log('================= Raptor Report scope ================='); -// console.log($scope); - $scope.showChart = false; - $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideChart=Y&width="+Math.floor($scope.width*13)+"&height=300"; -// $scope.url = "report_embedded#/report_run/c_master="+$scope.widget.report_id+ "&refresh=Y&hideGrid="+$scope.hideGrid+"&width=550&height=300"; - $rootScope.showdataContainer = false; - $rootScope.$watch('showdataContainer', function () { - console.log('change showdataContainer'); - console.log($rootScope.showdataContainer); - $scope.gridOptions = $rootScope.gridOptions; - $scope.gridOptions = $rootScope.gridOptions; - $scope.uiGridRefresh = function(){ - var columnDefsArray = []; - var columnFreezeEndColumn = $scope.widget.reportData.colIdxTobeFreezed; - var doColumnNeedToFreeze = false; - if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) { - doColumnNeedToFreeze = true; - } - $scope.widget.reportData.reportDataColumns.forEach(function(entry) { - var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable, - sortingAlgorithm: function(a, b) { - return rowSorter.sortAlpha(a.displayValue, b.displayValue); - }, - cellTemplate: '
    '+ - '
    {{COL_FIELD.displayValue}}
    ' + - ' {{COL_FIELD.displayValue}}' + - '
    '}; - if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){ - tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2); - } else { - tempColumnDef['minWidth'] = '100'; - } - if(doColumnNeedToFreeze) { - tempColumnDef['pinnedLeft']= true; - if(columnFreezeEndColumn === entry.colId){ - doColumnNeedToFreeze = false; - } - } - columnDefsArray.push(tempColumnDef); - }); - - $scope.gridOptions.paginationPageSizes= [$scope.widget.reportData.pageSize]; - $scope.gridOptions.paginationPageSize= $scope.widget.reportData.pageSize; - if($scope.widget.reportData.totalRows<14){ - $scope.widget.gridHeight = (widget.reportData.totalRows+5)*30+'px'; - }else{ - $scope.gridHeight = '400px'; - } - $scope.gridOptions.totalItems = $scope.widget.reportData.totalRows; - $scope.gridOptions.columnDefs= columnDefsArray; - $scope.gridOptions.data= $scope.widget.reportData.reportDataRows; - $scope.gridOptions.exporterPdfHeader.text= $scope.widget.reportData.reportName; - }; - $scope.uiGridRefresh(); - - - /*presence.setGlobal({ - u: $rootScope.currentUser, - s: 'on' - })*/ - }) - } - }; - }]) - .directive('rCloud', function () { - return { - restrict: 'A', - replace: true, - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html', - scope: true, - controller: function ($scope,$http) { - $scope.showChart = false; - $scope.hideGrid = 'true'; - $scope.url = $scope.widget.rcloud_url; - $scope.$on('widgetResized', function (event, size) { - $scope.width = size.width || $scope.width; - $scope.height = size.height || $scope.height; - }); - } - }; - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js deleted file mode 100644 index ad959b21..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/explicitSave.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app - .controller('ExplicitSaveDemoCtrl', function ($scope, $interval, $window, widgetDefinitions, defaultWidgets) { - $scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - storage: $window.localStorage, - storageId: 'explicitSave', - explicitSave: true - }; - $scope.randomValue = Math.random(); - $interval(function () { - $scope.randomValue = Math.random(); - }, 500); - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css deleted file mode 100644 index c05f70c1..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.css +++ /dev/null @@ -1,146 +0,0 @@ -/* #rightContentUiDashboard { - display:inline-block; -} */ - -#rightContentUiDashboard .browsehappy { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; -} -#rightContentUiDashboard .thumbnail { - height: 200px; -} -#rightContentUiDashboard .thumbnail img.pull-right { - width: 50px; -} -#rightContentUiDashboard body { - margin: 15px; - padding-top: 50px; -} -#rightContentUiDashboard a { - cursor: pointer; -} -#rightContentUiDashboard .layout-tabs { - margin-bottom: 10px; -} -#rightContentUiDashboard .demo-widget-fluid { - border: 1px solid blue; - height: 100%; -} -#rightContentUiDashboard .demo-widget-fluid > div { - border: 1px solid red; - position: relative; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} -#rightContentUiDashboard .dashboard-widget-area { - margin: 10px 0 30px; - min-height: 200px; -} -#rightContentUiDashboard .widget-container { - float: left; - display: inline-block; - width: 33%; - padding-bottom: 0em; -} -#rightContentUiDashboard .widget { - margin: 0 1em 0 0; - background-color: white; - border-radius: 5px; - position: relative; - height: 100%; -} -#rightContentUiDashboard .widget-header { - overflow: hidden; - width:100%; /* for overlaying effect start*/ - position: absolute; - z-index: 10; - opacity: 0.8; - top: 1px; - filter: alpha(opacity=80); /* For IE8 and earlier */ - -webkit-transition: width 2s, height 4s; /* Safari */ - transition: width 2s, height 4s; -} -#rightContentUiDashboard .widget-header .label { - display: inline-block; - vertical-align: middle; -} -#rightContentUiDashboard .widget-header .glyphicon { - cursor: pointer; - float: right; - opacity: 0.5; - margin-left: 5px; -} -#rightContentUiDashboard .widget-header .glyphicon:hover { - opacity: 1; -} -#rightContentUiDashboard .widget-header .widget-title { - vertical-align: middle; -} -#rightContentUiDashboard .widget-header form.widget-title { - display: inline; -} -#rightContentUiDashboard .widget-header form.widget-title input.form-control { - width: auto; - display: inline-block; -} -#rightContentUiDashboard .widget-content { - padding:0px; - overflow: hidden; - position: relative; /* for overlaying effect */ -} -#rightContentUiDashboard .widget .widget-ew-resizer { - position: absolute; - width: 5px; - right: -2px; - height: 100%; - top: 0; - cursor: ew-resize; -} -#rightContentUiDashboard .widget .widget-s-resizer { - cursor: ns-resize; - height: 5px; - width: 100%; - bottom: -7px; - left: 0; -} -#rightContentUiDashboard .widget .widget-resizer-marquee { - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.5); - position: absolute; - top: 0; - left: 0; - z-index: 2; -} -#rightContentUiDashboard .remove-layout-icon { - vertical-align: text-top; - cursor: pointer; - opacity: 0.3; -} -#rightContentUiDashboard .remove-layout-icon:hover { - opacity: 1; -} -#rightContentUiDashboard .layout-title { - display: inline-block; -} - -/* -#container { - width: 100px; - height: 100px; - position: relative; -} -#navi, -#infoi { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; -} -#infoi { - z-index: 10; -} - - */ \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js deleted file mode 100644 index b4cfb97d..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -angular.module('dashboard', ['ui.bootstrap']); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less deleted file mode 100644 index 87955cbe..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index.less +++ /dev/null @@ -1,16 +0,0 @@ -.browsehappy { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; -} - -.thumbnail { - height: 200px; - - img.pull-right { - width: 50px; - } -} -// injector -// endinjector diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css deleted file mode 100644 index d5cebfb0..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/index_original.css +++ /dev/null @@ -1,113 +0,0 @@ -.browsehappy { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; -} -.thumbnail { - height: 200px; -} -.thumbnail img.pull-right { - width: 50px; -} -body { - margin: 15px; - padding-top: 50px; -} -a { - cursor: pointer; -} -.layout-tabs { - margin-bottom: 10px; -} -.demo-widget-fluid { - border: 1px solid blue; - height: 100%; -} -.demo-widget-fluid > div { - border: 1px solid red; - position: relative; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} -.dashboard-widget-area { - margin: 10px 0 30px; - min-height: 200px; -} -.widget-container { - float: left; - display: inline-block; - width: 33%; - padding-bottom: 1em; -} -.widget { - margin: 0 1em 0 0; - background-color: white; - border: 2px solid #444; - border-radius: 5px; - position: relative; - height: 100%; -} -.widget-header { - overflow: hidden; -} -.widget-header .label { - display: inline-block; - vertical-align: middle; -} -.widget-header .glyphicon { - cursor: pointer; - float: right; - opacity: 0.5; - margin-left: 5px; -} -.widget-header .glyphicon:hover { - opacity: 1; -} -.widget-header .widget-title { - vertical-align: middle; -} -.widget-header form.widget-title { - display: inline; -} -.widget-header form.widget-title input.form-control { - width: auto; - display: inline-block; -} -.widget-content { - overflow: hidden; -} -.widget .widget-ew-resizer { - position: absolute; - width: 5px; - right: -2px; - height: 100%; - top: 0; - cursor: ew-resize; -} -.widget .widget-s-resizer { - cursor: ns-resize; - height: 5px; - width: 100%; - bottom: -7px; - left: 0; -} -.widget .widget-resizer-marquee { - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.5); - position: absolute; - top: 0; - left: 0; - z-index: 2; -} -.remove-layout-icon { - vertical-align: text-top; - cursor: pointer; - opacity: 0.3; -} -.remove-layout-icon:hover { - opacity: 1; -} -.layout-title { - display: inline-block; -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js deleted file mode 100644 index fda21ab0..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/layouts.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app - .controller('LayoutsDemoCtrl', function($scope, widgetDefinitions, defaultWidgets, LayoutStorage, $interval) { - $scope.layoutOptions = { - storageId: 'demo-layouts', - storage: localStorage, - storageHash: 'fs4df4d51', - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - lockDefaultLayouts: true, - defaultLayouts: [ - { title: 'Layout 1', active: true , defaultWidgets: defaultWidgets }, - { title: 'Layout 2', active: false, defaultWidgets: defaultWidgets }, - { title: 'Layout 3', active: false, defaultWidgets: defaultWidgets, locked: false } - ] - }; - $scope.randomValue = Math.random(); - $interval(function () { - $scope.randomValue = Math.random(); - }, 500); - - }) - .controller('LayoutsDemoExplicitSaveCtrl', function($scope, widgetDefinitions, defaultWidgets, LayoutStorage, $interval, $http) { - $http.get('raptor.htm?action=report.search.execute').then( - function(result){ - var data = result.data; - var report_id_name = []; - for (var i in data.rows[0]) { - report_id_name.push({index:i, value: data.rows[0][i][1].searchresultField.displayValue, title: data.rows[0][i][2].searchresultField.displayValue}) - } - $scope.reports = report_id_name; - console.log($scope.reports); - $scope.report1 = $scope.reports[1]; - }); - // Can this be removed? - $scope.rcloud_url= "https://tbd.onap.org/mini.html?notebook=c131ea997453e75303588699936d1896"; - $scope.layoutOptions = { - storageId: 'demo-layouts-explicit-save', - storage: localStorage, - storageHash: 'fs4df4d51', - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - explicitSave: true, - defaultLayouts: [ - { title: 'Layout 1', active: true , defaultWidgets: defaultWidgets }, - { title: 'Layout 2', active: false, defaultWidgets: defaultWidgets }, - { title: 'Layout 3', active: false, defaultWidgets: defaultWidgets } - ] - }; - $scope.randomValue = Math.random(); - $interval(function () { - $scope.randomValue = Math.random(); - }, 500); - - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js deleted file mode 100644 index f67d5e64..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/report_whitelist.js +++ /dev/null @@ -1,3 +0,0 @@ -app.config(function ($sceDelegateProvider) { - $sceDelegateProvider.resourceUrlWhitelist(['self','https://tbd.onap.org/**']); -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js deleted file mode 100644 index db22e548..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/resize.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -app - .controller('ResizeDemoCtrl', function ($scope, $interval, $window, widgetDefinitions, defaultWidgets) { - defaultWidgets = [ - { name: 'fluid' }, - { name: 'resizable' }, - { name: 'random', style: { width: '50%' } }, - { name: 'time', style: { width: '50%' } } - ]; - - $scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - storage: $window.localStorage, - storageId: 'demo_resize' - }; - $scope.randomValue = Math.random(); - $interval(function () { - $scope.randomValue = Math.random(); - }, 500); - }) - .controller('ResizableCtrl', function ($scope) { - $scope.$on('widgetResized', function (event, size) { - $scope.width = size.width || $scope.width; - $scope.height = size.height || $scope.height; - }); - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html deleted file mode 100644 index b12c3ade..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/configurableWidgetModalOptions.html +++ /dev/null @@ -1,6 +0,0 @@ -
    - -
    - -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html deleted file mode 100644 index 4bb0c94a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/fluid.html +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    -

    Widget takes 100% height (blue border).

    -

    Resize the widget vertically to see that this text (red border) stays middle aligned.

    -

    New width: {{width}}

    -

    New height: {{height}}

    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html deleted file mode 100644 index 8d6854f7..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/layouts.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html deleted file mode 100644 index 46cf7b8b..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/r-cloud.html +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    - - - -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html deleted file mode 100644 index fed32ada..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/raptor-report.html +++ /dev/null @@ -1,29 +0,0 @@ -
    -
    - -
    - -
    - - - -
    -
    -
    -
    -
    - {{reportData.message}} -
    -
    -
    -
    -
    - - - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html deleted file mode 100644 index 6abaad81..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/resizable.html +++ /dev/null @@ -1,6 +0,0 @@ -
    -
    -
    New width: {{width}}
    -
    New height: {{height}}
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html deleted file mode 100644 index 23b72c28..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/view.html +++ /dev/null @@ -1,5 +0,0 @@ -
    -
    -
    -
    -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html deleted file mode 100644 index 3b93a0a9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/template/widgetSpecificSettings.html +++ /dev/null @@ -1,19 +0,0 @@ - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css deleted file mode 100644 index a7e815ed..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.css +++ /dev/null @@ -1,6658 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - background: transparent !important; - color: #000 !important; - box-shadow: none !important; - text-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot'); - src: url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../bower_components/boostrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../bower_components/boostrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - box-sizing: border-box; -} -*:before, -*:after { - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333333; - background-color: #ffffff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eeeeee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #ffffff; - background-color: #333333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #333333; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; - background-color: #ffffff; - background-image: none; - border: 1px solid #cccccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999999; -} -.form-control::-webkit-input-placeholder { - color: #999999; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eeeeee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; - min-height: 34px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default .badge { - color: #ffffff; - background-color: #333333; -} -.btn-primary { - color: #ffffff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #ffffff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #ffffff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #ffffff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #ffffff; -} -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #ffffff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #ffffff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #ffffff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #ffffff; -} -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #ffffff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #ffffff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #ffffff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #ffffff; -} -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #ffffff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #ffffff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #ffffff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #ffffff; -} -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #ffffff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #ffffff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #ffffff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #ffffff; -} -.btn-link { - color: #337ab7; - font-weight: normal; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - transition-property: height, visibility; - transition-duration: 0.35s; - transition-timing-function: ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #262626; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #337ab7; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 8px; - margin-bottom: 8px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777777; -} -.navbar-default .navbar-nav > li > a { - color: #777777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #dddddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777777; -} -.navbar-default .navbar-link:hover { - color: #333333; -} -.navbar-default .btn-link { - color: #777777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; -} -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #ffffff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #ffffff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #cccccc; -} -.breadcrumb > .active { - color: #777777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #337ab7; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #23527c; - background-color: #eeeeee; - border-color: #dddddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777777; - background-color: #ffffff; - border-color: #dddddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777777; - background-color: #ffffff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #ffffff; - line-height: 1; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: #777777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #ffffff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px; - padding-left: 15px; - padding-right: 15px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-left: 60px; - padding-right: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #ffffff; - text-align: center; - background-color: #337ab7; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - zoom: 1; - overflow: hidden; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - transform: translate(0, -25%); - transition: -webkit-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - background-color: #000000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - transition: -webkit-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: rgba(0, 0, 0, 0); -} -.carousel-control.left { - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #ffffff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less deleted file mode 100644 index 2d0f5cc6..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/app/vendor.less +++ /dev/null @@ -1,3 +0,0 @@ -@import '../../bower_components/bootstrap/less/bootstrap.less'; - -@icon-font-path: '/fonts/'; diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js deleted file mode 100644 index 989a6bec..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/angular-markdown-directive/markdown.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * angular-markdown-directive v0.3.1 - * (c) 2013-2014 Brian Ford http://briantford.com - * License: MIT - */ - -'use strict'; - -angular.module('btford.markdown', ['ngSanitize']). - provider('markdownConverter', function () { - var opts = {}; - return { - config: function (newOpts) { - opts = newOpts; - }, - $get: function () { - return new Showdown.converter(opts); - } - }; - }). - directive('btfMarkdown', ['$sanitize', 'markdownConverter', function ($sanitize, markdownConverter) { - return { - restrict: 'AE', - link: function (scope, element, attrs) { - if (attrs.btfMarkdown) { - scope.$watch(attrs.btfMarkdown, function (newVal) { - var html = newVal ? $sanitize(markdownConverter.makeHtml(newVal)) : ''; - element.html(html); - }); - } else { - var html = $sanitize(markdownConverter.makeHtml(element.text())); - element.html(html); - } - } - }; - }]); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js deleted file mode 100644 index 4b420a27..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsCtrl.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .controller('WidgetSettingsCtrl', ['$scope', '$uibModalInstance', 'widget', function ($scope, $uibModalInstance, widget) { - // add widget to scope - $scope.widget = widget; - - // set up result object - $scope.result = jQuery.extend(true, {}, widget); - - $scope.ok = function () { - $uibModalInstance.close($scope.result); - }; - - $scope.cancel = function () { - $uibModalInstance.dismiss('cancel'); - }; - }]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js deleted file mode 100644 index 02416a0c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/WidgetSettingsRaptorReportCtrl.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard',['ngSanitize']) - .controller('WidgetSettingsRaptorReportCtrl', ['$http','$scope','$rootScope','$uibModalInstance', 'widget', '$sanitize', function ($http,$scope,$rootScope,$uibModalInstance, widget, $sanitize) { - - // add watch function for widget here - // leave ajax call to the dashboard.js - - console.log("============= WidgetSettingsRaptorReportCtrl scope ================="); - console.log($scope); - - var getFormFieldListUrl = "raptor.htm?action=report.run.container&c_master="+widget.report_id + "&refresh=Y" - console.log("============= getFormFieldListUrl ============="); - console.log(getFormFieldListUrl); - $http.get(getFormFieldListUrl).then( - function(res){ - $scope.reportData = res.data; - // add widget to scope - $scope.showFormFieldIds = false; - $scope.formFieldSelectedValues = {}; -}); - - var parseQueryString = function( queryString ) { - var params = {}, queries, temp, i, l; - // Split into key/value pairs - queries = queryString.split("&"); - // Convert the array of strings into an object - for ( i = 0, l = queries.length; i < l; i++ ) { - temp = queries[i].split('='); - //console.log(temp[0]); - //console.log(temp[0] != "refresh"); - if(temp[0] && temp[0] != "refresh") - params[temp[0]] = temp[1]; - } - return params; - }; - - var paginationOptions = { - pageNumber: 1, - pageSize: 5, - sort: null - }; - - $scope.gridOptions = { - paginationPageSizes: [5], - paginationPageSize: 5, - useExternalPagination: true, - columnDefs: [], - data: [], - enableGridMenu: true, - enableSelectAll: true, - exporterMenuPdf: false, - exporterMenuCsv: false, - exporterCsvFilename: 'myFile.csv', - exporterPdfDefaultStyle: {fontSize: 9}, - exporterPdfTableStyle: {margin: [30, 30, 30, 30]}, - exporterPdfTableHeaderStyle: {fontSize: 10, bol$rootScoped: true, italics: true, color: 'red'}, - exporterPdfHeader: { text: "My Header", style: 'headerStyle' }, - exporterPdfFooter: function ( currentPage, pageCount ) { - return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' }; - }, - exporterPdfCustomFormatter: function ( docDefinition ) { - docDefinition.styles.headerStyle = { fontSize: 22, bold: true }; - docDefinition.styles.footerStyle = { fontSize: 10, bold: true }; - return docDefinition; - }, - exporterPdfOrientation: 'portrait', - exporterPdfPageSize: 'LETTER', - exporterPdfMaxGridWidth: 500, - exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")), - onRegisterApi: function(gridApi) { - $scope.gridApi = gridApi; - gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) { - paginationOptions.pageNumber = newPage; - paginationOptions.pageSize = pageSize; - $scope.runReport(); - }); - } - }; - - - - $scope.getFormFieldSelectedValuesAsURL = function(){ - var formFieldsUrl = ''; - $scope.widget.reportData.formFieldList.forEach(function(formField) { - if(formField.fieldType==='LIST_BOX') { - if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId].value != '') { - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId].value+'&'; - } - } else if(formField.fieldType==='LIST_MULTI_SELECT') { - if($scope.formFieldSelectedValues[formField.fieldId].length >0) { - for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) { - if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&'; - } - } - } - } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&'; - } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&'; - } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){ - formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&'; - } - }); - return formFieldsUrl; - - } - - $scope.triggerOtherFormFields = function(){ - console.log("report_run"); - var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL(); - $http.get('raptor.htm?action=report.formfields.run.container&c_master='+widget.report_id+'&'+formFieldsUrl).then( - function(response){ - $scope.widget.reportData = response.data; - }); - }; - - - $scope.runReport = function(pagination){ - var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL(); - console.log("pagination"); - if(!pagination) { - console.log("refreshed ..."); - $scope.gridOptions.pageNumber = 1; - $scope.gridOptions.paginationPageSizes= [widget.reportData.pageSize]; - $scope.gridOptions.paginationPageSize= widget.reportData.pageSize; - if(widget.reportData.totalRows<14){ - $scope.gridHeight = (widget.reportData.totalRows+7)*30+'px'; - } else{ - $scope.gridHeight = '400px'; - } - $scope.gridOptions.totalItems = widget.reportData.totalRows; - $scope.gridOptions.data= widget.reportData.reportDataRows; - $scope.gridOptions.exporterPdfHeader.text= widget.reportData.reportName; - } -/* $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1); - console.log('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)); - $http.get('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then( - */ - $scope.currentReportUrlParams = 'c_master='+ widget.report_id+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1); - $scope.urlParams = parseQueryString($scope.currentReportUrlParams); - - console.log('raptor.htm?action=report.run.container&c_master='+ widget.report_id +'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)); - $http.get('raptor.htm?action=report.run.container&c_master='+widget.report_id+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then( - function(response){ - widget.reportData = response.data; - if(widget.reportData.errormessage) { - document.getElementById('errorDiv').innerHTML = $sanitize(widget.reportData.errormessage); - console.log(document.getElementById('errorDiv').innerHtml); - console.log(widget.reportData.errormessage); - } - if(!pagination) { - if(!$scope.urlParams.hideChart && widget.reportData.chartAvailable && widget.reportData.totalRows>1){ - console.log('raptor.htm?action=chart.run&c_master='+widget.report_id+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)); - $http.get('raptor.htm?action=chart.run&c_master='+widget.report_id +'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then( - function(response) { - console.log(response.data); - $scope.showChart = true; - var chartiframe = document.getElementById('chartiframe'); - chartiframe.contentWindow.document.write($sanitize(response.data)); - chartiframe.contentWindow.document.close(); - }); - } else { - $scope.showChart = false; - } - } - if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){ - $scope.showFormFields = true; - } else { - $scope.showFormFields = false; - } - }); - $rootScope.gridOptions = $scope.gridOptions; - $rootScope.gridHeight = $scope.gridHeight; - $rootScope.showdataContainer = true; - }; - - - - - - // set up result object - $scope.result = jQuery.extend(true, {}, widget); - - $scope.ok = function () { - $uibModalInstance.close($scope.result); - }; - - $scope.okay = function () { - console.log("$scope.okay!") - console.log($scope); - $scope.runReport(); -/* $uibModalInstance.close($scope.result);*/ - }; - - $scope.cancel = function () { - $uibModalInstance.dismiss('cancel'); - }; - }]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html deleted file mode 100644 index 00d6c41a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html +++ /dev/null @@ -1,26 +0,0 @@ -
    - - -
    -
    -
    -
    Report Name:
    -
    - - - chart - data - -
    - - - - -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html deleted file mode 100644 index 239497c9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html +++ /dev/null @@ -1,22 +0,0 @@ -
    - - -
    -
    -
    -
    RCloud Notebook URL:
    - - -
    - - -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html deleted file mode 100644 index 189bccea..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/altDashboard.html +++ /dev/null @@ -1,49 +0,0 @@ -
    -
    -
    - - - - -
    - -
    - -
    - - - - - - -
    - -
    -
    -
    -
    -

    - {{widget.title}} -
    - -
    - {{widget.name}} - - -

    -
    -
    -
    -
    -
    -
    -
    diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html deleted file mode 100644 index e891b565..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html +++ /dev/null @@ -1,74 +0,0 @@ - -
    -
    -
    - - - - - -
    - -
    - -
    - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    - -
    - -
    - {{widget.name}} - - - -

    -
    -
    -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js deleted file mode 100644 index 4062694e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.js +++ /dev/null @@ -1,427 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; - -angular.module('ui.dashboard', ['ui.bootstrap', 'ui.sortable']); - -angular.module('ui.dashboard') - - .directive('dashboard', ['$http','WidgetModel', 'WidgetDefCollection', '$uibModal', 'DashboardState', '$log', function ($http, WidgetModel, WidgetDefCollection, $uibModal, DashboardState, $log) { - - return { - restrict: 'A', - templateUrl: function(element, attr) { - return attr.templateUrl ? attr.templateUrl : 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.html'; - }, - scope: true, - - controller: ['$scope', '$attrs', function (scope, attrs) { - // default options - var defaults = { - stringifyStorage: true, - hideWidgetSettings: false, - hideWidgetClose: false, - settingsModalOptions: { - // templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-template.html', - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-raptor-report-template.html', - // controller: 'WidgetSettingsCtrl' - controller: 'WidgetSettingsRaptorReportCtrl' - }, - onSettingsClose: function(result, widget) { // NOTE: dashboard scope is also passed as 3rd argument - jQuery.extend(true, widget, result); - }, - onSettingsDismiss: function(reason) { // NOTE: dashboard scope is also passed as 2nd argument - $log.info('widget settings were dismissed. Reason: ', reason); - } - }; - - scope.hoverEdit = false; - - scope.hoverIn = function(){ - this.hoverEdit = true; - }; - - scope.hoverOut = function(){ - this.hoverEdit = false; - }; - - // from dashboard="options" - scope.options = scope.$eval(attrs.dashboard); - - // Deep options - scope.options.settingsModalOptions = scope.options.settingsModalOptions || {}; - _.each(['settingsModalOptions'], function(key) { - // Ensure it exists on scope.options - scope.options[key] = scope.options[key] || {}; - // Set defaults - _.defaults(scope.options[key], defaults[key]); - }); - - // Shallow options - _.defaults(scope.options, defaults); - - // sortable options - var sortableDefaults = { - stop: function () { - scope.saveDashboard(); - }, - handle: '.widget-header', - distance: 5 - }; - scope.sortableOptions = angular.extend({}, sortableDefaults, scope.options.sortableOptions || {}); - - }], - link: function (scope) { - - // Save default widget config for reset - scope.defaultWidgets = scope.options.defaultWidgets; - - scope.widgetDefs = new WidgetDefCollection(scope.options.widgetDefinitions); - var count = 1; - - // Instantiate new instance of dashboard state - scope.dashboardState = new DashboardState( - scope.options.storage, - scope.options.storageId, - scope.options.storageHash, - scope.widgetDefs, - scope.options.stringifyStorage - ); - - /** - * Instantiates a new widget on the dashboard - * @param {Object} widgetToInstantiate The definition object of the widget to be instantiated - */ - scope.addWidget = function (widgetToInstantiate, doNotSave) { - - if (typeof widgetToInstantiate === 'string') { - widgetToInstantiate = { - name: widgetToInstantiate - }; - } - - var defaultWidgetDefinition = scope.widgetDefs.getByName(widgetToInstantiate.name); - if (!defaultWidgetDefinition) { - throw 'Widget ' + widgetToInstantiate.name + ' is not found.'; - } - - // Determine the title for the new widget - var title; - if (!widgetToInstantiate.title && !defaultWidgetDefinition.title) { - widgetToInstantiate.title = 'Widget ' + count++; - } - - // Instantiation - var widget = new WidgetModel(defaultWidgetDefinition, widgetToInstantiate); - - // Add to the widgets array - scope.widgets.push(widget); - if (!doNotSave) { - scope.saveDashboard(); - } - - return widget; - }; - - /** - * Removes a widget instance from the dashboard - * @param {Object} widget The widget instance object (not a definition object) - */ - scope.removeWidget = function (widget) { - scope.widgets.splice(_.indexOf(scope.widgets, widget), 1); - scope.saveDashboard(); - }; - - /** - * Opens a dialog for setting and changing widget properties - * @param {Object} widget The widget instance object - */ - scope.openWidgetSettings = function (widget) { -/* console.log('======= widgets ======='); - console.log(widget); - console.log('widget.report_id'); - console.log(widget.report_id); -*/ - if (widget.directive.includes("raptor-report")) { - var getFormFieldListUrl = "raptor.htm?action=report.run.container&c_master="+widget.report_id + "&refresh=Y"; - $http.get(getFormFieldListUrl).then( - function(res){ - widget.reportData = res.data; - }); - - // Set up $uibModal options - var options = _.defaults( - { scope: scope }, - widget.settingsModalOptions, - scope.options.settingsModalOptions); - -/* console.log('======= options ======='); - console.log(options); -*/ - // Ensure widget is resolved - options.resolve = { - widget: function () { - return widget; - } - }; - - // Create the modal - var modalInstance = $uibModal.open(options); - var onClose = widget.onSettingsClose || scope.options.onSettingsClose; - var onDismiss = widget.onSettingsDismiss || scope.options.onSettingsDismiss; - - // Set resolve and reject callbacks for the result promise - modalInstance.result.then( - function (result) { - - // Call the close callback - onClose(result, widget, scope); - - //AW Persist title change from options editor - scope.$emit('widgetChanged', widget); - }, - function (reason) { - - // Call the dismiss callback - onDismiss(reason, scope); - - } - ); - - } - - }; - - /** - * Remove all widget instances from dashboard - */ - scope.clear = function (doNotSave) { - scope.widgets = []; - if (doNotSave === true) { - return; - } - scope.saveDashboard(); - }; - - /** - * Used for preventing default on click event - * @param {Object} event A click event - * @param {Object} widgetDef A widget definition object - */ - scope.addWidgetInternal = function (event, widgetDef) { -// event.preventDefault(); - scope.addWidget(widgetDef); - }; - - /** - * Add report to dashboard - */ - scope.popupAddReport = function () { - var modalInstance = $uibModal.open({ - animation: scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-raptor-report-template.html', - size:'sm', - controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) { - $scope.radioValue="chart" - $http.get('raptor.htm?action=report.search.execute').then( - function(result){ - var data = result.data; - var report_id_name = []; - for (var i in data.rows[0]) { - report_id_name.push({index:i, value: data.rows[0][i][1].searchresultField.displayValue, title: data.rows[0][i][2].searchresultField.displayValue}) - } - $scope.raptorReportList = report_id_name; - }); - - $scope.ok = function() { - scope.addReport($scope.selectedRaptorReport,$scope.radioValue); - $uibModalInstance.close(); - }; - $scope.cancel = function() { - $uibModalInstance.dismiss(); - }; - }] - }); - modalInstance.result.then(function () { - $scope.$emit('raptorReportWidgetAdded'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - }; - - - scope.popupAddRCloudNotebook = function () { - var modalInstance = $uibModal.open({ - animation: scope.animationsEnabled, - templateUrl: 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/add-rcloud-notebook-template.html', - size:'sm', - controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) { - $scope.rcloud_url = "" - - $scope.ok = function() { - scope.addRCloudNotebook($scope.rcloud_url); - $uibModalInstance.close(); - }; - $scope.cancel = function() { - $uibModalInstance.dismiss(); - }; - }] - }); - modalInstance.result.then(function () { - $scope.$emit('raptorReportWidgetAdded'); - }, function () { - $log.info('Modal dismissed at: ' + new Date()); - }); - }; - - - scope.addReport = function (report1,radioValue) { - scope.report1 =report1 - var raptor_report_type = "raptor-report-chart" - if (radioValue ==='data') { - raptor_report_type = 'raptor-report-data' - } - console.log("report1") - console.log(report1); -// event.preventDefault(); - var newreport = {"title":report1.title,"name":raptor_report_type ,"style":{},"size":{"height":"350px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":report1.value}; - scope.addWidget(newreport, true); - console.log("widgets"); - console.log(scope.widgets); - ++scope.options.unsavedChangeCount; - return false; - }; - - /** - * Add rcloud notebook to dashboard - */ - scope.addRCloudNotebook = function (rcloud_url) { - ++scope.options.unsavedChangeCount; - /* open a new prompt window */ - //event.preventDefault(); - var newreport = {"title":"R-Cloud","name":"r-cloud","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"rcloud_url":rcloud_url}; -// console.log("newport"); - console.log(newreport) - scope.addWidget(newreport, true); - /* scope.addWidget("raptor-report");*/ - return false; - }; - - /** - * Uses dashboardState service to save state - */ - scope.saveDashboard = function (force) { - if (!scope.options.explicitSave) { - scope.dashboardState.save(scope.widgets); - } else { - if (!angular.isNumber(scope.options.unsavedChangeCount)) { - scope.options.unsavedChangeCount = 0; - } - if (force) { - scope.options.unsavedChangeCount = 0; - scope.dashboardState.save(scope.widgets); - - } else { - ++scope.options.unsavedChangeCount; - } - } - }; - - /** - * Wraps saveDashboard for external use. - */ - scope.externalSaveDashboard = function(force) { - if (angular.isDefined(force)) { - scope.saveDashboard(force); - } else { - scope.saveDashboard(true); - } - }; - - /** - * Clears current dash and instantiates widget definitions - * @param {Array} widgets Array of definition objects - */ - scope.loadWidgets = function (widgets) { - // AW dashboards are continuously saved today (no "save" button). - console.log("widgets") - scope.defaultWidgets = widgets; - widgets = - [ -// {"title":"DEMO Bar Chart","name":"raptor-report-chart","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"2"}, -// {"title":"Pie Chart","name":"raptor-report-data","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"5"}, -// {"title":"Pie Chart","name":"raptor-report-chart","style":{},"size":{"height":"450px","width":"40%"},"attrs":{"value":"randomValue"},"report_id":"5"} - ]; - console.log('widgets: '); - console.log(JSON.stringify(widgets)); - - scope.savedWidgetDefs = widgets; - scope.clear(true); - _.each(widgets, function (widgetDef) { - scope.addWidget(widgetDef, true); - }); - }; - - /** - * Resets widget instances to default config - * @return {[type]} [description] - */ - scope.resetWidgetsToDefault = function () { - scope.loadWidgets(scope.defaultWidgets); - scope.saveDashboard(); - }; - - // Set default widgets array - var savedWidgetDefs = scope.dashboardState.load(); - - // Success handler - function handleStateLoad(saved) { - scope.options.unsavedChangeCount = 0; - if (saved && saved.length) { - scope.loadWidgets(saved); - } else if (scope.defaultWidgets) { - scope.loadWidgets(scope.defaultWidgets); - } else { - scope.clear(true); - } - } - - if (angular.isArray(savedWidgetDefs)) { - handleStateLoad(savedWidgetDefs); - } else if (savedWidgetDefs && angular.isObject(savedWidgetDefs) && angular.isFunction(savedWidgetDefs.then)) { - savedWidgetDefs.then(handleStateLoad, handleStateLoad); - } else { - handleStateLoad(); - } - - // expose functionality externally - // functions are appended to the provided dashboard options - scope.options.addWidget = scope.addWidget; - scope.options.loadWidgets = scope.loadWidgets; - scope.options.saveDashboard = scope.externalSaveDashboard; - scope.options.removeWidget = scope.removeWidget; - scope.options.openWidgetSettings = scope.openWidgetSettings; - scope.options.clear = scope.clear; - scope.options.resetWidgetsToDefault = scope.resetWidgetsToDefault - - // save state - scope.$on('widgetChanged', function (event) { - event.stopPropagation(); - scope.saveDashboard(); - }); - } - }; - }]); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less deleted file mode 100644 index 6b5b717f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.less +++ /dev/null @@ -1,88 +0,0 @@ -.dashboard-widget-area { - margin: 10px 0 30px; - min-height: 200px; -} - -.widget-container { - float:left; - display: inline-block; - width: 33%; - padding-bottom: 1em; -} - -.widget { - margin: 0 1em 0 0; - background-color: white; - border: 2px solid #444; - border-radius: 5px; - position: relative; - height: 100%; -} -.widget-header { - overflow: hidden; -} -.widget-header .label { - display: inline-block; - vertical-align: middle; -} -.widget-header .glyphicon { - cursor: pointer; - float: right; - opacity: 0.5; - margin-left: 5px; -} -.widget-header .glyphicon:hover { - opacity: 1; -} -.widget-header .widget-title { - vertical-align: middle; -} -.widget-header form.widget-title { - display: inline; -} - -.widget-header form.widget-title input.form-control { - width: auto; - display: inline-block; -} - -.widget-content { - overflow: hidden; -} - -.widget .widget-ew-resizer { - position: absolute; - width: 5px; - right: -2px; - height:100%; - top:0; - cursor: ew-resize; -} - -.widget .widget-s-resizer { - cursor: ns-resize; - height: 5px; - width: 100%; - bottom: -7px; - left: 0; -} - -.widget .widget-resizer-marquee { - box-shadow: inset 0 0 0 1px rgba(0,0,0,0.5); - position: absolute; - top: 0; - left: 0; - z-index: 2; -} - -.remove-layout-icon { - vertical-align: text-top; - cursor: pointer; - opacity: 0.3; -} -.remove-layout-icon:hover { - opacity: 1; -} -.layout-title { - display: inline-block; -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js deleted file mode 100644 index 453de431..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/dashboard.spec.js +++ /dev/null @@ -1,878 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -describe('Directive: dashboard', function () { - - var scope, element, childScope, DashboardState, mockModal, modalOptions, $compile, $q, mockLog; - - // mock UI Sortable - beforeEach(function () { - angular.module('ui.sortable', []); - }); - - // load the directive's module - beforeEach(module('ui.dashboard', function($provide) { - mockModal = { - open: function(options) { - modalOptions = options; - } - }; - mockLog = { - info: function() { - - } - }; - $provide.value('$uibModal', mockModal); - $provide.value('$log', mockLog); - })); - - beforeEach(inject(function (_$compile_, $rootScope, _DashboardState_, _$q_) { - // services - scope = $rootScope.$new(); - $compile = _$compile_; - DashboardState = _DashboardState_; - $q = _$q_; - - // options - var widgetDefinitions = [ - { - name: 'wt-one', - template: '
    {{2 + 2}}
    ' - }, - { - name: 'wt-two', - template: '{{value}}' - } - ]; - var defaultWidgets = _.clone(widgetDefinitions); - scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - sortableOptions: { - testProperty: 'foobar' - } - }; - scope.value = 10; - - // element setup - element = $compile('
    ')(scope); - scope.$digest(); - childScope = element.scope(); - })); - - it('should have toolbar', function () { - var toolbar = element.find('.btn-toolbar'); - expect(toolbar.length).toEqual(1); - }); - - it('should have UI.Sortable directive', function () { - var widgetArea = element.find('.dashboard-widget-area'); - expect(widgetArea.attr('ui-sortable')).toBeDefined(); - }); - - it('should render widgets', function () { - var widgets = element.find('.widget'); - expect(widgets.length).toEqual(2); - }); - - it('should evaluate widget expressions', function () { - var divWidget = element.find('.wt-one-value'); - expect(divWidget.html()).toEqual('4'); - }); - - it('should evaluate scope expressions', function () { - var spanWidget = element.find('.wt-two-value'); - expect(spanWidget.html()).toEqual('10'); - }); - - it('should fill options with defaults', function() { - expect(scope.dashboardOptions.stringifyStorage).toEqual(true); - }); - - it('should not overwrite specified options with defaults', inject(function($compile) { - scope.dashboardOptions.stringifyStorage = false; - element = $compile('
    ')(scope); - $compile(element)(scope); - scope.$digest(); - expect(scope.dashboardOptions.stringifyStorage).toEqual(false); - })); - - it('should be able to use a different dashboard template', inject(function($compile, $templateCache) { - $templateCache.put( - 'myCustomTemplate.html', - '
    ' + - '
    ' + - '
    ' + - '

    ' + - '{{widget.title}}' + - '' + - '' + - '

    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '
    ' - ); - var customElement = $compile('
    ')(scope); - scope.$digest(); - expect(customElement.find('.custom-widget').length).toEqual(2); - })); - - it('should set scope.widgets to an empty array if no defaultWidgets are specified', inject(function($compile) { - delete scope.dashboardOptions.defaultWidgets; - var element2 = $compile('
    ')(scope); - scope.$digest(); - var childScope2 = element2.scope(); - expect(childScope2.widgets instanceof Array).toEqual(true); - })); - - it('should set options.unsavedChangeCount to 0 upon load', function() { - expect(scope.dashboardOptions.unsavedChangeCount).toEqual(0); - }); - - it('should not call saveDashboard on load', inject(function($compile) { - spyOn(DashboardState.prototype, 'save'); - var s = scope.$new(); - element = $compile('
    ')(s); - scope.$digest(); - expect(DashboardState.prototype.save).not.toHaveBeenCalled(); - })); - - describe('the sortableOptions', function() { - - it('should exist', function() { - expect(typeof childScope.sortableOptions).toEqual('object'); - }); - - it('should be possible to be extendable from the dashboardOptions', function() { - expect(childScope.sortableOptions.testProperty).toEqual('foobar'); - }) - - it('should have a stop function that calls $scope.saveDashboard', function() { - expect(typeof childScope.sortableOptions.stop).toEqual('function'); - spyOn(childScope, 'saveDashboard'); - childScope.sortableOptions.stop(); - expect(childScope.saveDashboard).toHaveBeenCalled(); - }); - }); - - describe('the addWidget function', function() { - - var widgetCreated, widgetPassed, widgetDefault; - - beforeEach(function() { - childScope.widgets.push = function(w) { - widgetCreated = w; - } - }); - - it('should be a function', function() { - expect(typeof childScope.addWidget).toEqual('function'); - }); - - it('should throw if no default widgetDefinition was found', function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue(false); - function fn () { - childScope.addWidget({ name: 'notReal' }); - } - expect(fn).toThrow(); - }); - - it('should look to the passed widgetToInstantiate object for the title before anything else', function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' }); - childScope.addWidget({ title: 'highestPrecedence', name: 'A' }); - expect(widgetCreated.title).toEqual('highestPrecedence'); - }); - - it('should use the defaultWidget\'s title second', function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' }); - childScope.addWidget({ name: 'A' }); - expect(widgetCreated.title).toEqual('defaultTitle'); - }); - - it('should call the saveDashboard method (internal)', function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' }); - spyOn(childScope, 'saveDashboard'); - childScope.addWidget({ name: 'A' }); - expect(childScope.saveDashboard).toHaveBeenCalled(); - }); - - it('should support passing just the widget name as a string', function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' }); - childScope.addWidget('A'); - expect(childScope.widgetDefs.getByName).toHaveBeenCalledWith('A'); - expect(widgetCreated.title).toEqual('defaultTitle'); - }); - - describe('@awashbrook Test Case', function() { - beforeEach(function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue(widgetDefault = { - "name": "nvLineChartAlpha", - "directive": "nvd3-line-chart", - "dataAttrName": "data", - "attrs": { - "isArea": true, - "height": 400, - "showXAxis": true, - "showYAxis": true, - "xAxisTickFormat": "xAxisTickFormat()", - "interactive": true, - "useInteractiveGuideline": true, - "tooltips": true, - "showLegend": true, - "noData": "No data for YOU!", - "color": "colorFunction()", - "forcey": "[0,2]" - }, - "dataModelOptions": { - "params": { - "from": "-2h", - "until": "now" - } - }, - "style": { - "width": "400px" - }, - }); - childScope.addWidget(widgetPassed = { - "title": "Andy", - "name": "nvLineChartAlpha", - "style": { - "width": "400px" - }, - "dataModelOptions": { - "params": { - "from": "-1h", - "target": [ - "randomWalk(\"random Andy 1\")", - "randomWalk(\"random walk 2\")", - "randomWalk(\"random walk 3\")" - ] - } - }, - "attrs": { - "height": 400, - "showXAxis": true, - "showYAxis": true, - "xAxisTickFormat": "xAxisTickFormat()", - "interactive": false, - "useInteractiveGuideline": true, - "tooltips": true, - "showLegend": true, - "noData": "No data for YOU!", - "color": "colorFunction()", - "forcey": "[0,2]", - "data": "widgetData" - } - }); - }); - - it('should keep overrides from widgetPassed', function() { - expect(widgetCreated.attrs.interactive).toEqual(widgetPassed.attrs.interactive); - }); - - it('should fill in default attrs', function() { - expect(widgetCreated.attrs.isArea).toEqual(widgetDefault.attrs.isArea); - }); - - it('should override deep options in dataModelOptions', function() { - expect(widgetCreated.dataModelOptions.params.from).toEqual(widgetPassed.dataModelOptions.params.from); - }); - - it('should fill in deep default attrs', function() { - expect(widgetCreated.dataModelOptions.params.until).toEqual(widgetDefault.dataModelOptions.params.until); - }); - }); - - describe('the doNotSave parameter', function() { - - it('should prevent save from being called if set to true', function() { - spyOn(childScope.widgetDefs, 'getByName').and.returnValue({ title: 'defaultTitle', name: 'A' }); - spyOn(childScope, 'saveDashboard'); - childScope.addWidget({ name: 'A' }, true); - expect(childScope.saveDashboard).not.toHaveBeenCalled(); - }); - - }); - - }); - - describe('the removeWidget function', function() { - - it('should be a function', function() { - expect(typeof childScope.removeWidget).toEqual('function'); - }); - - it('should remove the provided widget from childScope.widgets array', function() { - var startingLength = childScope.widgets.length; - var expectedLength = startingLength - 1; - - var widgetToRemove = childScope.widgets[0]; - childScope.removeWidget(widgetToRemove); - - expect(childScope.widgets.length).toEqual(expectedLength); - expect(childScope.widgets.indexOf(widgetToRemove)).toEqual(-1); - }); - - it('should call saveDashboard', function() { - spyOn(childScope, 'saveDashboard'); - var widgetToRemove = childScope.widgets[0]; - childScope.removeWidget(widgetToRemove); - expect(childScope.saveDashboard).toHaveBeenCalled(); - }); - - }); - - describe('the saveDashboard function', function() { - - it('should be attached to the options object after initialization', function() { - expect(typeof scope.dashboardOptions.saveDashboard).toEqual('function'); - expect(scope.dashboardOptions.saveDashboard === childScope.externalSaveDashboard).toEqual(true); - }); - - it('should call scope.dashboardState.save when called internally if explicitSave is falsey', function() { - spyOn(childScope.dashboardState, 'save').and.returnValue(true); - childScope.saveDashboard(); - expect(childScope.dashboardState.save).toHaveBeenCalled(); - }); - - it('should not call scope.dashboardState.save when called internally if explicitSave is truthy', function() { - scope.dashboardOptions.explicitSave = true; - spyOn(childScope.dashboardState, 'save').and.returnValue(true); - childScope.saveDashboard(); - expect(childScope.dashboardState.save).not.toHaveBeenCalled(); - }); - - it('should call scope.dashboardState.save when called externally, no matter what explicitSave value is', function() { - spyOn(childScope.dashboardState, 'save').and.returnValue(true); - - scope.dashboardOptions.explicitSave = false; - scope.dashboardOptions.saveDashboard(); - expect(childScope.dashboardState.save.calls.count()).toEqual(1); - - scope.dashboardOptions.explicitSave = true; - scope.dashboardOptions.saveDashboard(); - expect(childScope.dashboardState.save.calls.count()).toEqual(2); - }); - - it('should keep a count of unsaved changes as unsavedChangeCount', function() { - scope.dashboardOptions.explicitSave = true; - spyOn(childScope.dashboardState, 'save').and.returnValue(true); - childScope.saveDashboard(); - expect(scope.dashboardOptions.unsavedChangeCount).toEqual(1); - childScope.saveDashboard(); - childScope.saveDashboard(); - expect(scope.dashboardOptions.unsavedChangeCount).toEqual(3); - }); - - it('should reset the cound of unsaved changes if a successful force save occurs', function() { - scope.dashboardOptions.explicitSave = true; - spyOn(childScope.dashboardState, 'save').and.returnValue(true); - - childScope.saveDashboard(); - childScope.saveDashboard(); - childScope.saveDashboard(); - - childScope.saveDashboard(true); - - expect(scope.dashboardOptions.unsavedChangeCount).toEqual(0); - }); - - }); - - describe('the loadWidgets function', function() { - - it('should be a function', function() { - expect(typeof childScope.loadWidgets).toEqual('function'); - }); - - it('should set savedWidgetDefs on scope as passed array', function() { - var widgets = []; - childScope.loadWidgets(widgets); - expect(childScope.savedWidgetDefs === widgets).toEqual(true); - }); - - it('should call clear on the scope with true as the only argument', function() { - spyOn(childScope, 'clear'); - childScope.loadWidgets([]); - expect(childScope.clear).toHaveBeenCalled(); - expect(childScope.clear.calls.argsFor(0)).toEqual([true]); - }); - - it('should call addWidget for each widget in the array', function() { - spyOn(childScope, 'addWidget').and.returnValue(null); - var widgets = [{},{},{}]; - childScope.loadWidgets(widgets); - expect(childScope.addWidget.calls.count()).toEqual(3); - }); - - it('should call addWidget for each widget with true as the second parameter (doNotSave)', function() { - spyOn(childScope, 'addWidget').and.returnValue(null); - var widgets = [{},{},{}]; - childScope.loadWidgets(widgets); - expect(childScope.addWidget.calls.argsFor(0)).toEqual( [ widgets[0], true] ); - expect(childScope.addWidget.calls.argsFor(1)).toEqual( [ widgets[1], true] ); - expect(childScope.addWidget.calls.argsFor(2)).toEqual( [ widgets[2], true] ); - }); - - }); - - describe('the clear function', function() { - - it('should set the scope to an empty array', function() { - childScope.clear(); - expect(childScope.widgets).toEqual([]); - }); - - it('should not call saveDashboard if first arg is true', function() { - spyOn(childScope, 'saveDashboard'); - childScope.clear(true); - expect(childScope.saveDashboard).not.toHaveBeenCalled(); - }); - - it('should call saveDashboard if first arg is not true', function() { - spyOn(childScope, 'saveDashboard'); - childScope.clear(); - expect(childScope.saveDashboard).toHaveBeenCalled(); - }); - - }); - - describe('the openWidgetSettings function', function() { - - it('should be a function', function() { - expect(typeof childScope.openWidgetSettings).toEqual('function'); - }); - - it('should call $uibModal.open with default options', function() { - var widget = {}; - spyOn(mockModal, 'open').and.returnValue({ - result: { then: function(fn) {} } - }); - childScope.openWidgetSettings(widget); - expect(mockModal.open).toHaveBeenCalled(); - }); - - it('should have widget in the resolve object', function() { - var widget = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.resolve.widget() === widget).toEqual(true); - }); - - it('should set the templateUrl in modal options to the default ("app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-template.html")', function() { - var widget = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.templateUrl).toEqual('app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboard/widget-settings-template.html'); - }); - - it('should set the templateUrl in modal options to scope.options.settingsModalOptions.templateUrl', function() { - var other; - scope.dashboardOptions.settingsModalOptions = { - templateUrl: other = 'some/other/url.html' - }; - var widget = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.templateUrl).toEqual(other); - }); - - it('should set the templateUrl in modal options to widget.settingsModalOptions.templateUrl, if present', function() { - var expected; - var widget = { - settingsModalOptions: { - templateUrl: expected = 'specific/template.html' - } - }; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.templateUrl).toEqual(expected); - }); - - it('should set the controller in modal options to the default ("WidgetSettingsCtrl")', function() { - var widget = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.controller).toEqual('WidgetSettingsCtrl'); - }); - - it('should set the controller in modal options to the default ("WidgetSettingsCtrl"), even when settingsModalOptions is supplied in options', inject(function($rootScope) { - - scope = $rootScope.$new(); - - // options - var widgetDefinitions = [ - { - name: 'wt-one', - template: '
    {{2 + 2}}
    ' - }, - { - name: 'wt-two', - template: '{{value}}' - } - ]; - var defaultWidgets = _.clone(widgetDefinitions); - scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - sortableOptions: { - testProperty: 'foobar' - }, - settingsModalOptions: { - backdrop: false - } - }; - scope.value = 10; - - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - - // element setup - element = $compile('
    ')(scope); - scope.$digest(); - childScope = element.scope(); - - childScope.openWidgetSettings({}); - expect(modalOptions.controller).toEqual('WidgetSettingsCtrl'); - - })); - - it('should set the controller in modal options to the default ("WidgetSettingsCtrl"), even when settingsModalOptions is supplied in widget', inject(function($rootScope) { - - scope = $rootScope.$new(); - - // options - var widgetDefinitions = [ - { - name: 'wt-one', - template: '
    {{2 + 2}}
    ' - }, - { - name: 'wt-two', - template: '{{value}}' - } - ]; - var defaultWidgets = _.clone(widgetDefinitions); - scope.dashboardOptions = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultWidgets: defaultWidgets, - sortableOptions: { - testProperty: 'foobar' - }, - settingsModalOptions: { - backdrop: false - } - }; - scope.value = 10; - - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - - // element setup - element = $compile('
    ')(scope); - scope.$digest(); - childScope = element.scope(); - - childScope.openWidgetSettings({ - settingsModalOptions: { - templateUrl: 'custom/widget/template.html' - } - }); - expect(modalOptions.controller).toEqual('WidgetSettingsCtrl'); - expect(modalOptions.backdrop).toEqual(false); - expect(modalOptions.templateUrl).toEqual('custom/widget/template.html'); - - })); - - it('should set the controller to scope.options.settingsModalOptions.controller if provided', function() { - scope.dashboardOptions.settingsModalOptions = {}; - var expected = scope.dashboardOptions.settingsModalOptions.controller = 'MyCustomCtrl'; - var widget = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.controller).toEqual(expected); - }); - - it('should set the controller to widget.settingsModalOptions.controller if provided', function() { - var expected; - var widget = { - settingsModalOptions: { - controller: expected = 'MyWidgetCtrl' - } - }; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.controller).toEqual(expected); - }); - - it('should pass in other modal options set in scope.options.settingsModalOptions', function() { - scope.dashboardOptions.settingsModalOptions = { - keyboard: false, - windowClass: 'my-extra-class' - }; - var widget = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.keyboard).toEqual(false); - expect(modalOptions.windowClass).toEqual('my-extra-class'); - }); - - it('should pass in other modal options set in widget.settingsModalOptions', function() { - scope.dashboardOptions.settingsModalOptions = { - keyboard: false, - windowClass: 'my-extra-class' - }; - var widget = { - settingsModalOptions: { - keyboard: true, - size: 'sm' - } - }; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - childScope.openWidgetSettings(widget); - expect(modalOptions.keyboard).toEqual(true); - expect(modalOptions.size).toEqual('sm'); - expect(modalOptions.windowClass).toEqual('my-extra-class'); - }); - - it('should emit a "widgetChanged" event on the childScope when the modal promise is called', function(done) { - var widget = {}; - var result = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - spyOn(childScope.options, 'onSettingsClose'); - childScope.openWidgetSettings(widget); - childScope.$on('widgetChanged', done); - dfr.resolve(result, widget); - childScope.$digest(); - }); - - it('should call scope.options.onSettingsClose when the modal promise is resolved by default', function() { - var widget = {}; - var result = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - spyOn(childScope.options, 'onSettingsClose'); - childScope.openWidgetSettings(widget); - dfr.resolve(result); - childScope.$digest(); - expect(scope.dashboardOptions.onSettingsClose).toHaveBeenCalledWith(result, widget, childScope); - }); - - it('should call scope.options.onSettingsDismiss when the modal promise is rejected by default', function() { - var widget = {}; - var result = {}; - var dfr = $q.defer(); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - spyOn(childScope.options, 'onSettingsDismiss'); - childScope.openWidgetSettings(widget); - dfr.reject('Testing failure'); - childScope.$digest(); - expect(scope.dashboardOptions.onSettingsDismiss).toHaveBeenCalledWith('Testing failure', childScope); - }); - - it('should call widget.onSettingsClose if provided when the modal promise is resolved', function() { - var widget = { - onSettingsClose: function(result, widget, scope) { - - } - }; - var result = {}; - var dfr = $q.defer(); - spyOn(widget, 'onSettingsClose'); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - spyOn(childScope.options, 'onSettingsClose'); - childScope.openWidgetSettings(widget); - dfr.resolve(result); - childScope.$digest(); - expect(scope.dashboardOptions.onSettingsClose).not.toHaveBeenCalled(); - expect(widget.onSettingsClose).toHaveBeenCalledWith(result, widget, childScope); - }); - - it('should call widget.onSettingsDismiss if provided when the modal promise is rejected', function() { - var widget = { - onSettingsDismiss: function(result, widget, scope) { - - } - }; - var result = {}; - var dfr = $q.defer(); - spyOn(widget, 'onSettingsDismiss'); - spyOn(mockModal, 'open').and.callFake(function(options) { - modalOptions = options; - return { - result: dfr.promise - }; - }); - spyOn(childScope.options, 'onSettingsDismiss'); - childScope.openWidgetSettings(widget); - dfr.reject('Testing failure'); - childScope.$digest(); - expect(scope.dashboardOptions.onSettingsDismiss).not.toHaveBeenCalled(); - expect(widget.onSettingsDismiss).toHaveBeenCalledWith('Testing failure', childScope); - }); - - }); - - describe('the default onSettingsClose callback', function() { - - var onSettingsClose; - - beforeEach(function() { - onSettingsClose = childScope.options.onSettingsClose; - }); - - it('should exist', function() { - expect(typeof onSettingsClose).toEqual('function'); - }); - - it('should deep extend widget with result', function() { - var result = { - title: 'andy', - style: { - 'float': 'left' - } - }; - var widget = { - title: 'scott', - style: { - width: '100px' - } - }; - onSettingsClose(result, widget, {}); - expect(widget).toEqual({ - title: 'andy', - style: { - width: '100px', - 'float': 'left' - } - }); - }); - - }); - - describe('the default onSettingsDismiss callback', function() { - - var onSettingsDismiss; - - beforeEach(function() { - onSettingsDismiss = childScope.options.onSettingsDismiss; - }); - - it('should exist', function() { - expect(typeof onSettingsDismiss).toEqual('function'); - }); - - it('should call $log.info with the reason', function() { - spyOn(mockLog, 'info'); - onSettingsDismiss('dismiss reason'); - expect(mockLog.info).toHaveBeenCalled(); - }); - - }); - -}); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html deleted file mode 100644 index f9f6f361..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModal.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js deleted file mode 100644 index 252f9df4..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/SaveChangesModalCtrl.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .controller('SaveChangesModalCtrl', ['$scope', '$uibModalInstance', 'layout', function ($scope, $uibModalInstance, layout) { - - // add layout to scope - $scope.layout = layout; - - $scope.ok = function () { - $uibModalInstance.close(); - }; - - $scope.cancel = function () { - $uibModalInstance.dismiss(); - }; - }]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html deleted file mode 100644 index 54aef297..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html +++ /dev/null @@ -1,19 +0,0 @@ - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js deleted file mode 100644 index bbf107a8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.js +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .directive('dashboardLayouts', ['LayoutStorage', '$timeout', '$uibModal', - function(LayoutStorage, $timeout, $uibModal) { - return { - scope: true, - templateUrl: function(element, attr) { - return attr.templateUrl ? attr.templateUrl : 'app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.html'; - }, - link: function(scope, element, attrs) { - - scope.options = scope.$eval(attrs.dashboardLayouts); - - var layoutStorage = new LayoutStorage(scope.options); - - scope.layouts = layoutStorage.layouts; - - scope.createNewLayout = function() { - var newLayout = { - title: 'Custom', - defaultWidgets: scope.options.defaultWidgets || [] - }; - layoutStorage.add(newLayout); - scope.makeLayoutActive(newLayout); - layoutStorage.save(); - return newLayout; - }; - - scope.removeLayout = function(layout) { - layoutStorage.remove(layout); - layoutStorage.save(); - }; - - scope.makeLayoutActive = function(layout) { - - var current = layoutStorage.getActiveLayout(); - - if (current && current.dashboard.unsavedChangeCount) { - var modalInstance = $uibModal.open({ - templateUrl: 'template/SaveChangesModal.html', - resolve: { - layout: function() { - return layout; - } - }, - controller: 'SaveChangesModalCtrl' - }); - - // Set resolve and reject callbacks for the result promise - modalInstance.result.then( - function() { - current.dashboard.saveDashboard(); - scope._makeLayoutActive(layout); - }, - function() { - scope._makeLayoutActive(layout); - } - ); - } else { - scope._makeLayoutActive(layout); - } - - }; - - scope._makeLayoutActive = function(layout) { - angular.forEach(scope.layouts, function(l) { - if (l !== layout) { - l.active = false; - } else { - l.active = true; - } - }); - layoutStorage.save(); - }; - - scope.isActive = function(layout) { - return !!layout.active; - }; - - scope.editTitle = function(layout) { - if (layout.locked) { - return; - } - - var input = element.find('input[data-layout="' + layout.id + '"]'); - layout.editingTitle = true; - - $timeout(function() { - input.focus()[0].setSelectionRange(0, 9999); - }); - }; - - // saves whatever is in the title input as the new title - scope.saveTitleEdit = function(layout) { - layout.editingTitle = false; - layoutStorage.save(); - }; - - scope.options.saveLayouts = function() { - layoutStorage.save(true); - }; - scope.options.addWidget = function() { - var layout = layoutStorage.getActiveLayout(); - if (layout) { - layout.dashboard.addWidget.apply(layout.dashboard, arguments); - } - }; - scope.options.loadWidgets = function() { - var layout = layoutStorage.getActiveLayout(); - if (layout) { - layout.dashboard.loadWidgets.apply(layout.dashboard, arguments); - } - }; - scope.options.saveDashboard = function() { - console.log("================= saveDashboard called =================") - var layout = layoutStorage.getActiveLayout(); - console.log("===================== layout ==========================="); - console.log(layout); - if (layout) { - layout.dashboard.saveDashboard.apply(layout.dashboard, arguments); - } - }; - - var sortableDefaults = { - stop: function() { - scope.options.saveLayouts(); - }, - distance: 5 - }; - scope.sortableOptions = angular.extend({}, sortableDefaults, scope.options.sortableOptions || {}); - } - }; - } - ]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js deleted file mode 100644 index 8533a211..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/dashboardLayouts/dashboardLayouts.spec.js +++ /dev/null @@ -1,392 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -describe('Directive: dashboard-layouts', function () { - - var $rootScope, element, options, childScope, DashboardState, LayoutStorage, $mockModal, $mockTimeout, toFn; - - // mock UI Sortable - beforeEach(function () { - angular.module('ui.sortable', []); - }); - - // load the directive's module - beforeEach(module('ui.dashboard', function($provide) { - $mockModal = { - open: function() {} - }; - $mockTimeout = function(fn, delay) { - toFn = fn; - }; - $provide.value('$uibModal', $mockModal); - $provide.value('$timeout', $mockTimeout); - })); - - beforeEach(inject(function ($compile, _$rootScope_, _DashboardState_, _LayoutStorage_) { - // services - $rootScope = _$rootScope_; - DashboardState = _DashboardState_; - LayoutStorage = _LayoutStorage_; - - // options - var widgetDefinitions = [ - { - name: 'wt-one', - template: '
    {{2 + 2}}
    ' - }, - { - name: 'wt-two', - template: '{{value}}' - } - ]; - var defaultWidgets = _.clone(widgetDefinitions); - $rootScope.dashboardOptions = options = { - widgetButtons: true, - widgetDefinitions: widgetDefinitions, - defaultLayouts: [ - { - title: 'first', - active: true, - defaultWidgets: defaultWidgets - }, - { - title: 'second', - active: false, - defaultWidgets: defaultWidgets - } - ], - defaultWidgets: defaultWidgets, - storage: { - setItem: function(key, val) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - } - }; - $rootScope.value = 10; - - // element setup - element = $compile('
    ')($rootScope); - $rootScope.$digest(); - childScope = element.scope(); - })); - - it('should not require storage', inject(function($compile) { - delete $rootScope.dashboardOptions.storage; - expect(function() { - var noStorageEl = $compile('
    ')($rootScope); - $rootScope.$digest(); - }).not.toThrow(); - - })); - - it('should be able to use a different dashboard-layouts template', inject(function($compile, $templateCache) { - $templateCache.put( - 'myCustomTemplate.html', - '' + - '
    ' - ); - var customElement = $compile('
    ')($rootScope); - $rootScope.$digest(); - expect(customElement.find('ul.my-custom-tabs').length).toEqual(1); - - })); - - it('should set the first dashboard to active if there is not one already active', inject(function($compile) { - options.defaultLayouts[0].active = options.defaultLayouts[1].active = false; - element = $compile('
    ')($rootScope); - $rootScope.$digest(); - childScope = element.scope(); - - var layouts = childScope.layouts; - var active; - for (var i = 0; i < layouts.length; i++) { - if (layouts[i].active) { - active = layouts[i]; - break; - } - }; - expect(active).not.toBeUndefined(); - })); - - describe('the createNewLayout method', function() { - - it('should call the add and save methods of LayoutStorage', function() { - spyOn(LayoutStorage.prototype, 'add'); - spyOn(LayoutStorage.prototype, 'save'); - - childScope.createNewLayout(); - expect(LayoutStorage.prototype.add).toHaveBeenCalled(); - expect(LayoutStorage.prototype.save).toHaveBeenCalled(); - }); - - it('should return the newly created layout object', function() { - var result = childScope.createNewLayout(); - expect(typeof result).toEqual('object'); - }); - - it('should set active=true on the newly created layout', function() { - var result = childScope.createNewLayout(); - expect(result.active).toEqual(true); - }); - - it('should set defaultWidgets to dashboardOptions.defaultWidgets if it is present', function() { - var result = childScope.createNewLayout(); - expect(result.defaultWidgets === options.defaultWidgets).toEqual(true); - }); - - it('should set defaultWidgets to an empty array if dashboardOptions.defaultWidgets is not present', inject(function($compile) { - delete options.defaultWidgets; - element = $compile('
    ')($rootScope); - $rootScope.$digest(); - childScope = element.scope(); - var result = childScope.createNewLayout(); - expect(result.defaultWidgets).toEqual([]); - })); - - }); - - describe('the removeLayout method', function() { - - it('should call the remove and save methods of LayoutStorage', function() { - spyOn(LayoutStorage.prototype, 'remove'); - spyOn(LayoutStorage.prototype, 'save'); - - childScope.removeLayout(childScope.layouts[0]); - expect(LayoutStorage.prototype.remove).toHaveBeenCalled(); - expect(LayoutStorage.prototype.save).toHaveBeenCalled(); - }); - - it('should call remove with the layout it was passed', function() { - spyOn(LayoutStorage.prototype, 'remove'); - var layout = childScope.layouts[0]; - childScope.removeLayout(layout); - expect(LayoutStorage.prototype.remove.calls.argsFor(0)[0]).toEqual(layout); - }); - - }); - - describe('the makeLayoutActive method', function() { - - it('should call _makeLayoutActive if there is not a currently active dashboard with unsaved changes', function() { - spyOn(childScope, '_makeLayoutActive'); - var layout = childScope.layouts[1]; - childScope.makeLayoutActive(layout); - expect(childScope._makeLayoutActive).toHaveBeenCalled(); - }); - - describe('when there are unsaved changes on the current dashboard', function() { - - var current, options, successCb, errorCb, layout; - - beforeEach(function() { - current = childScope.layouts[0]; - current.dashboard.unsavedChangeCount = 1; - - spyOn($mockModal, 'open').and.callFake(function(arg) { - options = arg; - return { - result: { - then: function(success, error) { - successCb = success; - errorCb = error; - } - } - } - }); - - layout = childScope.layouts[1]; - childScope.makeLayoutActive(layout); - }); - - it('should create a modal', function() { - expect($mockModal.open).toHaveBeenCalled(); - }); - - it('should resolve layout to the layout to be made active', function() { - expect(options.resolve.layout()).toEqual(layout); - }); - - it('should provide a success callback that saves the current dashboard and then calls _makeLayoutActive', function() { - spyOn(current.dashboard, 'saveDashboard'); - spyOn(childScope, '_makeLayoutActive'); - successCb(); - expect(current.dashboard.saveDashboard).toHaveBeenCalled(); - expect(childScope._makeLayoutActive).toHaveBeenCalled(); - expect(childScope._makeLayoutActive.calls.argsFor(0)[0]).toEqual(layout); - }); - - it('should provide an error callback that only calls _makeLayoutActive', function() { - spyOn(current.dashboard, 'saveDashboard'); - spyOn(childScope, '_makeLayoutActive'); - errorCb(); - expect(current.dashboard.saveDashboard).not.toHaveBeenCalled(); - expect(childScope._makeLayoutActive).toHaveBeenCalled(); - expect(childScope._makeLayoutActive.calls.argsFor(0)[0]).toEqual(layout); - }); - - }); - - }); - - describe('the editTitle method', function() { - - it('should set the editingTitle attribute to true on the layout it is passed', function() { - var layout = { id: '1' }; - childScope.editTitle(layout); - $rootScope.$digest(); - expect(layout.editingTitle).toEqual(true); - toFn(); - }); - - }); - - describe('the saveTitleEdit method', function() { - - it('should set editingTitle to false', function() { - var layout = { id: '1' }; - childScope.saveTitleEdit(layout); - expect(layout.editingTitle).toEqual(false); - }); - - it('should call layoutStorage.save', function() { - var layout = { id: '1' }; - spyOn(LayoutStorage.prototype, 'save').and.callThrough(); - childScope.saveTitleEdit(layout); - expect(LayoutStorage.prototype.save).toHaveBeenCalled(); - }); - - }); - - describe('the saveLayouts method', function() { - - it('should call LayoutStorage.save', function() { - spyOn(LayoutStorage.prototype, 'save').and.callThrough(); - $rootScope.dashboardOptions.saveLayouts(); - expect(LayoutStorage.prototype.save).toHaveBeenCalled(); - }); - - it('should call LayoutStorage.save with true as the first arg', function() { - spyOn(LayoutStorage.prototype, 'save').and.callThrough(); - $rootScope.dashboardOptions.saveLayouts(); - expect(LayoutStorage.prototype.save.calls.argsFor(0)[0]).toEqual(true); - }); - - }); - describe('the proxy methods to active layout', function() { - - var mockDash, galSpy; - - beforeEach(function() { - mockDash = { - active: true, - dashboard: { - addWidget: function() {}, - loadWidgets: function() {}, - saveDashboard: function() {} - } - }; - spyOn(mockDash.dashboard, 'addWidget'); - spyOn(mockDash.dashboard, 'loadWidgets'); - spyOn(mockDash.dashboard, 'saveDashboard'); - galSpy = spyOn(LayoutStorage.prototype, 'getActiveLayout').and; - galSpy.returnValue(mockDash); - }); - - describe('the addWidget method', function() { - - it('should call dashboard.addWidget method of the active layout', function() { - options.addWidget(1,2,3); - expect(mockDash.dashboard.addWidget).toHaveBeenCalled(); - var firstCall = mockDash.dashboard.addWidget.calls.first(); - expect(firstCall.object).toEqual(mockDash.dashboard); - expect(firstCall.args).toEqual([1,2,3]); - }); - - it('should do nothing if there is no active layout', function() { - galSpy.returnValue(null); - expect(function() { - options.addWidget(); - }).not.toThrow(); - }); - - }); - - describe('the loadWidgets method', function() { - - it('should call dashboard.loadWidgets of the current layout', function() { - options.loadWidgets(1,2,3); - expect(mockDash.dashboard.loadWidgets).toHaveBeenCalled(); - var firstCall = mockDash.dashboard.loadWidgets.calls.first(); - expect(firstCall.object).toEqual(mockDash.dashboard); - expect(firstCall.args).toEqual([1,2,3]); - }); - - it('should do nothing if there is no active layout', function() { - galSpy.returnValue(null); - expect(function() { - options.loadWidgets(); - }).not.toThrow(); - }); - - }); - - describe('the saveDashboard method', function() { - - it('should call dashboard.saveDashboard of the current layout', function() { - options.saveDashboard(1,2,3); - expect(mockDash.dashboard.saveDashboard).toHaveBeenCalled(); - var firstCall = mockDash.dashboard.saveDashboard.calls.first(); - expect(firstCall.object).toEqual(mockDash.dashboard); - expect(firstCall.args).toEqual([1,2,3]); - }); - - it('should do nothing if there is no active layout', function() { - galSpy.returnValue(null); - expect(function() { - options.saveDashboard(); - }).not.toThrow(); - }); - - }); - - }); - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js deleted file mode 100644 index 9ac57b19..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.js +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .controller('DashboardWidgetCtrl', ['$scope', '$element', '$compile', '$window', '$timeout', - function($scope, $element, $compile, $window, $timeout) { - - $scope.status = { - isopen: false - }; - - // Fills "container" with compiled view - $scope.makeTemplateString = function() { - - var widget = $scope.widget; - - // First, build template string - var templateString = ''; - - if (widget.templateUrl) { - - // Use ng-include for templateUrl - templateString = '
    '; - - } else if (widget.template) { - - // Direct string template - templateString = widget.template; - - } else { - - // Assume attribute directive - templateString = '
    '); - widgetElm.append($marquee); - // create an overlaying div to block other widgets in order to stop their iframe events from being triggered - var $marquee2 = angular.element('
    '); - widgetElm.append($marquee2); - - // determine the unit/pixel ratio - var transformMultiplier = unitWidth / pixelWidth; - - // updates marquee with preview of new width - var mousemove = function(e) { - var curX = e.clientX; -// console.log(curX); -// console.log(e); - var pixelChange = curX - initX; - var newWidth = pixelWidth + pixelChange; - $marquee.css('width', newWidth + 'px'); - $marquee2.css('width', (newWidth + 200) + 'px'); - - }; - - // sets new widget width on mouseup - var mouseup = function(e) { - // remove listener and marquee - jQuery($window).off('mousemove', mousemove); - $marquee.remove(); - $marquee2.remove(); - - // calculate change in units - var curX = e.clientX; - var pixelChange = curX - initX; - var unitChange = Math.round(pixelChange * transformMultiplier * 100) / 100; - - // add to initial unit width - var newWidth = unitWidth * 1 + unitChange; - widget.setWidth(newWidth, widthUnits); - $scope.$emit('widgetChanged', widget); - $scope.$apply(); - $scope.$broadcast('widgetResized', { - width: newWidth - }); - }; - -// jQuery($window).on('mousemove', mousemove).one('mouseup', mouseup); - jQuery($window).on('mousemove', mousemove).one('mouseup', mouseup); - }; - - //TODO refactor - $scope.grabSouthResizer = function(e) { - var widgetElm = $element.find('.widget'); - - // ignore middle- and right-click - if (e.which !== 1) { - return; - } - - e.stopPropagation(); - e.originalEvent.preventDefault(); - - // get the starting horizontal position - var initY = e.clientY; - // console.log('initX', initX); - - // Get the current width of the widget and dashboard - var pixelWidth = widgetElm.width(); - var pixelHeight = widgetElm.height(); - - // create marquee element for resize action - var $marquee = angular.element('
    '); - widgetElm.append($marquee); - - // updates marquee with preview of new height - var mousemove = function(e) { - var curY = e.clientY; - var pixelChange = curY - initY; - var newHeight = pixelHeight + pixelChange; - $marquee.css('height', newHeight + 'px'); - }; - - // sets new widget width on mouseup - var mouseup = function(e) { - // remove listener and marquee - jQuery($window).off('mousemove', mousemove); - $marquee.remove(); - - // calculate height change - var curY = e.clientY; - var pixelChange = curY - initY; - - //var widgetContainer = widgetElm.parent(); // widget container responsible for holding widget width and height - var widgetContainer = widgetElm.find('.widget-content'); - - var diff = pixelChange; - var height = parseInt(widgetContainer.css('height'), 10); - var newHeight = (height + diff); - - //$scope.widget.style.height = newHeight + 'px'; - - $scope.widget.setHeight(newHeight + 'px'); - - $scope.$emit('widgetChanged', $scope.widget); - $scope.$apply(); // make AngularJS to apply style changes - - $scope.$broadcast('widgetResized', { - height: newHeight - }); - }; - - jQuery($window).on('mousemove', mousemove).one('mouseup', mouseup); - }; - - // replaces widget title with input - $scope.editTitle = function(widget) { - var widgetElm = $element.find('.widget'); - widget.editingTitle = true; - // HACK: get the input to focus after being displayed. - $timeout(function() { - widgetElm.find('form.widget-title input:eq(0)').focus()[0].setSelectionRange(0, 9999); - }); - }; - - // saves whatever is in the title input as the new title - $scope.saveTitleEdit = function(widget) { - widget.editingTitle = false; - $scope.$emit('widgetChanged', widget); - }; - - $scope.compileTemplate = function() { - var container = $scope.findWidgetContainer($element); - var templateString = $scope.makeTemplateString(); - var widgetElement = angular.element(templateString); - - container.empty(); - container.append(widgetElement); - $compile(widgetElement)($scope); - }; - - $scope.findWidgetContainer = function(element) { - // widget placeholder is the first (and only) child of .widget-content - return element.find('.widget-content'); - }; - } - ]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js deleted file mode 100644 index 55604646..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/DashboardWidgetCtrl.spec.js +++ /dev/null @@ -1,164 +0,0 @@ -'use strict'; - -describe('Controller: DashboardWidgetCtrl', function() { - - var $scope, $element, $timeout, injections; - - beforeEach(module('ui.dashboard')); - - beforeEach(inject(function($rootScope, $controller){ - $scope = $rootScope.$new(); - $element = angular.element('
    '); - $timeout = function timeout(fn) { - fn(); - }; - injections = { - $scope: $scope, - $element: $element, - $timeout: $timeout - }; - spyOn(injections, '$timeout'); - $controller('DashboardWidgetCtrl', injections); - })); - - describe('the makeTemplateString method', function() { - - it('should return a string', function() { - $scope.widget = { - templateUrl: 'some/template.html' - }; - expect(typeof $scope.makeTemplateString()).toEqual('string'); - }); - - it('should use ng-include if templateUrl is specified on widget, despite any other options', function() { - $scope.widget = { - templateUrl: 'some/template.html', - template: 'not this one', - directive: 'or-this', - attrs: { - something: 'awesome', - other: 'thing' - } - }; - expect($scope.makeTemplateString()).toMatch(/ng-include="'some\/template\.html'"/); - }); - - it('should return widget.template if specified, regardless of presence of directive or attrs', function() { - $scope.widget = { - template: '
    ', - directive: 'no-good' - }; - expect($scope.makeTemplateString()).toEqual($scope.widget.template); - }); - - it('should use widget.directive as attribute directive', function() { - $scope.widget = { - directive: 'ng-awesome' - }; - expect($scope.makeTemplateString()).toEqual('
    '); - }); - - it('should attach attributes if provided', function() { - $scope.widget = { - directive: 'ng-awesome', - attrs: { - 'ng-awesome': 'test1', - other: 'attr', - more: 'stuff' - } - }; - expect($scope.makeTemplateString()).toEqual('
    '); - }); - - it('should place widgetData into dataAttrName attribute if specified', function() { - $scope.widget = { - directive: 'ng-awesome', - attrs: { - 'ng-awesome': 'test1', - other: 'attr', - more: 'stuff' - }, - dataAttrName: 'data' - }; - expect($scope.makeTemplateString()).toEqual('
    '); - }); - - it('should add attrs to the widget object if it does not exist and dataAttrName is specified', function() { - $scope.widget = { - directive: 'ng-awesome', - dataAttrName: 'data' - }; - expect($scope.makeTemplateString()).toEqual('
    '); - }); - - }); - - describe('the grabResizer method', function() { - - var evt, widget, WidgetModel; - - beforeEach(inject(function (_WidgetModel_) { - WidgetModel = _WidgetModel_; - })); - - beforeEach(function() { - evt = { - stopPropagation: jasmine.createSpy('stopPropagation'), - originalEvent: { - preventDefault: jasmine.createSpy('preventDefault') - }, - clientX: 100, - which: 1 - }; - $scope.widget = widget = new WidgetModel({ - style: { - width: '30%' - } - }); - }); - - it('should do nothing if event.which is not 1 (left click)', function() { - evt.which = 2; - $scope.grabResizer(evt); - expect(evt.stopPropagation).not.toHaveBeenCalled(); - }); - - it('should call stopPropagation and preventDefault', function() { - $scope.grabResizer(evt); - expect(evt.stopPropagation).toHaveBeenCalled(); - expect(evt.originalEvent.preventDefault).toHaveBeenCalled(); - }); - - it('should add a .widget-resizer-marquee element to the .widget element', function() { - $scope.grabResizer(evt); - expect($element.find('.widget-resizer-marquee').length).toBeGreaterThan(0); - }); - - }); - - describe('the editTitle method', function() { - - it('should set editingTitle=true on the widget object', function() { - var widget = {}; - $scope.editTitle(widget); - expect(widget.editingTitle).toEqual(true); - }); - - it('should call $timeout', function() { - var widget = {}; - $scope.editTitle(widget); - expect(injections.$timeout).toHaveBeenCalled(); - }); - - }); - - describe('the saveTitleEdit method', function() { - - it('should set editingTitle=false', function() { - var widget = { editingTitle: true }; - $scope.saveTitleEdit(widget); - expect(widget.editingTitle).toEqual(false); - }); - }); - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js deleted file mode 100644 index f5a6ebef..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .directive('widget', ['$injector', function ($injector) { - - return { - - controller: 'DashboardWidgetCtrl', - - link: function (scope) { - - var widget = scope.widget; - var dataModelType = widget.dataModelType; - - // set up data source - if (dataModelType) { - var DataModelConstructor; // data model constructor function - - if (angular.isFunction(dataModelType)) { - DataModelConstructor = dataModelType; - } else if (angular.isString(dataModelType)) { - $injector.invoke([dataModelType, function (DataModelType) { - DataModelConstructor = DataModelType; - }]); - } else { - throw new Error('widget dataModelType should be function or string'); - } - - var ds; - if (widget.dataModelArgs) { - ds = new DataModelConstructor(widget.dataModelArgs); - } else { - ds = new DataModelConstructor(); - } - widget.dataModel = ds; - ds.setup(widget, scope); - ds.init(); - scope.$on('$destroy', _.bind(ds.destroy,ds)); - } - - // Compile the widget template, emit add event - scope.compileTemplate(); - scope.$emit('widgetAdded', widget); - - } - - }; - }]); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js deleted file mode 100644 index 0997e071..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js +++ /dev/null @@ -1,104 +0,0 @@ -// 'use strict'; - -describe('Directive: widget', function () { - - var element, scope, rootScope, isoScope, compile, provide; - - function Type() { - } - - Type.prototype = { - setup: function () { - }, - init: function () { - }, - destroy: function () { - } - }; - - beforeEach(function () { - spyOn(Type.prototype, 'setup'); - spyOn(Type.prototype, 'init'); - spyOn(Type.prototype, 'destroy'); - // define mock objects here - }); - - // load the directive's module - beforeEach(module('ui.dashboard', function ($provide, $controllerProvider) { - provide = $provide; - // Inject dependencies like this: - $controllerProvider.register('DashboardWidgetCtrl', function ($scope) { - - }); - - })); - - beforeEach(inject(function ($compile, $rootScope) { - // Cache these for reuse - rootScope = $rootScope; - compile = $compile; - - // Other setup, e.g. helper functions, etc. - - // Set up the outer scope - scope = $rootScope.$new(); - scope.widget = { - dataModelType: Type - }; - - compileTemplate = jasmine.createSpy('compileTemplate'); - scope.compileTemplate = compileTemplate; - })); - - function compileWidget() { - // Define and compile the element - element = angular.element('
    '); - element = compile(element)(scope); - scope.$digest(); - isoScope = element.isolateScope(); - } - - it('should create a new instance of dataModelType if provided in scope.widget', function () { - compileWidget(); - expect(scope.widget.dataModel instanceof Type).toBe(true); - }); - - it('should call setup and init on the new dataModel', function () { - compileWidget(); - expect(Type.prototype.setup).toHaveBeenCalled(); - expect(Type.prototype.init).toHaveBeenCalled(); - }); - - it('should call compile template', function () { - compileWidget(); - expect(scope.compileTemplate).toHaveBeenCalled(); - }); - - it('should create a new instance of dataModelType from string name', function () { - // register data model with $injector - provide.factory('StringNameDataModel', function () { - return Type; - }); - - scope.widget = { - dataModelType: 'StringNameDataModel' - }; - - compileWidget(); - - expect(scope.widget.dataModel instanceof Type).toBe(true); - expect(Type.prototype.setup).toHaveBeenCalled(); - expect(Type.prototype.init).toHaveBeenCalled(); - }); - - it('should validate data model type', function () { - scope.widget = { - dataModelType: {} - }; - - expect(function () { - compileWidget() - }).toThrowError(); - }); - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js deleted file mode 100644 index 67948ead..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/DashboardState.js +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .factory('DashboardState', ['$log', '$q', function ($log, $q) { - function DashboardState(storage, id, hash, widgetDefinitions, stringify) { - this.storage = storage; - this.id = id; - this.hash = hash; - this.widgetDefinitions = widgetDefinitions; - this.stringify = stringify; - } - - DashboardState.prototype = { - /** - * Takes array of widget instance objects, serializes, - * and saves state. - * - * @param {Array} widgets scope.widgets from dashboard directive - * @return {Boolean} true on success, false on failure - */ - save: function (widgets) { - - if (!this.storage) { - return true; - } - - var serialized = _.map(widgets, function (widget) { - return widget.serialize(); - }); - - var item = { widgets: serialized, hash: this.hash }; - - if (this.stringify) { - item = JSON.stringify(item); - } - - this.storage.setItem(this.id, item); - return true; - }, - - /** - * Loads dashboard state from the storage object. - * Can handle a synchronous response or a promise. - * - * @return {Array|Promise} Array of widget definitions or a promise - */ - load: function () { - - if (!this.storage) { - return null; - } - - var serialized; - - // try loading storage item - serialized = this.storage.getItem( this.id ); - - if (serialized) { - // check for promise - if (angular.isObject(serialized) && angular.isFunction(serialized.then)) { - return this._handleAsyncLoad(serialized); - } - // otherwise handle synchronous load - return this._handleSyncLoad(serialized); - } else { - return null; - } - }, - - _handleSyncLoad: function(serialized) { - - var deserialized, result = []; - - if (!serialized) { - return null; - } - - if (this.stringify) { - try { // to deserialize the string - - deserialized = JSON.parse(serialized); - - } catch (e) { - - // bad JSON, log a warning and return - $log.warn('Serialized dashboard state was malformed and could not be parsed: ', serialized); - return null; - - } - } - else { - deserialized = serialized; - } - - // check hash against current hash - if (deserialized.hash !== this.hash) { - - $log.info('Serialized dashboard from storage was stale (old hash: ' + deserialized.hash + ', new hash: ' + this.hash + ')'); - this.storage.removeItem(this.id); - return null; - - } - - // Cache widgets - var savedWidgetDefs = deserialized.widgets; - - // instantiate widgets from stored data - for (var i = 0; i < savedWidgetDefs.length; i++) { - - // deserialized object - var savedWidgetDef = savedWidgetDefs[i]; - - // widget definition to use - var widgetDefinition = this.widgetDefinitions.getByName(savedWidgetDef.name); - - // check for no widget - if (!widgetDefinition) { - // no widget definition found, remove and return false - $log.warn('Widget with name "' + savedWidgetDef.name + '" was not found in given widget definition objects'); - continue; - } - - // check widget-specific storageHash - if (widgetDefinition.hasOwnProperty('storageHash') && widgetDefinition.storageHash !== savedWidgetDef.storageHash) { - // widget definition was found, but storageHash was stale, removing storage - $log.info('Widget Definition Object with name "' + savedWidgetDef.name + '" was found ' + - 'but the storageHash property on the widget definition is different from that on the ' + - 'serialized widget loaded from storage. hash from storage: "' + savedWidgetDef.storageHash + '"' + - ', hash from WDO: "' + widgetDefinition.storageHash + '"'); - continue; - } - - // push instantiated widget to result array - result.push(savedWidgetDef); - } - - return result; - }, - - _handleAsyncLoad: function(promise) { - var self = this; - var deferred = $q.defer(); - promise.then( - // success - function(res) { - var result = self._handleSyncLoad(res); - if (result) { - deferred.resolve(result); - } else { - deferred.reject(result); - } - }, - // failure - function(res) { - deferred.reject(res); - } - ); - - return deferred.promise; - } - - }; - return DashboardState; - }]); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js deleted file mode 100644 index 3685fd3f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.js +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .factory('LayoutStorage', function() { - - var noopStorage = { - setItem: function() { - - }, - getItem: function() { - - }, - removeItem: function() { - - } - }; - - - - function LayoutStorage(options) { - - var defaults = { - storage: noopStorage, - storageHash: '', - stringifyStorage: true - }; - - angular.extend(defaults, options); - angular.extend(options, defaults); - - this.id = options.storageId; - this.storage = options.storage; - this.storageHash = options.storageHash; - this.stringifyStorage = options.stringifyStorage; - this.widgetDefinitions = options.widgetDefinitions; - this.defaultLayouts = options.defaultLayouts; - this.lockDefaultLayouts = options.lockDefaultLayouts; - this.widgetButtons = options.widgetButtons; - this.explicitSave = options.explicitSave; - this.defaultWidgets = options.defaultWidgets; - this.settingsModalOptions = options.settingsModalOptions; - this.onSettingsClose = options.onSettingsClose; - this.onSettingsDismiss = options.onSettingsDismiss; - this.options = options; - this.options.unsavedChangeCount = 0; - - this.layouts = []; - this.states = {}; - this.load(); - this._ensureActiveLayout(); - } - - LayoutStorage.prototype = { - - add: function(layouts) { - if (!angular.isArray(layouts)) { - layouts = [layouts]; - } - var self = this; - angular.forEach(layouts, function(layout) { - layout.dashboard = layout.dashboard || {}; - layout.dashboard.storage = self; - layout.dashboard.storageId = layout.id = self._getLayoutId.call(self,layout); - layout.dashboard.widgetDefinitions = layout.widgetDefinitions || self.widgetDefinitions; - layout.dashboard.stringifyStorage = false; - layout.dashboard.defaultWidgets = layout.defaultWidgets || self.defaultWidgets; - layout.dashboard.widgetButtons = self.widgetButtons; - layout.dashboard.explicitSave = self.explicitSave; - layout.dashboard.settingsModalOptions = self.settingsModalOptions; - layout.dashboard.onSettingsClose = self.onSettingsClose; - layout.dashboard.onSettingsDismiss = self.onSettingsDismiss; - self.layouts.push(layout); - }); - }, - - remove: function(layout) { - var index = this.layouts.indexOf(layout); - if (index >= 0) { - this.layouts.splice(index, 1); - delete this.states[layout.id]; - - // check for active - if (layout.active && this.layouts.length) { - var nextActive = index > 0 ? index - 1 : 0; - this.layouts[nextActive].active = true; - } - } - }, - - save: function() { - - var state = { - layouts: this._serializeLayouts(), - states: this.states, - storageHash: this.storageHash - }; - - if (this.stringifyStorage) { - state = JSON.stringify(state); - } - - this.storage.setItem(this.id, state); - this.options.unsavedChangeCount = 0; - }, - - load: function() { - - var serialized = this.storage.getItem(this.id); - - this.clear(); - - if (serialized) { - // check for promise - if (angular.isObject(serialized) && angular.isFunction(serialized.then)) { - this._handleAsyncLoad(serialized); - } else { - this._handleSyncLoad(serialized); - } - } else { - this._addDefaultLayouts(); - } - }, - - clear: function() { - this.layouts = []; - this.states = {}; - }, - - setItem: function(id, value) { - this.states[id] = value; - this.save(); - }, - - getItem: function(id) { - return this.states[id]; - }, - - removeItem: function(id) { - delete this.states[id]; - this.save(); - }, - - getActiveLayout: function() { - var len = this.layouts.length; - for (var i = 0; i < len; i++) { - var layout = this.layouts[i]; - if (layout.active) { - return layout; - } - } - return false; - }, - - _addDefaultLayouts: function() { - var self = this; - var defaults = this.lockDefaultLayouts ? { locked: true } : {}; - angular.forEach(this.defaultLayouts, function(layout) { - self.add(angular.extend(_.clone(defaults), layout)); - }); - }, - - _serializeLayouts: function() { - var result = []; - angular.forEach(this.layouts, function(l) { - result.push({ - title: l.title, - id: l.id, - active: l.active, - locked: l.locked, - defaultWidgets: l.dashboard.defaultWidgets - }); - }); - return result; - }, - - _handleSyncLoad: function(serialized) { - - var deserialized; - - if (this.stringifyStorage) { - try { - - deserialized = JSON.parse(serialized); - - } catch (e) { - this._addDefaultLayouts(); - return; - } - } else { - - deserialized = serialized; - - } - - if (this.storageHash !== deserialized.storageHash) { - this._addDefaultLayouts(); - return; - } - this.states = deserialized.states; - this.add(deserialized.layouts); - }, - - _handleAsyncLoad: function(promise) { - var self = this; - promise.then( - angular.bind(self, this._handleSyncLoad), - angular.bind(self, this._addDefaultLayouts) - ); - }, - - _ensureActiveLayout: function() { - for (var i = 0; i < this.layouts.length; i++) { - var layout = this.layouts[i]; - if (layout.active) { - return; - } - } - if (this.layouts[0]) { - this.layouts[0].active = true; - } - }, - - _getLayoutId: function(layout) { - if (layout.id) { - return layout.id; - } - var max = 0; - for (var i = 0; i < this.layouts.length; i++) { - var id = this.layouts[i].id; - max = Math.max(max, id * 1); - } - return max + 1; - } - - }; - return LayoutStorage; - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js deleted file mode 100644 index 3310cad9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/LayoutStorage.spec.js +++ /dev/null @@ -1,692 +0,0 @@ -'use strict'; - -describe('Factory: LayoutStorage', function () { - - // mock UI Sortable - beforeEach(function () { - angular.module('ui.sortable', []); - }); - - // load the service's module - beforeEach(module('ui.dashboard')); - - // instantiate service - var LayoutStorage; - beforeEach(inject(function (_LayoutStorage_) { - LayoutStorage = _LayoutStorage_; - })); - - describe('the constructor', function() { - - var storage, options; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'something'}, - {title: 'something'}, - {title: 'something'} - ], - widgetButtons: false, - explicitSave: false, - settingsModalOptions: {}, - onSettingsClose: function() { - - }, - onSettingsDismiss: function() { - - } - }; - storage = new LayoutStorage(options); - }); - - it('should provide an empty implementation of storage if it is not provided', function() { - delete options.storage; - var stateless = new LayoutStorage(options); - var noop = stateless.storage; - angular.forEach(['setItem', 'getItem', 'removeItem'], function(method) { - expect(typeof noop[method]).toEqual('function'); - expect(noop[method]).not.toThrow(); - noop[method](); - }); - }); - - it('should set a subset of the options directly on the LayoutStorage instance itself', function() { - var properties = { - id: 'storageId', - storage: 'storage', - storageHash: 'storageHash', - stringifyStorage: 'stringifyStorage', - widgetDefinitions: 'widgetDefinitions', - defaultLayouts: 'defaultLayouts', - widgetButtons: 'widgetButtons', - explicitSave: 'explicitSave', - settingsModalOptions: 'settingsModalOptions', - onSettingsClose: 'onSettingsClose', - onSettingsDismiss: 'onSettingsDismiss' - }; - - angular.forEach(properties, function(val, key) { - expect( storage[key] ).toEqual( options[val] ); - }); - - }); - - it('should set stringify as true by default', function() { - delete options.stringifyStorage; - storage = new LayoutStorage(options); - expect(storage.stringifyStorage).toEqual(true); - }); - - it('should allow stringify to be overridden by option', function() { - options.stringifyStorage = false; - storage = new LayoutStorage(options); - expect(storage.stringifyStorage).toEqual(false); - }); - - it('should create a layouts array and states object', function() { - expect(storage.layouts instanceof Array).toEqual(true); - expect(typeof storage.states).toEqual('object'); - }); - - it('should call load', function() { - spyOn(LayoutStorage.prototype, 'load'); - storage = new LayoutStorage(options); - expect(LayoutStorage.prototype.load).toHaveBeenCalled(); - }); - - }); - - describe('the load method', function() { - - var options, storage; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'something'}, - {title: 'something'}, - {title: 'something'} - ], - widgetButtons: false, - explicitSave: false - } - storage = new LayoutStorage(options); - }); - - it('should use the default layouts if no stored info was found', function() { - expect(storage.layouts.length).toEqual(options.defaultLayouts.length); - }); - - it('should clone default layouts rather than use them directly', function() { - expect(storage.layouts.indexOf(options.defaultLayouts[0])).toEqual(-1); - }); - - it('should use the result from getItem for layouts.', function() { - spyOn(options.storage, 'getItem').and.returnValue(JSON.stringify({ - storageHash: 'ds5f9d1f', - layouts: [ - { id: 0, title: 'title', defaultWidgets: [], active: true }, - { id: 1, title: 'title2', defaultWidgets: [], active: false }, - { id: 2, title: 'title3', defaultWidgets: [], active: false }, - { id: 3, title: 'custom', defaultWidgets: [], active: false } - ], - states: { - 0: {}, - 1: {}, - 2: {} - } - })); - storage.load(); - expect(storage.layouts.map(function(l) {return l.title})).toEqual(['title', 'title2', 'title3', 'custom']); - }); - - it('should NOT use result from getItem for layouts if the storageHash doesnt match', function() { - spyOn(options.storage, 'getItem').and.returnValue(JSON.stringify({ - storageHash: 'alskdjf02iej', - layouts: [ - { id: 0, title: 'title', defaultWidgets: [], active: true }, - { id: 1, title: 'title2', defaultWidgets: [], active: false }, - { id: 2, title: 'title3', defaultWidgets: [], active: false }, - { id: 3, title: 'custom', defaultWidgets: [], active: false } - ], - states: { - 0: {}, - 1: {}, - 2: {} - } - })); - storage.load(); - expect(storage.layouts.map(function(l) {return l.title})).toEqual(['something', 'something', 'something']); - }); - - it('should be able to handle async loading via promise', inject(function($rootScope,$q) { - var deferred = $q.defer(); - spyOn(options.storage, 'getItem').and.returnValue(deferred.promise); - storage.load(); - expect(storage.layouts).toEqual([]); - deferred.resolve(JSON.stringify({ - storageHash: 'ds5f9d1f', - layouts: [ - { id: 0, title: 'title', defaultWidgets: [], active: true }, - { id: 1, title: 'title2', defaultWidgets: [], active: false }, - { id: 2, title: 'title3', defaultWidgets: [], active: false }, - { id: 3, title: 'custom', defaultWidgets: [], active: false } - ], - states: { - 0: {}, - 1: {}, - 2: {} - } - })); - $rootScope.$apply(); - expect(storage.layouts.map(function(l) {return l.title})).toEqual(['title', 'title2', 'title3', 'custom']); - })); - - it('should load defaults if the deferred is rejected', inject(function($rootScope,$q) { - var deferred = $q.defer(); - spyOn(options.storage, 'getItem').and.returnValue(deferred.promise); - storage.load(); - deferred.reject(); - $rootScope.$apply(); - expect(storage.layouts.map(function(l) {return l.title})).toEqual(['something', 'something', 'something']); - })); - - it('should load defaults if the json is malformed', inject(function($rootScope,$q) { - var deferred = $q.defer(); - spyOn(options.storage, 'getItem').and.returnValue(deferred.promise); - storage.load(); - expect(storage.layouts).toEqual([]); - deferred.resolve(JSON.stringify({ - storageHash: 'ds5f9d1f', - layouts: [ - { id: 0, title: 'title', defaultWidgets: [], active: true }, - { id: 1, title: 'title2', defaultWidgets: [], active: false }, - { id: 2, title: 'title3', defaultWidgets: [], active: false }, - { id: 3, title: 'custom', defaultWidgets: [], active: false } - ], - states: { - 0: {}, - 1: {}, - 2: {} - } - }).replace('{','{{')); - $rootScope.$apply(); - expect(storage.layouts.map(function(l) {return l.title})).toEqual(['something', 'something', 'something']); - })); - - it('should not try to JSON.parse the result if stringifyStorage is false.', function() { - options.stringifyStorage = false; - storage = new LayoutStorage(options); - spyOn(options.storage, 'getItem').and.returnValue({ - storageHash: 'ds5f9d1f', - layouts: [ - { id: 0, title: 'title', defaultWidgets: [], active: true }, - { id: 1, title: 'title2', defaultWidgets: [], active: false }, - { id: 2, title: 'title3', defaultWidgets: [], active: false }, - { id: 3, title: 'custom', defaultWidgets: [], active: false } - ], - states: { - 0: {}, - 1: {}, - 2: {} - } - }); - storage.load(); - expect(storage.layouts.map(function(l) {return l.title})).toEqual(['title', 'title2', 'title3', 'custom']); - }); - - }); - - describe('the add method', function() { - - var storage, options; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [], - widgetButtons: false, - explicitSave: false - } - - spyOn(LayoutStorage.prototype, 'load' ); - - storage = new LayoutStorage(options); - - }); - - it('should add to storage.layouts', function() { - var newLayout = { title: 'my-layout' }; - storage.add(newLayout); - expect(storage.layouts[0]).toEqual(newLayout); - }); - - it('should be able to take an array of new layouts', function() { - var newLayouts = [ { title: 'my-layout' }, { title: 'my-layout-2' } ]; - storage.add(newLayouts); - expect(storage.layouts.length).toEqual(2); - expect(storage.layouts.indexOf(newLayouts[0])).not.toEqual(-1); - expect(storage.layouts.indexOf(newLayouts[1])).not.toEqual(-1); - }); - - it('should look for defaultWidgets on storage options if not supplied on layout definition', function() { - options.defaultWidgets = [{name: 'a'}, {name: 'b'}, {name: 'c'}]; - storage = new LayoutStorage(options); - - var newLayouts = [ { title: 'my-layout', defaultWidgets: [] }, { title: 'my-layout-2' } ]; - storage.add(newLayouts); - expect(newLayouts[0].dashboard.defaultWidgets === newLayouts[0].defaultWidgets).toEqual(true); - expect(newLayouts[1].dashboard.defaultWidgets === options.defaultWidgets).toEqual(true); - }); - - it('should use defaultWidgets if supplied in the layout definition', function() { - options.defaultWidgets = [{name: 'a'}, {name: 'b'}, {name: 'c'}]; - storage = new LayoutStorage(options); - - var newLayouts = [ { title: 'my-layout', defaultWidgets: [] }, { title: 'my-layout-2' } ]; - storage.add(newLayouts); - expect(newLayouts[0].dashboard.defaultWidgets).toEqual([]); - expect(newLayouts[1].dashboard.defaultWidgets).toEqual(options.defaultWidgets); - }); - - it('should look for widgetDefinitions on storage options if not supplied on layout definition', function() { - options.widgetDefinitions = [{name: 'a'}, {name: 'b'}, {name: 'c'}]; - storage = new LayoutStorage(options); - - var newLayouts = [ { title: 'my-layout', widgetDefinitions: [] }, { title: 'my-layout-2' } ]; - storage.add(newLayouts); - expect(newLayouts[0].dashboard.widgetDefinitions === newLayouts[0].widgetDefinitions).toEqual(true); - expect(newLayouts[1].dashboard.widgetDefinitions === options.widgetDefinitions).toEqual(true); - }); - - it('should use widgetDefinitions if supplied in the layout definition', function() { - options.widgetDefinitions = [{name: 'a'}, {name: 'b'}, {name: 'c'}]; - storage = new LayoutStorage(options); - - var newLayouts = [ { title: 'my-layout', widgetDefinitions: [] }, { title: 'my-layout-2' } ]; - storage.add(newLayouts); - expect(newLayouts[0].dashboard.widgetDefinitions).toEqual([]); - expect(newLayouts[1].dashboard.widgetDefinitions).toEqual(options.widgetDefinitions); - }); - - }); - - describe('the remove method', function() { - - var storage, options; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - { name: 'A' }, - { name: 'B' }, - { name: 'C' } - ], - defaultLayouts: [ - { title: '1' }, - { title: '2', active: true }, - { title: '3' } - ], - widgetButtons: false, - explicitSave: false - } - - storage = new LayoutStorage(options); - }); - - it('should remove the supplied layout', function() { - var layout = storage.layouts[1]; - storage.remove(layout); - expect(storage.layouts.indexOf(layout)).toEqual(-1); - }); - - it('should delete the state', function() { - var layout = storage.layouts[1]; - storage.setItem(layout.id, {}); - storage.remove(layout); - expect(storage.states[layout.id]).toBeUndefined(); - }); - - it('should do nothing if layout is not in layouts', function() { - var layout = {}; - var before = storage.layouts.length; - storage.remove(layout); - var after = storage.layouts.length; - expect(before).toEqual(after); - }); - - it('should set another dashboard to active if the layout removed was active', function() { - var layout = storage.layouts[1]; - storage.remove(layout); - expect(storage.layouts[0].active || storage.layouts[1].active).toEqual(true); - }); - - it('should set the layout at index 0 to active if the removed layout was 0', function() { - storage.layouts[1].active = false; - storage.layouts[0].active = true; - storage.remove(storage.layouts[0]); - expect(storage.layouts[0].active).toEqual(true); - }); - - it('should not change the active layout if it was not the one that got removed', function() { - var active = storage.layouts[1]; - var layout = storage.layouts[0]; - storage.remove(layout); - expect(active.active).toEqual(true); - }); - - }); - - describe('the save method', function() { - - var options, storage; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'something'}, - {title: 'something'}, - {title: 'something'} - ], - widgetButtons: false, - explicitSave: false - } - storage = new LayoutStorage(options); - }); - - it('should call options.storage.setItem with a stringified object', function() { - spyOn(options.storage, 'setItem' ); - storage.save(); - expect(options.storage.setItem).toHaveBeenCalled(); - expect(options.storage.setItem.calls.argsFor(0)[0]).toEqual(storage.id); - expect(typeof options.storage.setItem.calls.argsFor(0)[1]).toEqual('string'); - expect(function(){ - JSON.parse(options.storage.setItem.calls.argsFor(0)[1]); - }).not.toThrow(); - }); - - it('should save an object that has layouts, states, and storageHash', function() { - spyOn(options.storage, 'setItem' ); - storage.save(); - var obj = JSON.parse(options.storage.setItem.calls.argsFor(0)[1]); - expect(obj.hasOwnProperty('layouts')).toEqual(true); - expect(obj.layouts instanceof Array).toEqual(true); - expect(obj.hasOwnProperty('states')).toEqual(true); - expect(typeof obj.states).toEqual('object'); - expect(obj.hasOwnProperty('storageHash')).toEqual(true); - expect(typeof obj.storageHash).toEqual('string'); - }); - - it('should call options.storage.setItem with an object when stringifyStorage is false', function() { - options.stringifyStorage = false; - storage = new LayoutStorage(options); - spyOn(options.storage, 'setItem' ); - storage.save(); - expect(options.storage.setItem).toHaveBeenCalled(); - expect(options.storage.setItem.calls.argsFor(0)[0]).toEqual(storage.id); - expect(typeof options.storage.setItem.calls.argsFor(0)[1]).toEqual('object'); - }); - - }); - - describe('the setItem method', function() { - - var options, storage; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'something'}, - {title: 'something'}, - {title: 'something'} - ], - widgetButtons: false, - explicitSave: false - } - storage = new LayoutStorage(options); - }); - - it('should set storage.states[id] to the second argument', function() { - var state = { some: 'thing'}; - storage.setItem('id', state); - expect(storage.states.id).toEqual(state); - }); - - it('should call save', function() { - spyOn(storage, 'save'); - var state = { some: 'thing'}; - storage.setItem('id', state); - expect(storage.save).toHaveBeenCalled(); - }); - - }); - - describe('the getItem method', function() { - - var options, storage; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'something'}, - {title: 'something'}, - {title: 'something'} - ], - widgetButtons: false, - explicitSave: false - } - storage = new LayoutStorage(options); - }); - - it('should return states[id]', function() { - storage.states['myId'] = {}; - var result = storage.getItem('myId'); - expect(result === storage.states['myId']).toEqual(true); - }); - - }); - - describe('the getActiveLayout method', function() { - var options, storage; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'i am active', active: true}, - {title: 'i am not'}, - {title: 'me neither'} - ], - widgetButtons: false, - explicitSave: false - } - storage = new LayoutStorage(options); - }); - - it('should return the layout with active:true', function() { - var layout = storage.getActiveLayout(); - expect(layout.title).toEqual('i am active'); - }); - - it('should return false if no layout is active', function() { - var layout = storage.getActiveLayout(); - layout.active = false; - var result = storage.getActiveLayout(); - expect(result).toEqual(false); - }); - - }); - - describe('the removeItem', function() { - - var options, storage; - - beforeEach(function() { - options = { - storageId: 'testingStorage', - storage: { - setItem: function(key, value) { - - }, - getItem: function(key) { - - }, - removeItem: function(key) { - - } - }, - storageHash: 'ds5f9d1f', - stringifyStorage: true, - widgetDefinitions: [ - - ], - defaultLayouts: [ - {title: 'i am active', active: true}, - {title: 'i am not'}, - {title: 'me neither'} - ], - widgetButtons: false, - explicitSave: false - } - storage = new LayoutStorage(options); - }); - - it('should remove states[id]', function() { - var state = {}; - storage.setItem('1', state); - storage.removeItem('1'); - expect(storage.states['1']).toBeUndefined(); - }); - - it('should call save', function() { - spyOn(storage, 'save'); - var state = {}; - storage.setItem('1', state); - storage.removeItem('1'); - expect(storage.save).toHaveBeenCalled(); - }); - - }); - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js deleted file mode 100644 index 547f2e96..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDataModel.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .factory('WidgetDataModel', function () { - function WidgetDataModel() { - } - - WidgetDataModel.prototype = { - setup: function (widget, scope) { - this.dataAttrName = widget.dataAttrName; - this.dataModelOptions = widget.dataModelOptions; - this.widgetScope = scope; - }, - - updateScope: function (data) { - this.widgetScope.widgetData = data; - }, - - init: function () { - // to be overridden by subclasses - }, - - destroy: function () { - // to be overridden by subclasses - } - }; - - return WidgetDataModel; - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js deleted file mode 100644 index 27765440..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetDefCollection.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .factory('WidgetDefCollection', function () { - - function convertToDefinition(d) { - if (typeof d === 'function') { - return new d(); - } - return d; - } - - function WidgetDefCollection(widgetDefs) { - - widgetDefs = widgetDefs.map(convertToDefinition); - - this.push.apply(this, widgetDefs); - - // build (name -> widget definition) map for widget lookup by name - var map = {}; - _.each(widgetDefs, function (widgetDef) { - map[widgetDef.name] = widgetDef; - }); - this.map = map; - } - - WidgetDefCollection.prototype = Object.create(Array.prototype); - - WidgetDefCollection.prototype.getByName = function (name) { - return this.map[name]; - }; - - WidgetDefCollection.prototype.add = function(def) { - def = convertToDefinition(def); - this.push(def); - this.map[def.name] = def; - }; - - return WidgetDefCollection; - }); diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js deleted file mode 100644 index c378d3b6..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.js +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -'use strict'; - -angular.module('ui.dashboard') - .factory('WidgetModel', function ($log) { - - function defaults() { - return { - title: 'Widget', - style: {}, - size: {}, - enableVerticalResize: true, - containerStyle: { width: '33%' }, // default width - contentStyle: {} - }; - }; - - // constructor for widget model instances - function WidgetModel(widgetDefinition, overrides) { - - // Extend this with the widget definition object with overrides merged in (deep extended). - angular.extend(this, defaults(), _.merge(angular.copy(widgetDefinition), overrides)); - - this.updateContainerStyle(this.style); - - if (!this.templateUrl && !this.template && !this.directive) { - this.directive = widgetDefinition.name; - } - - if (this.size && _.has(this.size, 'height')) { - this.setHeight(this.size.height); - } - - if (this.style && _.has(this.style, 'width')) { //TODO deprecate style attribute - this.setWidth(this.style.width); - } - - if (this.size && _.has(this.size, 'width')) { - this.setWidth(this.size.width); - } - } - - WidgetModel.prototype = { - // sets the width (and widthUnits) - setWidth: function (width, units) { - width = width.toString(); - units = units || width.replace(/^[-\.\d]+/, '') || '%'; - - this.widthUnits = units; - width = parseFloat(width); - - // check with min width if set, unit refer to width's unit - if (this.size && _.has(this.size, 'minWidth')) { - width = _.max([parseFloat(this.size.minWidth), width]); - } - - if (width < 0 || isNaN(width)) { - $log.warn('malhar-angular-dashboard: setWidth was called when width was ' + width); - return false; - } - - if (units === '%') { - width = Math.min(100, width); - width = Math.max(0, width); - } - - this.containerStyle.width = width + '' + units; - - this.updateSize(this.containerStyle); - - return true; - }, - - setHeight: function (height) { - this.contentStyle.height = height; - this.updateSize(this.contentStyle); - }, - - setStyle: function (style) { - this.style = style; - this.updateContainerStyle(style); - }, - - updateSize: function (size) { - angular.extend(this.size, size); - }, - - updateContainerStyle: function (style) { - angular.extend(this.containerStyle, style); - }, - serialize: function() { - return _.pick(this, ['title', 'name', 'report_id', 'hideGrid', 'showChart' ,'rcloud_url','reportData','style', 'size', 'dataModelOptions', 'attrs', 'storageHash']); - } - }; - - return WidgetModel; - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js deleted file mode 100644 index 151e560a..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js +++ /dev/null @@ -1,156 +0,0 @@ -'use strict'; - -describe('Factory: WidgetModel', function () { - - // load the service's module - beforeEach(module('ui.dashboard')); - - // instantiate service - var WidgetModel; - beforeEach(inject(function (_WidgetModel_) { - WidgetModel = _WidgetModel_; - })); - - it('should be a function', function() { - expect(typeof WidgetModel).toEqual('function'); - }); - - describe('the constructor', function() { - var m, Class, Class2, overrides; - - beforeEach(function() { - Class = { - name: 'TestWidget', - attrs: {}, - dataAttrName: 'attr-name', - dataModelType: function TestType() {}, - dataModelOptions: {}, - style: { width: '10em' }, - settingsModalOptions: {}, - onSettingsClose: function() {}, - onSettingsDismiss: function() {}, - funkyChicken: { - cool: false, - fun: true - } - }; - - Class2 = { - name: 'TestWidget2', - attrs: {}, - dataAttrName: 'attr-name', - dataModelType: function TestType() {}, - dataModelOptions: {}, - style: { width: '10em' }, - templateUrl: 'my/url.html', - template: '
    some template
    ' - }; - - overrides = { - style: { - width: '15em' - } - }; - spyOn(WidgetModel.prototype, 'setWidth'); - m = new WidgetModel(Class, overrides); - }); - - it('should copy class defaults, so that changes on an instance do not change the Class', function() { - m.style.width = '20em'; - expect(Class.style.width).toEqual('10em'); - }); - - it('should call setWidth', function() { - expect(WidgetModel.prototype.setWidth).toHaveBeenCalled(); - }); - - it('should take overrides as precedent over Class defaults', function() { - expect(m.style.width).toEqual('15em'); - }); - - it('should copy arbitrary data from the widget definition', function() { - expect(m.funkyChicken.cool).toEqual(false); - expect(m.funkyChicken.fun).toEqual(true); - expect(m.funkyChicken===Class.funkyChicken).toEqual(false); - }); - - it('should set templateUrl if and only if it is present on Class', function() { - var m2 = new WidgetModel(Class2, overrides); - expect(m2.templateUrl).toEqual('my/url.html'); - }); - - it('should set template if and only if it is present on Class', function() { - delete Class2.templateUrl; - var m2 = new WidgetModel(Class2, overrides); - expect(m2.template).toEqual('
    some template
    '); - }); - - it('should look for directive if neither templateUrl nor template is found on Class', function() { - delete Class2.templateUrl; - delete Class2.template; - Class2.directive = 'ng-bind'; - var m2 = new WidgetModel(Class2, overrides); - expect(m2.directive).toEqual('ng-bind'); - }); - - it('should set the name as directive if templateUrl, template, and directive are not defined', function() { - delete Class2.templateUrl; - delete Class2.template; - var m2 = new WidgetModel(Class2, overrides); - expect(m2.directive).toEqual('TestWidget2'); - }); - - it('should not require overrides', function() { - var fn = function() { - var m2 = new WidgetModel(Class); - } - expect(fn).not.toThrow(); - }); - - it('should copy references to settingsModalOptions, onSettingsClose, onSettingsDismiss', function() { - var m = new WidgetModel(Class); - expect(m.settingsModalOptions).toEqual(Class.settingsModalOptions); - expect(m.onSettingsClose).toEqual(Class.onSettingsClose); - expect(m.onSettingsDismiss).toEqual(Class.onSettingsDismiss); - }); - - }); - - describe('setWidth method', function() { - - var context, setWidth; - - beforeEach(function() { - context = new WidgetModel({}); - setWidth = WidgetModel.prototype.setWidth; - }); - - it('should take one argument as a string with units', function() { - setWidth.call(context, '100px'); - expect(context.containerStyle.width).toEqual('100px'); - }); - - it('should take two args as a number and string as units', function() { - setWidth.call(context, 100, 'px'); - expect(context.containerStyle.width).toEqual('100px'); - }); - - it('should return false and not set anything if width is less than 0', function() { - var result = setWidth.call(context, -100, 'em'); - expect(result).toEqual(false); - expect(context.containerStyle.width).not.toEqual('-100em'); - }); - - it('should assume % if no unit is given', function() { - setWidth.call(context, 50); - expect(context.containerStyle.width).toEqual('50%'); - }); - - it('should force greater than 0% and less than or equal 100%', function() { - setWidth.call(context, '110%'); - expect(context.containerStyle.width).toEqual('100%'); - }); - - }); - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html deleted file mode 100644 index 408ceaa8..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/report-dashboard.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html deleted file mode 100644 index 6f660025..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/webrtc/getSourceId.html +++ /dev/null @@ -1,78 +0,0 @@ - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/sandbox-gridster.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/sandbox-gridster.css deleted file mode 100644 index a9edba8f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/sandbox-gridster.css +++ /dev/null @@ -1,173 +0,0 @@ -.gridster { - position: relative; - margin: auto; - /* height: 0 - */} - -.gridster>ul { - margin: 0; - list-style: none; - padding: 0 -} - -.gridster-item { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - list-style: none; - z-index: 2; - position: absolute; - display: none -} - -.gridster-loaded { - -webkit-transition: height .3s; - -moz-transition: height .3s; - -o-transition: height .3s; - transition: height .3s -} - -.gridster-loaded .gridster-item { - display: block; - position: absolute; - -webkit-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - -moz-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - -o-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; - -webkit-transition-delay: 50ms; - -moz-transition-delay: 50ms; - -o-transition-delay: 50ms; - transition-delay: 50ms -} - -.gridster-loaded .gridster-preview-holder { - display: none; - z-index: 1; - position: absolute; - background-color: #067ab4; - /* - background-color: rgb(6, 122, 180); - -ms-filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#067ab4', endColorstr='#067ab4'); IE - opacity: 0.2; - */ - border-color: #fff; - -webkit-transition: width .2s, height .3s; - -moz-transition: width .2s, height .3s; - -o-transition: width .2s, height .3s; - transition: width .2s, height .3s; - -webkit-transition-delay: 50ms; - -moz-transition-delay: 50ms; - -o-transition-delay: 50ms; - transition-delay: 50ms -} - -.gridster-loaded .gridster-item.gridster-item-moving { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - opacity: 0.9; -} - -.gridster-mobile { - height: auto !important -} - -.gridster-mobile .gridster-item { - height: auto; - position: static; - float: none -} - -.gridster-item.ng-leave.ng-leave-active { - opacity: 0 -} - -.gridster-item.ng-enter { - opacity: 1 -} - -.gridster-item-moving { - z-index: 3 -} - -.gridster-item-resizable-handler { - position: absolute; - font-size: 1px; - display: block -} - -.handle-se { - cursor: se-resize; - width: 0; - height: 0; - right: 1px; - bottom: 1px; - border-style: solid; - border-width: 0 0 12px 12px; - border-color: transparent -} - -.handle-ne { - cursor: ne-resize; - width: 12px; - height: 12px; - right: 1px; - top: 1px -} - -.handle-nw { - cursor: nw-resize; - width: 12px; - height: 12px; - left: 1px; - top: 1px -} - -.handle-sw { - cursor: sw-resize; - width: 12px; - height: 12px; - left: 1px; - bottom: 1px -} - -.handle-e { - cursor: e-resize; - width: 12px; - bottom: 0; - right: 1px; - top: 0 -} - -.handle-s { - cursor: s-resize; - height: 12px; - right: 0; - bottom: 1px; - left: 0 -} - -.handle-n { - cursor: n-resize; - height: 12px; - right: 0; - top: 1px; - left: 0 -} - -.handle-w { - cursor: w-resize; - width: 12px; - left: 1px; - top: 0; - bottom: 0 -} - -.gridster .gridster-item:hover .gridster-box { - border: 1.5px solid #B3B2B3 -} - -.gridster .gridster-item:hover .handle-se { - border-color: transparent transparent #ccc -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/ui-gridster.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/ui-gridster.css deleted file mode 100644 index 827e354e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/att_angular_gridster/ui-gridster.css +++ /dev/null @@ -1,116 +0,0 @@ -/* ui-gridster.css */ -.gridster-container { - background-color: #EFEFEF; - color: #fff; - border: 1px dashed; - overflow-y: auto; - overflow-x: hidden; } - -/* app css for attGridtser */ -.gridster-item-container { - background-color: #FFFFFF; - position: relative; - margin-left: auto; - margin-right: auto; - min-height: 79px; - height: 100%; } - .gridster-item-container .gridster-item-header { - /* gridster-item Header */ - position: relative; - height: 50px !important; - border: 1px solid #d3d3d3; - border-bottom: 0; - background-color: #E5E5E5; - white-space: nowrap; - text-overflow: ellipsis; - z-index: 1; - -webkit-border-radius: 2px 2px 0 0; - -moz-border-radius: 2px 2px 0 0; - -ms-border-radius: 2px 2px 0 0; - -o-border-radius: 2px 2px 0 0; - border-radius: 2px 2px 0 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - /* IE6-8 */ } - .gridster-item-container .gridster-item-header .gridster-item-handle { - cursor: move; - margin: 12px; - position: absolute; - top: 0; - left: 0; - border: 0; - vertical-align: middle; - -ms-interpolation-mode: bicubic; - display: block; } - .gridster-item-container .gridster-item-header .gridster-item-header-content { - line-height: 44px; - margin-left: 26px; - font-family: clearviewatt; - font-size: 18px; - color: #444444; - float: left; } - .gridster-item-container .gridster-item-header .gridster-item-sub-header-content { - position: absolute; - top: 29.5px; - left: 26px; - font-family: clearviewatt; - font-size: 12px; - color: #444444; } - .gridster-item-container .gridster-item-header .gridster-item-header-buttons-container { - position: absolute; - right: 10px; - top: 10px; - overflow: hidden; - text-align: right; - height: 30px; - color: #444444; } - .gridster-item-container .gridster-item-body { - /* gridster-item Body */ - position: absolute; - width: 100%; - top: 50px; - left: 0; - right: 0; - bottom: 29px; - border: 1px solid #d3d3d3; - box-sizing: border-box; - overflow: auto; - color: #444444; - /* text-align: center; */ } - .gridster-item-container .gridster-item-footer { - /* gridster-item Footer */ - position: absolute; - bottom: 0; - width: 100%; - height: 29px !important; - text-align: left; - cursor: pointer; - border: 1px solid #d3d3d3; - border-top: 0; - background-color: #F2F2F2; - -webkit-border-radius: 0 0 2px 2px; - -moz-border-radius: 0 0 2px 2px; - -ms-border-radius: 0 0 2px 2px; - -o-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - text-decoration: none; - /* IE6-8 */ } - .gridster-item-container .gridster-item-footer:hover { - background-color: #E5E5E5; - color: #565656; - text-decoration: underline; } - .gridster-item-container .gridster-item-footer .gridster-item-footer-content { - line-height: 30px; - font-family: clearviewatt; - font-size: 12px; - color: #565656; - margin: 20px; - text-decoration: none; } - .gridster-item-container .gridster-item-footer .gridster-item-footer-content:hover { - color: #199ddf; - text-decoration: underline; } diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/ecomp.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/ecomp.css deleted file mode 100644 index 635ede44..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/ecomp.css +++ /dev/null @@ -1,194 +0,0 @@ -.menu-icon { - line-height: 40px; -} - -.menu-icon-collapse { - line-height: 40px; - margin-top:10px; - margin-bottom:10px; -} - -.header-container { - width: 100%; - float: left; - position: fixed; - z-index: 100; -} -.menu-container { - float: left; - position:fixed; - background-color:#f2f2f2 -} -.content-container { - min-height: 650px; - width: calc(100% - 250px); -} -.footer-container { - float:left; - position: relative; - z-index: 2; - width: 100%; - position:relative; - z-index:2; -} - -.footer-global i { - font-size:40px; -} - -.b2b-header-tabs .header__item.profile .profile-info{ - border: 1px solid #d3d3d3; - max-width:400px; - width:300px; - padding: 20px; - pointer-events: auto; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - font-size: 16px; - -webkit-transition: opacity .2s ease-out; - -moz-transition: opacity .2s ease-out; - transition: opacity .2s ease-out; - background: #fff; - border-radius: 5px; - box-shadow: 0 5px 6px 0 rgba(0,0,0,.25); - color: #333; - line-height: 20px; - position: absolute; - left:-123px; - top:38px; - display:none; -} - -#header-user-icon{ - font-size:25px; - color:#FFFFFF; - -} -.header-tertiary-wrapper{ - top:52px; -} -.header-profile div{ - display:inline-block; -} -.b2b-header-tabs .header-secondary{; - width: 97%; - height:42px; -} -.b2b-header-tabs .header-tertiary{ - width:97%; -} - -.b2b-header-tabs .header-secondary .header-subitem a.menu__item{ - padding: 10px 0; -} - .b2b-ln-icon-fix-pos{ - margin-top:10px; - } -.left-menu-collapsed { - width: 22px !important; -} - -.b2b-subnav-content > li > a { - display: inline; -} - -#page-content{ - margin-left:250px; -} - -.leftmenu-arrow-expand{ - margin-left:200px -} -.leftmenu-arrow-collapse{ - margin-left:0px; -} - -.leftment-items{ - margin-left:40px; -} - -.error-popup-body{ - word-wrap: break-word; -} - -.build_number{ - color:white -} - - -/*popup modal sizes*/ -.b2b-footer-wrapper .divider-bottom-footer{ - padding: 30px 0 50px 0; -} - -.b2b-modal-header{ - font-size: 24px; -} - -.b2b-modal-body{ - font-size: 14px; -} - -/* applying default styles */ - -p,a{ - font-size:14px; -} - -.b2b-footer-wrapper .copyright-text-sdk { - color: #fff; - font-size: 11px; - text-align: left; - font-family: "Omnes-ECOMP-W02", Arial; -} -.b2b-footer-wrapper .copyright-text-sdk a { - color: #fff; - font-size: 11px; - text-decoration: underline; - display: inline-block; -} -.b2b-footer-wrapper .copyright-text-sdk a:hover { - text-decoration: none; -} - -.b2b-header-tabs .header__items{ - width:97%; -} - -.header-main-div{ - position: fixed; - width: 100%; - top: 0px; - left: 0; - background-color: #222; - z-index: 9999; -} -.left-menu-child -{ - margin-left: 37px; -} - -.header-image{ - height:28px; -} -#role-popup-footer{ - height:100px; -} - -#role-double-popup{ - max-height:300px; - overflow:auto; - display:block -} -.error-container { - position: absolute; - width: 220px; - display: block; - height: 12px; - line-height: 12px; -} -.err-message { - color: #cf2a2a; - font-size: 10px; -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/fusion-sunny.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/fusion-sunny.css deleted file mode 100644 index f9154a1c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/fusion-sunny.css +++ /dev/null @@ -1,362 +0,0 @@ - input, textarea, select, div { - font-family: Arial; - font-size: 11px; - font-weight: normal; - } - - form { - margin-top: 5px; - } - - - .applicationWindow { border-width: 0px 0px 1px 0px; - border-style: solid; - border-color: #959595; - box-shadow: inset 0 0 10px #000000; - margin-top: 10px; - margin-bottom: 10px; - margin-left: 10px; - margin-right: 10px; - } - - .feedbackMessage { width: 99%; - font-family: Arial; - font-size: 11px; - color: #1f1f1f; - padding: 3px; - border: 1px #eeb420 solid; - margin: 3px; - background: #fff9e5; - } - - .menubar { - border-width: 0px 0px 0px 1px; border-style: solid; border-color: #959595; - } - - .footer { - /*clear: both;*/ - border-width: 0px 1px 0px 1px; border-style: solid; border-color: #959595; - font-family: Verdana,Arial,Helvetica, sans-serif; - font-size: 9px; - padding: 10px 10px 30px 10px; - background: white; - } - - .pageTitle { - font-family: Arial; - font-size: 18px; - font-weight: bold; - margin-top: 5px; - } - - .content { - border-width: 0px 1px 0px 1px; - border-style: solid; - border-color: #959595; - font-family: Arial; - font-size: 11px; - padding: 5px; - background: white; - /*height: 600px;*/ - } - - .popupContent { - font-family: Arial; - font-size: 11px; - padding: 3px; - } - - .logo { - border-width: 0px 1px 0px 1px; - border-style: solid; - border-color: #959595; - text-align: right; - } - - .sep { - border: 1px solid black - } - - .logo { /*position: relative;*/ - float:left; - padding-top: 25px; - padding-left: 25px; - } - - .applicationLogo { float:right; - padding-top: 25px; - padding-right: 25px; - } - - .applinkWhite { font-family: Arial; - font-size: 13px; - font-weight: 900; - color: #FFFFFF; - text-decoration: none; } - - .terms { font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 9px; - } - - .broadcastMessage { color: red; } - .broadcastMessageList { color: red; } - - .button { - margin: 5px 1px 5px 1px; - padding: 3px; } - - .toolbarbutton:hover { - color:#005491; - } - - .headerText { font-family: Arial; - font-size: 15px; - font-weight: 700; - color: #000000; } - - .headerBackground { background: #336699; } - - .errorMessageText { font-family: Arial; - font-size: 11px; - font-weight: bold; - color: red; } - - - .normalText { font-family: Arial; - font-size: 11px; - color: #000000; } - - .normalTextRed { font-family: Arial; - font-size: 11px; - color: red; } - - - .smallNormalText { font-family: Arial; - font-size: 9px; - color: #000000; } - - .tableBorder { border:1px outset teal } - - .validationError { background: #b9eaff; } - - .templatebody { - background: url(../images/body_graphic.jpg) repeat-x; - /*margin: 40px 80px 40px 80px;*/ - } - - /*--------------------- General Content ------------------------------------*/ - - .relative { - position:relative; - } - - .clear{ - clear:both; - } - - .left { - float: left; - } - - .leftCentered{ - float: left; - text-align: center; - } - - .right { - float: right; - } - - .rightAligned{ - text-align: right; - } - - .centered { - text-align: center; - align: center; - } - - - .noWrap{ - white-space:nowrap; - } - - .disabled { - color:gray; - cursor:hand; - } - - /*--------------------- Tab styles -------------------------------------*/ - - .current { - font-weight: bold; - border-width: 1px 1px 1px 1px; - border-color: silver; - border-style: solid; - } - - .subTab { - font-weight:bold; - font-family: Arial; - font-size: 11px; - color: #0F3B82; - } - - - /*--------------------- Grid styles ------------------------------------*/ - - /* Grid navigation and header styles */ - .gridFilterLabel {font-size: 7pt; - font-align: justify; - font-weight: bold; - display: block;} - - .gridFilterText {height: 17px; - font-size: 8pt; - width: 60%; - font-align: justify;} - - .gridNavigationBar { font-family:Arial,Verdana; - font-size:11px; - font-weight:normal; - color:#000; - margin: 0px; - width: 100%; - vertical-align: middle; - } - - .gridNavigationBar .navLinks { float: left; - margin-right:15px; - padding-top: 2px; - height: 19px; - line-height: 19px; - } - - .gridNavigationBar .pageControls { float: left; - margin-right: 15px; - height: 19px; - line-height: 19px; - } - - .gridNavigationBar .pageControls input { font-size: 8pt; - height: 17px; - vertical-align: middle; - } - - .gridNavigationBar .pageInfo { float: right; - vertical-align: middle; - height: 19px; - line-height: 19px; - } - - .gridNavigationBar .pageInfo input { font-size: 8pt; - height: 17px; - vertical-align: middle; - } - - - .gridNavigationBar span { padding: 3px; } - - .gridNavigationBar a { - text-decoration:underline; - color:#000; - font-weight:normal; - } - - .gridNavigationBar img { vertical-align: middle; } - - .gridBulkUpdateRow { - height: 35px; - line-height: 35px; - } - - .gridBulkUpdateRow input { - vertical-align: middle; - } - - - /* dummy class used to lock the form elements of a grid - ex. bulk transaction processing */ - .alwaysEnabled {} - - .hidden { - display: none; - } - - .selectedPage { - background-color:#C4DFFB; - color: white; - border-style: solid; - border-width: 1px; - border-color: gray; - padding-left: 3px; - padding-right: 3px; - vertical-align: middle; - } - - .selectedRow{ - /*background-color:#C4DFFB;*/ - } - - /* Action Item styles */ - .actionList { - margin-left: -20px; - margin-right: -10px; - padding-left: 5px; - } - - .actionList li { - float:left; - padding-left: 3px; - padding-right: 3px; - } - - .actionList li a { - text-decoration:none; - color:#000; - } - - /* Filter Operator List styles */ - - .filterList { - margin: 0px; - } - - .filterList li { - list-style-type: none; - padding:3px 3px 3px 2px; - cursor:hand; - font-size:11px; - } - - .filterList li:hover { - background: #404040; - } - - .filterList li a { - color: #000; - text-decoration: none; - } - - .filterList li:hover a { - color: white; - } - - .filterList li a:hover { - text-decoration: none; - color: white; - } - - .filterListItem a { - text-decoration:none; - padding:3px 2px 3px 2px; - } - - - /*---------------------- Customized ZK Styles ------------------------------*/ - - .z-datebox input, .z-timebox input { - font-family: Arial; - font-size: 11px; - height: 15px; - margin-top:1px; - } diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/jquery-ui.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/jquery-ui.css deleted file mode 100644 index 1c22746c..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/jquery-ui.css +++ /dev/null @@ -1,1225 +0,0 @@ -/*! jQuery UI - v1.11.4 - 2015-03-11 -* http://jqueryui.com -* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-clearfix { - min-height: 0; /* support: IE7 */ -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); /* support: IE8 */ -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; -} - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-accordion .ui-accordion-header { - display: block; - cursor: pointer; - position: relative; - margin: 2px 0 0 0; - padding: .5em .5em .5em .7em; - min-height: 0; /* support: IE7 */ - font-size: 100%; -} -.ui-accordion .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-icons .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-header .ui-accordion-header-icon { - position: absolute; - left: .5em; - top: 50%; - margin-top: -8px; -} -.ui-accordion .ui-accordion-content { - padding: 1em 2.2em; - border-top: 0; - overflow: auto; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-button { - display: inline-block; - position: relative; - padding: 0; - line-height: normal; - margin-right: .1em; - cursor: pointer; - vertical-align: middle; - text-align: center; - overflow: visible; /* removes extra width in IE */ -} -.ui-button, -.ui-button:link, -.ui-button:visited, -.ui-button:hover, -.ui-button:active { - text-decoration: none; -} -/* to make room for the icon, a width needs to be set here */ -.ui-button-icon-only { - width: 2.2em; -} -/* button elements seem to need a little more width */ -button.ui-button-icon-only { - width: 2.4em; -} -.ui-button-icons-only { - width: 3.4em; -} -button.ui-button-icons-only { - width: 3.7em; -} - -/* button text element */ -.ui-button .ui-button-text { - display: block; - line-height: normal; -} -.ui-button-text-only .ui-button-text { - padding: .4em 1em; -} -.ui-button-icon-only .ui-button-text, -.ui-button-icons-only .ui-button-text { - padding: .4em; - text-indent: -9999999px; -} -.ui-button-text-icon-primary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 1em .4em 2.1em; -} -.ui-button-text-icon-secondary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 2.1em .4em 1em; -} -.ui-button-text-icons .ui-button-text { - padding-left: 2.1em; - padding-right: 2.1em; -} -/* no icon support for input elements, provide padding by default */ -input.ui-button { - padding: .4em 1em; -} - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon, -.ui-button-text-icon-primary .ui-icon, -.ui-button-text-icon-secondary .ui-icon, -.ui-button-text-icons .ui-icon, -.ui-button-icons-only .ui-icon { - position: absolute; - top: 50%; - margin-top: -8px; -} -.ui-button-icon-only .ui-icon { - left: 50%; - margin-left: -8px; -} -.ui-button-text-icon-primary .ui-button-icon-primary, -.ui-button-text-icons .ui-button-icon-primary, -.ui-button-icons-only .ui-button-icon-primary { - left: .5em; -} -.ui-button-text-icon-secondary .ui-button-icon-secondary, -.ui-button-text-icons .ui-button-icon-secondary, -.ui-button-icons-only .ui-button-icon-secondary { - right: .5em; -} - -/* button sets */ -.ui-buttonset { - margin-right: 7px; -} -.ui-buttonset .ui-button { - margin-left: 0; - margin-right: -.3em; -} - -/* workarounds */ -/* reset extra padding in Firefox, see h5bp.com/l */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} -.ui-dialog { - overflow: hidden; - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-se { - width: 12px; - height: 12px; - right: -5px; - bottom: -5px; - background-position: 16px 16px; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-draggable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: none; -} -.ui-menu .ui-menu { - position: absolute; -} -.ui-menu .ui-menu-item { - position: relative; - margin: 0; - padding: 3px 1em 3px .4em; - cursor: pointer; - min-height: 0; /* support: IE7 */ - /* support: IE10, see #8844 */ - list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); -} -.ui-menu .ui-menu-divider { - margin: 5px 0; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-state-focus, -.ui-menu .ui-state-active { - margin: -1px; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item { - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - margin: auto 0; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - left: auto; - right: 0; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,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"); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -} -.ui-selectable { - -ms-touch-action: none; - touch-action: none; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - /* Support: IE7 */ - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-button { - display: inline-block; - overflow: hidden; - position: relative; - text-decoration: none; - cursor: pointer; -} -.ui-selectmenu-button span.ui-icon { - right: 0.5em; - left: auto; - margin-top: -8px; - position: absolute; - top: 50%; -} -.ui-selectmenu-button span.ui-selectmenu-text { - text-align: left; - padding: 0.4em 2.1em 0.4em 1em; - display: block; - line-height: 1.4; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-sortable-handle { - -ms-touch-action: none; - touch-action: none; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 22px; -} -.ui-spinner-button { - width: 16px; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top: none; - border-bottom: none; - border-right: none; -} -/* vertically center icon */ -.ui-spinner .ui-icon { - position: absolute; - margin-top: -8px; - top: 50%; - left: 0; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} - -/* TR overrides */ -.ui-spinner .ui-icon-triangle-1-s { - /* need to fix icons sprite */ - background-position: -65px -16px; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { - border: 1px solid #d3d3d3; - background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus { - border: 1px solid #999999; - background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited { - color: #212121; - text-decoration: none; -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; - color: #363636; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-state-default .ui-icon { - background-image: url("images/ui-icons_888888_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-active .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-highlight .ui-icon { - background-image: url("images/ui-icons_2e83ff_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cd0a0a_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - margin: -8px 0 0 -8px; - padding: 8px; - background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ - border-radius: 8px; -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/layout/layout-default-latest.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/layout/layout-default-latest.css deleted file mode 100644 index aa382de3..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/layout/layout-default-latest.css +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Default Layout Theme - * - * Created for jquery.layout - * - * Copyright (c) 2010 - * Fabrizio Balliano (http://www.fabrizioballiano.net) - * Kevin Dalman (http://allpro.net) - * - * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) - * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. - * - * Last Updated: 2010-02-10 - * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars - */ - -/* - * DEFAULT FONT - * Just to make demo-pages look better - not actually relevant to Layout! - */ -body { - font-family: Geneva, Arial, Helvetica, sans-serif; - font-size: 100%; - *font-size: 80%; -} - -/* - * PANES & CONTENT-DIVs - */ -.ui-layout-pane { /* all 'panes' */ - background: #FFF; - border: 1px solid #BBB; - padding: 10px; - overflow: auto; - /* DO NOT add scrolling (or padding) to 'panes' that have a content-div, - otherwise you may get double-scrollbars - on the pane AND on the content-div - - use ui-layout-wrapper class if pane has a content-div - - use ui-layout-container if pane has an inner-layout - */ - } - /* (scrolling) content-div inside pane allows for fixed header(s) and/or footer(s) */ - .ui-layout-content { - padding: 10px; - position: relative; /* contain floated or positioned elements */ - overflow: auto; /* add scrolling to content-div */ - } - -/* - * UTILITY CLASSES - * Must come AFTER pane-class above so will override - * These classes are NOT auto-generated and are NOT used by Layout - */ -.layout-child-container, -.layout-content-container { - padding: 0; - overflow: hidden; -} -.layout-child-container { - border: 0; /* remove border because inner-layout-panes probably have borders */ -} -.layout-scroll { - overflow: auto; -} -.layout-hide { - display: none; -} - -/* - * RESIZER-BARS - */ -.ui-layout-resizer { /* all 'resizer-bars' */ - background: #DDD; - border: 1px solid #BBB; - border-width: 0; - } - .ui-layout-resizer-drag { /* REAL resizer while resize in progress */ - } - .ui-layout-resizer-hover { /* affects both open and closed states */ - } - /* NOTE: It looks best when 'hover' and 'dragging' are set to the same color, - otherwise color shifts while dragging when bar can't keep up with mouse */ - .ui-layout-resizer-open-hover , /* hover-color to 'resize' */ - .ui-layout-resizer-dragging { /* resizer beging 'dragging' */ - background: #C4E1A4; - } - .ui-layout-resizer-dragging { /* CLONED resizer being dragged */ - border: 1px solid #BBB; - } - .ui-layout-resizer-north-dragging, - .ui-layout-resizer-south-dragging { - border-width: 1px 0; - } - .ui-layout-resizer-west-dragging, - .ui-layout-resizer-east-dragging { - border-width: 0 1px; - } - /* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */ - .ui-layout-resizer-dragging-limit { /* CLONED resizer at min or max size-limit */ - background: #E1A4A4; /* red */ - } - - .ui-layout-resizer-closed-hover { /* hover-color to 'slide open' */ - background: #EBD5AA; - } - .ui-layout-resizer-sliding { /* resizer when pane is 'slid open' */ - opacity: .10; /* show only a slight shadow */ - filter: alpha(opacity=10); - } - .ui-layout-resizer-sliding-hover { /* sliding resizer - hover */ - opacity: 1.00; /* on-hover, show the resizer-bar normally */ - filter: alpha(opacity=100); - } - /* sliding resizer - add 'outside-border' to resizer on-hover - * this sample illustrates how to target specific panes and states */ - .ui-layout-resizer-north-sliding-hover { border-bottom-width: 1px; } - .ui-layout-resizer-south-sliding-hover { border-top-width: 1px; } - .ui-layout-resizer-west-sliding-hover { border-right-width: 1px; } - .ui-layout-resizer-east-sliding-hover { border-left-width: 1px; } - -/* - * TOGGLER-BUTTONS - */ -.ui-layout-toggler { - border: 1px solid #BBB; /* match pane-border */ - background-color: #BBB; - } - .ui-layout-resizer-hover .ui-layout-toggler { - opacity: .60; - filter: alpha(opacity=60); - } - .ui-layout-toggler-hover , /* need when NOT resizable */ - .ui-layout-resizer-hover .ui-layout-toggler-hover { /* need specificity when IS resizable */ - background-color: #FC6; - opacity: 1.00; - filter: alpha(opacity=100); - } - .ui-layout-toggler-north , - .ui-layout-toggler-south { - border-width: 0 1px; /* left/right borders */ - } - .ui-layout-toggler-west , - .ui-layout-toggler-east { - border-width: 1px 0; /* top/bottom borders */ - } - /* hide the toggler-button when the pane is 'slid open' */ - .ui-layout-resizer-sliding .ui-layout-toggler { - display: none; - } - /* - * style the text we put INSIDE the togglers - */ - .ui-layout-toggler .content { - color: #666; - font-size: 12px; - font-weight: bold; - width: 100%; - padding-bottom: 0.35ex; /* to 'vertically center' text inside text-span */ - } - -/* - * PANE-MASKS - * these styles are hard-coded on mask elems, but are also - * included here as !important to ensure will overrides any generic styles - */ -.ui-layout-mask { - border: none !important; - padding: 0 !important; - margin: 0 !important; - overflow: hidden !important; - position: absolute !important; - opacity: 0 !important; - filter: Alpha(Opacity="0") !important; -} -.ui-layout-mask-inside-pane { /* masks always inside pane EXCEPT when pane is an iframe */ - top: 0 !important; - left: 0 !important; - width: 100% !important; - height: 100% !important; -} -div.ui-layout-mask {} /* standard mask for iframes */ -iframe.ui-layout-mask {} /* extra mask for objects/applets */ - -/* - * Default printing styles - */ -@media print { - /* - * Unless you want to print the layout as it appears onscreen, - * these html/body styles are needed to allow the content to 'flow' - */ - html { - height: auto !important; - overflow: visible !important; - } - body.ui-layout-container { - position: static !important; - top: auto !important; - bottom: auto !important; - left: auto !important; - right: auto !important; - /* only IE6 has container width & height set by Layout */ - _width: auto !important; - _height: auto !important; - } - .ui-layout-resizer, .ui-layout-toggler { - display: none !important; - } - /* - * Default pane print styles disables positioning, borders and backgrounds. - * You can modify these styles however it suit your needs. - */ - .ui-layout-pane { - border: none !important; - background: transparent !important; - position: relative !important; - top: auto !important; - bottom: auto !important; - left: auto !important; - right: auto !important; - width: auto !important; - height: auto !important; - overflow: visible !important; - } -} \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/bs-workflow.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/bs-workflow.css deleted file mode 100644 index 09e0a927..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/bs-workflow.css +++ /dev/null @@ -1,134 +0,0 @@ -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 99999; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; - background-color: transparent; -} -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 9997; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; -} -.modal-header { - min-height: 16.42857143px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/workflows.css b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/workflows.css deleted file mode 100644 index 0995a992..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/styles/workflows/workflows.css +++ /dev/null @@ -1,21 +0,0 @@ -.scrolling-table{ - width: 1200px; -} -.scrolling-table .scroll-viewport { - height: 200px !important; - width: 99.5% !important; - background-color:white; -} - -.scrolling-table .scroll-overview{ - margin-top:-14px !important; -} - -.scrolling-table .scroll-viewport:hover{ - background-color:white; -} - -.workflow-popup-body{ - position: relative; - padding: 30px; -} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-list-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-list-controller.js deleted file mode 100644 index c8a363c9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-list-controller.js +++ /dev/null @@ -1,43 +0,0 @@ -app.controller("droolsListController", function ($scope,$http,droolsService, modalService, $modal) { - // Table Data - droolsService.getDrools().then(function(data){ - - var j = data; - $scope.tableData = JSON.parse(j.data); - //$scope.resetMenu(); - - },function(error){ - console.log("failed"); - reloadPageOnce(); - }); - - $scope.viewPerPage = 20; - $scope.scrollViewsPerPage = 2; - $scope.currentPage = 1; - $scope.totalPage; - $scope.searchCategory = ""; - $scope.searchString = ""; - /* modalService.showSuccess('','Modal Sample') ; */ - for(x in $scope.tableData){ - if($scope.tableData[x].active_yn=='Y') - $scope.tableData[x].active_yn=true; - else - $scope.tableData[x].active_yn=false; - } - $scope.openDialog = function(droolFile){ - droolsService.setSelectedFile(droolFile); - $modal.open({ - templateUrl: 'app/fusionapp/drools/view-models/droolsView.html', - controller: 'droolsViewController' - - }) - } - - - -}); - -function openInNewTab(url) { - var win = window.open(url, '_blank'); - win.focus(); -}; \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-view-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-view-controller.js deleted file mode 100644 index 0412718f..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/drools-view-controller.js +++ /dev/null @@ -1,45 +0,0 @@ -app.controller('droolsViewController', function ($scope,modalService,droolsService){ - - - $scope.resultsString = ""; - // Table Data - droolsService.getDroolDetails(droolsService.getSelectedFile()).then(function(data){ - - var j = data; - $scope.postDroolsBean = JSON.parse(j.data); - //execute($scope.postDroolsBean); - - },function(error){ - console.log("failed"); - //reloadPageOnce(); - }); - - - - $scope.execute = function(postDroolsBean) { - console.log(postDroolsBean); - var uuu = "post_drools/execute"; - var postData={postDroolsBean:postDroolsBean}; - $.ajax({ - type : 'POST', - url : uuu, - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify(postData), - success : function(data){ - $scope.$apply(function(){ - $scope.resultsString=data.resultsString; - console.log($scope.resultsString); - }); - }, - error : function(data){ - console.log(data); - modalService.showFailure("Fail","Error while executing: "+ data.responseText); - } - }); - - }; - - - - }); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/droolsController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/droolsController.js deleted file mode 100644 index c5c4e708..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/droolsController.js +++ /dev/null @@ -1,11 +0,0 @@ -app.config(function($routeProvider) { - $routeProvider - .when('/view', { - templateUrl: 'app/fusionapp/drools/view-models/droolsView.html', - controller : "droolsViewController" - }) - .otherwise({ - templateUrl: 'app/fusionapp/drools/view-models/droolsList.html', - controller : "droolsListController" - }); -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/controller/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/directives/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/directives/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/services/droolsService.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/services/droolsService.js deleted file mode 100644 index 3b4ba3eb..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/services/droolsService.js +++ /dev/null @@ -1,57 +0,0 @@ -app.factory('droolsService', function ($http, $q) { - return { - getDrools: function() { - return $http.get('getDrools') - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getDroolDetails: function(selectedFile) { - return $http.get('getDroolDetails'+'?selectedFile=' + selectedFile ) - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getRole: function(roleId) { - - return $http.get('get_role?role_id=' + roleId) - .then(function(response) { - if (typeof response.data === 'object') { - return response.data; - } else { - return $q.reject(response.data); - } - - }, function(response) { - // something went wrong - return $q.reject(response.data); - }); - }, - - getSelectedFile: function() { - return this.selectedFile; - }, - - setSelectedFile: function(_selectedFile) { - this.selectedFile = _selectedFile; - } - }; -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/utils/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/utils/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsList.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsList.html deleted file mode 100644 index 91e68a15..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsList.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -
    -

    Drools List

    -
    - - - - - - - - - - - - - - - - - - -
    Drools File NameClass NameRun Rule
    {{rowData.droolsFile}}{{rowData.className}} -
    -
    -
    -
    - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsView.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsView.html deleted file mode 100644 index bcc80b73..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/droolsView.html +++ /dev/null @@ -1,42 +0,0 @@ - - diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/drools/view-models/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/external/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/external/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/fonts/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/fonts/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7450-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7450-icon.png deleted file mode 100644 index 52ab2b54c3fc7277c1686de3ffa379100462702b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)nA3K5i6$_kWVe}vt?!LWQiPz z{K0HJS|%#()JEDoTN2~{Tr6-mBm-dYO7SbrC^^>;?hq6IDh z>S(neYL&zmu`4SCHd!TlA&8Z`7A~DGneEMWGh$@tbwx&2lME+J3o9%0&5|y=Tc$8sB7ZP@wMu#rX)OoyL@pi761~#H&2zp0*$I31TPo&r00000NkvXX Hu0mjfnX|^h diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7450-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7450-text.png deleted file mode 100644 index 9b3c3325148e4b876953a48281deb0b21e73eed6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!J8A$qnnlv3qu?6^qxc&!&(3-C~KoQ20AirP+ zhi5m^fSmK5E{-7;jBhU(`mrcVv_0$(2>9pzK;!?}Ii5N?-#Ow~^P8r=y^+{d!#6or ztZa?1PsQowHHNd#rv0}`ZS?+acQXEEz2?nrR1;U6 zZC3mjyTeIGM}lkRWMy4R>DPP-6kaJ7pibJ@YVw{G`uXW5^B##j9|r*V(E z^z_LyL)|~;b51Qc)I$ztaD0e0swz2hGPH# diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7750-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7750-icon.png deleted file mode 100644 index 9ee5499a9b46f35fa26098851f626d52c0116d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7SuK)l42Qq;qNg#MX`%|Dc z!IB`qUg`*e z{{NrT&k_}`EWM~x%=kJ>9nX}Eg%dtJlm7MP<>lr7m;ceYKl$+FiSrlw&$p`ui~0Yr z|Jlu>D(Ci3FZpKApGoaMq}Bv&5?;@`tmQ{e0#5kK9()ggW2ypCV6B z*@&E1?0jif|E|5QvUgw6%y4ZE4(dRzBgnH5rVHZG5gV zt?HBXnZ50__1`(cTp39(ybteLsn7dynO#)(B#B=;8bow!Vj4b`+37v#NP6-3YSzT| znn=IDLh_%I3+3v+zpr1;(0_k_n(=q@=RfaP|835+d%Zu+@b>>2i}(N4-q&A#@^}5R zUvK`K&cA%#{^svL=HLI^UUP1LRKw|?@xjl&+9wsg`+w$bedz6f)731${EzuP-{R=@ z|IwR*|KHyK|9$=ci81f%|GeKn&C&kjzp1croNxDcrsePd+`zav%=4Ukj_#YMXTNVx Q0LCJNr>mdKI;Vst0Q6iq*#H0l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7750-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/7750-text.png deleted file mode 100644 index aeb2dd002fa857bf4e0901fd52e290eeef36a4a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+Wp4EyINygy&i(0|`xeSpH_QoZdA42%yvT^vIy;@%u!-sq@SuAGRL}bsimH+?EvTeojo1)AgC+g%adAg*p_vyzUmH$u9 z=CkPFe;e3-uYdZ^`+tM=FWY?ziaJx4&#}#Kw(_IIyaV^8x1D`7=gavjRpYyP@j16& zat1Bkq2rO4b|{@I-fy}NpMTRl|L-i1=j2OW-BfOS)$X>Z>C4Ac&P#V5Uj29;->)cv z_n)t=|8hE^EOL&<^3|2PWFdJjlvb>X={x{wT|u#*}44czaM|f7i-mAIPRy__J8XZ zmfw!|=T$#C>dgGee{0I`bMX^-IwTHuygGQ)_1~`*`|Vz>Ucc`bcH%#;{I}`bq!MlZ Pg5uND)z4*}Q$iB}`({;g diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/apn-dns-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/apn-dns-icon.png deleted file mode 100644 index 0ba5c5235ad4857ed999c596c47e0a2a52f63d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmb7@=`))N0LG)b)n!bugSKd_V@hYLj%Bx0Qmu?D%^D%C7-3{fv5T%F=@74Dcd@3F zj=VMx77oSC`Pcrq+lCk!#R>T-ojP)(9Y4`pD zU3T2|#j|uvHTHJbC99)|T*5kX@z0Q)>T&8FdY>XYJ$w)+mi<9HSGR#q^qo)1$;4QS zk*CDn{(<^!oLq2FGP?Bn5D0Y}s3N4AnQ?j6YLuolIy1Y`GpB7f3E%O$nPcX1Ge%yF zj+CoJr#N)xb|D;lL^h^UpehmweR$>4>$tloAp(#2Ykr7eT3ep* zH0{{v$(fPgFYg(NfcPFm5WZl!3I=1uS9gwoY9-4st1;XGEsb)uP>|HR$y`UopTwId z365j4@z|706Sxi}ajWZ9hij0Wc@S=qoteyyLt+%S>VWRU-<)eACRArlItG9|oB~qe zb3ZCoMbJzcE_#)3gQKnl^sg*1*ySWIQ4{f?f6iLGSig}T@~(3jT;qS|P!&f5mG6j& zKD)zlUBWT`V_q@{DCguUD$AS4v9CYyx(8P-+7}5m1_8A$sR}R24WT+mk@g0W#y5*( zkJm?K*~P(NfSQk$+$d(YyP8&;LC_?pw1kPXBJWVvX_HjX>}L|LWO`C&YRImJf3=A) zuLGR3k{y+%m$$4O|;PsbgP@vuVD+^dXv;Y3gLdy@EmC$GsyO-xc zu!Edf6SljDm3Q;Y37!M{2HN}e0!5ZJR2JDbAuDCQpTR+8fkrVZ-;>M+(_R&Pz5pv2 zwNf9Q=ka7d1w8D7DuF=sQRaJ~>XlvbnjQLvEL7Xu|Ghaf+azI z!3+)z{R#KyH|&3Z-XK6hV12jo8!>`|C@sy!W?Gxcy8yPydlm{!PkEG#@&Y!RsSsi^Uz-@sPB#1 zww9c(P>1IeA9S2dc6)f6>FwWWenY-Gs~5GEhVR}fUpu&c-mUg!YVtQ9syn~^-FCy^ z$1aUGYf{_in`~UqJx$Q^x5R;V&!_o2_bm*q{MNtv)rZ^#pFVz@INj)XzFqVEqM%=^ z4jE}bnm>QPS)0f6_NcqJSl*b&e|^2adzQ>hd1F;+<#c<#@B8`8HdinBo672I`REwng0i#Tlea3O7`tO+f?zW+WV2X z!9Bg_o#*+v{yQA}{d9tVjULAz;j``Kr?cdKCjLKr{J8D1^^5Bt6{pvK<^O#0rtrZh zE_$EjD?h8M?cVtNp!&)BXZrO&PsjiJG=2Y{r`5-1T$yihow;XYof1#-`7PHb1^!rh zUh{Y*$Kjg|NA9KfHy(30yY}1c%)awhNvsq5Pt@J>sas*QNb^r@eNr3uj)scw$*JYZ zS+X{*@!fJJU3~UCXXkgtT~Y82nses(JNGaD#N6ud7#jM&c$~2O`{kck-823&A8t8u z@P1%@k-YQWKT&+_^1Jg^^Hs_J&c9d_e}3l!{{Pw*$qT-p-Ei)D6~~Y5%*Idee~sSR zf9`qC>)lsZ*F_6R>&e?Qbkr38Ej*X{;QEgndIzh#?0df3@0-L~>bPgyiwpU+{|g=F zGS}NQSjE4oPe_wrYS^-G*Vps(j6U0H7Ew0Z0QU7P+qMG9IF^FQ}=nZ3FPpDc(3CT|8$S3j3^P65 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atcf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atcf-text.png deleted file mode 100644 index 1566d5be0a846d8da4a59f332c94fe92213116e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+ZX*E2XYB=o=kKVPB1;Qal7uDCD-1_s8Do-U3d6^w7MpDkLWAkg-(LAPG%#ozmH zR&GkpX8mAc^z>DAx#t!4jVD#?ITTw2oDf9*(l6H>E@fmz-U_~!DerV)a_Etx*FIk2 zH=V^iJ>z^!RMm1d`MzZ*w%@V%*EavV_TA6AuP4p_{YOPSsQizn2=A)n_IerlKd#C@ zmAgM*|8V44-937DNZD$vGqa|3?4q%s#Q12ejiqb9a_3NqhBirpFVYbdBh$(^npTF4q5T^&-1I zHRaDF{qT}c(He2TmbqB{^?X)0%{uc(QAytK=Vy51KR&Z&yBPoL*Pqhu`ut~wZBDT4 zdw$w``rftozf9h9KDqd)cx}1P{yhxWP5(a*{ImbP^UVDpo)>jieVfm__1ZN36Mt0e zSNw85J)QOR{g25j#Bcu->GEB*rS`?_w*07l8g>`sPAM)){})s<<0E(EExXL0vx~K* z{@wU@XS#8a<%I0p{dNU$(vOQCd=jpI)V?<7#KO0iqhuq$?p&W$eexvBwwkEg+yuL? zscS>u);In&i2K#+01y`>knvzopr02v2faR2}S diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atgw-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atgw-icon.png deleted file mode 100644 index 2904d2770551ffc743b9e62859713385f74b6839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_0wi;`T%Ezd!07Gi;uuoF`1Xz??_&djwm@eN z6=%&BhX}Pc5sk(V?{|Jm)n0pd<)?j$2J2sGZn~@DISGVbHa_*xw|2jke)-eQIXi>5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atgw-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/atgw-text.png deleted file mode 100644 index f7c50c602c842834c15008e3881a55b1a9d25219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+it4EyIN2o#)eP*@-EzW@H82Di@)3``}SE{-7;ac>S7G6IzzQuw`m+cCZfZXg>7 z=3F+4o+jMZnDM6Kxb*-3n@_HIE4UzFm9%ZI#w~ZJUWw$jfB)|P`1(H6ch3FBk6ld#GHV{4JhkJ7udUj56zvg>&g>-@7v()gY& zvg6l!74xw2Pu$bPTPB{9eE+A%hs|H_!k!CXg5krV?cv6rwfFMlExsA@)~@`s^OxCyy&opuCl{d4v|T^TG7 zT8!F`weN`P>g-(kPx@W{le6p_n0K6B9Uwh*{?VZ6HF3+{KAe3hU4sAPr9jcxzyIWy zcQ}8joc)8{{$p>VQv7?yoVB0YpYWf2ZY%%Z>-18KdHl6rE7YdmSKaSz$G?E0%L!3(ec__|SfZiJ;@#MP-rABx@L`eH0+YiZVG zzB<4+<Y#d)@D(=6xW=`a;pD7{@?vu zEl$~PWuVo+E%EJU3>*ApigX diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/bgcf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/bgcf-icon.png deleted file mode 100644 index 2904d2770551ffc743b9e62859713385f74b6839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_0wi;`T%Ezd!07Gi;uuoF`1Xz??_&djwm@eN z6=%&BhX}Pc5sk(V?{|Jm)n0pd<)?j$2J2sGZn~@DISGVbHa_*xw|2jke)-eQIXi>5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/bgcf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/bgcf-text.png deleted file mode 100644 index b1e0869eca40dd406454f224177ddc7bbfd6583b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it3Je7e0_XqVpTB;8LjU`K#AUOeF)%Q`@pN$vsbGA2?QYm>1%b9i#lzuvjMo^o)>UOvTR{6D0D#=*gYFPRJ1Z`pV)%YCtHbawBu_#X@2Yn=D( z*wwvWCurI3H<2g!KRo#Vdsg*o<%e>m6GcL`KAe5F?AuN2lhyC0?BzReyMNEU?=J&> zOqTqtbn1%@m;U$3GFtcbwjIBarnt!V?l)DNSvLiDo-YoV@}+m5&GqRwUu-D(-cWhVe${@RY3I4WZ-2m2nY+jM`&O;Vh`aysVEjyvcnwRXy^*zt*{gH^`zhb7 zGvE3CtLE|7^ImWJYkRug>HfFHYwNDQcP&qi=!;lown*i+>4STp|4zw#vwYi+Yx_7} zo&R0*|NGhx3oVpB2iMQN`+oj@1^$M8vM+M@C-P_SH~c)`{?sS-10OZ{@29=~y!_tP z>!mjOpTlR+z2nT(g4ddI$yNGbaq;i3N3=YM9@YeS3u_QJnjEbh0%LD=87 Y@0q&NrX$?+7$^=sUHx3vIVCg!0Bo#YB>(^b diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/com-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/com-icon.png deleted file mode 100644 index 59463a91779bfb5f18ff47a0f8e86d4963902df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZM#sNMdu0Z-fiD3KGM@>L&f+azI z!3+)W|1%gk>_6Wxkg$G!!2N<($Gs zb|yP)Du~T}Zm(Rc-ftEZ$D!CF;FKYzG*`3j%hvE;VatkBTjTkDvD(%Ah??KLtm+iM z=k?NK{hrY_k2c?WzWm3Bhlktw?XRC*zHhDmM6P|r|({$dr^|3H6WKr(o``njxgN@xNA+^XKg7@r+fJHTJ~jd@3djmv|>A4Gnz zf3n$hKz@RQttZp}4O~1{)BARbOt~YO`R>yHEgZoL?sC2l80~j4SnIOEL7Xu|Ghaf+azI z!3+ux0t^Z3@6R{r-~ax6K|q7t-CvU#7#Np$x;TbZFuuKdv2TfjKl`rBWkzPM*zu@`eT>s~dlZO_*C2llM+m|U57;XY5L>OptagZh&f{pFMwv--fJ z`>0Mk-rVjT`)dbY#VchCVt4IlU!V3_tH%1{bpIcc^Iu*)R&Jl2|Bm~|v@4U1-aHnN zzNXoI=)Lbg4e@&Moa`I%XNC8&?Y|!TqjtAc?v3Ld>woQy|JCBh+O2qh&*y9QH5>m| zZ#N4sx?L{!xv=@p&!+l`l~#`*bo2avcr4y8U$1rcGYtOzuV@wfeqWcFavx9o-?vYXcE2R|$82k${KwxW_s`llt&hsRmi{LrE=1%h zcYJu|iRn%Ezh8T{x$OPoLixpEtF|20x8q&^Yg4rT^PIiEmi6;4&{_XWYjdpD@>kw= zTsICDb?tk(SfKE#jr5=LMgH^cYJYusd3iZHWB&#DR)Jlj*&>tY10$2c)78&qol`;+ E0FtCHoB#j- diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/default-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/default-icon.png deleted file mode 100644 index 296a6f5c22c4e67a21280a8b92690ce63a86e9d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^^+4Rg!3-pSemT+rqznRlLR^7#BV#QPeZ2A!gsy#j z^Xm%`z5Mh6h@QQE3q+5eygV}Z#I<9$Uw;1B!hO#is7IhA$S;`TKM3+Lh%iVoC}lVZ zX$gFp50u;C>EaktaqI1^-F!_33~d*coLZ|Y|8L*wCYGq6Hbuxb{u94XdbXt0l2fKj zt=5Wv`te6;>)Xn;6OKRMpS`{J{Qpz$`5wNnly9-In}6PZUi?23zREw!zwefP-JH~; znE$T6uH1K}-eH55JyHK=1aVc?0F^!e{1cV>6aV%1kF5OvRkL?p|1kX{SoZ$S_&@w# yTK{hS0aE+l-Tve2U;P^cF8_XB1yoRXbY86N#?6Hy$L<6Dz~JfX=d#Wzp$P!f)2eI$ diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-epc-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-epc-icon.png deleted file mode 100644 index 74bfcfcec12c94c1d58181b42ffe2c4297d890ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4fFT+Com}d7g&GZ;Qsr7HMQSM7#Nt8JzX3_Dj45hzu5O!fv4@FRm%}WPQ~~C zH?6+txAx}0mOl4+v#0L&j`|wlqEz9c?;0qAj4n=jHs|xCut)R1KbXJ8H*(*!Db{pU`_(^u*&UB|ldB zYd&@Um-+R>)almybeBB7e&>uZgM7t@_4>b}eq^hfUR-t8UGDGN-fxvNpGIn@$ya_U z-5~fqsKMzgL?O~QXQC)JQ_G#>`H~ZA}SKs~qBz4>GNSV`V^N*Nrj{jD3{o|dh zKWp3X)=$^-HLRH)Q+v4nmwfHvU)STm=>FE{-_>K+o!@>ne_!3EUpJ@Dzxhf%{@$DL z@O$q*zdUvO@0YWm!>hH(Iv?usic&;6P1J<0xDe(t`gyaAJ3&21)`r~jD|eq?o$>tFubY~; zj=oUN|6VERdoJ_x$6a%_tJgE#dvVx##azqUDYsuday(`I!)E4t+a-J2&xcFD`cbCz zG`8m6r-u97&HQ^Vwyz8RHTTF3wmmo7uQ_knQ)I66?c3MR%Y92XsqW^_4WISdy?7T_ lHs8MNhwbupKhTJJ2Iuw|JwB~Z{lLV;;OXk;vd$@?2>_N=ff)b* diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-epc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-epc-text.png deleted file mode 100644 index 00f2a2e45e571fb29122d8c61fecb46ddf3416e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)a_uv1&-he^jeZN40LqNg#^Rv`0GcYjC_H=O!sbG9N^KRKv1s*qU$2z42`~IIk zH?fX2)#^Fdn>91vXrCxt>uWkA!JfrY0ET|N51iF;=2O#}qJP~BUa(HLP>hRwsgm?< z9{>M&Pun~>p6l)V=@!BDJHmd!jh~L6L|aXHzcnkD)lK*-zRb<-=l4Z1JAGFC{G2Y6 zxIx!}|MO%0PWPF)SL=dlF2FlA9Gfnd;f|hxp&Tm=D#~Ge|y&7sjpYtCmVLEuxtK< z{STwsX6>5rWy<_SujeUi`5(=w{;w^vZvXCWns=}KSzWN_4gX|ru}H&9@9XZ@UsNdB zq$ex0e1H8n?~TUZ{!%Z?@9(Ww)^k*RVZrvxxIVhxq)14AFQ55={m;c;IjsAA?)^SF zuLGa*Qa%0O*sq(N=c-n4ouhEh)%wu-rsD~+wOeOhtG{=TOY^a%35TS`k$ewDerx-@ zEf-JpxjB8?_x-&4pGV^Re;n1X``GJc#S+h#^F6P<vHXR8%30NOWztXn zKl4_;(-8XQKy1C`of>4o$0Cg^jdpPj^wVu ze{ZBeXs7Hx$P&+<d3YCIj1N8>%04ZMf~q)^*aBxk6&y0W@*3DN%yPR@AnV? z#@`I&s5>Q}rNuCP{ukw2S#^&ZzowrT{jOf`c9uWY>4kUOclj&7wWY#kTzd9B3A7ix zVDK)`K59Z&-#EL7Xu|GhaLM1_d z!3+)s4fFT+Com}d7g&GZ;Qsr7HMQSM7#Nt8JzX3_Dj45hzu5O!fv4@FRm%}WPQ~~C zH?6+txAx}0mOl4+v#0L&j`|wlqEz9c?;0qAj4n=jHs|xCut)R1KbXJ8H*(*!Db{pU`_(^u*&UB|ldB zYd&@Um-+R>)almybeBB7e&>uZgM7t@_4>b}eq^hfUR-t8UGDGN-fxvNpGIn@$ya_U z-5~fqsKMzgL?O~QXQC)JQ_G#>`H~ZA}SKs~qBz4>GNSV`V^N*Nrj{jD3{o|dh zKWp3X)=$^-HLRH)Q+v4nmwfHvU)STm=>FE{-_>K+o!@>ne_!3EUpJ@Dzxhf%{@$DL z@O$q*zdUvO@0YWm!>hH(Iv?usic&;6P1J<0xDe(t`gyaAJ3&21)`r~jD|eq?o$>tFubY~; zj=oUN|6VERdoJ_x$6a%_tJgE#dvVx##azqUDYsuday(`I!)E4t+a-J2&xcFD`cbCz zG`8m6r-u97&HQ^Vwyz8RHTTF3wmmo7uQ_knQ)I66?c3MR%Y92XsqW^_4WISdy?7T_ lHs8MNhwbupKhTJJ2Iuw|JwB~Z{lLV;;OXk;vd$@?2>_N=ff)b* diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-ims-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/dra-ims-text.png deleted file mode 100644 index 1d54d9aa9e412850ae9f5428b42161b07ea49cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+ux3A`?mc5e_n2Tan|x#Z_XZwne!p;&8)U3j!hZIe;R-AdGIU!C-Z(b z@kuT*cU6@$m#n+FW1iKIl*!x$HaBy`I^JCWXLnR#pKl$z&|aacpB2Y^4%olqGzmIA zx8{87w?$%K8!wCLX+KzZRO@byUs~zjp8^uW*~^XpsDJ(H`0mQDfYb?nt6Iww((MhU z-`Pp+-z)ZVf$_Ta@iSuI|4UkN=0of=IN-p{#7hTb75{g2B3NIm$QXme)Ui?`{IS1;eK|1vt`^{dG@>noN`+Id>2lBIpQ z(C?pz%s!TSmK8hASkhOQwoT%`UG0w#8@tzwq#D?{?Da1A()0Ss^tl!fpB3+H%G=o? zH1F28jq|@7ub6Ljt=!5zp&->^`R9fClOMiw-uLRP&JG{l(l6x|zy1aBTk@QlExG&W zP0369ramdV{n-0L?T5d$s_)}YH+nBJu_=C0@B6Uu_4|K6{+$2!Wx4&|m;Uv?F3;ch z{a)$!@|R2gEMBbfb*<h&>af%)#4(+n=PFX>w!^h zXW{~Vc7Nutma4MXxu#64i+qwP9KXEbh$nOHzNoHWYV)?c%e^Q*+x*L{v%UALV&m7n zmD>H^5B}0SmSX3%?foxy!J}uz8RqZ2w(phsuBC^EL7Xu|GhaLM1_d z!3+Wh3=R9=|G&S!;Cw>Bd6DgSn~-tu|#gYwIJb}X-r zQoC~0#s8OQfzPF6JJuSl3|Yy9Tyz5i*h^p8!?OPSm3IM>ZOabter-JI9!e*~{y zX}?f!dGFm>f##9FI75pc&d+eWn)Ranl&AXdS#SRoJ=w}Cb>fWwb9c!FYt!o5!uY)T zW|@CJeAKmXm)MybnX!p8AeJl4su9(-|%Yg#)}Ow~x4GATv9_jJom)Kj>>qn;(zxd{{pu_Eu|OQ z+iSM_|90%`+^@};D|{VDSz*AWcuJo{&9>aEX@-u&UnwU7OnW;eJ0EMJtt=k49ya~970 zDJK=%^ZV#M{_yK*)rX(|zoXy(YeDz)-lx6)_e)ZvK9Ar04yI z(mQ#lzyFkeFTZT6Y4&{YY0d9C-EL7Xu|Ghaf+azI z!3+)!`|tNB2r#TaZ!llseL%qhFW(;w3{2jhE{-7;ac>SV@&c6}Quw`m+i`YoCLo)E zp`kcx88=^(15eyJ$91QE?|&1fbb8^UcYk~q$8#N4c>E~(Wpt2+?=sCx-G5(|J>+Y; zx8@X2XuZ&yzz4P!cl7?eQSy)dnc(#?B6a1;ildtGX}2$FL|*89u<6jVKO(1+KEG#7GB>uHI%QLqv(hxR zKa+yeyYC(ckm`1I)3fc1ZSBa(=Pb-|LAymJZ@!`J~DOQ2hnSlcNwye_urV@u>J1mk9}84zAQSdYp-OiSbaL) zczRKC^~Z+u-{v`{Oo_=nb$w=t+03mq9)|3Tm)FdglhY-InD zUwV7LYD=q@o4(3)R`YZH|35Fbd%H@)@8^e`A5DIJ|MT(pbvc<>jfBDtL87vGuOpI&Z->84&rPFp;g?q{WPL-{XuBz^@ jZ@&Nj`|rPX`;jR7SR)r{{q@Y7KxxO*)z4*}Q$iB}&n$=h diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/eatf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/eatf-icon.png deleted file mode 100644 index 59463a91779bfb5f18ff47a0f8e86d4963902df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZM#sNMdu0Z-fiD3KGM@>L&f+azI z!3+)W|1%gk>_6Wxkg$G!!2N<($Gs zb|yP)Du~T}Zm(Rc-ftEZ$D!CF;FKYzG*`3j%hvE;VatkBTjTkDvD(%Ah??KLtm+iM z=k?NK{hrY_k2c?WzWm3Bhlktw?XRC*zHhDmM6P|r|({$dr^|3H6WKr(o``njxgN@xNA+^XL&0wqCy z!3_Hw9264P8@!({a6jODe}SF!e|H83MrBVI$B>G+x7Tjx9WoGLxcIdptnmO)zAIEW@dz+_4nSrpVxnRD!6`b_px=Kg7t2tt-5z@ zf7bEin;H-Q-c|eidu)#Ui~L!ZDW{ef6#c*WD>iTT_UG51|2-=D+WYUSn|6YhMei#2 z7rlQKJ=baHM2kK0rBUzMH}byQy{k-dzwK82xvK7SZcX}>{%-!3YgaZo&;LImsxYJ8 ze{OCHuJ~kUw`MFwURk2uV}qSep1xz<%WGPrysghn=O6i`(ORY hD_xbBe?mvv4FO#pa%=3xK; diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ecscf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ecscf-icon.png deleted file mode 100644 index dafbe9e0a17dbbe9a16debf0023eb9916cb1d63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmb7??@v;D0LDpEl&mTUZp3mpi^X}1z1P5YR z2`mPK5yL;2TM#n*y;0#I`XqC|g|thQU&IR;{Cs>8I~iK8swxl^GPaAVQ6!t81;r+B za@?OzS6o?V8G{jK<>&4#k}aEiGhu8^j*ED|CAp?1NT>DkSI=NwBl&_8?AL?MNV$h8 z7BMfz*V@iJIKDN$mgn4&Ipd8U+E%E@=nn3metFL!>n7`v?u8BVMmbS3uF;uIZLLtw z^VKYDDQoJc9?N6oTV!`BEFTtB3IsyGwVv)3Yl(h+w{WV=;(eHYJ$ zo-5Uum7kcW#f9W?P8KU`J_DrK?in=oT;Bkjs&nI)ydT2R%2R=>k--3U<+kGSIsN-# z1?5pk5tXf}BG*EAqP-nTyzmF6uPV7#Exh?L7)BTfwmYjSI{YJ!A*3Xr!%LH|1{Pij zA0PJ88?>qMe>bzsg4HzpKUaO%n%S_q9>j)azLdJ7`#VuzhnDapb>3CAHB4Ho;*Y@A zm4@~-sU(uRAy|jy=_@0s{hZim+y=)wGproTM*h`#(tPQ)o{?%B$^W&dM>x{Id@-X* zA%bqzoPDy%F=73Z*XUiZJ*J$E8Vk(wioj9J;&c;NMQRaXcY;YTEWtn!7h-_SpcgAh zydp3Imb87~7Z`Mmzk`_;pl18E9a3u^wa)~0&&k_}Y-+_<-_qJsU}KUIO!$Rkv4tlQ(W^6ZyWS3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ecscf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ecscf-text.png deleted file mode 100644 index ca98a51d2a619445c58c0d8b7ce3d711e0fdfd50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+lb83Ov>|G&S!K*3?YK*RY2(Y*}q3=E8iJzX3_Dj45hxj1Q#fD=|l?$c+NZx>!k)syInuaow*&RUb0cJ%*>_#e9sw$=osUzOnd5*l~fMOr(FXa0BZeG|783EyHb zHQk~)@$oV>rI}pChV8%Jy*X2-+RS2?SpggC$DSi zb93&rPI|L&-|hY{rjb9yzWu-R{M_p7tua5Qwg28%wrjopYPD+4ny$n5_XjQieWiYW zV*ecr+b!?@Io|)As5W^{^QyMRe{a3L9xUBrrSA6ValxOzo@?%H)y#Rm*L#=$j}20X zKiZwWQ{m3OeUGrv@A_&lY56&ZHP@~iX$t)m*~?!OwX$fl?$)ZjMW!+@%k?$|Etxtc zhll;wvFPK4S?Z=ArcYS=&>_CC_{rr>ms9nxPmDh*XZOILg1da} fmy6hmzwzJMw~Dl?7<>}-1I3M}tDnm{r-UW|@(@B& diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/emsc-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/emsc-icon.png deleted file mode 100644 index 2904d2770551ffc743b9e62859713385f74b6839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_0wi;`T%Ezd!07Gi;uuoF`1Xz??_&djwm@eN z6=%&BhX}Pc5sk(V?{|Jm)n0pd<)?j$2J2sGZn~@DISGVbHa_*xw|2jke)-eQIXi>5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enb-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enb-icon.png deleted file mode 100644 index e03be510de2ca17e373aa3d7ecd1e08e0fd48ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmb7@`#0MM0L9}G)Z+wI^<3h#oqFtqO1(~ZB1TaaiqTH16m4ys*{WV4-;^Mv8jV+v zSfVR6q8@cdYvemQ-lbVfF(zpnk0_CnkorcFS^tCGbMO89bbq`hVfX+eeJgz!3}zG* z=ofxK;J@f;9rRX$*zN%CVdo?L52*hC+DaJSKUkWkhvOq)C?6MCoEl7%kc|*^V6`F7=Lqaayb$v2O2z?KEh%p9i{gcq@ zyUzkjJ6{5{u3@B9h&TlMRb8!zx-5&}J>;*`wpFy8uF3MF{Bq|dKSYs zONpaI{d5HXb?laP>)pE1`kmVO>zt?B@p#4Bn2o_PD#75^;{FfB6D#@H{^-sNV;EGj z)d<}uMKRr%c`u#+;~oTe!UbT<+AE96?z0+Bg&H09O2g%e@0j0Sz%Z!IH-&DuCMPBa zgMeHfHqFP}B5AOpTa%pJb$8qWJH;c>azd(88_E~JQn@p!f{4eq6jo-;RK10}HE^r}5=z$?$_aHmgHO0ocpO(&D#vdI5w|BCsU_9fwI)y=qmx z>r5WglHH|{phuih71+lh_RgPtNi-vEAF*#~w2}e(2R~m#K6LR=*kXi}D$Njjj8cbe z*aO`#rb}eO&=hBJ17r9N&W!2pccNrlu0p@CYQ-^`S*vY9p(#0FZOfcATFu$h-tf(f zL*On}#!@=wwmWh8vT!n7^aN=w(jvgP*JRho{x!g<0&Vf7Zd*I&KnZku*_s3ifB;p9 zp=sBRcFf6m)+`e`V z$gw@>dgNb(d9Y{`pNAD8k2(9bXWB`cUa+h-%j7Y;o<5#p-I%^a>vA~)n?Q8W1_vxi z9mf4C-RdR<11maAE?i5}GkCqOyQHI}#Oi8`SNj&v>ha|~Llg5yM^P!zM%D7wMh;J` zp+}vf8b|f*!#69}D*QFbRZ|B1#sXs6QdM3HyaSdc&7ugy0u|6k31VNw79 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enb-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enb-text.png deleted file mode 100644 index 9fbf8c298b26cbeb3134ba77feef6d10102869d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it3Jm|>C+t6ee|>>KLw~^hxl0$cGB7aS@^oAq69B+etF_Ens}l&P_#f}uQzVvB$if>^Jb;>UZ|u5J6`IbrS7HS#52XH1u0{-MMF z+nxRrjaK!VF5daY4>{+j9De>rc^}{OecLqaQf;Rm5w^RjJ-^>)*6~%B!;Ow<9PacF zzAP{FzWnF0z>{a)=et~xU^nRY`UX_Uksjf6{dFmv4&JHIce;+iLWWsqlL}mH$-q;?wl3 zslro&dvZgvet1j#`eRh`b=}S6Y1f`r&oAMMt+SonCHDQF8S9mu=XYLs=xvpmGT*;2 z{ImUuR{h_?_cxuF(iOMUSA4`dfBAvd^XW&v*E(9}uD-+{|8kmqCBv`h^2h5k>&|YM z-M2XAuzb*A`Q3kCK0mSY)cvCE`xb1y@^JMp#pG>PbAEco|2C?VH_889Q~uKMSjK1R zqo?lA%Koo&_xtbnEBxB$o?p7m{`=2^L33~Zp0oS=)|Ykv%;xO~cmL0~ ze7f*^nPHa3(XCZ$do1rgO4+ySp}lm?j}H$IxAV)}p)>yP|2hBd!ey3g)%NND(*T2~ LtDnm{r-UW|%ehT^ diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enum-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enum-icon.png deleted file mode 100644 index daee75ac845c72c81c4077652946c2ec71c151b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4gLG?|7Q@G|K1=#Az}UbMCR643=E8KJzX3_Dj471I-3`x$kX;v;VNz8FRL?R!sGB% zj^Lng-IE2vxgK>*i?6?J&ARe=-9(x1r-S-xoNRcvyft^}z3}bNyv2Sy-~X_Eb@lpR zDbv-b>jJ(WUKPJ6FZH5&>ioQ4&z^64p`P(+aqb-ZU~l%fbN{PwRZQDt|365+y~6gM z{i^xZ7BjYd(|=?*J)>~R-uivhPsx4emN;`|%J=*3y&XT4ANI>!EPj3W`}g3_!Iwig zUO!(yVOreA@_+u<&wYG$_~4(J>*hRo^8DkU(}yokJFC3n>ajoazugZk{-gX&|MOY%`!%1tSIxWo>0ji66{50u6-B(D>U78 zzLS4d)jiAl%_6*ePyPETZ!`DN&w_tXHdeE$v|ant{CG$hn>i!pf|9k%KcmMGF z^|AH;zcJtYZ@cT$zd(D42l7+){d_h%|DS$NP3L((6-H-ZvS9FZ^>bP0l+XkK#JF+s diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enum-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/enum-text.png deleted file mode 100644 index f04e3d5c5e95c6eecb935773f308fed2e7b8d5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+lb8Tu0h);s(^-!MNw;eEk<&3Rf$3=E8Yo-U3d6^w7MKFnLAAaL|!YQGY*)~|p1 zxBYf0AE|5Pt)6{n&j0qVS!eazIBN}#NhJ3eB8YGC&*yDt@Tn@@vFZ7{^u)7O<~I*5 zJf*)re7oEZ@h8)&s(R(7+43(s=vDQ7i|ZE+-EXgIUUp* zSN^Dc|9SKF%87CEVSlSTYxn7VtC^r5JYRpaU769D=@;JJ?)zzR?EJQ+y>)eOZ={&N zKYRbF{5Rg-ehF^$zdkAReAw9WEb6Zj8+Y4}e^*|=jIMRD zW8v-+obEzV_Fb imzS6O&$mNk{Aac2>bmS2%2EW3HwI5vKbLh*2~7YayC+Ei diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/esmlc-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/esmlc-icon.png deleted file mode 100644 index 2904d2770551ffc743b9e62859713385f74b6839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_0wi;`T%Ezd!07Gi;uuoF`1Xz??_&djwm@eN z6=%&BhX}Pc5sk(V?{|Jm)n0pd<)?j$2J2sGZn~@DISGVbHa_*xw|2jke)-eQIXi>5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/esmlc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/esmlc-text.png deleted file mode 100644 index 0a29e736f2410bd5f0312fe20dbfc518322d09a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wp3aUZOeAM5= zAH;2#y6$F`$$s6q^BuKXpCoR&#ZXh{{@g z`0G%y>plNJh7vv?tkoGc6ItzxwA#D(pOHsd-cfon!Q%CKayq?TYR5v zr}g&Kb+MIGe;&>kZnXH;%zXd#WUFtF%WDeOH<$m+J!7_G$+7dt|GnPA9sgMIR>`^< zd;J}&j>-HE+U#H3+m$i#%60McpW?qRzVgLLxU@?7>&@@EKa%b1%zv$&v&}A~%x>?! zgEg<(t?ja#@1M?`7#22v`990DM}Ldgzk2Og_G){4D}U|X`iGtSkIhS7tDpMa?zn^a zzR9<0?#thb&9wiU^W%`ZWLr$tqw||)ZeQOMS$j6--~Wm_*L`}1zru{?&zJW$I%DF# z^5Rzcr2MP@@1GU?oZ>upK3lx>{hgt0Vf(&qU6FraU(s!U$9uP4>^z_MZK1hfy;Bq^t!N91hfy;Bq^t!N95 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/gmlc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/gmlc-text.png deleted file mode 100644 index 43cf74d9bd1a09c5dc7fc4f98c378f733f650de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+ux1`Pe@6ZQwJzu)j)pkV%vlMh1~7?`3xT^vIyZoR#JchX`7fwqT?Q4WGz-v3YA z&Nlh4K*UnBYi|yItDd5GO1R#Azl!H1RP@U~C`!7@;_lqf-LKB1Sf;D@20q^(T#|Qg zapf(|`jXn)x({ua@BFs)xzg&FS5Muqv|5@Zca~fB^;+B7-k2w6TkQ+4PV$;>?sRj{ z_o+`;eeM5u&NpnTowSoQ{|~jI$^IX-_nn6%=f>H<(Pq+A?!}ZO*@# zbDaO)-2VPWBk=X-rn#lhwbwLS@|M-#j`tfJ^nY0VJ~OpGr^IJ{Yx0hd z-;)h@eO5Gx{rURSuDZt?*Z*nlceH=K&y_cFN{n+Wzzwf9~*Sw0^y3-@2Njz=QI8{x81r^*+n%XFmepPF`j> zKgW7`^7ZfczncZm74m+4dByu3vy6Rztp1c~ZLg#9W;ClIW3RdTb@J0?GweQ{ER4QVJO9$T(1RD!?OxufS-9fUMVTEr zUSC%FXLiMiJbV4!esBAC7U{YbulL>aefm58Zp+=S@B3qgo8nWqT$ i_4ob2LHzUo!fmARaQ5OC6?1@TkipZ{&t;ucLK6TQbf($> diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hlr-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hlr-icon.png deleted file mode 100644 index daee75ac845c72c81c4077652946c2ec71c151b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4gLG?|7Q@G|K1=#Az}UbMCR643=E8KJzX3_Dj471I-3`x$kX;v;VNz8FRL?R!sGB% zj^Lng-IE2vxgK>*i?6?J&ARe=-9(x1r-S-xoNRcvyft^}z3}bNyv2Sy-~X_Eb@lpR zDbv-b>jJ(WUKPJ6FZH5&>ioQ4&z^64p`P(+aqb-ZU~l%fbN{PwRZQDt|365+y~6gM z{i^xZ7BjYd(|=?*J)>~R-uivhPsx4emN;`|%J=*3y&XT4ANI>!EPj3W`}g3_!Iwig zUO!(yVOreA@_+u<&wYG$_~4(J>*hRo^8DkU(}yokJFC3n>ajoazugZk{-gX&|MOY%`!%1tSIxWo>0ji66{50u6-B(D>U78 zzLS4d)jiAl%_6*ePyPETZ!`DN&w_tXHdeE$v|ant{CG$hn>i!pf|9k%KcmMGF z^|AH;zcJtYZ@cT$zd(D42l7+){d_h%|DS$NP3L((6-H-ZvS9FZ^>bP0l+XkK#JF+s diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hlr-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hlr-text.png deleted file mode 100644 index b2762502b069ca30cb4087e49d8c1ff377c42b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZM#sNMdu0Z-fiD3KGM@>L&0wqCy z!3+%!``_PBP!I?xn7_W?;Jk;@FK(dR6Hgb%kczmsSI>4GHsE1My!p}pj>_75|1-ti z6Q=#zG9{{g?t78MiH!~$*02DTgMol^c*=^0W^;Krwie_*<5+siy{T+APhkG#n+x(k zC6~XR{pZWu?5bbiO!eQ}CtY8ck{o%rKPl_lyDzW2FY8%fh_%E>nA}{d=>bP0l+XkKn6$yz diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-epc-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-epc-icon.png deleted file mode 100644 index daee75ac845c72c81c4077652946c2ec71c151b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4gLG?|7Q@G|K1=#Az}UbMCR643=E8KJzX3_Dj471I-3`x$kX;v;VNz8FRL?R!sGB% zj^Lng-IE2vxgK>*i?6?J&ARe=-9(x1r-S-xoNRcvyft^}z3}bNyv2Sy-~X_Eb@lpR zDbv-b>jJ(WUKPJ6FZH5&>ioQ4&z^64p`P(+aqb-ZU~l%fbN{PwRZQDt|365+y~6gM z{i^xZ7BjYd(|=?*J)>~R-uivhPsx4emN;`|%J=*3y&XT4ANI>!EPj3W`}g3_!Iwig zUO!(yVOreA@_+u<&wYG$_~4(J>*hRo^8DkU(}yokJFC3n>ajoazugZk{-gX&|MOY%`!%1tSIxWo>0ji66{50u6-B(D>U78 zzLS4d)jiAl%_6*ePyPETZ!`DN&w_tXHdeE$v|ant{CG$hn>i!pf|9k%KcmMGF z^|AH;zcJtYZ@cT$zd(D42l7+){d_h%|DS$NP3L((6-H-ZvS9FZ^>bP0l+XkK#JF+s diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-epc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-epc-text.png deleted file mode 100644 index 9739214fb407ff52edc0d21c66cf4a9141a23e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+ux4FC5xB&@$LVDP@b;C#URMGTXe7#NsrJzX3_Dj471INP_{fT!(Y=Uagj{EFY} zH$Ru?5)53DXJE{2KYP{vXSzYFo$7iFk4YqhiG2kO4Rf=9zhmFem{jrUPu`)}8JXM9 zC@S@t@2!h^F{xWRKkKhcdETCtU&VLLEZmd%^>Uy`&DCsGCYk)GzfQ9+}rX? zcz@NNm*!{d6sCPpn(Zd<_w{o57VYr0_vPM{@93Y$=Y3OYQ(f@8r$N(8{lUJ2! zc0Bf7eg2TsqK669>)!iE{?ZXWxpuMd=l||SGjAB(`|?Z4EGchK=J%)d?8jz@*)!d9 ze_?*NZsE;`ibCCseZT*|-rn+}Z+?s{&>3EHbN6U|O@0}~>puI@`}13Uls+5Xkb9wi z{zJ%*SO>A~kF*27`Q~li{kCymll{Hz`@XKtuYDbT|JSv4zdte?{j3Wro`>yo&Cae` zwbIUdfqzEjr%Lgaw_*(!hc`>am016yq){s&mS#I zeu+=`_rhht-n;&vf397eedT?*&A%*r>$i2Y{rr9{QnUP^{o~U2_#fM1l`Ct0e^=+) z_#^voZ^Qxbnyvjaud90P-CF)zc;l-A_Nf_FYvT86#Ks@-(b>+M@b$)W2dma$tRfa^Bq6b;Ub&?f?8I8RB`QaQM$2$T_>L$@Y^H QFqtuUy85}Sb4q9e0IDa5X#fBK diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-ims-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-ims-icon.png deleted file mode 100644 index daee75ac845c72c81c4077652946c2ec71c151b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4gLG?|7Q@G|K1=#Az}UbMCR643=E8KJzX3_Dj471I-3`x$kX;v;VNz8FRL?R!sGB% zj^Lng-IE2vxgK>*i?6?J&ARe=-9(x1r-S-xoNRcvyft^}z3}bNyv2Sy-~X_Eb@lpR zDbv-b>jJ(WUKPJ6FZH5&>ioQ4&z^64p`P(+aqb-ZU~l%fbN{PwRZQDt|365+y~6gM z{i^xZ7BjYd(|=?*J)>~R-uivhPsx4emN;`|%J=*3y&XT4ANI>!EPj3W`}g3_!Iwig zUO!(yVOreA@_+u<&wYG$_~4(J>*hRo^8DkU(}yokJFC3n>ajoazugZk{-gX&|MOY%`!%1tSIxWo>0ji66{50u6-B(D>U78 zzLS4d)jiAl%_6*ePyPETZ!`DN&w_tXHdeE$v|ant{CG$hn>i!pf|9k%KcmMGF z^|AH;zcJtYZ@cT$zd(D42l7+){d_h%|DS$NP3L((6-H-ZvS9FZ^>bP0l+XkK#JF+s diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-ims-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/hss-ims-text.png deleted file mode 100644 index ec69f2599a89ad45dba8e58d50d846e7e090f5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+lb8Tu0x3hvK;FW}G+aDKfq@6l2Q2Bug~7srr_xHktHfhrjq7W`c)z7oXBJAN-r zk3CU?p}#YVKQs5<|5SF@GgJOt=$h3oUdRNT)oILrbzssPp1-qx2)<&NdOT)jnVrqgYmL92+*~|U zo_zwJl2u+BpDc%StAk5=^0SQR?e^cd&&y?~{2<(6xp;0pSL>@4N6y&S?b??YIc4kn z9qO?fGrN-t{$B}~v{RGQ{5i?D!{*S*$vf*$N-&+Pn0Y4Ub+Sg&Qg8i+gEN0g7<(UL z;Ye9$5iD;gmz$`fzu?Qk&*8cYITgG=l6-9w5#{Zv9WSUU%WQzYHmVkUEtT0%XeSz|FV?%(YyvB^}EYo#jX7#bTnW8?&{X_8!FD9 zzJ7Q0%=6E!6!yJ}0MwdZyP*If09`1R&^UpG+g-uPW5i8|R1tE#tt zN&m`o_q0LHRiLtp^|2nMzd(Xd!^$;)My#!QInQ4tzI1(?-LJ1QEz{p!J+^)=ci_)e z)ux{=o;?)}HoW3P@2PP08$V~fJ{*2`^-_Jo`11Alf9S+&^>bP0l+XkK8&;t# diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/icscf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/icscf-icon.png deleted file mode 100644 index dafbe9e0a17dbbe9a16debf0023eb9916cb1d63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmb7??@v;D0LDpEl&mTUZp3mpi^X}1z1P5YR z2`mPK5yL;2TM#n*y;0#I`XqC|g|thQU&IR;{Cs>8I~iK8swxl^GPaAVQ6!t81;r+B za@?OzS6o?V8G{jK<>&4#k}aEiGhu8^j*ED|CAp?1NT>DkSI=NwBl&_8?AL?MNV$h8 z7BMfz*V@iJIKDN$mgn4&Ipd8U+E%E@=nn3metFL!>n7`v?u8BVMmbS3uF;uIZLLtw z^VKYDDQoJc9?N6oTV!`BEFTtB3IsyGwVv)3Yl(h+w{WV=;(eHYJ$ zo-5Uum7kcW#f9W?P8KU`J_DrK?in=oT;Bkjs&nI)ydT2R%2R=>k--3U<+kGSIsN-# z1?5pk5tXf}BG*EAqP-nTyzmF6uPV7#Exh?L7)BTfwmYjSI{YJ!A*3Xr!%LH|1{Pij zA0PJ88?>qMe>bzsg4HzpKUaO%n%S_q9>j)azLdJ7`#VuzhnDapb>3CAHB4Ho;*Y@A zm4@~-sU(uRAy|jy=_@0s{hZim+y=)wGproTM*h`#(tPQ)o{?%B$^W&dM>x{Id@-X* zA%bqzoPDy%F=73Z*XUiZJ*J$E8Vk(wioj9J;&c;NMQRaXcY;YTEWtn!7h-_SpcgAh zydp3Imb87~7Z`Mmzk`_;pl18E9a3u^wa)~0&&k_}Y-+_<-_qJsU}KUIO!$Rkv4tlQ(W^6ZyWS3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/icscf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/icscf-text.png deleted file mode 100644 index 6dbfc819cc612b6c1148c4882c1b114cdf5cedc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+lb6BrZ<)}R01AK>u*zQFv3-Wk8j85kIUc)B=-R4~3d*a%e0(6Hd|O7WFUASMID zvZZ`w%Iu8_Jo*7Q^ky%6_&2`na*|`F=4STpn(b3u>UwR@tmpjbeTe^4VVuh2zX@99 zBAfa$FI`bOxmvZ=^P*?LzXRHTEID zKXOI?+Lx+SaPi{Ia+mTiTQAMwU*NBz$=J9oeYVui1ix9@ngLS#ReJsfF8j0Sex^`c zN~O$`6;f|2W#f_smR0UZsJyt|?B0x^8UME(&fFF|!|Bkpx&ZD=H}{|8!aeV*&$@9&-2ct8V2)&3+#hBSlgx8-bN%hR*A}g~I(dT7g3`F^C)s=I zA1vCLdn~zriEgcoOp*+1*jtn9H>+h%|6<){>Bg7nEpINX8TGQ)Nyv)*+n0|VJ55-( z)W@f=9dgw(ObC~s<#*|db+X6Wq7uHNpG+1`42!$7|No^Ru03z2t(>x`VB44agZIBZ vivY!6!i4=_Rm!G0)a}3j{`>F0C{#V8*XETGu?$}~gH(FD`njxgN@xNA_B&Qs diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ipag-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ipag-icon.png deleted file mode 100644 index 6f15bdbf4793415b578edba7d857b391ea3f0279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^^&rd$BpBWuQ`iTjm`Z~Df*BafCZDwc@+3T6978G? qlNabpur5vz>1hfy;Bq^t!N91hfy;Bq^t!N9mTUZp3mpi^X}1z1P5YR z2`mPK5yL;2TM#n*y;0#I`XqC|g|thQU&IR;{Cs>8I~iK8swxl^GPaAVQ6!t81;r+B za@?OzS6o?V8G{jK<>&4#k}aEiGhu8^j*ED|CAp?1NT>DkSI=NwBl&_8?AL?MNV$h8 z7BMfz*V@iJIKDN$mgn4&Ipd8U+E%E@=nn3metFL!>n7`v?u8BVMmbS3uF;uIZLLtw z^VKYDDQoJc9?N6oTV!`BEFTtB3IsyGwVv)3Yl(h+w{WV=;(eHYJ$ zo-5Uum7kcW#f9W?P8KU`J_DrK?in=oT;Bkjs&nI)ydT2R%2R=>k--3U<+kGSIsN-# z1?5pk5tXf}BG*EAqP-nTyzmF6uPV7#Exh?L7)BTfwmYjSI{YJ!A*3Xr!%LH|1{Pij zA0PJ88?>qMe>bzsg4HzpKUaO%n%S_q9>j)azLdJ7`#VuzhnDapb>3CAHB4Ho;*Y@A zm4@~-sU(uRAy|jy=_@0s{hZim+y=)wGproTM*h`#(tPQ)o{?%B$^W&dM>x{Id@-X* zA%bqzoPDy%F=73Z*XUiZJ*J$E8Vk(wioj9J;&c;NMQRaXcY;YTEWtn!7h-_SpcgAh zydp3Imb87~7Z`Mmzk`_;pl18E9a3u^wa)~0&&k_}Y-+_<-_qJsU}KUIO!$Rkv4tlQ(W^6ZyWS3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/isbc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/isbc-text.png deleted file mode 100644 index a842e9ffde944cfb18270e2469d46eb8d5821e99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it4E_5P0_Oj}-=Oebpy2#^t{FE)85kHpc)B=-R4~51c02E}g23^Ihh`iuFsl4N z{jO|=g2uhDsV|Ru{eQnoHL$M2E6@&T8Up-N_R98+|FOWk{paaR*3Ws3*@b0IJ@3to zWO49T#?ARQrAI$3nzsAz_G!Cc zZJs-S!-h9E(`{Rq$8ByKjeIFET6p!dtq|Hhp$o zp1oC8*YrPc?YMorm-_2Gd+fb$^SpQ8i=+RnlRvgXYwf#l@;ZHA&hM-KHl*NR(So~wlPW$vU6e1>xnp(y*~^ZH+Mc@Y-u3^~ zxw@2%a}4L-e|KNtXkg@(`)}4q7i^hVfA`wkVy&#=dac^OGydw;{aY4sBmVXIOSi7; z%nQGo{QKu}$NIb9b%c1Ix7Bf~>Bh7EdHUz`4G-PV^4IUbcb~aZIdS^rv}4PT-Qewh z5M_I6_uISs9<7r)?5j8bZ;n)6m51l1{UJMp&3{kZ|NozH`$D7jeYZdR&x=p-4*$D2 zV7bBVO!_z8&9WzBGS{<&t;ucLK6T4vu1Aq diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/iwf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/iwf-icon.png deleted file mode 100644 index a82e73c193297eabbdb8f1f862ddac30d78454cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+ZH6&M`;zYpl&-%v0=;l9Cnw=G%53=B;2o-U3d6^w6Z-pzZWz|+cY*se19!{>kc zyUnegs!bewUbRZsPY+$mHcCY4gQ{yK+t2rI{E)w%d>O6hqxw@qIC z?>E84PZm8`e)x^nu};s!{Yt$3>ouhQy;%{X_WR*eeb#uv^4>qux;uOFS6Dq?|Fq(P zbl%)w+3pGdwSF(TP%r(x;%V@=H|kzL&hXha%{v$N{@=%U*T27iEr0vi%jNg}R%hP% zuP!CN{Qc9L^Sd*CY`@`o-*?9TZ)uOelvjS)|K-{F$GMNcoPYk)x?|q`tLHwJngSn?|BCk?F8*s% zlsozFRPXy&BcA=_FZi|Z`u{zbzrKHPY&OG!U7COAd-GratzLKPulm$W`9~|xRMhXZ z{2SKe@#{1H<33)IXfq{l)yRZCUTn=_-FkpR^vE@?AXY;Fs_73;(;ypTGS- z>fr8OS^v-WiGA>Vum6WD{L!25{88p!F%SGplzA6Vu79-7VqN%$<5zM|Gqi&em%+o!(Qhiw1!U;cw%*suJFQ~yoZ`KliIvfnf8SMtQtx=a3F`rpTE t8}9#^o>2FB_WeK4%=iC1n-5|BXHMLFRZ#Tv8&JAr@O1TaS?83{1OQX&h#vp| diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/iwf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/iwf-text.png deleted file mode 100644 index 4d0092eb0ba59affba0db2a4cabc1192a8e2b20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+%w3=ReX3IFF8>=)?2e}4V@K=rl985kIMdAc};R4~4sdbV$|fdJcalNkwT{O|ow z4PT^b$#W`h)7-O-P{NX<$7Qfe7dhOrNw&IT7vHIK(#Zt#FxfvPP7XEAHJ#xM5@O%4d9`$+B z88-H1t|`)cJN_Sf{_l0AmA2u;FQ*EQ{H)AR{AFYuc=D{!Yki$Pjnl*2lnOh(@T=_n zVXN`G>5|i5oxSH+k7oRS`{!oeNB`Q#^MBmjxN}?F`@e3sr}c~eWo%d7|7BPAXTt1oqc{=S)*Z#W0_qV1Tem3#uqrYqKx*2=OX)^v}_*cLG&!^M+xQPGk*Lu2B UHc!1-0gPh?Pgg&ebxsLQ0N7YT!vFvP diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/logo_onap_transbg.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/logo_onap_transbg.png deleted file mode 100644 index 8d6010091c68ae8f0d0e14f67d75711574830c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52523 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�m{Igoy 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 S3-Q0-qw~N}6Q%z2)&BvQI+lz8 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrf-rdf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrf-rdf-icon.png deleted file mode 100644 index 82b5c473bee9504bc5d5d9044a3f5a992502516f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wo=l?VG&wsDruz!8R{Q`pkTNC$H3=GT)o-U3d6^w6h{4ZLfA#(I%!*eD3mTTYZ zZ?3(WvHYy$E2G;1D`!3Zz5QGJ3XLbp-1m?@9R$-zZ(C(U84EjXU^K1$qWa!{yxU&U^Mqnt6cHX`ycYX-D4Pn99o!q|ZODJb{(de|uI>n!U~Xm*CC^ zTC4XR4u4rEt9{${X@~7Y?d89u*I1ZUo4OLc(s17PDbX!;Mp~Md$w&Vu&wFe zwny?&deI$06`8(cQ{8`*d|z9+&Z=O2&xi85GwU;w-Z0mkt|?_GYncC{IV9d}DdWDP zcJ8>>@7ecEn|f1l*Kfh~A9>6xbo;(`7o=`jZyW!z{)w{%&$p@KckFJ6$EDsaYJR?7 zx9^tij!jwPf3YfihW+1{{`J2u&;R#jIf!Ym zS^e)~-Lde>CF|oGRO}zle*47S_*D3*+xoWMJRjQ4AgcefD>_KB1TDM1449J`JYD@< J);T3K0RVwr0!07- diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrf-rdf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/lrf-rdf-text.png deleted file mode 100644 index 14daba85503440b4f70fed21c83123b3e5d15a72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it4FC5RC^YoXPYAewUf}(D@rlv$3=E7Gl60GlBdjdvTleo)SR&t<)~x@0PVqTQ5b-yY+vLYA{Te=x2j<=j{vXnP)am&+ zvsNM3^xfsOOZ>k1Z`o>XWIJb>{F2lwtc%xC@p{jG<=J<`VCJ&F33vRjxNQFC=X>;? zzs-R+b{)ye8|T%wKL0i~%I9~b&!hTg{ zoqbG+{iKGSwXWX_7pHB0)$eHXI(bps^RLqv^oDP+b}DwiCa(0d)JEFW38R{{Q~5_;kj<>9^ANU;VYcchx)nug;EG8 f{XHZY{EL7Xu|GhaLM1_d z!3+)t3<(VZ3jg#&IYaem)}*%#hc?nr4` zee|ZloSUk<_Ai}U_4CE7ML+-e&0_lzGxNZsTN{?k@BRMN?Zzo{)>luihi5$fz4ySq zCp&zZ8_pGXO6~e}=ae{C^~qS@xfM6=s!v}%J%53Vl-rMhnti`HZ~gkcZ9`}Nzk>Pt z)q3{q#%K7o(rq>iH#}-=n)7k1U)}8XSNHuT9-jZQYQK{o|F^~Wy{DU&-~1^0?8lmY z`~Qoa@8&C2wtKXB*RRsAPq*FvDs+DN^7!|=Y}>V`@W_{aJ2-#$ynMTQjgM#KJ}uVI zU7PNShQQr^vn0RsrMOo@7R3v zknp~bzPCS~3VZ(iyFlL?EB1Y?+OPS4%oUEW`FK&j$1@vmo}n@K(W%(5z;`^r^*X{B=$kMH|Y=y*i+Drd%BHFhpNcjlV1jUQhhUjEfoo=KkX!}A)0t#z?{e`^o3 zZ~OZCaK6=_C*Hp_>kq~}_{g)izV_FP_ovq%{+As8b#JTrUzZ8hPye~cJ)Qq2_r&}C zE6>lm7x`bL|LXs1|F(y0{a7lq<$tu??Q7d5+H3!PwBLW{KYs(a$$|MZmY%;~&-UX$ z`0l#Tf7gG1p15 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgc8-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgc8-text.png deleted file mode 100644 index 2ba933a74015951a442990285b1e467031a5d58f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 771 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it3B=3=B+Jo-U3d6^w5V8ZrXa9#Z(d-0YZK0+0y= z0anXXx8$gEIA5IAAmDJ}|Noo!UKbXB^I%`TPF>dEv_prU(xL{ziLUB8N`CDBG#=JR zOy&I7E_cl}UtLo?_0+DLo&0wXdK|4N5#Ik-=*Qf*;!mV!*PiriT>Wk7TdM<)b1OfX zd+8qR*Kj$sC)GH4)xC(`%+z=0_4NU6wr7ja=BcP|=-5`7uYSDwzERoP6Y}fZn>*I@ ze%i6!w0He_a((aj#_j*EHXD4ge=ql^;=pTfd;gQRQRjYUWb_yB_qMp~ z{8w?Ozwg4GXaBIq%d%{%eRbTD)9YVS#f0i&x5R0k_66SY7j&Q1^_B(fcY3_Wy#B~> zRlh%yin|Wk|K4i#X|c+z;0>R;3%v^+C2JqEKhghDa>;$WqRrYfo9^y@vg6;^*8i&> z9j-m3!s5F9Lwe&>tA7uBzKY-bVJdm<;;)@|WIi4Ke>BbJfZ>lnrr%GUj}_7U$lW75 z&3o#JU#Hg3lHR`2_29i683iZfq^sq1|NiHdh97!*?*aeCi9xq5`2N=ix%^u>VNS8g zavsI%bCwr=ME}44?O6mUy(CQ7|5c@InuGEF`|rR1{#ys9{(t`c_a6h}k)CTmoEh~% ON5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgcf-emsc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgcf-emsc-text.png deleted file mode 100644 index 74bf8f2c66fe26d5285c68efaddebcbe1efab21c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+)s4FU`b``;(5KR@5#et*E`(?4f2FfiZoba4!+h&@k# ziSmyH4K1{VK8pErovbl?tA%=+1K8Ej?%-|^Y$#;A#BGG)TFrI zxPswqu#{u`ZyAfnw~yt|{eJX#enbkNY0~l5bz9Gz72u z*^)n7;mMTq%pOPUj%x~O-l#m|}-`g6WjrfOd5|2Hi|)Ae^(M_u=^Qx5Ce=S_Jy z?-A$!DuxATPCWl>dHwHG{raD$jsie%>P7EGtsZM}DzMP%;Y@4CBA|9iY_ zLFb|+>nt|8vL(5m3cL4^{jkl0yX_51r9B5!r(C>VyYs8b)IaTO*=zPH-aJz}|NA}Z zN&ftMzfb+v9J7M=-fzQ6e>a^k{n_!R`_l5@Ql3EhUl(s=%m31}PwSuY>D;~>?{*%r z`xE#3HP2Pvmyw$V|1a4ee((51f2Hkd^A|sB;=f^B=i;ZK(^u5&_E37>|DA2WUj5o! zu8}$S*Ztk~U$VG@n!Al6q6Hlmh{u0&|J$IZG>L!iDcLJk0ydGR$N35tzA~+U&y~OT z_1*HuH7aILEAN#DFMQ`}U+z7ng6C)0#K$f9p%dCqyVgfsv55KfGD%qX=N^U+40^vT z+&AVQ+QB#3U$eJu!jJYQ^PjV7xwr65Jg@n)uIpcJC zjye0jucu8K&fH(*(-8c+KEZBxer>km`SSU;NBv(P`uSV_i>1`RoyR@pzvv#|eZM!X rl~M1?GTmAKtNw5OgA~nR=6}vrdmXZmMzTHt=4J*@S3j3^P65 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgw-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mgw-text.png deleted file mode 100644 index a2470f5d133ece5544bcb9e7d2965cf5dbe3cfc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+%n3TRfe66;s zlsosxp?jmX!Y4}(TgyjIfA!;HJ8nJXXckiP7P&8wn6hf60e%T7D~?!~WzwmTjzUKVL57c=Rx{vCsP`QZgO zUw&mUh`$qAH(j^V?tjvXsps$PJ9?q|k+S4RPdky_&llTWKc3~z^hsGoc~R;l|H`_s z`zKoKwPOyNmCOkJraJ%q(3`=8rn zRuyfSo@*BE=3H~yKhP#_ol9r7S^3YOrt+_D3)hQ$x7wBF-g;|#&8w)?EBkIGTh4#w zAL{x3Pi3s`pTLyo=}&*|zdbvd5tQN_|6SXBBa~_GpSu0`-+%x8_g^!Zg7BEvTwfr= TogDZ9lpsA_{an^LB{Ts5Bd)Cb diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mind-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mind-icon.png deleted file mode 100644 index daee75ac845c72c81c4077652946c2ec71c151b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4gLG?|7Q@G|K1=#Az}UbMCR643=E8KJzX3_Dj471I-3`x$kX;v;VNz8FRL?R!sGB% zj^Lng-IE2vxgK>*i?6?J&ARe=-9(x1r-S-xoNRcvyft^}z3}bNyv2Sy-~X_Eb@lpR zDbv-b>jJ(WUKPJ6FZH5&>ioQ4&z^64p`P(+aqb-ZU~l%fbN{PwRZQDt|365+y~6gM z{i^xZ7BjYd(|=?*J)>~R-uivhPsx4emN;`|%J=*3y&XT4ANI>!EPj3W`}g3_!Iwig zUO!(yVOreA@_+u<&wYG$_~4(J>*hRo^8DkU(}yokJFC3n>ajoazugZk{-gX&|MOY%`!%1tSIxWo>0ji66{50u6-B(D>U78 zzLS4d)jiAl%_6*ePyPETZ!`DN&w_tXHdeE$v|ant{CG$hn>i!pf|9k%KcmMGF z^|AH;zcJtYZ@cT$zd(D42l7+){d_h%|DS$NP3L((6-H-ZvS9FZ^>bP0l+XkK#JF+s diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mind-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mind-text.png deleted file mode 100644 index 84f9d86d79fe9f3ef1c6301f65b46280dd308321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3_KR84?WE3ph0Vzdv8${rP}`T6LSn3=E9Do-U3d6^w7MU0gRuL8SFzGdIh24&(R# zHyuqVzje%3ZAr}8U+<4KKNog=#Q(cZBDu%#7=oCQt^33HeH0_dJ09KZQH%LF_Mi8h zo$Z-j-rfJ>0)NkwGtSNvHnXT$UN)2r|I5#JK&^gif8c(Z3#%S>Z?9SV!!dr&zqlix zPAC4FCI2P$^8eglLHU2H7%cW&{@hl>Y0-W3OZ4fv?=O6=>UFN`%~+fCWAF5ruP=Kv z@6)kjzpa1q)7N`X1^0hBDZBLlj<4NGZT&iHYmd}_KWUknTK;~2>D;I~dBaD^S0&$F z{P0_XbKCr14TAC4_p(IP-TD31_DANCh<_imvwqgd`fdJOcjMo`8Sjz}|1SFDBmec`@8WIsB416X?_Imv-u~B@mzS6O j&$p{ZXZ-vAV?V=&?yfm)-Ty^_(Z=BE>gTe~DWM4f2ZA=y diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mme-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mme-icon.png deleted file mode 100644 index 58ab86c5933c0aad87db2d095076149b51d26484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!J8A$qnnlv3qu?6^qxc&!&(3-C~KoQ20AirP+ zhi5m^fSd`QE{-7;ac{5LavfC=V0qxsHAPO*{bN#-Wz?bF9mgw&>^! b{%4GrcU^lEndM~xbQ^=GtDnm{r-UW|szqhQ diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mme-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mme-text.png deleted file mode 100644 index e524f192c82bb73e202b79182d657927d32462d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!J8A$qnnlv3qu?6^qxc&!&(3-C~KoQ20AirP+ zhi5m^fSe_sE{-7;jBigEavcf~aJ?uVw4}#+M(&N&WG5!Q1G<0DUDEA|h)_%IGC0rZ zIOEX#pb0zgyi)jmc$3cStL6tL;%cnkW%3GdL26Qijr>mdKI;Vst046MJIsgCw diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mrf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/mrf-icon.png deleted file mode 100644 index 59463a91779bfb5f18ff47a0f8e86d4963902df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZM#sNMdu0Z-fiD3KGM@>L&f+azI z!3+)W|1%gk>_6Wxkg$G!!2N<($Gs zb|yP)Du~T}Zm(Rc-ftEZ$D!CF;FKYzG*`3j%hvE;VatkBTjTkDvD(%Ah??KLtm+iM z=k?NK{hrY_k2c?WzWm3Bhlktw?XRC*zHhDmM6P|r|({$dr^|3H6WKr(o``njxgN@xNA+^XEL7Xu|Ghaf+azI z!3+%n3)0RwWCB6O z?~={QiX6-dB?}ttU6;K7zbW~$1&?`AxJllxTnAqZ?p3=#eb|3sy%NKcr?=MJzWUCl zX-Z6d)BC>%zISk6IOG#vqf;uYWcjMt_)pVW`xQTHm(TLIzBAY4%gNP0pE!2?JRD!^ zm1)_by?y@n{pT#}+&*f5wad5A=YMpWZLOu9?A?;mI_YlL)6+LAUN|9sUGtYE!?fvt z<}T&hl+#~#bx-}8JqA9Oc0YHVny~5q(`7&2K6=@5Z@sko4L+|r>u(L`-mhBmyxWVl zy)Mn`e1GJPjq^p&#HeAw(5ZGnf=pWUjMqWZ6bf`)!^&w zEfe*#0>34`S^Oscb7JbZiu3$Oj$W^s5dXpU|CIQGUGsOG5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msn-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msn-icon.png deleted file mode 100644 index 8386fcb44ff81ceba2217e0a5786ed2dcd66028b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)mu^pozi}_9$E|65PaB z;V5)zkj95N2k926B-z_OyCyQi3 zsH-Hjh@vbL#4d}b3qdU3HGl4OPHZ2x+agA0zOHDIt4W3vrVA@6bIqbM+l(Hv zwOM%3zRGNwW=rHJi{y4@{#hkG2(;#%IU*Z(W{BSD>E<;**$I31z?A+@00000NkvXX Hu0mjfE4kN> diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msn-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/msn-text.png deleted file mode 100644 index 954982f15f8fc4958f47c0e4f54031c32d17df6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!J8A$qnnlv3qu?6^qxc&!&(3-C~KoQ20AirP+ zhi5m^fShNZE{-7;ac@r<`Y}85v?i_(3h?uOt{o7h@HW(fQ`qmo)SjRvX9PFNs>Urn zA);(A!B^}0qc=OY z;F4sk|6J7&yK85|_PjjzHet5rq@Zo{r}f+yd~-B6UFYJwJ8B!AB=qN9xmkPZ`Rua? zYrKvfT6^=!G^yyu_&4h|atB0~{aycMndB*>tEaktaqI1^-F!_33~d*coLZ|Y|8L*wCYGq6Hbuxb{u94XdbXt0l2fKj zt=5Wv`te6;>)Xn;6OKRMpS`{J{Qpz$`5wNnly9-In}6PZUi?23zREw!zwefP-JH~; znE$T6uH1K}-eH55JyHK=1aVc?0F^!e{1cV>6aV%1kF5OvRkL?p|1kX{SoZ$S_&@w# yTK{hS0aE+l-Tve2U;P^cF8_XB1yoRXbY86N#?6Hy$L<6Dz~JfX=d#Wzp$P!f)2eI$ diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7450-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7450-icon.png deleted file mode 100644 index 1ed07db41f7397e45f5a3e07f37a819507c6ed13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmV;>0WbcEP)jq_gkv`UTL>yxGzV@17yFPllVf{q`WU0ahNh&XIl|R0}#oxqnuel{*?h`w9rj**TH)I#H27{<cXF4C_wH7ybMH9B+P|Q!{WD?~9Jqk9 z#A;jART4R3S5^pv@j=stAXaW#xHP)tZf~xc5hFWaS7hXBl2Hlj!ph1#TT9pzK;!?}Ii5N?-#Ow~^P8r=y^+{d!#6or ztZa?1PsQowHHNd#rv0}`ZS?+acQXEEz2?nrR1;U6 zZC3mjyTeIGM}lkRWMy4R>DPP-6kaJ7pibJ@YVw{G`uXW5^B##j9|r*V(E z^z_LyL)|~;b51Qc)I$ztaD0e0swz2hGPH# diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750a-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750a-icon.png deleted file mode 100644 index 79ba2fc22c19c1e00b8b2db4e31c1fb672e97d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_H*Z*J;TJtprD8g70+xoA<<~gp)q&et1vY zTg>2Jva&jzQTbx{-QA1=5=qP^Tn*per$6?5-+oVFZ*mp)*Lkme-O}YEVw?Ag*9QK2 lwr>8*xAq$RJ9htKo%!lxj<4{MZeU0sTjZT6%3iV=L2t$*QjC9d91Y+mN+BkhIG-M9ze7c7io%WGRagR6t*M$@SWc8!q^g%&4I zO7cA~dfK4_SRxuEMoSdfJxKFrcd$JYD@<);T3K0RScB BXe9su diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750b-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750b-icon.png deleted file mode 100644 index bfce0b12d09a81a0549a77ce89416c673d555c85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)mJ{XN5CzBVGV`z1*1t|Z4J_$sC6Y!(J2=D?fmWL)l&vJg`BLPStgEN44n9-{NMz0p6hy|n*tzWbQ zOanlQc)&O;zSW2XNdH6F!M8ANDdx1L*ae=q9$oDW2f=uPco8mVYLl< nU-U-lox8rKxBo+Vz}=l+ndsTjZT6%3iV=L2t$*QjC9d91Y+mN+BkhIG-M9ze7c7io%WGRagR6t*M$@SWc8!q^g%&4I zO7cA~dfK4_SRxuEMoSdfJxKFrcd$JYD@<);T3K0RScB BXe9su diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750c-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750c-icon.png deleted file mode 100644 index 47870bc53180e6bf810ccc4e9a5c113a94b6eca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_H*Z*J;TJtprD8g70=t5HaJMNcpYcKV1GTTg=y{_uP(r#>JPMpmu_>^#b!Ba|Pi;LS`kZbBgco<`W1x zfBRmg!}?!Gr8JlXoNO2znJoVOebZ$2?Ql*&^6@uf|L$MDrlu@vE4BULo$1edH3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750c-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750c-text.png deleted file mode 100644 index afad34de6d70444900e634b801f1f06f37e48b61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_H*Z*J;TJtprD8g70sTjZT6%3iV=L2t$*QjC9d91Y+mN+BkhIG-M9ze7c7io%WGRagR6t*M$@SWc8!q^g%&4I zO7cA~dfK4_SRxuEMoSdfJxKFrcd$JYD@<);T3K0RScB BXe9su diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750d-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750d-icon.png deleted file mode 100644 index f407a0f6bf8c50669ea56ec445c792db4d42227f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)#Hsc*e4&Ai|al%YN`;UNa;1%jWjxQ8io}?%;Ht`65gW41m~x z1%x&PVA@$>`2(VwD?A(HRg*Dq1zwPg8t(;Ok&7B11wNS@`NGNj;l>Rf^7^oblvW62 z4G9Db5NHcN0U}`lxCt;3T!zN=k(uBX^Mjv65I`npf>v1As{v)N7Er_z(n$ajfrNP^ zpok+(O`A9LRBgJm;M2JVza>lTqWhr1V4J-tykO>}OzX6Hh*06EN z?wrcr4FIQl-uKP|yy_Qgpa?(+p#p*gQ2+g8oOb)sZ&1Hu{TB9n+HW$GdEo9g^!KH| lQT?5}d`++aLAk@t%`chi@oc66FbV(w002ovPDHLkV1n2JrN;mO diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750d-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/n7750d-text.png deleted file mode 100644 index 6e25a269fdb09968c1f9aa673265ff9ffd1149ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_H*Z*J;TJtprD8g70E?OvGO%cnytE0LSkpoQof#;gVERf9J`Vx zt>V?3I^l-IpWM2~`9J1c^i9?lxT}#-RQ8ME6RVu06<73*HxDEePwqOVEihTrK%R-) zWkN=i!`=gm4R3TqA1w4OcpIJ}Wa0hY+^71&f?He$2LpRpUD$3koocv$;LL(7i<5%B zywA%%Y-IChZq+TR{$ToobP0l+XkKgJWZY diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/nb-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/nb-icon.png deleted file mode 100644 index e03be510de2ca17e373aa3d7ecd1e08e0fd48ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmb7@`#0MM0L9}G)Z+wI^<3h#oqFtqO1(~ZB1TaaiqTH16m4ys*{WV4-;^Mv8jV+v zSfVR6q8@cdYvemQ-lbVfF(zpnk0_CnkorcFS^tCGbMO89bbq`hVfX+eeJgz!3}zG* z=ofxK;J@f;9rRX$*zN%CVdo?L52*hC+DaJSKUkWkhvOq)C?6MCoEl7%kc|*^V6`F7=Lqaayb$v2O2z?KEh%p9i{gcq@ zyUzkjJ6{5{u3@B9h&TlMRb8!zx-5&}J>;*`wpFy8uF3MF{Bq|dKSYs zONpaI{d5HXb?laP>)pE1`kmVO>zt?B@p#4Bn2o_PD#75^;{FfB6D#@H{^-sNV;EGj z)d<}uMKRr%c`u#+;~oTe!UbT<+AE96?z0+Bg&H09O2g%e@0j0Sz%Z!IH-&DuCMPBa zgMeHfHqFP}B5AOpTa%pJb$8qWJH;c>azd(88_E~JQn@p!f{4eq6jo-;RK10}HE^r}5=z$?$_aHmgHO0ocpO(&D#vdI5w|BCsU_9fwI)y=qmx z>r5WglHH|{phuih71+lh_RgPtNi-vEAF*#~w2}e(2R~m#K6LR=*kXi}D$Njjj8cbe z*aO`#rb}eO&=hBJ17r9N&W!2pccNrlu0p@CYQ-^`S*vY9p(#0FZOfcATFu$h-tf(f zL*On}#!@=wwmWh8vT!n7^aN=w(jvgP*JRho{x!g<0&Vf7Zd*I&KnZku*_s3ifB;p9 zp=sBRcFf6m)+`e`V z$gw@>dgNb(d9Y{`pNAD8k2(9bXWB`cUa+h-%j7Y;o<5#p-I%^a>vA~)n?Q8W1_vxi z9mf4C-RdR<11maAE?i5}GkCqOyQHI}#Oi8`SNj&v>ha|~Llg5yM^P!zM%D7wMh;J` zp+}vf8b|f*!#69}D*QFbRZ|B1#sXs6QdM3HyaSdc&7ugy0u|6k31VNw79 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/nb-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/nb-text.png deleted file mode 100644 index bbc1357baae8e44ed76bf861794a931631608e91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+rv0t^Zc0qghAH+bKF{(eFH-Se>w42;p9E{-7;ac>S7G6IzzQuw{x?3i2x$bJTf z2XC(&>}yrvX}hTTM}w=W_W$&`8O}yK-CjQ`GyNOJq?R7Mpg`oK`b{r}OD6L3D=nj# zMfbdCUmx{DBYwLYL!lL$GzrAj@U*V#2=_!vs z*F4u}?kL)H>xXHkoyRpZJM*jaeQNKS)K9y=?|ryf@W*h;Der$*%Z9%`*q{8fwq8l@ z%GLF!Bhw!)Ztb6XzUk9H6DFTOH&`^f zEZ=Vbo_=eGs@gw^#;WJarvz{Q(9pU2>xN&w@u!X2|88vfG*PtP_*-)Qx2G1fe`@&G z$@DLo+yD2~cLm+4OH*Db*Z;U~r1STN=ziB=`KLGe1-IFKi>{CKyeN8q!T-m*-|zeV b4i~XM(eKFa5}mM9ps@6G^>bP0l+XkK18EIj diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pas-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pas-icon.png deleted file mode 100644 index 74bfcfcec12c94c1d58181b42ffe2c4297d890ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4fFT+Com}d7g&GZ;Qsr7HMQSM7#Nt8JzX3_Dj45hzu5O!fv4@FRm%}WPQ~~C zH?6+txAx}0mOl4+v#0L&j`|wlqEz9c?;0qAj4n=jHs|xCut)R1KbXJ8H*(*!Db{pU`_(^u*&UB|ldB zYd&@Um-+R>)almybeBB7e&>uZgM7t@_4>b}eq^hfUR-t8UGDGN-fxvNpGIn@$ya_U z-5~fqsKMzgL?O~QXQC)JQ_G#>`H~ZA}SKs~qBz4>GNSV`V^N*Nrj{jD3{o|dh zKWp3X)=$^-HLRH)Q+v4nmwfHvU)STm=>FE{-_>K+o!@>ne_!3EUpJ@Dzxhf%{@$DL z@O$q*zdUvO@0YWm!>hH(Iv?usic&;6P1J<0xDe(t`gyaAJ3&21)`r~jD|eq?o$>tFubY~; zj=oUN|6VERdoJ_x$6a%_tJgE#dvVx##azqUDYsuday(`I!)E4t+a-J2&xcFD`cbCz zG`8m6r-u97&HQ^Vwyz8RHTTF3wmmo7uQ_knQ)I66?c3MR%Y92XsqW^_4WISdy?7T_ lHs8MNhwbupKhTJJ2Iuw|JwB~Z{lLV;;OXk;vd$@?2>_N=ff)b* diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pas-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pas-text.png deleted file mode 100644 index 48b1e273bc3c98d26e86fec07def2773ac26a8e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)w4GabX1^?G8yuaVSfByM^8-HKVW?*34?djqeQo;E4+QDga6a-oyGJ5H-a@YQ! zezq~j`i9;l)-^@@LvOu2b3az>_|Jv^c?6Mw<@1^qdnW6zi+ZBD%e3XH>rZz3Pv(Br zvnQWh7g{yt&aw&pwJGvzR?FV1_}SrF9W8V3da&K4*Ib{>Cp*@z-el%@KwF22TP;6r z#+e0n@4nxx+wHLTaxROj!j{^Cpjg)TGS`nEI{NNt;Wz1wx04RMWBV>xaCdra*qNU< z+gJX*^X}-q_ct4V`oB(JbNg>IvplEz-$NTe7y9k554`a8@0ra_t+f^Qzpm_?8?tfk zpWpH??HWAo&-A|jJ|`si{WY_WI_C1r_NRL6+-j5l?0EUDhQUGdKEFhXxbF{*?Jvw* zvoq{(SEZkNf8Dog{;wCC!)~AW`+94d{>kZ0tAl^V#qY6kU90xhH-63AMf2~zpXcn} zu;|8t8CUdH7C7Yk{XbCrqmB2-*TdG^XNA3EL7Xu|GhaLM1_d z!3+Wo`vV*p=Knw6zdqr;f3}lTW4?&Gb>5eDcYDC#OHY9H)1ce!h9k^N066@t@D@ z4BRUZ`oE~#_dxy9&!+h|p2pgj00m?|t&@+6{~-J{)qc|ccwWYeU(7s=7QeQewg@EG zGaRm47RNqI#NA%`dN14R)$=ubIYQX}q;ovKc6jLz&zg7ZPw8JcAo+3f>y`0S#4ojL zuKaXHU$XwhrqaM3&mSA#z3t02Xt?$E`S%_CYy!Xk{^>E=p>sX2{^~L2H!=!A>*GaQ z=7kkk@A>jmwOPWiY4!Q}2W&i=PCP9C$vi{db3>Db^&eK>Qzy80y!p2(BbYtyK;k#< zm+X@qGS{3vA6&1)Ddf*EdA=L3+Ce90@!9{G3@5QTDK{VVH|$qGc-DKv!FbX53%?AQ z7a!C&-?u2~TYFr6Tcb|@pP#$!54u!6IUfF>Rr%o2{RezLen_7Y*#Cb0hR25gh0mn) z|C!G0mh?69f5)wPh3j71Up!NJ{lEOdp9T3Xm;cYdAziKi{4al?l>C9p|Lz`-w?E(e zU$v>)oZ~s>o{r{Q2xamgix%zL;UtZP!OBEB?{$u|CnbJod#{W;?n(-w5e`21& z?(Dy-=N@tSwEn*!yM)Teb@f8an;h5KeT}cyRq06oyZbL|$L^fmX&Zm--z!&Wev2un z=9hfvMWyzuEB`0kPkFwB{r|t|e^Z`a{jdFM!S)|-O9h|*%Rig(`2PQG^Uu}%{y+Ut z-|@fg#)rBt|Lre2+;ac#^n{KB-~ahP^r?9GFZgbL(7uBItJ_wn)II!nduLn05sSM2 i=jXqi{|^QIXVo?Eu@YT-js=)P89ZJ6T-G@yGywos*sXN{ diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcef-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcef-text.png deleted file mode 100644 index 23faa7d7fa5c4e7ffd648a74e1f06ea6405a9ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it0S){66&MQU|9^j8VEz3BuP>}+3=E7-o-U3d6^w7M-R)a!z|;2dSmA*u>mUBh zFPq6KJ}WJ(JLJ&G?{deQ+&6U`VUCq^;!tc6fD=5CaYgpLIqoZ^)!#dDT;vVw@37C7 zpS({?_rDL)W_|hCACX)~@y4J}vlhuk4>0rPnfc94enS zO-;VP|K;yR^E;pAiuLj>vQ|6$_@{ks-TjJ*OA8;@-b>r_iOX_jmi+urqJI_t9_P~3 z`?GbQ%3r3>yWXp`_e@<~yL=yS{p_WyCa({VxB9*6)zKe!{kNp=d;0nHZ~dy<(RFjP zo)%x^lkTwnJK@1?)jzJotCVzbN2kl59b%3wE6nAwq|4EYMYt0KfnK%ufIQC(d1EH z9d}ol)i0-)v67ogKAC^!vig!rG$y(WhKQ=Z1;?oa>l@Nhf7yj{(Y4-da{fGIft aKV#n>yGxskw%i5A6@#a%pUXO@geCx3B_W0Y diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcrf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcrf-icon.png deleted file mode 100644 index 17ed4a4a6411af3a73bbe20029cbded82ce90a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wo`vV*p=Knw6zdqr;f3}lTW4?&Gb>5eDcYDC#OHY9H)1ce!h9k^N066@t@D@ z4BRUZ`oE~#_dxy9&!+h|p2pgj00m?|t&@+6{~-J{)qc|ccwWYeU(7s=7QeQewg@EG zGaRm47RNqI#NA%`dN14R)$=ubIYQX}q;ovKc6jLz&zg7ZPw8JcAo+3f>y`0S#4ojL zuKaXHU$XwhrqaM3&mSA#z3t02Xt?$E`S%_CYy!Xk{^>E=p>sX2{^~L2H!=!A>*GaQ z=7kkk@A>jmwOPWiY4!Q}2W&i=PCP9C$vi{db3>Db^&eK>Qzy80y!p2(BbYtyK;k#< zm+X@qGS{3vA6&1)Ddf*EdA=L3+Ce90@!9{G3@5QTDK{VVH|$qGc-DKv!FbX53%?AQ z7a!C&-?u2~TYFr6Tcb|@pP#$!54u!6IUfF>Rr%o2{RezLen_7Y*#Cb0hR25gh0mn) z|C!G0mh?69f5)wPh3j71Up!NJ{lEOdp9T3Xm;cYdAziKi{4al?l>C9p|Lz`-w?E(e zU$v>)oZ~s>o{r{Q2xamgix%zL;UtZP!OBEB?{$u|CnbJod#{W;?n(-w5e`21& z?(Dy-=N@tSwEn*!yM)Teb@f8an;h5KeT}cyRq06oyZbL|$L^fmX&Zm--z!&Wev2un z=9hfvMWyzuEB`0kPkFwB{r|t|e^Z`a{jdFM!S)|-O9h|*%Rig(`2PQG^Uu}%{y+Ut z-|@fg#)rBt|Lre2+;ac#^n{KB-~ahP^r?9GFZgbL(7uBItJ_wn)II!nduLn05sSM2 i=jXqi{|^QIXVo?Eu@YT-js=)P89ZJ6T-G@yGywos*sXN{ diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcrf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcrf-text.png deleted file mode 100644 index e48c305e21622fb96a703c6dc7c582dce9dbe481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)t4E_7x|3AOJK;eFZKtsU%o>hy?7#J9Ldb&77QFwz zN%}OF5 zee(1`zq#%2H;8X6xFvjfcb%NG?c?J*{^iem^}kD0ui|I?zHs)9HTT7SP5<`EyZ-QQ zqx0>vH>~`0YW-20`tMKbA6{<>?*0CuwZ7N8yX3yey^r3n?|x)FG=1OO8INw4{oJ_! zWR3mR`M-{yEZM*1{MjFO|9nv2Q@^xVum9}h-JiGH&!2ztxqRhY+4x^O6xM%Q`k=)2 z>g8WXeeu!H%xmsX)US&Ae?)rIiQ~`hf9yL^zJ1R}*85LH?Vd?b72v8{bxeN$^l3kf zR_V?w``2?+D}LPy4*x^HESg@|tX!*c%Q~xe$It2iUT?}?E4%L8|NqIgUtV5b?myqI g_7^(i@72GI5q}%?Hy)WV2N=Z+p00i_>zopr0Gy#yK>z>% diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcscf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcscf-icon.png deleted file mode 100644 index dafbe9e0a17dbbe9a16debf0023eb9916cb1d63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmb7??@v;D0LDpEl&mTUZp3mpi^X}1z1P5YR z2`mPK5yL;2TM#n*y;0#I`XqC|g|thQU&IR;{Cs>8I~iK8swxl^GPaAVQ6!t81;r+B za@?OzS6o?V8G{jK<>&4#k}aEiGhu8^j*ED|CAp?1NT>DkSI=NwBl&_8?AL?MNV$h8 z7BMfz*V@iJIKDN$mgn4&Ipd8U+E%E@=nn3metFL!>n7`v?u8BVMmbS3uF;uIZLLtw z^VKYDDQoJc9?N6oTV!`BEFTtB3IsyGwVv)3Yl(h+w{WV=;(eHYJ$ zo-5Uum7kcW#f9W?P8KU`J_DrK?in=oT;Bkjs&nI)ydT2R%2R=>k--3U<+kGSIsN-# z1?5pk5tXf}BG*EAqP-nTyzmF6uPV7#Exh?L7)BTfwmYjSI{YJ!A*3Xr!%LH|1{Pij zA0PJ88?>qMe>bzsg4HzpKUaO%n%S_q9>j)azLdJ7`#VuzhnDapb>3CAHB4Ho;*Y@A zm4@~-sU(uRAy|jy=_@0s{hZim+y=)wGproTM*h`#(tPQ)o{?%B$^W&dM>x{Id@-X* zA%bqzoPDy%F=73Z*XUiZJ*J$E8Vk(wioj9J;&c;NMQRaXcY;YTEWtn!7h-_SpcgAh zydp3Imb87~7Z`Mmzk`_;pl18E9a3u^wa)~0&&k_}Y-+_<-_qJsU}KUIO!$Rkv4tlQ(W^6ZyWS3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcscf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pcscf-text.png deleted file mode 100644 index b8d2c3dc8f5cb680d27b56cd945f1a02366afaf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+)t37 z&P7SSHRCxHP{Jp{k-+r-|K?yD?$f%fuWkBlQaSCsZ;}Rs%sc-I28ZvH^fg;%1WEaH zG1kwmNXxt=$FsE0FiTNbd&Wxbc_G)a2r;MSqXVKWsDNE;*iaq=GSK;%1iT zJGRed5O^1rV#}je&hR2MPQ9>GE#a@!$;4?j!m?4S)7G!~9>bE!dGmat)q>6cj?bTy z__jRpE8~vEKO;L5+oIHLOY?b;kEnS*HAbE&nE7$?aeI z-`Ml_rQ)9~D$jlXNAp_!jpdteNXjgE`&)O<^GI%q9X-bm{4YDvLD}FAp@V0)i`=gC^n;MI^pHNk~DG>H@t&Gv}dtX0irxtld{yU_%b;>J= z;D*v^lTE((?q>^#D)_kZ$y}BVDtA6{hYR=CaTQ@y{dl_ixvX5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pgw-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/pgw-text.png deleted file mode 100644 index d5f86b59a72535a341332d2e4cbd7c1324489964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 807 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+it3Je7e3H$%wUoX)Ae*XD@?cEpM7#NuPJY5_^Dj44!G-qUB;9yV)|9>Xx5PwHG zP$LjTE>HK=-K=ZtsKC))8(;H(y022irV}S*UMKaLJi1FdipweEPzZD;f~Yl~3JdbgM7bA&!@xc*cqs?^@3N=s zXJ!97TU!(26G~>fu#|`nxFVvQ8IR3bZY1X?7vsvqfq__Pzmu~Ul&{oFs znRbU}&#p05y7yzp!;IR1@SBgPM%{YmZmL*tq+Qki%5$gB8)R3m4V?XF#*LmAfBT=k zcy`)-Zus`=xrPo-ZtMR|W{)xYbolU5mD~5T=9X&&GiK*a{BiE*=QGEbI;GiV>+=b{ zpAu3m&~^WlZElP9vh5T1c{j!X6g@PlWl#B!?4>Ii-s}rY*seE4aN{3oc@yD@4d*x9 z&)vT62IIsJ6Z_3S{^t)byAjFM>nmqv_xW~F+S-pkhHIZC9hd6-qb<+czUEL7Xu|GhaLM1_d z!3+Wo=l?VG&wsDruz!8R{Q`pkTNC$H3=GT)o-U3d6^w6h{4ZLfA#(I%!*eD3mTTYZ zZ?3(WvHYy$E2G;1D`!3Zz5QGJ3XLbp-1m?@9R$-zZ(C(U84EjXU^K1$qWa!{yxU&U^Mqnt6cHX`ycYX-D4Pn99o!q|ZODJb{(de|uI>n!U~Xm*CC^ zTC4XR4u4rEt9{${X@~7Y?d89u*I1ZUo4OLc(s17PDbX!;Mp~Md$w&Vu&wFe zwny?&deI$06`8(cQ{8`*d|z9+&Z=O2&xi85GwU;w-Z0mkt|?_GYncC{IV9d}DdWDP zcJ8>>@7ecEn|f1l*Kfh~A9>6xbo;(`7o=`jZyW!z{)w{%&$p@KckFJ6$EDsaYJR?7 zx9^tij!jwPf3YfihW+1{{`J2u&;R#jIf!Ym zS^e)~-Lde>CF|oGRO}zle*47S_*D3*+xoWMJRjQ4AgcefD>_KB1TDM1449J`JYD@< J);T3K0RVwr0!07- diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/plrf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/plrf-text.png deleted file mode 100644 index 72662ef42ceef27f9879f1e294f0e63235857ebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wp1`PY(|3BZa(2%fxen7$f(^u!NWnf@(^K@|xsbGA2^Kag6E1rgjmKO8*8t?o+ z`|lZ7_^Cx-Czy)Jo_uc~oN>LK(@F97r9AJ;CcaQ~pn#k2YkU09Lw2wKY!(nM6WpJa zdgSSY`8!Pye{|e;cFyP8=*IuwPMYtux%i#&SdE_lms*>b*4b-iI==Mjzi-v8;Pd;j ziM8x_vr?Vm`Ghmi51f23=lok6jz_{~yuTzW9h~hd@+SE|wyS!#Z@>M=1%97i|M;kH z6LECA%F;slQwM&^^Gsj+d|TbWnS%Ba=j^o}UzhKG|09==<-r@t`qs+2*n%tf1=D{f zvI8ys9XoaM|FfU#^Ya+|es0^F;5V~AXj@Rt+tY7mzve&l|7h_`wfHL)JKxt?D@8tg zvvuE<`4gwI|J3_0apm_P75NYD_lvmy#clKbcthx8M}wdSuiy6zO#Iib zf7o92E6@1Cx~-p%hJDeup7RRZxa-feNdNg`LD6gF6G|Vy?pxDlW+!$2?e?D% zDHU7ye@b{=^Xbmlx^FSB{+ul?_;JHGdadF;LY-g(v^ z4g0_T@5}s=T^o7pZv6fKvH$)?*Z5akD)z4*}Q$iB}OH`Ux diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/psap-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/psap-icon.png deleted file mode 100644 index 2145c5f6a35f9b6bd2d71f0c9d3020384919f2f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf`3?xk^GbjKl{s5m4S0IfH{P~{u0{JW@L4Lsu z`|ItK1Ey~V^6z=NIEGZjy}g{s)oj4i_VB`2hU5wcUCWNk@BgLWQt`RirObBh*uL-n zg0GyHgq9`sn9j&P&mie-!Tg|~k!kuOhF`J@k2eH8JNWm&r%5aLSG1}z^=x}7VX#;4 zrd}^&t;_*_1{MyP=j1hfy;Bq^t!N91hfy;Bq^t!N95 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rg-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rg-text.png deleted file mode 100644 index ab93224c14ffd98aa3e8daac8ef436e97d869cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)o4gLG)Cnzx7|NmZ~z+nCPy)G@+7#J9vJzX3_Dj45hJ-BJHfSf!hDm z=Q0L)tefrWyY=Rre9<$H)_X|Ry|C^;fD;kV#qO`wbGdWlXui@(eY3~R_CM4=o!+)T zbd$Hy64lq=X0J`y;CXLJ?0)@~4^&T_U3GtY?y370z5nvGcB^DEty0o|eQ#gzpTBIe zca~TMRA%;dsO_E>{`PR3bV7V3kLuchxBaI7td@8QPMNl!O6O^>wk2Ea?gM9zwa^q(+sm*+286Ff7!B-`Mah5lL2qjs16@aucNJH`C{ecQS@+iM!K?DvI# zQp!Kabl0vg-aV(}_6m8%AOHUyUvzVB@xcWbUuY-Hul;s29S0%$htc?L+!O07JzIg1 O#o+1c=d#Wzp$Pz diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rnc-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rnc-icon.png deleted file mode 100644 index 733d3da5db77c25d591b3f49f5149a88809b97b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Tn`|tl}aG3vIz#yStq2T=b4mORu3=E9hJY5_^Dj45hyV&*EfT#6g;UneSn;vg@ z|9{izO*$1Um5-Q7q7eNviQQ7r$40%V?t)_f9NB9`n^TC z`cKLJwG}$WfBq$yiwfpy`^0W%{;gY^cI<=pF|WC@tzI9>d)|K5 zJb2$gNYrkE6WX{aD`Vv}Y zj8O(#1pYK^%&nTkbnyDk^0dR-r#v|Q_9wr=A76=mjs@>OEw3}5?Dlc%fs*^dUc0Xb zPI+{?saW^W$E^>1Ts`-(%+cgHJ>9x*H~0DL(tW!$FHVm$SYML(E9mr`^-f>;!wP~E ze=m}rw{@jKO?20fl`~vC_N_hYzPIzjpU255rQ7EB%)e89zxMlGDDijt-+lU*H+}qU zl>7erpMVedymmct-?O{o==zHKuTAqg>Z~5_e!uVcJMDw-#cLuzz6;y=DEnCT>8dxM fi;+#Kzpbwsqx;<2`11!~{4#jD`njxgN@xNAS0hN3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rnc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/rnc-text.png deleted file mode 100644 index 24cab754a1f0a10c7de436fd8020a9d0af0d747b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wp2@Ui2_XjX2-2Z=meSyLI241HJ3=E8KJzX3_Dj45hbDXqVL8SFzjDrYk%isKO zp=T}%8RQG(xIdr2)n$K1{HZ+>$vuY05X3yMDQ0OK=DQhp-kyDS_sO@i?OUu(C3jc6 zcaBN_K0ofA_o?v6*mX;u9lrLqGxA*eDnI#1%k?ZjUoCfbUwr35vrSlA{=R({#-+a$ zx<&8)xPSi4=lp%QE;au*nZJJi<*E9Trw?i@^|9FZ)4%TP^Qb%VJ3f63-F)jh(+|D- zy*qk0zdwF${=x3slNoEK^Dp}H_sWlFdm4IvYulgSD*tEq(Wzg5@2dKD^RQ0s$LMEe z_rpG?vwKYEcfb4Q{Kk9rVN5FyU9a4C{iJMHwfenXS7z;Wt@!vo?~gCMd^~jeA@}T;-s{vI7JbiN-oN_QA@_|R z=4#d#cir;~t=%WB5c6Y`$Ubhln-?Xj_pJE+r{wD<$CY26zq#$S>*-(XDRxoZ_m^Jy z5cuxr--pjHxo@;lS$0MIs_}n~WbU}1n?l-Cc-!Tc$A7D@&oVmZb8_MFT9^5DwZFc+ hyu92Wol(E5equm!Cezca;=p9V;OXk;vd$@?2>=wmWxxOc diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sbc-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sbc-icon.png deleted file mode 100644 index dafbe9e0a17dbbe9a16debf0023eb9916cb1d63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmb7??@v;D0LDpEl&mTUZp3mpi^X}1z1P5YR z2`mPK5yL;2TM#n*y;0#I`XqC|g|thQU&IR;{Cs>8I~iK8swxl^GPaAVQ6!t81;r+B za@?OzS6o?V8G{jK<>&4#k}aEiGhu8^j*ED|CAp?1NT>DkSI=NwBl&_8?AL?MNV$h8 z7BMfz*V@iJIKDN$mgn4&Ipd8U+E%E@=nn3metFL!>n7`v?u8BVMmbS3uF;uIZLLtw z^VKYDDQoJc9?N6oTV!`BEFTtB3IsyGwVv)3Yl(h+w{WV=;(eHYJ$ zo-5Uum7kcW#f9W?P8KU`J_DrK?in=oT;Bkjs&nI)ydT2R%2R=>k--3U<+kGSIsN-# z1?5pk5tXf}BG*EAqP-nTyzmF6uPV7#Exh?L7)BTfwmYjSI{YJ!A*3Xr!%LH|1{Pij zA0PJ88?>qMe>bzsg4HzpKUaO%n%S_q9>j)azLdJ7`#VuzhnDapb>3CAHB4Ho;*Y@A zm4@~-sU(uRAy|jy=_@0s{hZim+y=)wGproTM*h`#(tPQ)o{?%B$^W&dM>x{Id@-X* zA%bqzoPDy%F=73Z*XUiZJ*J$E8Vk(wioj9J;&c;NMQRaXcY;YTEWtn!7h-_SpcgAh zydp3Imb87~7Z`Mmzk`_;pl18E9a3u^wa)~0&&k_}Y-+_<-_qJsU}KUIO!$Rkv4tlQ(W^6ZyWS3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sbc-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sbc-text.png deleted file mode 100644 index f71bfba57edc959609aea78340bc8206ba273f8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+)t3<3%3&o|89-yfiG|9wHm%pWWa42%yvT^vIy;@%uEWCSWbr0{$Bwqtw|azHi^ z?76$^_EZ@bMut5Vf0l;c{$79ctiaS;rNwF!y?11JJXTLW$jI>dbLgL+&s1O6?09ee z<3?C(ONY7ZfyZ+iYNpI)nmhGl@?Lk5D3g1^A`jLsbKf^lXy5#eC+ym@8#IgUa({83 zUiZgZIN`Om{I=RvE94j+1m%jluH#j*6lc7#%8v1zOLgJyx@DpZRbx&b?$<4^k@2rq zwB6Eg!v4s-Ca(D0M*9$%r`K&7T>i|XB- zzO{SLCth3jcT?mO?Th`Vo?cfi^j1PdFrN^e$M=%9kdA{L1`rVqp zb)i$A&*c2EZ0q$G1>67p{hQH!q<44e{|~QBCAHN3;-lvL`xsO6S9$MT`=425e^>Wg z@Vs3p9wjhwlg+nS`6(SsZEyP8?{)WmXU8tzR=xl2w)65IUW#mL&f+azI z!3+)W|1%gk>_6Wxkg$G!!2N<($Gs zb|yP)Du~T}Zm(Rc-ftEZ$D!CF;FKYzG*`3j%hvE;VatkBTjTkDvD(%Ah??KLtm+iM z=k?NK{hrY_k2c?WzWm3Bhlktw?XRC*zHhDmM6P|r|({$dr^|3H6WKr(o``njxgN@xNA+^XEL7Xu|GhaLM1_d z!3+us4g32Y7z_#m1m>^*|Nj2@1BLcV3=B+1JY5_^Dj44!G-L#-Wi~re&c@5D{ z;p-vqAIV!-9X#%1+Tyn1#r$;FtB&ixi|l{>K=R3g<^zSCFHefGZ@B!>{%i2{nL_?5 zFI>)>m0q6d`-n;S^~Yte&V0N!JvO~e+D2sMHsK;2o()pv3nCf+U;DnTKJnYu)j>9# z&r*~1qUBGYP_kZrDQ_7=huMMOH;j!hFTBP2CHG)J?<4-1Hl4g-lgq_6ODF0+eHtEJ zzoBwl){13bGyV%|xj$&&NcyV$b8`LuN#@VL;kLRDZl|NrB_j%pDv%;tr;fM@@MnDg`vfD zuf>l^JzlN;&Zw=}|9N~3ZTnGmN4p&il$m??N8D z-2e8hAuli$GA;PG)^^QYv>I{QGa+{`>F0BT@GK6NQ^MB=0#0O0%A>elF{r G5}E+a#J+C; diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/scscf-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/scscf-icon.png deleted file mode 100644 index dafbe9e0a17dbbe9a16debf0023eb9916cb1d63b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmb7??@v;D0LDpEl&mTUZp3mpi^X}1z1P5YR z2`mPK5yL;2TM#n*y;0#I`XqC|g|thQU&IR;{Cs>8I~iK8swxl^GPaAVQ6!t81;r+B za@?OzS6o?V8G{jK<>&4#k}aEiGhu8^j*ED|CAp?1NT>DkSI=NwBl&_8?AL?MNV$h8 z7BMfz*V@iJIKDN$mgn4&Ipd8U+E%E@=nn3metFL!>n7`v?u8BVMmbS3uF;uIZLLtw z^VKYDDQoJc9?N6oTV!`BEFTtB3IsyGwVv)3Yl(h+w{WV=;(eHYJ$ zo-5Uum7kcW#f9W?P8KU`J_DrK?in=oT;Bkjs&nI)ydT2R%2R=>k--3U<+kGSIsN-# z1?5pk5tXf}BG*EAqP-nTyzmF6uPV7#Exh?L7)BTfwmYjSI{YJ!A*3Xr!%LH|1{Pij zA0PJ88?>qMe>bzsg4HzpKUaO%n%S_q9>j)azLdJ7`#VuzhnDapb>3CAHB4Ho;*Y@A zm4@~-sU(uRAy|jy=_@0s{hZim+y=)wGproTM*h`#(tPQ)o{?%B$^W&dM>x{Id@-X* zA%bqzoPDy%F=73Z*XUiZJ*J$E8Vk(wioj9J;&c;NMQRaXcY;YTEWtn!7h-_SpcgAh zydp3Imb87~7Z`Mmzk`_;pl18E9a3u^wa)~0&&k_}Y-+_<-_qJsU}KUIO!$Rkv4tlQ(W^6ZyWS3 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/scscf-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/scscf-text.png deleted file mode 100644 index fd3cab5370aafb46ce6c8adc33d0a688cf1027e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+)!^Y^b$P+;g62q-YPfByaS&LDXP1||(p7srr_xHktFd4Wm~Dg0i(?Kt~tCLkLK z{IVqVtofP}N*tBgOfP<~zxg(+)M@&cSv&8qH+%e0W11g>?8UZuhkb7-3%ul=?0%=Sglx}&foW2UzOMX%&{9c+gBgoEv>e#_Rs+%&xlXyq4DW*+L|{~ zVzT!+P5-lSOHy5k@$K~?T^E1%^#7^)v+dvV#83;7Y~#1q(Oa6!H@%#`xliWgzps}M z6(O<_E=cep;D|v>7!=CAa{0t?aJAoyg#S2M*C#!_1OQZTyo{__oa7TGmI1eON2yz zTkLaU$D1Y63`cMKtXsucv&+@~n$a;k$&!PI;vy-J57zEf7=KKin tVSFd+oxR}w{A>Sz|E=49|NVDls@{F6iAby3%N$U;@O1TaS?83{1OOW3ZIA!} diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sdg-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sdg-icon.png deleted file mode 100644 index b4c0288b594ffb937beab64aefa2550dd84e2216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wo=l?S#%-`=|pzuDR|9-)G+nqk_3=E7xo-U3d6^w6hI_4c#5NUaMpt>P2xk{~c5x(T|S^w=(^H0Z&_Gv7g66E!Fx|2zIs-emS))@Y0XLNjiJ-d^0?)*7D z|DUbzrfb$O{yn?q=ld7a|9<2;*#Gk5qMDzdo}QkrAOG+8&)?pE6Y>%p`zzg<#eTH^ z^bd=FEPu8>`#6*Q=L&|C$897w95{dWcvSrB^!@t!9}M}~Ce)nie;R6MHRo5Fd}P>m zpOHUn?(6jVy2gKBeZI>7>9SnApTfMt41XQ@J2Fg1e*c0xZRg$V4fnVGK35t4|Nhg{ z{U!E(Kc~J6f3m)k;d)EWg{^{LrwM-vT<9+F?;qpW3D0U}>i$1?a(eoI$$z{*w!7Bl m|2WhCzId{J{64T>|FgxhGu^3=F}4SWJ%gvKpUXO@geCyM4+>lW diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sdg-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sdg-text.png deleted file mode 100644 index 3881e6622916e0211231650c50afff82ad926842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+is`~RQsPf%cRD3~80@c#b#-j%nt7#Nu3JzX3_Dj44!Yy>K0Xjt%frT9uF5R+lX z_oCP+nHI(uLWfkRMBo3PTK;PK&jU-=aX+r8+p1)Huq9!CCu6qY#YlN2Lp523dv+%R zwC)BtZ{yt!9Gg@;(H5xzfJQp*sgq-c7L&wmc6jc zjiwC`{a2h&`E%(&m2cGd&&B70I+ITF3Z8v({-x3rH6Hf+=JM+v{{6aJ-d0d}*V2>x ze+q3aPu86N=-I4sb#2TX#TR`{yv$8NZmhqIhuN&YT9gn zx4rmvdiKS-YuisOf7`6H`SJ9>PpdSJJeN71UhliF`&XHagQ#%$->LF%Y#27M%5IEL zbX}PAS#>Fs&Be>B|I<8`R7{o=?1aeg=!U<|QecjS@-U{=`4XuP)XB#k0YQ`&B~L k-U|EgzyJRGZygG?pFwzzn_Zx{!ak5nPgg&ebxsLQ0Aq7(b^rhX diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgsns4-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgsns4-icon.png deleted file mode 100644 index 8df1aac1415f563dc7172d80f44e451c23364b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^Q$U!J8A$qnnlv3qu?6^qxc&!&(3-C~KoQ20AirP+ zhi5m^fSf*07srr_xVP6f@-`@lumlKmd%G2gh$&yZXrgyWLhML>|y^}qI#e$h5bwbS5C_8n>x3ZZXJ1+`njfIX?Bj{?R8wIZq=o~o7)=j zzV^j}Wot#eGcIiYU48!T|GXbpiud|`Tp#t_M>BHSvSr`)@E^%dyzyjhldp2#{686f Ymv>!zV-^+@2y_{Pr>mdKI;Vst0A*!i)c^nh diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgsns4-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgsns4-text.png deleted file mode 100644 index 92cbd290aa90b5a971a2d3d90130b5210402c7de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)b z_KsEh#mEvkc=9yN=0=M&X)UoTDK?uY^WExVCYg_>{RiP2)o$~ z&VZ}s+3L-PwXyigI9gfmv&n?Ly!4CF56TlwUWU7Yd>HM4RemfM`F*sGl(Sj7sq#Eo z{viR4H4I2}hTpDw%`rH^2x26n_ ztvP-pbAxHe;@8&R?U?RZ$mvUKk=*RNZ*^lz+nDFDF{F&6qrcv7NBCA1<&h*~00000 LNkvXXu0mjf;7jKY diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgw-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgw-icon.png deleted file mode 100644 index 2904d2770551ffc743b9e62859713385f74b6839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_0wi;`T%Ezd!07Gi;uuoF`1Xz??_&djwm@eN z6=%&BhX}Pc5sk(V?{|Jm)n0pd<)?j$2J2sGZn~@DISGVbHa_*xw|2jke)-eQIXi>5 zTd$w`$M|dY+DGy`gZEn>m#RCTf93jz^XZ@eKiJ>e-(SBpfBtGdd&$h`^pM}5`}h8k z`jh>O@!O;I??3&%ZIokqR(J$L>6e+Fm#jQd8L)=dnXd*3MR(d*CA$GmE4>*5c*w?B3q1ne*WuRM3? z&sXoIkFfyzKi=!#|M>v|=e}9od>S)9c<#9`Ru|ve?7uDZ?$eHwPvz!E&w2M@*TJ{{ z_Fb3$@bTl`TTjmF>2IrCe?Gfc_k7*z&Ho;tnQLDNRQ8`K@TE*sOZ?>rz|dvzboFyt I=akR{0BKp_ga7~l diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgw-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/sgw-text.png deleted file mode 100644 index 0801d79747d29fd37b58f4f84bd0dc6af78aa875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+)!0RjvP1qti#&+p%FaQ^*=$;vM|x&DU)F(rLZN@Zp00hwV$0 zV|bFR;-6Z6TEa5x%>H#OhyFcya&YCZ?8nlE5tlZ0s@A$as1(THJ|S?zX2Y!gW%oFj zEUbxqQ*o}@Wx@IFET?wt-}3AB3G0v1{I^yV{)xT(3n>Wt^#rv=R zrYFA??f(+Wx3l1p!S?;iFAIO&d$#}ibvc!u34X^J51TFMdB3r*>D~6Z;?v9DztvyD ziu~GlNhIPIKU>AKYkQ)7 zoE$IPR&D;>sIBv|)c@no{}0aZI49A%1GZQO+_~-0szkky9nf?}*^hX^*B1r7i+t0q z9{PQ;yY$6LZMp9!ZgbzbSBB$izm->#DywP4;=N~CwElanl5aUSX-NuyUpMR0d+~Nr zPJ+w}e>Z-Tl0(mI5YE7N@__(TCpJ1vK>CfB*gW g-@5(C)W7|Vb7uZqvMnYYl$#hlUHx3vIVCg!0O|YD+W-In diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/siad-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/siad-icon.png deleted file mode 100644 index b2a0585aa0aba2257ac8f6fb33c980ed8dc2d941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wh3=R9=|G&S!;Cw>Bd6DgSn~-tu|#gYwIJb}X-r zQoC~0#s8OQfzPF6JJuSl3|Yy9Tyz5i*h^p8!?OPSm3IM>ZOabter-JI9!e*~{y zX}?f!dGFm>f##9FI75pc&d+eWn)Ranl&AXdS#SRoJ=w}Cb>fWwb9c!FYt!o5!uY)T zW|@CJeAKmXm)MybnX!p8AeJl4su9(-|%Yg#)}Ow~x4GATv9_jJom)Kj>>qn;(zxd{{pu_Eu|OQ z+iSM_|90%`+^@};D|{VDSz*AWcuJo{&9>aEX@-u&UnwU7OnW;eJ0EMJtt=k49ya~970 zDJK=%^ZV#M{_yK*)rX(|zoXy(YeDz)-lx6)_e)ZvK9Ar04yI z(mQ#lzyFkeFTZT6Y4&{YY0d9C-EL7Xu|Ghaf+azI z!3+)!0RjvL3JL4)&+p&={(J$Wh@>e415>1@i(^Pd+?xZ8j6kJL3;wOo>)0RyWHK;3 zSabbhU$cS$%LC>x2ZxsL^*6nDmucSop!YwF;}Bz0sKQ;`+pYrx#8Q zz5HvPSK+4o4F$K{cb2|Zzj%F<{LSV6e@1<3e!+fm`-%$-;)S+#&5x40A7bhDA@lf+ z4?ky{mM-6zRio#6;XTW{$4AxYYoD@w^7-wlix-M34{ZMXZDsvyS4EjWZ#S;qV(NZl z!unMcuKai!rP0o|>Hcy3k#s6;)4{d+Gf9kyS^OGk2@hJXZ z|3^=^UH)UR;1`p)Ke4-i{;yxR#=UpZ@n<_<=4t*CyqrI){bQs0%KP75U*KS1U`djA z_C0>4V8Dv=r429Q{{M`fdH(t5pEY*#QK))G)1p5?cRn~sgOZY`tDnm{r-UW|jIy4m diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7-gport-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7-gport-icon.png deleted file mode 100644 index 319bb37c9059a91ad924df29591ef434e45d2f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMYymzYuK&RxwB~CLP=v80$S;_| z;n|HeAm^B;i(^Q|t+%%}a!91ZyXzrO0Uh|-~ZM-`rYao+I3a&lRKlVr|swN z505HtOI&hZj;H)z(#51X z`>Si_|97r_o4m(YuJYui&-+2D{eS+-+W-E&{?Gr6L2@A5qGY3hwmC`f;8q8^Zs!-) Y&1oX?Y-Jzb0)52b>FVdQ&MBb@0OSgW$N&HU diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7-gport-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7-gport-text.png deleted file mode 100644 index 1ba8a76d722b69b39d64a9aa5547af7a510d2aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^^&rg13?%;)_Xhwewg8_H*Z*J;TJtprD8g70%(RZ4|C}aNBoMmPfA_V!4Q5^EUYUhSxG#vGj3uw zYvCcDPt3Pnz0BY1@Begs?f=r#Mx9)zMa|yjXjlAGi$APywlL1|#}Br5^)F<%88L2S zu=Do_vtGh^Gt5ElN7f9*84ib=3=)&mVhBf3d#T}e`N;+!Tf43YL{?x+m+U=vxQX@7?_><^`g>AVGE-wPkN@uXYQTJHKbRn~V z*~UMi-KgP~;wBdBgyfeBcbcyX>y%qsuo^Q6%K98`h~93uuil|lV&l&l=DNTjX7F_N Kb6Mw<&;$U2$*PP1 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7gport-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7gport-icon.png deleted file mode 100644 index daee75ac845c72c81c4077652946c2ec71c151b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+)s4gLG?|7Q@G|K1=#Az}UbMCR643=E8KJzX3_Dj471I-3`x$kX;v;VNz8FRL?R!sGB% zj^Lng-IE2vxgK>*i?6?J&ARe=-9(x1r-S-xoNRcvyft^}z3}bNyv2Sy-~X_Eb@lpR zDbv-b>jJ(WUKPJ6FZH5&>ioQ4&z^64p`P(+aqb-ZU~l%fbN{PwRZQDt|365+y~6gM z{i^xZ7BjYd(|=?*J)>~R-uivhPsx4emN;`|%J=*3y&XT4ANI>!EPj3W`}g3_!Iwig zUO!(yVOreA@_+u<&wYG$_~4(J>*hRo^8DkU(}yokJFC3n>ajoazugZk{-gX&|MOY%`!%1tSIxWo>0ji66{50u6-B(D>U78 zzLS4d)jiAl%_6*ePyPETZ!`DN&w_tXHdeE$v|ant{CG$hn>i!pf|9k%KcmMGF z^|AH;zcJtYZ@cT$zd(D42l7+){d_h%|DS$NP3L((6-H-ZvS9FZ^>bP0l+XkK#JF+s diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7gport-text.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/ss7gport-text.png deleted file mode 100644 index 8656f9f8476839743a5f361cc393ff43d7efed2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+uo`|tms&tM=B;BbC@Lc{z1TSWmY7#NtNJY5_^Dj46+xO-`-29N9P`2vO-KmO@k zM+x#T+c0b9qr6S)e%(HssOS>#U!!Xg92p$5;%Cr{XcnER>zDBH{hx!3Ne%LOe@}3* z9Y2|AEkGEnAY)zjp29rGi_mQMWFA&mWWf=Z`4uo<4K-`{Nql%wDDO#LQS(7yV}UE?@KPKNjcDe}29Bpz!8{ zo$u3nX1>4wZtXS8^Z!rX?OFKp-;4*ouhKvNnRM5=x%+R21j&OiIDIx$1? zHr~S-~u4B@87g2X}mj8~OdmqnHt^QiS?}a_P z&K?dn?e6At#szI+^OegL3vB-fEl_p+#$A?DHj(}1`n^5BTKDaH(AcsnPGHG=&*py> zueU#EwR`-S|K}6C!awhM1%m#v9C*9>e*DL(ig_Ch>l3Pv{0b5N@O*jMx#`cDJ6zki z&QGr}?O#{gxjFC$@9T|8%wF|Z-)&v5bMCIr9~$=Zk7iHp{C`(p?aSf)cR$C6$Lla~{SdG(8gxy1`F><^89UB2kw{^-wbU+&cl@fV%h z-~BiLp?v)h-Q|xy+>)w)dx`(oPWJD1ePIv9*9O;YWvlv~EV=%Fl!c<1_=~__uG#yq zsVi>V_HUO)-i7|Y-8Ny1=43T`@2}C-KX1o;)MNj{MKWKGU)gzi>HpoOkpaJU`W#*$ z|5!0U_GNyj^cIzC<>%x(nCp(UF!^wDd+l$TcWuL48BY6pp7Y6dX_3X}v`wdVchqK_ zx4ivq|IZIGRrRjBE_~Pjx*8bk;roAGU0;XH{9pg)KSREU^Y-AtjG4eZ$l&Sf=d#Wz Gp$Pz~M<@sY diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/switch-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/switch-icon.png deleted file mode 100644 index 6e512719d73e0cb9576cdca11e2161231904c0af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1CsoSP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D03mcmSad^jWnpw_ zZ*Cw|X>DZyGB7bUIx#RhGC3eIG&(amIyE-q^PkNC00PxXL_t(YOTAWUPZLoTJ=2{o zl$I7KTV;t0;+D9@_y?dglhI{pJJwe_E)FCmxH3!f(_Yrp7ONYgZ2nYoX9i;u7{`v4ZLzh-oe z_6+zj;PlC}*B!u+Hw?SY3BP9;9`}%ljRd2Jgyx{BUpI6dhS1QYRG{lsoMny?@Qo_r zLFM5Kb!2iW^>>D#e@sL+_hZ=Fi%Gm0I#x97k4P0h_4Sh@7o|EwgwTYK1gBxMI$*Wh z5mq18t(_e`$5^;RqeJd;ZZ|FEU-a(~WuJLx53OVd9OpjfL#bOnn zIN8PO`ZL5nEhGMQRaSD^4QQ%`5y|U>Hldk`>$ttJgiv5gcuMWh`^}d)&z=aci<8q% zKM_{(%wxV8nuOTvNN5&*Z>ZL99ealx(kAlRi5s|cbxBro+UaK;IrEs$_q3w9B3;MX z`45!Jg&Ng=?F9#8Zt5n2gArND3HljFFz+;dB=2cOlMpv^ed`tWkK#282iFKGm5az1 zGV)v~=1{H_<=OBX)5yFJ+pkTBqPZdko&#e)bh!<9P6&SaT6`HFcUIIeJV!QfR4V64 z#W9|F_3B#DCgijaV01XDo{X;?56{a+6Kw1D{+e17!fB`9fF^m&H$$6{Lk0TPRZ|D~ z;@m@A7{3O$Yfwg*D>?1-*TK9--UyQ`NW=WpEw$-mu-P09qB`=$EGm_fOqI*wRyLz* zR#;Yhm`okWfo5zgOz%1wZPj;v{iWz#M8f8mrmlY96Pwuh@&?6HUKw;$`?>2F%%GI;-?uo4AwA0@UditM%t>h-> zi^e%3Tn>+FSFURnjre0l1Yg!DLXh_=Li8l`_W*tZ2i!}YA%PpB00000NkvXXu0mjf Dt;dng diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/tas-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/tas-icon.png deleted file mode 100644 index 59463a91779bfb5f18ff47a0f8e86d4963902df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZM#sNMdu0Z-fiD3KGM@>L&f+azI z!3+)W|1%gk>_6Wxkg$G!!2N<($Gs zb|yP)Du~T}Zm(Rc-ftEZ$D!CF;FKYzG*`3j%hvE;VatkBTjTkDvD(%Ah??KLtm+iM z=k?NK{hrY_k2c?WzWm3Bhlktw?XRC*zHhDmM6P|r|({$dr^|3H6WKr(o``njxgN@xNA+^XEL7Xu|GhaLM1_d z!3_QT84?@>)}R01U~vDv!u)`OXk(vv1_q{so-U3d6^w6h-tXJ2CDQhBBI}9M_3!_u z?O&k1He&WihP3z1U#+u(Cod0Xnfg=Ei9@kP07OJwVNZ%OZ9BInPL^T&F9-iW7xYE! z1iCZAtUhw;2i{&;+w8n-x~Q!E)_6NDIa})m=O6bUn|u6zlj|!s72RVJu|feE4)Yfp zmMmgSU~TYfzazUOdETvZhDY;ab_+LEZT`i`AXc=zkngW!@o#PhmRk%7i=CMow%mMK zo9AlB{W#Tajn(;g*&pujoo9D~Gof&E@Ncd?pE4fUUUoX-{Ym(@B*UHR3%asv{1bwo z@2{U<)*5fLI=ta$=3fqmt0w#6nRl;GQ2(mEj;Hif*D}9X;xSWizn(V#^7bDo-}zr0 z^?#GUO0>iXp0b`Q_i-=4PS?muU_Yul&K*}VNP zudL~s|AF2gm*rnrz4(`$_0nF$({Xy`w>Po+t~_?7EM$pcZQTRUsrN+})YR*IEiv%w zfA#zH`jy;Y|NcAs;ivfS=V$$<`!GCc|E??bx4PbS^OJ+MhbPAWmSW%DI`J>>*~z(@ z>}^|~B-Z}la$i6A=)ctYFDv3y{%<*-<(ZK6{+P@s0{PX%|xwA%#&c8nO zYs2|J2mWp^y6b&s-;_Q0Hf zR{!5@Q+spe!2kb-*=Fzep5&hww8rMYCotHiBSLWczyE9g^FNrrL2{DHd{9zn@O1Ta JS?83{1OWDC%_RT; diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/transcoder-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/transcoder-icon.png deleted file mode 100644 index b2a0585aa0aba2257ac8f6fb33c980ed8dc2d941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_3?x4$zf}ZMW&u7Su0Z-f>EL7Xu|GhaLM1_d z!3+Wh3=R9=|G&S!;Cw>Bd6DgSn~-tu|#gYwIJb}X-r zQoC~0#s8OQfzPF6JJuSl3|Yy9Tyz5i*h^p8!?OPSm3IM>ZOabter-JI9!e*~{y zX}?f!dGFm>f##9FI75pc&d+eWn)Ranl&AXdS#SRoJ=w}Cb>fWwb9c!FYt!o5!uY)T zW|@CJeAKmXm)MybnX!p8AeJl4su9(-|%Yg#)}Ow~x4GATv9_jJom)Kj>>qn;(zxd{{pu_Eu|OQ z+iSM_|90%`+^@};D|{VDSz*AWcuJo{&9>aEX@-u&UnwU7OnW;eJ0EMJtt=k49ya~970 zDJK=%^ZV#M{_yK*)rX(|zoXy(YeDz)-lx6)_e)ZvK9Ar04yI z(mQ#lzyFkeFTZT6Y4&{YY0d9C-EL7Xu|GhaLM1_d z!3_QT865tenZ0f2ey5e7#LU_JzX3_Dj44!WMl-YWmNb#-^@i6$a>&@ zz3=9GtG+`4HOwt6ho1l5|K{GYFDGns&1bDKQSP<)@3UaWeBNW?$M&4uwYm83MDyEn zZ@P~tM7_9pM`_ma#d~|)PW5MYtvtE!m3+kd{7qlC=JKUVEXm(~;pVxFU6);6q_)=Z zmj7HG&ewCF>*Mur=k9Cv-2QXbUBb?}=*aiRpM7ecN3P%2j4SymR#(p=d%5gi(A$8h zcB7Bi&;8MPJgGQSGs5s0|K1}ZUyF2CDNg=%`L@TOQpLK9eb$%XeVACVSn&LWTi$G! zn40@F7e?2t{`vc4XVqTaRL&oAAMZa?PO+DY-FJS8#g>)roIfU6djFXJC)TuYVx{N5 z&}G(_ME-2+`c-%5dHX8=^15Shj~5*-aj9;w7xR8H{X=$5kYGqn0=G=&EctGpkUuN3 zz5BlZbQKE-D>>*^a(4QC0-2)np4dN{VybR>_ISL^v*csae_AZg z`v-;BNF1_=I&t@r@(WpSN2>$kl1KZGvaIfo*mwB;{O!F9ia7dGAG!1YvplW#`1Z}a z?>;ORUt{qo)4P@>{>cIRut0ORn^n#EpEE?}9*XF9tJ!VyGgno$y18HZ#TCzx>bo=Z ze_ysp@%_I2o&19*XC!TyO3v`hF+bjC`#G_H+K>I-?ZpYg|M{~%sn>s6m~5DSGh)s= z-rbtdtFtXHh{yb$_%m>wX2goC;g;F`?)R0Pqkr)4Gu94~sWDpp%1{1%+TPk~_wZLi z&NI(n_YIAkYQ!)0^>NpEV}trgPczl++Gt?OdNXNSI^UD8lz5lUauVUj->DxbrMSkW@dU}?zZmU2ktG(2je2!e7 z%13kGUCljve6B&v=eKq?sde(-tu>U?Yo44wCT*V(um7WlnQcDP)wrkIPrIe;({b2; z^7tXEXRGfnFMRO&aYyu|YAu8Mhkuvvh!bJ!wav<}iQ#^^A@tGvDz^_0?N8P|yslsK zy|rKY<;R#`duvvO)K8hexc0ev==2%W>{3`h-wyp3yT@MUzsjYnUcJ^c^w%r@fBNU( zQlH)DpW7SPCpWuVoSFV=Z|vOv9=})qkPhGV_;O)q98j$AZCAdryXRN?)lHWUye`o0 zwm&1DoUi}0?{d%of4LVQsg*p4nbIj!1V%Y0T9|QVhtM(c$ z>p8Db6DDUc=~@5OPiN%qCsu7JXjt9;jJf{k@y@JS{HFh3P7^WT_uMf4?FG~NgPlrt zfBhZ#UX)4p<$l`VGUtjP0 f?}mTrX{a{f^*Q5Ea(W|`MRgNrFEz7dCe4ue@ z$(7HKelD$?|9toKI;YQ{{Qf4UrKy%y9Oc(LdA021j9ROf^8VyyPbT8~(LjXLHPVR1)JuAflz z^V8GQ)8|VR2GuHGQu-jw-;p_2%KAdBm(e|%a#=TqPHJ(9#5D}4Xhg}>h3YM)Scxa`Aw z$rZr#ZvdAshun788eqQ>K@!yWiDo?G``{ks++;~3cPQ~nx?U|3vI_$kg zw!2I}m8&oCKXbPKq`e9&)R!du(w7sy5%t3Ikn%N-^@rt>^|TJ@OMIThmzI|H|3?0S X^go|3{B6($CJhEpS3j3^P6Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1UpGYK~z{r?U>h3 z8$l4p`Nt8xB$(b?z(PVG9ta%?4nh&8JOUCD?S)STnK?Q-imE>w4nlvNpylM`q^PJU--+DZ+}hgO zhldB(UKv3i;t?a{s@~bzDJ(4X`F!78XA72hqku1%F4=tfq~oGTSFs9Kik{eb#--wF@EC- znRo(PS3;C|d3npr%f@>$NK2kdN=llVntFPALZMKU5E4H_LqqlT^&cn1ln(>~w99QW zNK1&)(o$Rj2AUQ)#R#!*P?(VKAOs+^w6uiJ=jUh2WRUjo@Q~4`F9V0{PDrlbogs#7 zb#;~YbiisLLn5SbpPwP-L}zCw-hQS6Hhq14xblz??UZn$B^|KkV(%d#sVJ$Y3G6Ao z%}^wc4cqpus^&r;P37+Hj&`uHu+Z4pC>eBhb&ZdYOJ*Ocsj1PL2i_9me5D<5 zc@iOo;P4t99kn&#U@({sLbOvJ92^i2OifL393gOaQZim_Kei^wK~Y^@%?DubIU!Vn z8l#n0&(VrqmA&VLwzjr(<6(f9$OxQMl&!6;+%#;>@!sAZ^WF0dX%3k?*WBD({G?_M zu>d7=t;=i<;X0m>8V%4ILhI}6351v;w1dUP#e`KhF)<-I<5h-h-3Pe1xn_u6gtHn0 z2(i)0KtpC(7FQzB+uO^`Mc_h0$xRYYwkAOG@IVyoQxn23zydWH;*CL-&IW9_d>qRg zgU!uNGDI(Rq-<_(=57jbNHEC&2Jn-tyRz(469SyW`}_N-@9*#X`}^@lh7G8ae9}(G zwY4>qA-E#k+}zL(=I7^=ZH$kPkNC-8$oS~N!9iJIz_j@7M8vDD<@UpwrC$1ChLSFT zCndv#p!*?~BO@cWCdAH^***kF5_`WL*B!i*hKGkW&OOstpVsCqr#^KlA-pMTH$*dRvei{L+@w-FBi1=={BR?-T0F#rGn07*qoM6N<$ Ef*vt3kN^Mx diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/usp-dns-icon.png b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/icons/usp-dns-icon.png deleted file mode 100644 index 0ba5c5235ad4857ed999c596c47e0a2a52f63d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmb7@=`))N0LG)b)n!bugSKd_V@hYLj%Bx0Qmu?D%^D%C7-3{fv5T%F=@74Dcd@3F zj=VMx77oSC`Pcrq+lCk!#R>T-ojP)(9Y4`pD zU3T2|#j|uvHTHJbC99)|T*5kX@z0Q)>T&8FdY>XYJ$w)+mi<9HSGR#q^qo)1$;4QS zk*CDn{(<^!oLq2FGP?Bn5D0Y}s3N4AnQ?j6YLuolIy1Y`GpB7f3E%O$nPcX1Ge%yF zj+CoJr#N)xb|D;lL^h^UpehmweR$>4>$tloAp(#2Ykr7eT3ep* zH0{{v$(fPgFYg(NfcPFm5WZl!3I=1uS9gwoY9-4st1;XGEsb)uP>|HR$y`UopTwId z365j4@z|706Sxi}ajWZ9hij0Wc@S=qoteyyLt+%S>VWRU-<)eACRArlItG9|oB~qe zb3ZCoMbJzcE_#)3gQKnl^sg*1*ySWIQ4{f?f6iLGSig}T@~(3jT;qS|P!&f5mG6j& zKD)zlUBWT`V_q@{DCguUD$AS4v9CYyx(8P-+7}5m1_8A$sR}R24WT+mk@g0W#y5*( zkJm?K*~P(NfSQk$+$d(YyP8&;LC_?pw1kPXBJWVvX_HjX>}L|LWO`C&YRImJf3=A) zuLGR3k{y+%m$$4O|;PsbgP@vuVD+^dXv;Y3gLdy@EmC$GsyO-xc zu!Edf6SljDm3Q;Y37!M{2HN}e0!5ZJR2JDbAuDCQpTR+8fkrVZ-;>M+(_R&Pz5pv2 zwNf9Q=ka7d1w8D7DuF=sQRaJ~>XlvbnjQLvEL7Xu|Ghaf+azI z!3_Hi82aBQ2q-k%cbI>EeL+Cq(OY~B3`~nWT^vIy;@%u+1gd0cSnzkH_(~9Km+bDF zg)%Hn410V(Cuhjqe*b@ybb;2fd9KAB(HFh0WFBbm7if!cRc(tmEbVAi-JaXGhQHLt zRmm&bb5X{R?;qs<=|*=Rm~M5a^j2R=bGy5TNo}F}8P*@Zd*;dCnYpQ=qAT!oE$fMH zk2&)%efhTZ$n#hBSN_CQ-ZOrB$8Jre!G(`2119#z)cPGYkNUSb;L6vHP8UCJ+?%rR zssHVHDNpa$t!Q5GbaSqr{LWt%3pz_{bQlzie{4Lm>~Fs7{MK2o&mYL2+_da`PR^@4 z`y-~TyRUaJu68=}>R%n@t+O8JgX=S*KMJCEng#UJ>(S6+)zo0+PY6ZUE5HZ`D%Z;nbuzt?2^oNWC$FDb3r z^T?)Y=he0b7>RORoLi~8KkDV$;|Ds|Mb?gc8YjrNIOtt@(nf*8^7e4 z@^hJt3rrSGgxegAc- zk(^)f**V#fvht}uZSVU&7pzSUt*Np3q0jSg>9ngKk`rZWBF&}*&y5N@djA2p{e|OS zvLaLMmxQ0a1yuN5{%y#!I^ES3|DM!7sNFwp@6~b*<%f^`UR~eR^}YYYPx0l!r|&&$ z|5@{&YsN8t-h$2cXMec)+qwUk8}%*O{`l>M50#5AT5WwJ{;NGt*ZNmGC{&;U^gad5`p=|Oc|U;F SKgA!EEInQQT-G@yGywpJ$GtKD diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/images/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/images/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-controller.js deleted file mode 100644 index ad4f777e..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-controller.js +++ /dev/null @@ -1,61 +0,0 @@ -app.controller('samplePageController', function($scope, $http,ProfileService,modalService){ - $scope.tableData=[]; - $scope.viewPerPage=20; - $scope.scrollViewPerPage=2; - $scope.currentPage=1; - $scope.totalPage; - $scope.searchCategory; - $scope.searchString=""; - $scope.currentPageNum=1; - ProfileService.getProfilePagination(1,$scope.viewPerPage).then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.tableData =JSON.parse($scope.data.profileList); - $scope.totalPages =JSON.parse($scope.data.totalPage); - for(x in $scope.tableData){ - if($scope.tableData[x].active_yn=='Y') - $scope.tableData[x].active_yn=true; - else - $scope.tableData[x].active_yn=false; - } - //$scope.resetMenu(); - },function(error){ - console.log("failed"); - reloadPageOnce(); - }); - - $scope.$watch('currentPageNum', function(val) { - - ProfileService.getProfilePagination(val,$scope.viewPerPage).then(function(data){ - var j = data; - $scope.data = JSON.parse(j.data); - $scope.tableData =JSON.parse($scope.data.profileList); - $scope.totalPages =JSON.parse($scope.data.totalPage); - for(x in $scope.tableData){ - if($scope.tableData[x].active_yn=='Y') - $scope.tableData[x].active_yn=true; - else - $scope.tableData[x].active_yn=false; - } - //$scope.resetMenu(); - },function(error){ - console.log("failed"); - }); - - }); - - $scope.editRow = function(profileId){ - window.location = 'userProfile#/profile/' + profileId; - } - - $scope.toggleProfileActive = function(rowData) { - modalService.popupConfirmWinWithCancel("Confirm","You are about to change user's active status. Do you want to continue?", - function(){ - $http.get("profile/toggleProfileActive?profile_id="+rowData.id).success(function(){}); - }, - function(){ - rowData.active=!rowData.active; - }) - }; - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-iframe-controller.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-iframe-controller.js deleted file mode 100644 index 8ba4eb54..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sample-page-iframe-controller.js +++ /dev/null @@ -1,4 +0,0 @@ -app.controller('samplePageWithIframeController', function($scope, $http,ProfileService,modalService){ - - -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sampleController.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sampleController.js deleted file mode 100644 index 518880c7..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/controller/sampleController.js +++ /dev/null @@ -1,11 +0,0 @@ -app.config(function($routeProvider) { - $routeProvider - .when('/iframe', { - templateUrl: 'app/fusionapp/scripts/view-models/sampleWithIframe.html', - controller : "samplePageWithIframeController" - }) - .otherwise({ - templateUrl: 'app/fusionapp/scripts/view-models/sample.html', - controller : "samplePageController" - }); -}); \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/directives/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/directives/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/utils/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/utils/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/sampleWithIframe.html b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/sampleWithIframe.html deleted file mode 100644 index dafdc6a9..00000000 --- a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/scripts/view-models/sampleWithIframe.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - -
    \ No newline at end of file diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/styles/dummy.txt b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusionapp/styles/dummy.txt deleted file mode 100644 index e69de29b..00000000 -- 2.16.6

    ?E!@0MaQRVh4|dffmc(JoYXmc87H?BNNdu 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/3_wed.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/3_wed.png deleted file mode 100644 index 8f8c032879226ffe84f24d66a9c2e1746f0d9b59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24012 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 AIsgCw diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/4_thu.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/4_thu.png deleted file mode 100644 index 750dca5d6623e093ad27d516fa5e5b7db0b3a8ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23902 zcmb?@c|4R~|Gu5FrK0TF%bJ~G7$Kr4l6~y^76#c(ic$z6``AKuvacokHVR`OyRnNw zhT(TlpXd2L&+GO3{{H*@QMd8B=iKL<`<(atdSBOdynU>rL3^3yG7%9G?E_6UJt87v zEbvd5iURnJbdyRC5s^9H12vVWFQ&FLC_h~{7>^)-a)qW|FsF<}Fh@vq-h<@H)5nIR zV+Mu{Picfoa;h40MEP$*RGviKR%Nm6(Y`Bw>y{|RhuiX+91)k66(1^w221O^`5E~5 z8O&y;?5yu94*Mf_HYDpd<{Ect*D}51AK$)y`SrcG{_<~Q!|r7RpGY$PUM|CR2%j#$ zh7|mB3qt?zo&UOUA@2~rmwg5E_wtwuM)>sa%WX0c;nV-s*#D!=e>Fz9Xr=d@$t3qb z5XiXxwEP9GdvR!q*O&A9-`?arqr)E+3!Bv=3yA72F3Kl@J^`I0Jo&13hT4_q*MPnd zo*+ntq%TS1KbG;}UK=muzhUMZj!ml*THckTLi}_4Ye-wkP=>_s)BGy8*?Y`;0n|ml zzCysr|8}8-7>^%24Z5)S)Fw7>^6%fiCkplmu|m3B0-i^h6LAvkI*3+lDt_a`{_jstViI;DJ`+Q_zTEi+lN!gpU=Olfy0lVh<5dd&ZGt zl5}rkzU4)2;cG`N={hiyk;Bx2pSmJqxC*@)6}sBn2T!#T*Dz!txX%C23v>#C>N7)3Tw?g2 zrW=oMiE0==IL_qMZVSP~*iQ^n&;3<&8XxNF#AiQHwR7B;dN6$F4Q7pz9K+m(=Z{1O z=|>GI=;qz0m7i&l{7?Uq!N^!U-Nftz3E`}A&2u%qq#J%=ll}U69{c4Cc*SveW~FB? zTgbNbof6|~>%}Bk%j2E@j1O81LAN-*!m>-=3pn1ogO7|!I6T$GWYKS=++uFvtKOP< z_y8jZigL>fwY=4ggfsHkutlFj*Fo8*cmR>{2({UG5lYWFlrqI6R(sFks%jOPi{ zxDPBjUvYya99QTUB_t@vJ==J^KUh*7B)KX403&}pC+oC7o=@9$C|zF3ye*_f$&{+# z6CblAb-D9X8vD?1W%5dPQP*XhuV0-fcgS=)5xyu79m`mm`AGSaIjRr5aD0W4^|6%M zfX-7_%h6(wZO7c_j0%MgqjgcVJlQ0DdDfJ}WW)ClPwwlR=Sp^LsdZA!aZ%0P8Lw$l z>Ux_K@>sWI^XIzF%-#>9=qM0Ej8z)KWXmLbp1Xdq(sAA?iIrZ$^}ZVGd_7lZ{}RjE z#t%&M_xRKEJl@`>{k{*khMQJdCW{AWlJRHNu7%LqeSCHudNp1ld8T1`h|f>7!MnEw z3(pLEUj6Wwn?2CFKx#U zs3Luu{R{=tEh5atap;AB3py0NpZ49PhW7wv0W5)kt%MASm;u6L;#LE_;w`-*y*=>$ z!EiEZFix{8hP~F8263?)dXbR3J#88iy11HVXK2FmpXGcF!$8?cF_A0QChWCQ^eq;V z;TaJ!r>Ghpa@+JAGCWbGzF*eZ*O)a|BlO>2ile}dIAmVBynl~&ndmO}H~GpHdKfzg zH4{dLWb0X(aG=1$TZBdWuO5Q+AZTUVH~9BwAN7|pzjU>eI>5V@5c(t8%g(5zfkdJI z+?oL~B**RSwkB{NFjQ+LE>GCRJ{T8kd*Mvu3qdJd2xNWTDL@AlcNWF`vkm@v!i~hF z2KS6*RH+NxHQ@9}E1K&jQnJ=Pu{nZPBy@Lgv;4n<%+4i@lap7Dzc;m6Td}b|lc>>S zK?n-GUbB07SZTU3D>MGye?_B4Qv~PwXfMfujn77pNHlBz_t(_gw3q+~S^M`ZMr;x_ zDan8SyZiKGM3HngM2s3glVVs4!t1}n%jj>PpXm07ao0V#);rPqKW`1##@Gt>lV*QC zTe{va--6LSar;ZL%1O+~xB%(n2v*_8%0DZ4{(IWFGUmt2lg|PUORfa}R>z-8kb{nX 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 diff --git a/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/6_sat.png b/ecomp-sdk/epsdk-app-os/src/main/webapp/static/fusion/sample/images/tunnels/6_sat.png deleted file mode 100644 index 70323ea04fb0b967ca06bbb75376dab90fd9238e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23674 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